【文章标题】: 【原创】一个cm级别的小软件之爆破篇----考试试系统3.0(高级程序员)
【文章作者】: 君君寒
【软件名称】: 软件水平考试测试系统3.0(高级程序员)
【软件大小】: 918kb
【下载地址】: 自己搜索下载
【加壳方式】: Aspack v2.12 -> Alexey Solodovnikov ( Sn-flag:ok )
【保护方式】: 注册码
【编写语言】: Borland Delphi ( 2.0 - 7.0 )
【使用工具】: W32DSM 无极版 od
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
最近一直写程序,破解几乎荒废了,qq群里有人想要考软考,我想起很久以前通过的软考,就想着反正也是清闲,就继续考吧。
我平常喜欢找点资料,网上查了下考试复习资料并不很多。不过还是被我找到不少。呵呵
当我打开这个软件的时候讨厌的未注册出来,很是不自在,顺便看了下作者,好象几乎将这个软件忘记了,一没升级,资料一直停留在
以前的东西,不过不妨碍大家学习的热情,既然作者都不在乎了,我就当个cm破了吧。因为手生了,也就不去想制作注册机
而且跟了很多次没发现明码比较,得。爆破吧。
查壳Aspack v2.12 -> Alexey Solodovnikov esp定律秒杀之,
打开程序正常运行。
点了下 软件注册跳出一个方框 软件注册界面
直接点注册 认证 提示 “ 注册码不能为空,请重新输入”好家伙,于是马上打开W32DSM 无极版,然后搜索“注册”
出现了非常多的 注册相关提示,记录下来。
0061688A |. B8 446A6100 mov eax, 00616A44 ;注册码不能为空,请重新输入 比较内容是否为空
0061688F |. E8 705CE3FF call 0044C504
00616894 |. E9 36010000 jmp 006169CF
00616899 |> 33D2 xor edx, edx
0061689B |. 8B45 F4 mov eax, dword ptr [ebp-C]
0061689E |. 8A0410 mov al, byte ptr [eax+edx]
006168A1 |. EB 07 jmp short 006168AA
006168A3 |> 42 /inc edx
006168A4 |. 8B45 F4 |mov eax, dword ptr [ebp-C]
006168A7 |. 8A0410 |mov al, byte ptr [eax+edx]
006168AA |> 3C 30 cmp al, 30
006168AC |. 72 04 |jb short 006168B2
006168AE |. 3C 39 |cmp al, 39
006168B0 |. 76 08 |jbe short 006168BA
006168B2 |> 3C 41 |cmp al, 41
006168B4 |. 72 08 |jb short 006168BE
006168B6 |. 3C 46 |cmp al, 46
006168B8 |. 77 04 |ja short 006168BE
006168BA |> 3BCA |cmp ecx, edx
006168BC |.^ 7D E5 \jge short 006168A3
006168BE |> 83FA 10 cmp edx, 10
006168C1 |. 0F85 F0000000 jnz 006169B7
006168C7 |. 8D4D F0 lea ecx, dword ptr [ebp-10]
006168CA |. 8B55 FC mov edx, dword ptr [ebp-4]
006168CD |. 8B45 F4 mov eax, dword ptr [ebp-C]
006168D0 |. E8 E7ECFFFF call 006155BC ;
006168D5 |. 8B45 F0 mov eax, dword ptr [ebp-10]
006168D8 |. 8B55 F8 mov edx, dword ptr [ebp-8]
006168DB |. E8 CCE1DEFF call 00404AAC
006168E0 |. 0F85 B7000000 jnz 0061699D ;
006168E6 |. 8D55 BC lea edx, dword ptr [ebp-44]
006168E9 |. 33C0 xor eax, eax
006168EB |. E8 50C2DEFF call 00402B40
006168F0 |. 8B45 BC mov eax, dword ptr [ebp-44]
006168F3 |. 8D55 C0 lea edx, dword ptr [ebp-40]
006168F6 |. E8 F533DFFF call 00409CF0
006168FB |. 8B55 C0 mov edx, dword ptr [ebp-40]
006168FE |. 8D45 EC lea eax, dword ptr [ebp-14]
00616901 |. B9 686A6100 mov ecx, 00616A68 ; ASCII "data\friend.ini"
00616906 |. E8 A9E0DEFF call 004049B4
0061690B |. 8B4D EC mov ecx, dword ptr [ebp-14]
0061690E |. B2 01 mov dl, 1
00616910 |. A1 90C74800 mov eax, dword ptr [48C790]
00616915 |. E8 265FE7FF call 0048C840
0061691A |. 8B15 8C0B6200 mov edx, dword ptr [620B8C] ; Unpacked.0062B158
00616920 |. 8902 mov dword ptr [edx], eax
00616922 |. A1 9C0C6200 mov eax, dword ptr [620C9C]
00616927 |. 8B00 mov eax, dword ptr [eax]
00616929 |. 50 push eax
0061692A |. A1 8C0B6200 mov eax, dword ptr [620B8C]
0061692F |. 8B00 mov eax, dword ptr [eax]
00616931 |. B9 806A6100 mov ecx, 00616A80 ; 注册申请码
00616936 |. BA 946A6100 mov edx, 00616A94 ; 程序参数
0061693B |. 8B18 mov ebx, dword ptr [eax]
0061693D |. FF53 04 call dword ptr [ebx+4]
00616940 |. 8B45 F4 mov eax, dword ptr [ebp-C]
00616943 |. 50 push eax
00616944 |. A1 8C0B6200 mov eax, dword ptr [620B8C]
00616949 |. 8B00 mov eax, dword ptr [eax]
0061694B |. B9 A86A6100 mov ecx, 00616AA8 ; 注册认证码
00616950 |. BA 946A6100 mov edx, 00616A94 ; 程序参数
00616955 |. 8B18 mov ebx, dword ptr [eax]
00616957 |. FF53 04 call dword ptr [ebx+4]
0061695A |. A1 8C0B6200 mov eax, dword ptr [620B8C]
0061695F |. 8B00 mov eax, dword ptr [eax]
00616961 |. B2 01 mov dl, 1
00616963 |. 8B08 mov ecx, dword ptr [eax]
00616965 |. FF51 FC call dword ptr [ecx-4]
00616968 |. A1 0C0D6200 mov eax, dword ptr [620D0C]
0061696D |. 8B00 mov eax, dword ptr [eax]
0061696F |. 8B80 08030000 mov eax, dword ptr [eax+308]
00616975 |. BA BC6A6100 mov edx, 00616ABC ; 计算机软件水平考试测试系统3.0精
0061697A |. E8 6DCFE3FF call 004538EC
0061697F |. A1 E8046200 mov eax, dword ptr [6204E8]
00616984 |. C600 01 mov byte ptr [eax], 1
00616987 |. B8 006B6100 mov eax, 00616B00 ; 注册成功,感谢您的支持!
0061698C |. E8 735BE3FF call 0044C504
00616991 |. A1 4CB16200 mov eax, dword ptr [62B14C]
00616996 |. E8 ADAAE5FF call 00471448
0061699B |. EB 32 jmp short 006169CF
0061699D |> 6A 00 push 0
0061699F |. B9 186B6100 mov ecx, 00616B18 ; 警告框
006169A4 |. BA 206B6100 mov edx, 00616B20 ; 注册码错误
006169A9 |. A1 AC0A6200 mov eax, dword ptr [620AAC]
006169AE |. 8B00 mov eax, dword ptr [eax]
006169B0 |. E8 47E4E5FF call 00474DFC
006169B5 |. EB 18 jmp short 006169CF
006169B7 |> 6A 00 push 0
006169B9 |. B9 186B6100 mov ecx, 00616B18
006169BE |. BA 206B6100 mov edx, 00616B20 ; 注册码错误
006169C3 |. A1 AC0A6200 mov eax, dword ptr [620AAC]
006169C8 |. 8B00 mov eax, dword ptr [eax]
006169CA |. E8 2DE4E5FF call 00474DFC
006169CF |> 33C0 xor eax, eax
006169D1 |. 5A pop edx
006169D2 |. 59 pop ecx
006169D3 |. 59 pop ecx
006169D4 |. 64:8910 mov dword ptr fs:[eax], edx
006169D7 |. 68 366A6100 push 00616A36
从这些信息里面我们可以知道 文件是通过判断data\friend.ini里面的 注册认证码来确认注册的。
而且分支如此明显 cm啊,我很惊喜。
找到这段代码的程序头下 内存断点
00616780 /. 55 push ebp-------------------f2,然后 shift+f9,点软件注册,随便输入注册码,然后就会断下来,取消断点开始单步
00616781 |. 8BEC mov ebp, esp
00616783 |. B9 08000000 mov ecx, 8
00616788 |> 6A 00 /push 0
0061678A |. 6A 00 |push 0
0061678C |. 49 |dec ecx
0061678D |.^ 75 F9 \jnz short 00616788
0061678F |. 51 push ecx
00616790 |. 53 push ebx
00616791 |. 8BD8 mov ebx, eax
00616793 |. 33C0 xor eax, eax
00616795 |. 55 push ebp
00616796 |. 68 2F6A6100 push 00616A2F
0061679B |. 64:FF30 push dword ptr fs:[eax]
0061679E |. 64:8920 mov dword ptr fs:[eax], esp
006167A1 |. 8D45 FC lea eax, dword ptr [ebp-4]
006167A4 |. 50 push eax
一直单步,直到
006168C7 |. 8D4D F0 lea ecx, dword ptr [ebp-10]
006168CA |. 8B55 FC mov edx, dword ptr [ebp-4]
006168CD |. 8B45 F4 mov eax, dword ptr [ebp-C]
006168D0 |. E8 E7ECFFFF call 006155BC ; eax 出现假注册码
006168D5 |. 8B45 F0 mov eax, dword ptr [ebp-10]
006168D8 |. 8B55 F8 mov edx, dword ptr [ebp-8]
006168DB |. E8 CCE1DEFF call 00404AAC
006168E0 |. 0F85 B7000000 jnz 0061699D ; 是否成功注册
006168E6 |. 8D55 BC lea edx, dword ptr [ebp-44]
006168E9 |. 33C0 xor eax, eax
006168EB |. E8 50C2DEFF call 00402B40
006168F0 |. 8B45 BC mov eax, dword ptr [ebp-44]
006168F3 |. 8D55 C0 lea edx, dword ptr [ebp-40]
006168F6 |. E8 F533DFFF call 00409CF0
006168FB |. 8B55 C0 mov edx, dword ptr [ebp-40]
终于发现假的注册码,偷偷的笑了。
006168D0 |. E8 E7ECFFFF call 006155BC ; eax出现假注册码
006168D5 |. 8B45 F0 mov eax, dword ptr [ebp-10]
006168D8 |. 8B55 F8 mov edx, dword ptr [ebp-8]
006168DB |. E8 CCE1DEFF call 00404AAC
006168E0 |. 0F85 B7000000 jnz 0061699D ; 是否成功注册-----这里就是爆破点了
006168E6 |. 8D55 BC lea edx, dword ptr [ebp-44]
006168E9 |. 33C0 xor eax, eax
006168EB |. E8 50C2DEFF call 00402B40
006168F0 |. 8B45 BC mov eax, dword ptr [ebp-44]
006168F3 |. 8D55 C0 lea edx, dword ptr [ebp-40]
006168F6 |. E8 F533DFFF call 00409CF0
006168FB |. 8B55 C0 mov edx, dword ptr [ebp-40]
006168FE |. 8D45 EC lea eax, dword ptr [ebp-14]
00616901 |. B9 686A6100 mov ecx, 00616A68 ; ASCII "data\friend.ini"
00616906 |. E8 A9E0DEFF call 004049B4
0061690B |. 8B4D EC mov ecx, dword ptr [ebp-14]
0061690E |. B2 01 mov dl, 1
00616910 |. A1 90C74800 mov eax, dword ptr [48C790]
00616915 |. E8 265FE7FF call 0048C840
0061691A |. 8B15 8C0B6200 mov edx, dword ptr [620B8C] ; Unpacked.0062B158
00616920 |. 8902 mov dword ptr [edx], eax
00616922 |. A1 9C0C6200 mov eax, dword ptr [620C9C]
00616927 |. 8B00 mov eax, dword ptr [eax]
00616929 |. 50 push eax
0061692A |. A1 8C0B6200 mov eax, dword ptr [620B8C]
0061692F |. 8B00 mov eax, dword ptr [eax]
00616931 |. B9 806A6100 mov ecx, 00616A80 ; 注册申请码
00616936 |. BA 946A6100 mov edx, 00616A94 ; 程序参数
0061693B |. 8B18 mov ebx, dword ptr [eax]
0061693D |. FF53 04 call dword ptr [ebx+4]
00616940 |. 8B45 F4 mov eax, dword ptr [ebp-C]
00616943 |. 50 push eax
00616944 |. A1 8C0B6200 mov eax, dword ptr [620B8C]
00616949 |. 8B00 mov eax, dword ptr [eax]
0061694B |. B9 A86A6100 mov ecx, 00616AA8 ; 注册认证码
00616950 |. BA 946A6100 mov edx, 00616A94 ; 程序参数
00616955 |. 8B18 mov ebx, dword ptr [eax]
00616957 |. FF53 04 call dword ptr [ebx+4]
0061695A |. A1 8C0B6200 mov eax, dword ptr [620B8C]
0061695F |. 8B00 mov eax, dword ptr [eax]
00616961 |. B2 01 mov dl, 1
00616963 |. 8B08 mov ecx, dword ptr [eax]
00616965 |. FF51 FC call dword ptr [ecx-4]
00616968 |. A1 0C0D6200 mov eax, dword ptr [620D0C]
0061696D |. 8B00 mov eax, dword ptr [eax]
0061696F |. 8B80 08030000 mov eax, dword ptr [eax+308]
00616975 |. BA BC6A6100 mov edx, 00616ABC ; 计算机软件水平考试测试系统3.0精
0061697A |. E8 6DCFE3FF call 004538EC
0061697F |. A1 E8046200 mov eax, dword ptr [6204E8]
00616984 |. C600 01 mov byte ptr [eax], 1
00616987 |. B8 006B6100 mov eax, 00616B00 ; 注册成功,感谢您的支持!
0061698C |. E8 735BE3FF call 0044C504
00616991 |. A1 4CB16200 mov eax, dword ptr [62B14C]
00616996 |. E8 ADAAE5FF call 00471448
0061699B |. EB 32 jmp short 006169CF
0061699D |> 6A 00 push 0
0061699F |. B9 186B6100 mov ecx, 00616B18 ; 警告框
006169A4 |. BA 206B6100 mov edx, 00616B20 ; 注册码错误
006169A9 |. A1 AC0A6200 mov eax, dword ptr [620AAC]
006169AE |. 8B00 mov eax, dword ptr [eax]
006169B0 |. E8 47E4E5FF call 00474DFC
006169B5 |. EB 18 jmp short 006169CF
006169B7 |> 6A 00 push 0
006169B9 |. B9 186B6100 mov ecx, 00616B18
006169BE |. BA 206B6100 mov edx, 00616B20 ; 注册码错误
006169C3 |. A1 AC0A6200 mov eax, dword ptr [620AAC]
006169C8 |. 8B00 mov eax, dword ptr [eax]
006169CA |. E8 2DE4E5FF call 00474DFC
006169CF |> 33C0 xor eax, eax
006169D1 |. 5A pop edx
006169D2 |. 59 pop ecx
006169D3 |. 59 pop ecx
006169D4 |. 64:8910 mov dword ptr fs:[eax], edx
006169D7 |. 68 366A6100 push 00616A36
006169DC |> 8D45 BC lea eax, dword ptr [ebp-44]
006169DF |. BA 02000000 mov edx, 2
006169E4 |. E8 EBDCDEFF call 004046D4
006169E9 |. 8D45 C4 lea eax, dword ptr [ebp-3C]
006169EC |. E8 BFDCDEFF call 004046B0
006169F1 |. 8D45 C8 lea eax, dword ptr [ebp-38]
006169F4 |. E8 B7DCDEFF call 004046B0
006169F9 |. 8D45 CC lea eax, dword ptr [ebp-34]
006169FC |. E8 AFDCDEFF call 004046B0
00616A01 |. 8D45 D0 lea eax, dword ptr [ebp-30]
00616A04 |. E8 A7DCDEFF call 004046B0
00616A09 |. 8D45 D4 lea eax, dword ptr [ebp-2C]
00616A0C |. E8 9FDCDEFF call 004046B0
00616A11 |. 8D45 D8 lea eax, dword ptr [ebp-28]
00616A14 |. E8 97DCDEFF call 004046B0
00616A19 |. 8D45 DC lea eax, dword ptr [ebp-24]
00616A1C |. E8 8FDCDEFF call 004046B0
00616A21 |. 8D45 E0 lea eax, dword ptr [ebp-20]
00616A24 |. BA 08000000 mov edx, 8
00616A29 |. E8 A6DCDEFF call 004046D4
00616A2E \. C3 retn
00616A2F .^ E9 88D6DEFF jmp 004040BC
00616A34 .^ EB A6 jmp short 006169DC
00616A36 . 5B pop ebx
00616A37 . 8BE5 mov esp, ebp
00616A39 . 5D pop ebp
00616A3A . C3 retn
程序的分支非常明显 如果006168E0 jnz 0061699D 这里跳了那么程序就执行
0061699D |> 6A 00 push 0
0061699F |. B9 186B6100 mov ecx, 00616B18 ; 警告框
006169A4 |. BA 206B6100 mov edx, 00616B20 ; 注册码错误
006169A9 |. A1 AC0A6200 mov eax, dword ptr [620AAC]
006169AE |. 8B00 mov eax, dword ptr [eax]
006169B0 |. E8 47E4E5FF call 00474DFC
如果不跳就 操作data\friend.ini 里面的 注册申请码 注册认证码
接下来提示注册成功,感谢您的支持!
那么就来修改它吧006168E0 je 0061699D
然后保存修改后的文件
重新打开 依旧提示没注册,不过不要紧,随便输入一个注册码,立即提示注册成功,并且功能都可以使用。
诶,一个连爆破都非常挫的程序。不过 至少能用了,先用了再说。呵呵
--------------------------------------------------------------------------------
【经验总结】
对程序如果有提示,要认真的分析提示,其实读取ini文件是有一个api(GetPrivateProfileStringA )可以断下来的,但
是我断了下 对程序破解帮助不大不过,追踪计算注册码应该是有帮助的,过程很挫,但是破解那些事都荒废了,大家讲究
着看吧。软件资料很老,但是还是不错的。谢谢大家花时间看这个挫的爆破,下次我准备弄出注册机篇,欲知后事如何,且
听下回分解。
--------------------------------------------------------------------------------
【版权声明】: 本文原创于君君寒, 转载请注明作者并保持文章的完整, 谢谢!
2011年08月27日 23:21:56
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!