联众密码的逆向算法公布
发布时间:2016-12-26 来源:查字典编辑
摘要:functionDecode(aValue:String):string;variValue:array[0..63]ofByte;i,j,...
functionDecode(aValue:String):string;
var
iValue:array[0..63]ofByte;
i,j,k,iAL,iCL:Byte;
Pass:array[0..15]ofchar;//密码最长不超过15位
begin
//strtoint
i:=0;
j:=0;
while(1=1)do
begin
//这里需要改进
j:=Pos('',aValue);
ifj<=0then
begin
iValue[i]:=strToint(aValue);
break;
end;
iValue[i]:=StrToInt(Copy(aValue,1,j-1));
inc(i);
aValue:=copy(aValue,j+1,length(aValue)-j);
end;
//xor
fori:=63downto1do
iValue[i-1]:=iValue[i-1]xoriValue[i];
//
fori:=15downto1do
begin
iAL:=iValue[i];
iCL:=iAL;
ASM
MOVAL,iAL
SARAL,4
ANDAL,$F
MOViAL,AL
end;//直接用SHR也可以,不过反汇编是SAR,pascal里没有SAR
j:=iAL+$30;
iAL:=iValue[j];
iCL:=iCLand$f;
iCL:=iValue[0]+iCL;
k:=iCL;
iCL:=iValue[k];
iValue[j]:=iCL;
iValue[k]:=iAL;
end;
i:=iValue[0];
j:=1;
whileiValue[i]<>0do
begin
Pass[j-1]:=chr(iValue[i]);
Inc(i);
Inc(j);
end;
Result:=Pass;
end;