2.破译密码:
首先,屏保密码最多8位,再多设也无意义,可以试一下。
注册表中 HKEY_CURRENT_USER\Control Panel\desktop 找
ScreenSave_Data,鼠标双击它后出现"编辑二进制值"窗口,
在下面的键值框中看最右边的字符,(两行,具体看密码多少定)
两个字符为一组,数一下几组就知道密码有几位了。
假设密码为"12345"则那里会是这样的:79,DC,45,29,52
分别与 78,DE,46,2D,57,59,91,2B 进行异或(xor),
79 xor 78, -> 1
DC xor DE, -> 2
45 xor 46, -> 3
29 xor 2D, -> 4
52 xor 57, -> 5
就可得到密码了,从密钥可知,密码最长只有8位。
*********************
用这个就可以了:
Function TfrmMagic.FindScreenSaverPwd():String;//查找屏幕保护的口令
var
BTmp:Array[0..15] of Byte;
STmp:Array[1..32] of Byte;
intCount:Integer;
i:Integer;
j:Integer;
strTmp:String;
bytTmp:Byte;
strResult:String;
Begin
BTmp[0]:=(72);
BTmp[1]:=(238);
BTmp[2]:=(118);
BTmp[3]:=(29);
BTmp[4]:=(103);
BTmp[5]:=(105);
BTmp[6]:=(161);
BTmp[7]:=(27);
BTmp[8]:=(122);
BTmp[9]:=(140);
BTmp[10]:=(71);
BTmp[11]:=(248);
BTmp[12]:=(84);
BTmp[13]:=(149);
BTmp[14]:=(151);
BTmp[15]:=(95);
for i:=1 to 32 do
begin
STmp[i]:=0;
end;
MagicReg:=TRegistry.Create;
MagicReg.RootKey:=HKEY_CURRENT_USER;
MagicReg.OpenKey('Control Panel\desktop',True);
intCount:=MagicReg.ReadBinaryData('ScreenSave_Data',STmp,Sizeof(STmp));
if intCount>0 then
Begin
j:=1;
For i:=1 To trunc((IntCount-1)/2) Do
begin
if STmp[i]<>00 then
Begin
strTmp:=Chr(STmp[j]);
j:=j+1;
strTmp:=strTmp + Chr(STmp[j]);
bytTmp:=gStrToByte(strTmp);
strResult:=strResult+Chr(bytTmp Xor BTmp[i-1]);
j:=j+1;
end;
end;
end;
MagicReg.CloseKey;
MagicReg.Free;
FindScreenSaverPwd:=strResult;
end