~mhk##fpcrSlhlbfpee#u??#lrig}??5qhqE$8(????">
<param name="checkpoint" value="2">Your browser doesn't support Java, <br>
or Java capability is turned off.<br>
You are unable to login with Applet Web Password.
</applet>
可见,这种保护方式有先天缺陷。因为嵌有该applet的html的源码是任何人都可以察看的,这样可以得到用户名、密码和URL的密文。而该applet的class文件也可以下载到本地对其解码算法进行分析。有了密文和解码算法,自然可以轻易地得到明文(其实也可以分析Applet Web Password中带的那个加密程序的加密算法,从而找出解码算法,因为它必须采用可逆算法才能恢复要保护的URL),从而直接得到被保护的URL。
经过分析,发现其解码算法非常简单,所以这个applet根本不具实用价值。
下面附上解码程序。其中Encrypted是密文,Decrypted是解出来的明文。
void __fastcall TForm1::OnDecodeClick(TObject *Sender)
{
char s[1024];
char ac[1024];
int i, j, Total;
char Key[]= "Default user name";
Total = Encrypted->GetTextBuf(s, 1024);
if (Total == 0)
{
return;
}
for(i = 0, j = 0; i < Total; i++)
if(s[i] == '#')
{
if(s[i + 1] == '#')
{
ac[j] = '#';
j++;
i++;
} else
if(s[i + 1] == 's')
{
ac[j] = ' ';
j++;
i++;
} else
if(s[i + 1] == 'a')
{
ac[j] = '&';
j++;
i++;
} else
if(s[i + 1] == 'l')
{
ac[j] = '<';
j++;
i++;
} else
if(s[i + 1] == 'q')
{
ac[j] = '"';
j++;
i++;
} else
if(s[i + 1] == 'g')
{
ac[j] = '>';
j++;
i++;
} else
if(s[i + 1] == 'u')
{
ac[j] = '\177';
j++;
i++;
} else
{
MessageBox(0, "Input error!", "Error", MB_OK
关键词:用Java Applet保护页面的缺陷