【破文标题】资料收集管理专家(DataCollector) 版本: V1.50
【破文作者】inbreak
【破解工具】OD,W32Dasm,ASPackDie
【破解平台】XP SP2
【软件名称】资料收集管理专家(DataCollector)
【软件大小】1.41MB
【原版下载】http://www.delphidak.com/
【保护方式】壳,注册码
【编写语言】DELPHI
【破解感言】没想到超新大菜鸟有一天也能写一篇破文。汗!
===================================================================================
【破解声明】只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
===================================================================================
【破解过程】
运行软件后出理提示,跟着是一个注册提示窗口,随便输入以下信息,
注册名:inberak
注册人:随便,注册码与此值无关
注册码:789789789789
点注册,出现有错误提示。
然后用 W32Dasm 反编译找一个错误提示的内容,很容易就找到地址:
005038AA |. /75 2C jnz short 005038D8 ; 关键跳,不跳就失败!
那么我们再向前看
0050384C /. 55 push ebp ;在这里下断点吧
0050384D |. 8BEC mov ebp, esp
0050384F |. 33C9 xor ecx, ecx
00503851 |. 51 push ecx
00503852 |. 51 push ecx
00503853 |. 51 push ecx
00503854 |. 51 push ecx
00503855 |. 53 push ebx
00503856 |. 56 push esi
00503857 |. 8BD8 mov ebx, eax
00503859 |. 33C0 xor eax, eax
0050385B |. 55 push ebp
0050385C |. 68 63395000 push 00503963
00503861 |. 64:FF30 push dword ptr fs:[eax]
00503864 |. 64:8920 mov dword ptr fs:[eax], esp
00503867 |. 8D55 F8 lea edx, dword ptr [ebp-8]
0050386A |. 8B83 18030000 mov eax, dword ptr [ebx+318]
00503870 |. E8 C3A3F4FF call 0044DC38 ; 得到假注册码 789789789
00503875 |. 8B45 F8 mov eax, dword ptr [ebp-8]
00503878 |. 50 push eax
00503879 |. 8D55 F4 lea edx, dword ptr [ebp-C]
0050387C |. 8B83 14030000 mov eax, dword ptr [ebx+314]
00503882 |. E8 B1A3F4FF call 0044DC38
00503887 |. 8B45 F4 mov eax, dword ptr [ebp-C] ; 注册人:KAKAKAKA
0050388A |. 50 push eax
0050388B |. 8D55 F0 lea edx, dword ptr [ebp-10]
0050388E |. 8B83 10030000 mov eax, dword ptr [ebx+310]
00503894 |. E8 9FA3F4FF call 0044DC38
00503899 |. 8B55 F0 mov edx, dword ptr [ebp-10] ; 注册名:inbreak
0050389C |. 8B83 2C030000 mov eax, dword ptr [ebx+32C]
005038A2 |. 59 pop ecx
005038A3 |. E8 8CF0FFFF call 00502934 ; 关键CALL
005038A8 |. 84C0 test al, al
005038AA |. 75 2C jnz short 005038D8 ; 关键跳,不跳就失败!
--------------------------
F7跟进 005038A3 |. E8 8CF0FFFF call 00502934 ; 关键CALL
00502934 /$ 55 push ebp
00502935 |. 8BEC mov ebp, esp
00502937 |. 83C4 F0 add esp, -10
0050293A |. 53 push ebx
0050293B |. 33DB xor ebx, ebx
0050293D |. 895D F0 mov dword ptr [ebp-10], ebx
00502940 |. 895D F4 mov dword ptr [ebp-C], ebx
00502943 |. 894D F8 mov dword ptr [ebp-8], ecx
00502946 |. 8955 FC mov dword ptr [ebp-4], edx
00502949 |. 8BD8 mov ebx, eax
0050294B |. 8B45 FC mov eax, dword ptr [ebp-4]
0050294E |. E8 5D28F0FF call 004051B0
00502953 |. 8B45 F8 mov eax, dword ptr [ebp-8]
00502956 |. E8 5528F0FF call 004051B0
0050295B |. 8B45 08 mov eax, dword ptr [ebp+8]
0050295E |. E8 4D28F0FF call 004051B0
00502963 |. 33C0 xor eax, eax
00502965 |. 55 push ebp
00502966 |. 68 1E2A5000 push 00502A1E
0050296B |. 64:FF30 push dword ptr fs:[eax]
0050296E |. 64:8920 mov dword ptr fs:[eax], esp
00502971 |. 8B45 FC mov eax, dword ptr [ebp-4]
00502974 |. E8 4F26F0FF call 00404FC8
00502979 |. 3B43 4C cmp eax, dword ptr [ebx+4C]
0050297C |. 7F 19 jg short 00502997
0050297E |. 8B45 FC mov eax, dword ptr [ebp-4]
00502981 |. E8 4226F0FF call 00404FC8
00502986 |. 3B43 50 cmp eax, dword ptr [ebx+50]
00502989 |. 7C 0C jl short 00502997
0050298B |. 8B45 08 mov eax, dword ptr [ebp+8]
0050298E |. E8 3526F0FF call 00404FC8
00502993 |. 85C0 test eax, eax
00502995 |. 75 04 jnz short 0050299B
00502997 |> 33DB xor ebx, ebx
00502999 |. EB 60 jmp short 005029FB
0050299B |> 8D55 F4 lea edx, dword ptr [ebp-C]
0050299E |. 8B45 08 mov eax, dword ptr [ebp+8]
005029A1 |. E8 926BF0FF call 00409538
005029A6 |. 8B55 F4 mov edx, dword ptr [ebp-C]
005029A9 |. 8D45 08 lea eax, dword ptr [ebp+8]
005029AC |. E8 F723F0FF call 00404DA8
005029B1 |. 8D4D F0 lea ecx, dword ptr [ebp-10]
005029B4 |. 8B55 FC mov edx, dword ptr [ebp-4]
005029B7 |. 8BC3 mov eax, ebx
005029B9 |. E8 46FBFFFF call 00502504 ; 关键CALL
这里再用 F7 跟进
00502504 /$ 55 push ebp
00502505 |. 8BEC mov ebp, esp
00502507 |. 51 push ecx
00502508 |. B9 04000000 mov ecx, 4
0050250D |> 6A 00 /push 0
0050250F |. 6A 00 |push 0
00502511 |. 49 |dec ecx
00502512 |.^ 75 F9 \jnz short 0050250D
00502514 |. 874D FC xchg dword ptr [ebp-4], ecx
00502517 |. 53 push ebx
00502518 |. 56 push esi
00502519 |. 57 push edi
0050251A |. 8BF9 mov edi, ecx
0050251C |. 8955 FC mov dword ptr [ebp-4], edx
0050251F |. 8BF0 mov esi, eax
00502521 |. 8B45 FC mov eax, dword ptr [ebp-4]
00502524 |. E8 872CF0FF call 004051B0
00502529 |. 33C0 xor eax, eax
0050252B |. 55 push ebp
0050252C |. 68 A4265000 push 005026A4
00502531 |. 64:FF30 push dword ptr fs:[eax]
00502534 |. 64:8920 mov dword ptr fs:[eax], esp
00502537 |. 8D55 DC lea edx, dword ptr [ebp-24]
0050253A |. 8BC6 mov eax, esi
0050253C |. E8 070F0000 call 00503448 ; 得到的机器码
00502541 |. 8B45 DC mov eax, dword ptr [ebp-24]
00502544 |. 8D55 EC lea edx, dword ptr [ebp-14]
00502547 |. E8 3C72F0FF call 00409788
0050254C |. 837D EC 00 cmp dword ptr [ebp-14], 0
00502550 |. 75 0D jnz short 0050255F
00502552 |. 8D45 E0 lea eax, dword ptr [ebp-20]
00502555 |. 8B55 FC mov edx, dword ptr [ebp-4]
00502558 |. E8 4B28F0FF call 00404DA8
0050255D |. EB 5D jmp short 005025BC
0050255F |> 8B45 EC mov eax, dword ptr [ebp-14]
00502562 |. E8 612AF0FF call 00404FC8
00502567 |. 8BD8 mov ebx, eax
00502569 |. 8D45 E8 lea eax, dword ptr [ebp-18]
0050256C |. 50 push eax
0050256D |. 8BCB mov ecx, ebx
0050256F |. D1F9 sar ecx, 1
00502571 |. 79 03 jns short 00502576
00502573 |. 83D1 00 adc ecx, 0
00502576 |> BA 01000000 mov edx, 1
0050257B |. 8B45 EC mov eax, dword ptr [ebp-14]
0050257E |. E8 9D2CF0FF call 00405220
00502583 |. 8D45 E4 lea eax, dword ptr [ebp-1C]
00502586 |. 50 push eax
00502587 |. 8BC3 mov eax, ebx
00502589 |. D1F8 sar eax, 1
0050258B |. 79 03 jns short 00502590
0050258D |. 83D0 00 adc eax, 0
00502590 |> 8BCB mov ecx, ebx
00502592 |. 2BC8 sub ecx, eax
00502594 |. 8BD3 mov edx, ebx
00502596 |. D1FA sar edx, 1
00502598 |. 79 03 jns short 0050259D
0050259A |. 83D2 00 adc edx, 0
0050259D |> 42 inc edx
0050259E |. 8B45 EC mov eax, dword ptr [ebp-14]
005025A1 |. E8 7A2CF0FF call 00405220
005025A6 |. FF75 E8 push dword ptr [ebp-18] ;假设一变量 s1 = 机码号前六位
005025A9 |. FF75 FC push dword ptr [ebp-4] ;假设一变量 s = 注册名
005025AC |. FF75 E4 push dword ptr [ebp-1C] ;假设一变量 s2 = 机器码后六位
005025AF |. 8D45 E0 lea eax, dword ptr [ebp-20]
005025B2 |. BA 03000000 mov edx, 3
005025B7 |. E8 CC2AF0FF call 00405088 ;s = s1 + s + s2
005025BC |> C745 F0 00000>mov dword ptr [ebp-10], 0
005025C3 |. C745 F4 00000>mov dword ptr [ebp-C], 0
005025CA |. 8B45 FC mov eax, dword ptr [ebp-4]
005025CD |. E8 F629F0FF call 00404FC8
005025D2 |. 3B46 4C cmp eax, dword ptr [esi+4C]
005025D5 |. 7F 0D jg short 005025E4
005025D7 |. 8B45 FC mov eax, dword ptr [ebp-4]
005025DA |. E8 E929F0FF call 00404FC8
005025DF |. 3B46 50 cmp eax, dword ptr [esi+50]
005025E2 |. 7D 0C jge short 005025F0
005025E4 |> 8BC7 mov eax, edi
005025E6 |. E8 2527F0FF call 00404D10
005025EB |. E9 91000000 jmp 00502681
005025F0 |> 8B45 E0 mov eax, dword ptr [ebp-20]
005025F3 |. E8 D029F0FF call 00404FC8
005025F8 |. 8BD8 mov ebx, eax
005025FA |. EB 37 jmp short 00502633
005025FC |> 8B45 F0 /mov eax, dword ptr [ebp-10] ; 假一个变量 A ,初始时 A=0
005025FF |. 8B55 F4 |mov edx, dword ptr [ebp-C] ; 假一个变量 B ,初始时 B=0
00502602 |. 0346 68 |add eax, dword ptr [esi+68] ; A = A + 0xA934C0AF
00502605 |. 1356 6C |adc edx, dword ptr [esi+6C] ; 带进位加法
00502608 |. 52 |push edx
00502609 |. 50 |push eax
0050260A |. 8B45 E0 |mov eax, dword ptr [ebp-20]
0050260D |. 0FB64418 FF |movzx eax, byte ptr [eax+ebx-1] ; 假一个变量 c =从后面开始逐一取s字符串的ASCII值
00502612 |. 50 |push eax
00502613 |. B8 59040000 |mov eax, 459 ; 假一个变量 D =459
00502618 |. 5A |pop edx ; EDX=之前EAX得到的字符ASCII值
00502619 |. 8BCA |mov ecx, edx
0050261B |. 33D2 |xor edx, edx
0050261D |. F7F1 |div ecx ; D div C ; 这里我们假D值取余数,即 D = D mod C
0050261F |. 8BC2 |mov eax, edx
00502621 |. 33D2 |xor edx, edx
00502623 |. 290424 |sub dword ptr [esp], eax ; A = A - D
00502626 |. 195424 04 |sbb dword ptr [esp+4], edx
0050262A |. 58 |pop eax
0050262B |. 5A |pop edx
0050262C |. 8945 F0 |mov dword ptr [ebp-10], eax
0050262F |. 8955 F4 |mov dword ptr [ebp-C], edx
00502632 |. 4B |dec ebx
00502633 |> 8B45 E0 mov eax, dword ptr [ebp-20]
00502636 |. E8 8D29F0FF |call 00404FC8
0050263B |. 3BD8 |cmp ebx, eax
0050263D |. 7F 04 |jg short 00502643
0050263F |. 85DB |test ebx, ebx
00502641 |.^ 7F B9 \jg short 005025FC
00502643 |> 8B5E 60 mov ebx, dword ptr [esi+60]
00502646 |. 85DB test ebx, ebx
00502648 |. 7F 11 jg short 0050265B
0050264A |. FF75 F4 push dword ptr [ebp-C] ; /Arg2
0050264D |. FF75 F0 push dword ptr [ebp-10] ; |Arg1
00502650 |. 8BD7 mov edx, edi ; |
00502652 |. 33C0 xor eax, eax ; |
00502654 |. E8 AF74F0FF call 00409B08 ; \unpacked.00409B08
00502659 |. EB 26 jmp short 00502681
0050265B |> FF75 F4 push dword ptr [ebp-C] ; /Arg2 这里保存关B最后的值
0050265E |. FF75 F0 push dword ptr [ebp-10] ; |Arg1 这里保存着A最后的值
00502661 |. 8BD7 mov edx, edi ; |
00502663 |. 8BC3 mov eax, ebx ; |
00502665 |. E8 9E74F0FF call 00409B08 ; \E = 将 B十六进制的后4位值的字符串 + A十六进制字符
串
最后的 E 字符串就是注册码了;
注册名:inbreak
注册人:随便,注册码与此值无值
校验码:01A3F2DAC4C0
注册码:03193C80C9A7
【算法分析】
1,首先将注册码放在机器码的中间连接成一个新的字符串S;
2,将S字符串由后逐一取ASCII值;
3,....
懒,不想描述了,
下面放上DELPHI注册机源码吧:
procedure TForm1.Button1Click(Sender: TObject);
const
X = $A934C0Af ;
Y = $2E ;
Z = $459 ;
var
s,s1,s2:ShortString;
i:SmallInt;
a,a1,b,c,d :DWORD;
begin
s:=Edit1.Text;
s1:=Copy(Edit2.Text,1,6);
s2:=Copy(Edit2.Text,7,6);
s:=s1+s+s2;
a:=0 ; b:=0 ; C:= 0; D := 0; a1:=0;
for i := Length(s) downto 1 do begin
a1:=a;
a:= a + X;
if a<a1 then
b:= b+ y +1
else
b:=b + y;
c:=Ord(s[i]);
D:= Z mod C;
A:=A - D;
end;
Edit3.Text :=Format('%s%s',[IntToHex(b,4),IntToHex(A,8)]);
end;
===================================================================================
【版权声明】: 转载请注明作者并保持文章的完整, 谢谢!
2006-12-17
[注意]APP应用上架合规检测服务,协助应用顺利上架!