• 标 题:最后也没算出序列号。暴掉了事了。这是大概过程。 (10千字)
  • 作 者:LL[CCG]
  • 时 间:2001-6-1 3:03:38
  • 链 接:http://bbs.pediy.com

Z-FILE试用版的破解过程。
下载:http://www.newhua.com.cn/down/ZFile30TGB.exe
用途:文件加密。
限制:序列号。
因为没有算出序列号来,只好爆破了。本来不好意思拿出来的,但是JSJYT让我写过程,我只好出来现了。:)
这个软件的关键点比较难找,输入的序列号不和它的格式连关键点都看不到,我大概说一下方法。
启动软件后,会出现让你输入序列号的对话框。随便输入几个字符,点确定。什么变化都没有。。。。不愧是加密软件。一点蛛丝马迹都不留。(很多软件输入错误后都会出现对话框,这个时候用MESSAGEBOXA之类的断点,几秒中就能找到关键点。比用HMEMCPY快多了。然后反汇编找关键点是那里来的,就能看到算法了。)没办法,只好用HMEMCPY来跟了,由于没有出错的提示很难找关键点,跟的时候最好用BPM把存序列号的地址断下,免得漏掉。
我没有用上面的方法,因为太难找。我用的方法如下:
经过分析软件会把你输入的序列号存入注册表,启动时检验,不对就出提示。让你再次输入。可以用REGQUERYVALUEEXA下断,在读出数据的时候进入程序领空。我这里大概断了40来次。。。。。。也不容易呀 !终于看到了输入的错误注册码。然后就F10一步一步的跟下去。当然用BPM监视也可以。
不管用那种方法,最后会到下面这里:
:0041D3CC 83F80D                  cmp eax, 0000000D                      这里是比较长度是不是13位以上
:0041D3CF 7422                    je 0041D3F3
:0041D3D1 33C0                    xor eax, eax
:0041D3D3 BA02000000              mov edx, 00000002
:0041D3D8 50                      push eax
:0041D3D9 8D45FC                  lea eax, dword ptr [ebp-04]
:0041D3DC FF4F1C                  dec [edi+1C]
:0041D3DF E8501A0600              call 0047EE34
:0041D3E4 58                      pop eax
:0041D3E5 8B17                    mov edx, dword ptr [edi]
:0041D3E7 64891500000000          mov dword ptr fs:[00000000], edx
:0041D3EE E9E0070000              jmp 0041DBD3

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041D3CF(C)
|
:0041D3F3 C6458358                mov [ebp-7D], 58
:0041D3F7 66C747101400            mov [edi+10], 0014
:0041D3FD 837DFC00                cmp dword ptr [ebp-04], 00000000
:0041D401 7405                    je 0041D408
:0041D403 8B4DFC                  mov ecx, dword ptr [ebp-04]
:0041D406 EB05                    jmp 0041D40D

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041D401(C)
|
:0041D408 B952BA4800              mov ecx, 0048BA52

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041D406(U)
|
:0041D40D 0FBE410C                movsx eax, byte ptr [ecx+0C]
:0041D411 83F858                  cmp eax, 00000058                            比较第13位是不是X
:0041D414 7422                    je 0041D438
:0041D416 33C0                    xor eax, eax
:0041D418 BA02000000              mov edx, 00000002
:0041D41D 50                      push eax
:0041D41E 8D45FC                  lea eax, dword ptr [ebp-04]
:0041D421 FF4F1C                  dec [edi+1C]
:0041D424 E80B1A0600              call 0047EE34
:0041D429 58                      pop eax
:0041D42A 8B17                    mov edx, dword ptr [edi]
:0041D42C 64891500000000          mov dword ptr fs:[00000000], edx
:0041D433 E99B070000              jmp 0041DBD3
:0041D438 837DFC00                cmp dword ptr [ebp-04], 00000000
:0041D43C 7405                    je 0041D443
:0041D43E 8B4DFC                  mov ecx, dword ptr [ebp-04]
:0041D441 EB05                    jmp 0041D448
:0041D443 B953BA4800              mov ecx, 0048BA53
:0041D448 837DFC00                cmp dword ptr [ebp-04], 00000000
:0041D44C 8A4108                  mov al, byte ptr [ecx+08]
:0041D44F 7405                    je 0041D456
:0041D451 8B55FC                  mov edx, dword ptr [ebp-04]
:0041D454 EB05                    jmp 0041D45B
:0041D456 BA54BA4800              mov edx, 0048BA54
:0041D45B 837DFC00                cmp dword ptr [ebp-04], 00000000
:0041D45F 8A5204                  mov dl, byte ptr [edx+04]
:0041D462 7405                    je 0041D469
:0041D464 8B4DFC                  mov ecx, dword ptr [ebp-04]
:0041D467 EB05                    jmp 0041D46E
:0041D469 B955BA4800              mov ecx, 0048BA55
:0041D46E 8A09                    mov cl, byte ptr [ecx]
:0041D470 0FBED8                  movsx ebx, al
:0041D473 83FB30                  cmp ebx, 00000030
:0041D476 7C09                    jl 0041D481
:0041D478 83FB39                  cmp ebx, 00000039
:0041D47B 7F04                    jg 0041D481
:0041D47D 04D0                    add al, D0
:0041D47F EB44                    jmp 0041D4C5
:0041D481 0FBED8                  movsx ebx, al
:0041D484 83FB61                  cmp ebx, 00000061
:0041D487 7C09                    jl 0041D492
:0041D489 83FB7A                  cmp ebx, 0000007A
:0041D48C 7F04                    jg 0041D492
:0041D48E 04A9                    add al, A9
:0041D490 EB33                    jmp 0041D4C5
:0041D492 0FBED8                  movsx ebx, al
:0041D495 83FB41                  cmp ebx, 00000041
:0041D498 7C09                    jl 0041D4A3
:0041D49A 83FB5A                  cmp ebx, 0000005A
:0041D49D 7F04                    jg 0041D4A3
:0041D49F 04E3                    add al, E3
:0041D4A1 EB22                    jmp 0041D4C5
:0041D4A3 33C0                    xor eax, eax
:0041D4A5 BA02000000              mov edx, 00000002
:0041D4AA 50                      push eax
:0041D4AB 8D45FC                  lea eax, dword ptr [ebp-04]
:0041D4AE FF4F1C                  dec [edi+1C]
:0041D4B1 E87E190600              call 0047EE34
:0041D4B6 58                      pop eax
:0041D4B7 8B17                    mov edx, dword ptr [edi]
:0041D4B9 64891500000000          mov dword ptr fs:[00000000], edx
:0041D4C0 E90E070000              jmp 0041DBD3
:0041D4C5 0FBEDA                  movsx ebx, dl
:0041D4C8 83FB30                  cmp ebx, 00000030
:0041D4CB 7C0A                    jl 0041D4D7
:0041D4CD 83FB39                  cmp ebx, 00000039
:0041D4D0 7F05                    jg 0041D4D7
:0041D4D2 80C2D0                  add dl, D0
:0041D4D5 EB46                    jmp 0041D51D
:0041D4D7 0FBEDA                  movsx ebx, dl
:0041D4DA 83FB61                  cmp ebx, 00000061
:0041D4DD 7C0A                    jl 0041D4E9
:0041D4DF 83FB7A                  cmp ebx, 0000007A
:0041D4E2 7F05                    jg 0041D4E9
:0041D4E4 80C2A9                  add dl, A9
:0041D4E7 EB34                    jmp 0041D51D
:0041D4E9 0FBEDA                  movsx ebx, dl
:0041D4EC 83FB41                  cmp ebx, 00000041
:0041D4EF 7C0A                    jl 0041D4FB
:0041D4F1 83FB5A                  cmp ebx, 0000005A
:0041D4F4 7F05                    jg 0041D4FB
:0041D4F6 80C2E3                  add dl, E3
:0041D4F9 EB22                    jmp 0041D51D
:0041D4FB 33C0                    xor eax, eax
:0041D4FD BA02000000              mov edx, 00000002
:0041D502 50                      push eax
:0041D503 8D45FC                  lea eax, dword ptr [ebp-04]
:0041D506 FF4F1C                  dec [edi+1C]
:0041D509 E826190600              call 0047EE34
:0041D50E 58                      pop eax
:0041D50F 8B17                    mov edx, dword ptr [edi]
:0041D511 64891500000000          mov dword ptr fs:[00000000], edx
:0041D518 E9B6060000              jmp 0041DBD3
:0041D51D 0FBED9                  movsx ebx, cl
:0041D520 83FB30                  cmp ebx, 00000030
:0041D523 7C0A                    jl 0041D52F
:0041D525 83FB39                  cmp ebx, 00000039
:0041D528 7F05                    jg 0041D52F
:0041D52A 80C1D0                  add cl, D0
:0041D52D EB46                    jmp 0041D575
:0041D532 83FB61                  cmp ebx, 00000061
:0041D535 7C0A                    jl 0041D541
:0041D537 83FB7A                  cmp ebx, 0000007A
:0041D53A 7F05                    jg 0041D541
:0041D53C 80C1A9                  add cl, A9
:0041D53F EB34                    jmp 0041D575
:0041D541 0FBED9                  movsx ebx, cl
:0041D544 83FB41                  cmp ebx, 00000041
:0041D547 7C0A                    jl 0041D553
:0041D549 83FB5A                  cmp ebx, 0000005A
:0041D54C 7F05                    jg 0041D553
:0041D54E 80C1E3                  add cl, E3
:0041D551 EB22                    jmp 0041D575
:0041D553 33C0                    xor eax, eax
:0041D555 BA02000000              mov edx, 00000002
:0041D55A 50                      push eax
:0041D55B 8D45FC                  lea eax, dword ptr [ebp-04]
:0041D55E FF4F1C                  dec [edi+1C]
:0041D561 E8CE180600              call 0047EE34
:0041D566 58                      pop eax
:0041D567 8B17                    mov edx, dword ptr [edi]
:0041D569 64891500000000          mov dword ptr fs:[00000000], edx
:0041D570 E95E060000              jmp 0041DBD3                    上面的一堆应该是判断输入的是不是数字和字母

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0041D52D(U), :0041D53F(U), :0041D551(U)
|
:0041D575 0FBEC0                  movsx eax, al                    这里就是算法开始了。
:0041D578 8BF0                    mov esi, eax
:0041D57A 0FBEC9                  movsx ecx, cl
:0041D57D C1E604                  shl esi, 04
:0041D580 2BF0                    sub esi, eax
:0041D582 C1E606                  shl esi, 06
:0041D585 03F0                    add esi, eax
:0041D587 0FBEC2                  movsx eax, dl
:0041D58A 8BD0                    mov edx, eax
:0041D58C C1E205                  shl edx, 05
:0041D58F 2BD0                    sub edx, eax
:0041D591 C1E602                  shl esi, 02
:0041D594 03D2                    add edx, edx
:0041D596 03F2                    add esi, edx
:0041D598 03F1                    add esi, ecx
:0041D59A 83FEFF                  cmp esi, FFFFFFFF
:0041D59D 7C05                    jl 0041D5A4
:0041D59F 83FEFF                  cmp esi, FFFFFFFF
:0041D5A2 7E22                    jle 0041D5C6                    我实在是没办法让ESI=FFFFFFFF只好去关键点了。
:0041D5A4 33C0                    xor eax, eax
:0041D5A6 BA02000000              mov edx, 00000002
:0041D5AB 50                      push eax
:0041D5AC 8D45FC                  lea eax, dword ptr [ebp-04]
:0041D5AF FF4F1C                  dec [edi+1C]
:0041D5B2 E87D180600              call 0047EE34
:0041D5B7 58                      pop eax
:0041D5B8 8B17                    mov edx, dword ptr [edi]
:0041D5BA 64891500000000          mov dword ptr fs:[00000000], edx
:0041D5C1 E90D060000              jmp 0041DBD3                    跳出。
然后就是关键点:
:004014C8 8B0E                    mov ecx, dword ptr [esi]
:004014CA 51                      push ecx
:004014CB E858BD0100              call 0041D228                    这个应该是把输入的数字保存到注册表
:004014D0 59                      pop ecx
:004014D1 84C0                    test al, al
:004014D3 0F846DFFFFFF            je 00401446                      这个就是关键点了。
到此就完事了。因为实在是算不出来只好把关键点暴掉,然后用123456789000X注册成功。
要想完全暴掉,就把所有的判断都改了,随便几个字母就OK了。
那位大哥能把算法指点一二 ??感激不禁。
                                                                                          LL[CCG]