这是个视频转换软件,没有加壳,但里面有非常多的jmp。破解时要有非常好的耐心。
首先载入od.运行。注册,输入注册码,会有错误提示。
用f12暂停或者bp MessageBoxA可以找到最后弹出提示框的位置,但是倒着往前面找je/jnz是一件非常痛苦的事情。
用插件查找一下字符串,看看有没有可疑的地方。发现regname 和regcode.
在regcode处下断。再点击注册时就会断下来。
用f7跟下去,发现
0040128F . 50 push eax ; /FileName
00401290 . 51 push ecx ; |String = "1234134"
00401291 . 52 push edx ; |Key
00401292 . 68 64204A00 push WinMPGVi.004A2064 ; |ini
00401297 . FF15 40D14900 call dword ptr ds:[<&KERNEL32.Write>; \WritePrivateProfileStringA
将注册码写入config.ini文件中。
再往下跟,跟了半天也没有发现突破口。
可以下ini文件断点。看看有没有收获bp GetPrivateProfileStringA
到读取regcode时返回到用户代码
0012D698 00BD5A67 /CALL 到 GetPrivateProfileStringA 来自 ENVC.00BD5A61
0012D69C 00D06D00 |Section = "INI"
0012D6A0 00D06C9E |Key = "RegCode"
漫长的痛苦开始了,特别多像
00B78834 50 push eax
00B78835 68 79330000 push 3379
00B7883A 68 8B54CA6E push 6ECA548B
00B7883F E9 BD1A0000 jmp ENVC.00B7A301
这种几条指令然后一个jmp.
现在寻找可疑点,f8单步,如果有je/jne之类的代码下断记录下来。
并且注意堆栈的变化。
0012D6AC 003E4EF0
0012D6B0 0012D8F4 ASCII "bin117"
0012D6B4 0012D6DF
0012D6B8 0012D9F4
0012D6BC 0012D8F4 ASCII "bin117"
0012D6C0 FFFFFFDF
0012D6C4 00F5A56F ENVC.00F5A56F
0012D6C8 00B78A44 返回到 ENVC.00B78A44 来自 ENVC.00B7A41A
0012D6CC 0012D6D8 ASCII "bin117"
0012D6D0 004A6318 WinMPGVi.004A6318
有出现好多的用户名,具体也不知道它在做什么,光一个用户名就处理了好久。
像这种
00B7BFDE 84C9 test cl,cl
00B7BFE0 ^ 0F85 66F4FFFF jnz ENVC.00B7B44C
这种循环读取字符串的就不要记录了。可以在jnz下面一条语句f4.节约些时间。
如果 是
00B78DEE FFD0 call eax
这种call.就不用进去了,这种call都是调用堆栈中的代码,很简单处理几条指令又返回。
遇到下面这种就f7进去看看。
00B78A3F E8 D6190000 call ENVC.00B7A41A
跟了半天终于出现注册码。从这里开始就得注意了。有可疑的地方就f2下断记录下来。
00B7C0FA 890424 mov dword ptr ss:[esp],eax
00B7C0FD FF3424 push dword ptr ss:[esp]
0012D6C4 0012D7D8 ASCII "12341234"
0012D6C8 0012D7D8 ASCII "12341234"
0012D6CC 0012D6D8 ASCII "bin117"
0012D6D0 004A6318 WinMPGVi.004A6318
记录可疑点有以下几处。
00B6EE9B 803A 20 cmp byte ptr ds:[edx],20
00B6EE9E 0F85 E3820000 jnz ENVC.00B77187
00B6F09D 3C 43 cmp al,43
00B6F09F 0F84 69760000 je ENVC.00B7670E
00B749F1 84C0 test al,al
00B749F3 0F85 DB0D0000 jnz ENVC.00B757D4
00B782BE C705 446CD000 2>mov dword ptr ds:[D06C44],12547B21
00B782C8 32C0 xor al,al
00B782CA E9 5C3A0000 jmp ENVC.00B7BD2B
0048D322 . 84D2 test dl,dl
0048D324 . 0F95C0 setne al
到最后一处的时候,堆栈中已经完全没有用户名和密码。所以可以确定上面可疑点的某一处就是关键。在上面几处下断点,重新载入。测试。
结果将
00B782C8 32C0 xor al,al
更改为
00B782C8 B0 01 mov al,1
可以达到暴破的目的。
以上过程并不复杂。但是需要很大的耐心。看到那一堆堆的jmp好几次都有放弃的冲动。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)