- UID
- 280
注册时间2005-3-11
阅读权限8
最后登录1970-1-1
初入江湖
该用户从未签到
|
【破解作者】 西风
【作者邮箱】 [email protected]
【使用工具】 PEiD0.93,UnASPack1.2.1.3,OD1.10正式版
【破解平台】 Win2000
【软件名称】 私人文件保密专家白金版4.01
【下载地址】 http://download.winzheng.com/SoftView/SoftView_25251.htm
【软件简介】
【软件大小】 3.33M
【加壳方式】 aspack2.12
--------------------------------------------------------------------------------
【破解内容】
先安装程序,然后用工具UnASPack1.2.1.3脱壳!脱壳后用PEiD0.93看看是用什么语言编写的!是delphi5.0-6.0,用OD打开程序!
呵呵,我们开始动手,先看有没有提示,输入用户名xflin,注册码:1111111,咦,报错了,有戏,根据提示(你输入的注册码不正确,请重新输新输入或与作者联系!),用OD查找注册码,下断,来到下边:
004D5B16 |. 64:8920 MOV DWORD PTR FS:[EAX],ESP
004D5B19 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
004D5B1C |. E8 8BEFF2FF CALL unpacked.00404AAC ; 计算用户名长度
004D5B21 |. 3B43 4C CMP EAX,DWORD PTR DS:[EBX+4C]
004D5B24 |. 7F 19 JG SHORT unpacked.004D5B3F
004D5B26 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
004D5B29 |. E8 7EEFF2FF CALL unpacked.00404AAC
004D5B2E |. 3B43 50 CMP EAX,DWORD PTR DS:[EBX+50]
004D5B31 |. 7C 0C JL SHORT unpacked.004D5B3F
004D5B33 |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
004D5B36 |. E8 71EFF2FF CALL unpacked.00404AAC ; 计算注册码长度
004D5B3B |. 85C0 TEST EAX,EAX
004D5B3D |. 75 04 JNZ SHORT unpacked.004D5B43
004D5B3F |> 33DB XOR EBX,EBX
004D5B41 |. EB 60 JMP SHORT unpacked.004D5BA3
004D5B43 |> 8D55 F4 LEA EDX,DWORD PTR SS:[EBP-C]
004D5B46 |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] ; [EBP+8]:注册假码
004D5B49 |. E8 E231F3FF CALL unpacked.00408D30
004D5B4E |. 8B55 F4 MOV EDX,DWORD PTR SS:[EBP-C] ; [EBP-C]:假码
004D5B51 |. 8D45 08 LEA EAX,DWORD PTR SS:[EBP+8]
004D5B54 |. E8 33EDF2FF CALL unpacked.0040488C
004D5B59 |. 8D4D F0 LEA ECX,DWORD PTR SS:[EBP-10]
004D5B5C |. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4] ; [EBP-4]用户名
004D5B5F |. 8BC3 MOV EAX,EBX
004D5B61 |. E8 BAFBFFFF CALL unpacked.004D5720 ; 真码,假码都入栈了,当然这儿得看看了,注册算法哦
004D5B66 |. 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
004D5B69 |. 8B55 08 MOV EDX,DWORD PTR SS:[EBP+8]
004D5B6C |. E8 3732F3FF CALL unpacked.00408DA8
进入CALL,看看,跟到下边:
004D572B |. 895D EC MOV DWORD PTR SS:[EBP-14],EBX ; 清空以下几个地址
004D572E |. 895D E8 MOV DWORD PTR SS:[EBP-18],EBX
004D5731 |. 895D E4 MOV DWORD PTR SS:[EBP-1C],EBX
004D5734 |. 895D E0 MOV DWORD PTR SS:[EBP-20],EBX
004D5737 |. 8BF9 MOV EDI,ECX
004D5739 |. 8955 FC MOV DWORD PTR SS:[EBP-4],EDX ; [EBP-4]存入用户名
004D573C |. 8BF0 MOV ESI,EAX
004D573E |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
.......................
004D5754 |. 8D45 EC LEA EAX,DWORD PTR SS:[EBP-14]
004D5757 |. BA D0584D00 MOV EDX,unpacked.004D58D0 ; ASCII "gf258369gf"
004D575C |. E8 2BF1F2FF CALL unpacked.0040488C
.................
004D5772 |. EB 5D JMP SHORT unpacked.004D57D1
004D5774 |> 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14] ; 存入辅助码gf258369gf
004D5777 |. E8 30F3F2FF CALL unpacked.00404AAC
004D577C |. 8BD8 MOV EBX,EAX
004D577E |. 8D45 E8 LEA EAX,DWORD PTR SS:[EBP-18]
..................
004D5790 |. 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14]
004D5793 |. E8 6CF5F2FF CALL unpacked.00404D04
004D5798 |. 8D45 E4 LEA EAX,DWORD PTR SS:[EBP-1C]
004D579B |. 50 PUSH EAX ; 取gf258,作什么用呢,后面便知
004D579C |. 8BC3 MOV EAX,EBX
004D579E |. D1F8 SAR EAX,1
004D57A0 |. 79 03 JNS SHORT unpacked.004D57A5
004D57A2 |. 83D0 00 ADC EAX,0
004D57A5 |> 8BCB MOV ECX,EBX
004D57A7 |. 2BC8 SUB ECX,EAX
...............呵呵,快踩雷区了哦
004D5800 |. E9 91000000 JMP unpacked.004D5896
004D5805 |> 8B45 E0 MOV EAX,DWORD PTR SS:[EBP-20]
004D5808 |. E8 9FF2F2FF CALL unpacked.00404AAC ; 将xflin入gf258369gf中间
004D580D |. 8BD8 MOV EBX,EAX ; 将字串长度入EBX
004D580F |. EB 37 JMP SHORT unpacked.004D5848
004D5811 |> 8B46 68 /MOV EAX,DWORD PTR DS:[ESI+68] ; [esi+68]中存的常数211d1c93,后面相加会用到
004D5814 |. 8B56 6C |MOV EDX,DWORD PTR DS:[ESI+6C]
004D5817 |. 0345 F0 |ADD EAX,DWORD PTR SS:[EBP-10] ; 这儿进行累加了,看到了吧,这儿就是注册码的一部分了
004D581A |. 1355 F4 |ADC EDX,DWORD PTR SS:[EBP-C]
004D581D |. 52 |PUSH EDX
004D581E |. 50 |PUSH EAX
004D581F |. 8B45 E0 |MOV EAX,DWORD PTR SS:[EBP-20]
004D5822 |. 0FB64418 FF |MOVZX EAX,BYTE PTR DS:[EAX+EBX-1] ; 依次取字符
004D5827 |. 50 |PUSH EAX
004D5828 |. B8 59040000 |MOV EAX,459
004D582D |. 5A |POP EDX
004D582E |. 8BCA |MOV ECX,EDX
004D5830 |. 33D2 |XOR EDX,EDX
004D5832 F7F1 DIV ECX ; eax除以ecx的值
004D5834 |. 8BC2 |MOV EAX,EDX ; 余数入eax(实际上就是取模)
004D5836 |. 33D2 |XOR EDX,EDX
004D5838 |. 290424 |SUB DWORD PTR SS:[ESP],EAX ; 将刚才累的结果,再减去当前EAX的值
004D583B |. 195424 04 |SBB DWORD PTR SS:[ESP+4],EDX
004D583F |. 58 |POP EAX
004D5840 |. 5A |POP EDX
004D5841 |. 8945 F0 |MOV DWORD PTR SS:[EBP-10],EAX ; 将最终结果放入[ebp-10],关键的计算结果哦
004D5844 |. 8955 F4 |MOV DWORD PTR SS:[EBP-C],EDX
004D5847 |. 4B |DEC EBX
004D5848 |> 8B45 E0 MOV EAX,DWORD PTR SS:[EBP-20] ; [ebp-20]组合后的字串
004D584B |. E8 5CF2F2FF |CALL unpacked.00404AAC ; 长度
004D5850 |. 3BD8 |CMP EBX,EAX
004D5852 |. 7F 04 |JG SHORT unpacked.004D5858
004D5854 |. 85DB |TEST EBX,EBX
004D5856 |.^7F B9 \JG SHORT unpacked.004D5811
004D5858 |> 8B5E 60 MOV EBX,DWORD PTR DS:[ESI+60]
004D585B |. 85DB TEST EBX,EBX
004D585D |. 7F 11 JG SHORT unpacked.004D5870
004D585F |. FF75 F4 PUSH DWORD PTR SS:[EBP-C] ; /Arg2
004D5862 |. FF75 F0 PUSH DWORD PTR SS:[EBP-10] ; |Arg1
004D5865 |. 8BD7 MOV EDX,EDI ; |
004D5867 |. 33C0 XOR EAX,EAX ; |
004D5869 |. E8 9239F3FF CALL unpacked.00409200 ; \unpacked.00409200
004D586E |. EB 26 JMP SHORT unpacked.004D5896
004D5870 |> FF75 F4 PUSH DWORD PTR SS:[EBP-C] ; /存入01
004D5873 |. FF75 F0 PUSH DWORD PTR SS:[EBP-10] ; |存入刚才累加的结果,刚才说过是注册码的一部分
004D5876 |. 8BD7 MOV EDX,EDI ; |
004D5878 |. 8BC3 MOV EAX,EBX ; |
004D587A |. E8 8139F3FF CALL unpacked.00409200 ; \原来这儿是将二个字符串组合,即01刚才的累加值
004D587F |. 8B07 MOV EAX,DWORD PTR DS:[EDI] ; 注册码出来了,那上个CALL,是做什么的,不用我说了吧!
那么算法很清晰了吧:,基本上说来,就是
输入的用户,使用gf258369gf进行组合,组合成“gf258用户名369gf”然后设置一个常数$211d1c93,取组合后字串的长度,进入循环,取组合字串第一个字符asc码,用常数$456除asc码取模,然后加上$211d1c93,结束,第二次循环,取组合字串第二个字符asc码。。。。。。。。。。。。。,呵呵,不用我再叙述了吧。最后的结果前面再加上01,组成新的字符串。
注册机算法:
Var
i :Byte;
n :Byte;
tmp :Integer;
result:Dword;
asctmp:Integer;
tmp2:Integer;
begin
edit1.Text:='gf258'+edit1.Text+'369gf';
n:=Length(Edit1.Text);
n:=n;
tmp:=0;
result:=0;
For i:=1 To n do
begin
result:= result+$211d1c93;
asctmp:=ord(edit1.text);
tmp2:=$459 mod asctmp;
result:=result-tmp2;
end;
edit2.text:='01'+IntToHex(result,8);
end;
注册机没有解决中文的问题,我想这个中文的问题不用我再写出来吧,转成HEX,再进行计算就行了。
[ Last edited by 西风 on 2005-3-12 at 02:52 PM ] |
|