微点交流论坛
» 游客:  注册 | 登录 | 帮助

 

作者:
标题: 联众密码的逆向算法
qq2008444
银牌会员

职业潜水艇


积分 5373
发帖 5291
注册 2007-7-7
来自 兰·基亚斯 兰古拉王国
#1  联众密码的逆向算法

//作者:姜堰市合作银行-姚佩云 www.jynx.com.cn i_rock_1001@163.com
//首发大富翁论坛(www.delphibbs.com)blog,转载请尊重作者成果,保留此信息

闲来无事,每天上联众,联众的密码经过加密后保存在本地注册表里,看看是怎么加密的。下了个ollydbg,一路跟踪,发现算法极其简单,给出Delphi版本的解密算法(加密部分有兴趣的一起来讨论)。算法比较粗糟,谁帮优化一下:)
function Decode(aValue:String):string;
var
iValue:array [0..63]of Byte;
i,j,k,iAL,iCL:Byte;
Pass:array[0..15]of char; //密码最长不超过15位
begin
//str to int
i:=0;
j:=0;
while (1=1) do
begin
//这里需要改进
j:=Pos(' ',aValue);
if j<=0 then
begin
iValue:=strToint(aValue);
break;
end;
iValue:=StrToInt(Copy(aValue,1,j-1));
inc(i);
aValue:=copy(aValue,j+1,length(aValue)-j);
end;

//xor
for i:=63 downto 1 do
iValue[i-1]:=iValue[i-1] xor iValue;

//
for i:=15 downto 1 do
begin
iAL:=iValue;
iCL:=iAL;
ASM
MOV AL,iAL
SAR AL,4
AND AL,$F
MOV iAL,AL
end; //直接用SHR也可以,不过反汇编是SAR,pascal里没有SAR
j:=iAL+$30;
iAL:=iValue[j];
iCL:=iCL and $f;
iCL:=iValue[0]+iCL;
k:=iCL;
iCL:=iValue[k];
iValue[j]:=iCL;
iValue[k]:=iAL;
end;

i:=iValue[0];
j:=1;
while iValue<>0 do
begin
Pass[j-1]:=chr(iValue);
Inc(i);
Inc(j);
end;

Result:=Pass;
end;

※ ※ ※ 本文纯属【qq2008444】个人意见,与【 微点交流论坛 】立场无关※ ※ ※

迅雷不及掩耳盗铃,以不变应万变不离其宗,成事不足挂齿,此物最相思风雨中,一屋不扫何以扫天下无敌,东边日出西边雨一直下,举头望明月几时有,呆若木鸡毛当令箭,杀鸡焉用牛刀小试,锋芒毕露春光,围魏救赵宝奎,Very good bye,八格牙鲁冰花,一泻千里共婵娟……
2007-8-10 09:26
查看资料  发送邮件  发短消息   编辑帖子



论坛跳转:

可打印版本 | 推荐 | 订阅 | 收藏


[ 联系我们 - 东方微点 ]


北京东方微点信息技术有限责任公司 福建东方微点信息安全有限责任公司

闽ICP备05030815号