【文章标题】: Magic Photo Recovery 2.0程序完全破解
【文章作者】: jiaosc
【作者邮箱】: jiaosc@163.com
【软件名称】: Magic Photo Recovery 2.0
【软件大小】: 569kB
【下载地址】: 自己搜索下载
【加壳方式】: ASPack 2.12 -> Alexey Solodovnikov
【保护方式】: 注册码
【编写语言】: Borland Delphi 6.0 - 7.0
【使用工具】: OD,Import Fix 1.6,keymake2.0
【操作平台】: WIN XP
【软件介绍】: 不可思议的照片补救软件,它可以恢复被删除的图象!
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
PEiD v0.95查壳显示为: ASPack 2.12 -> Alexey Solodovnikov
用OD手动脱壳
OD载入,停在这里:
005E4001 > 60 pushad
005E4002 E8 03000000 call Magic_Ph.005E400A
005E4007 - E9 EB045D45 jmp 45BB44F7
005E400C 55 push ebp
005E400D C3 retn
005E400E E8 01000000 call Magic_Ph.005E4014
005E4013 EB 5D jmp short Magic_Ph.005E4072
005E4015 BB EDFFFFFF mov ebx, -13
005E401A 03DD add ebx, ebp
005E401C 81EB 00401E00 sub ebx, 1E4000
005E4022 83BD 22040000 0>cmp dword ptr ss:[ebp+422], 0
005E4029 899D 22040000 mov dword ptr ss:[ebp+422], ebx
005E402F 0F85 65030000 jnz Magic_Ph.005E439A
用ESP定律脱壳,在0012ffa4处设硬件访问断点,按F9运行,停在这里:
005E43B0 /75 08 jnz short Magic_Ph.005E43BA
005E43B2 |B8 01000000 mov eax, 1
005E43B7 |C2 0C00 retn 0C
005E43BA \68 489E5200 push Magic_Ph.00529E48
005E43BF C3 retn
005E43C0 8B85 26040000 mov eax, dword ptr ss:[ebp+426]
005E43C6 8D8D 3B040000 lea ecx, dword ptr ss:[ebp+43B]
按几下F7到达OEP:
00529E48 55 push ebp 这里就是OEP, OEP偏移地址=00129E48
00529E49 8BEC mov ebp, esp
00529E4B 83C4 F0 add esp, -10
00529E4E 53 push ebx
00529E4F B8 D0735200 mov eax, Magic_Ph.005273D0
00529E54 E8 D3D5EDFF call Magic_Ph.0040742C
00529E59 8B1D 48E65200 mov ebx, dword ptr ds:[52E648] ;Magic_Ph. 005325B0
00529E5F 8B03 mov eax, dword ptr ds:[ebx]
00529E61 E8 AE65F4FF call Magic_Ph.00470414
00529E66 8B03 mov eax, dword ptr ds:[ebx]
OEP处用OD插件OllyDump Dump debugged process脱壳,用Import Fix 1.6修复一下。
再用PEiD v0.95查壳显示为: Borland Delphi 6.0 - 7.0脱壳干净,点击运行正常,
再次用OD将脱壳后的程序载入,按F9运行,出现主界面.
输入假注册名和假注册码,点确定,出现错误注册框.
用F12堆栈调用法找到调用错误注册框的地方,操作方法:按F12,再按Alt+K调用堆栈,堆栈内出现下列内容:
调用堆栈: 主线程
地址 堆栈 函数过程 / 参数 调用来自 结构
0012E580 77D19418 包含ntdll.KiFastSystemCallRet USER32.77D19416 0012E5B4
0012E584 77D2770A USER32.WaitMessage USER32.77D27705 0012E5B4
0012E5B8 77D249C4 USER32.77D2757B USER32.77D249BF 0012E5B4
0012E5E0 77D3A956 USER32.77D2490E USER32.77D3A951 0012E5DC
0012E8A0 77D3A2BC USER32.SoftModalMessageBox USER32.77D3A2B7 0012E89C
0012E9F0 77D663FD USER32.77D3A147 USER32.77D663F8 0012E9EC
0012EA48 77D664A2 USER32.MessageBoxTimeoutW USER32.77D6649D 0012EA44
0012EA7C 77D50877 ? USER32.MessageBoxTimeoutA USER32.77D50872 0012EA78
0012EA9C 77D5082F ? USER32.MessageBoxExA USER32.77D5082A 0012EA98
0012EAA0 00090332 hOwner = 00090332 ('输入注册信息',
0012EAA4 00B2C810 Text = ""B4,"砦蟮?,D7,"",A2,"",B2
0012EAA8 00B38290 Title = "Magic Photo Recovery 2.0"
0012EAAC 00000030 Style = MB_OK|MB_ICONEXCLAMATION|M
0012EAB0 00000000 LanguageID = 0 (LANG_NEUTRAL)
0012EAB8 00470796 ? <jmp.&USER32.MessageBoxA> Magic_Ph.00470791 0012EAB4
0012EABC 00090332 hOwner = 00090332 ('输入注册信息',
0012EAC0 00B2C810 Text = ""B4,"砦蟮?,D7,"",A2,"",B2
0012EAC4 00B38290 Title = "Magic Photo Recovery 2.0"
0012EAC8 00000030 Style = MB_OK|MB_ICONEXCLAMATION|M
0012EB40 00524A69 ? Magic_Ph.00470698 Magic_Ph.00524A64 0012EB3C
选中最后一行右键,选show call,停在这里:
00524A64 . E8 2FBCF4FF call Magic_Ph.00470698
00524A69 > 33C0 xor eax, eax
00524A6B . 5A pop edx
00524A6C . 59 pop ecx
00524A6D . 59 pop ecx
00524A6E . 64:8910 mov dword ptr fs:[eax], edx
00524A71 . EB 0A jmp short Magic_Ph.00524A7D
00524A73 .^ E9 DCFCEDFF jmp Magic_Ph.00404754
上面这个Call就是调用注册错误提示框.我们往前翻找到段首:
005246B8 . 55 push ebp
005246B9 . 8BEC mov ebp, esp
005246BB . B9 0E000000 mov ecx, 0E
005246C0 > 6A 00 push 0
005246C2 . 6A 00 push 0
005246C4 . 49 dec ecx
005246C5 .^ 75 F9 jnz short Magic_Ph.005246C0
005246C7 . 53 push ebx
005246C8 . 56 push esi
005246C9 . 57 push edi
005246CA . 8945 FC mov dword ptr ss:[ebp-4], eax
在005246B8段首处F2下断:跟一下,
005246F7 . E8 3CD7F2FF call Magic_Ph.00451E38
005246FC . 8B45 F0 mov eax, dword ptr ss:[ebp-10] ; 这里提取假注册名
005246FF . 8D55 F4 lea edx, dword ptr ss:[ebp-C]
00524702 . E8 3151EEFF call Magic_Ph.00409838
00524707 . 8B55 F4 mov edx, dword ptr ss:[ebp-C]
0052470A . 8BC3 mov eax, ebx
0052470C . E8 57D7F2FF call Magic_Ph.00451E68
00524711 . 8D55 E8 lea edx, dword ptr ss:[ebp-18]
00524714 . 8B45 FC mov eax, dword ptr ss:[ebp-4]
00524717 . 8B98 64030000 mov ebx, dword ptr ds:[eax+364]
0052471D . 8BC3 mov eax, ebx
0052471F . E8 14D7F2FF call Magic_Ph.00451E38
00524724 . 8B45 E8 mov eax, dword ptr ss:[ebp-18] ; 这里提取假注册码
00524727 . 8D55 EC lea edx, dword ptr ss:[ebp-14]
0052472A . E8 0951EEFF call Magic_Ph.00409838
0052472F . 8B55 EC mov edx, dword ptr ss:[ebp-14]
.................
.................
.................
来到这里:
00524823 . 50 push eax ; 这里EAX出现假注册码
00524824 . 8D55 CC lea edx, dword ptr ss:[ebp-34]
00524827 . 8B45 FC mov eax, dword ptr ss:[ebp-4]
0052482A . 8B80 60030000 mov eax, dword ptr ds:[eax+360]
00524830 . E8 03D6F2FF call Magic_Ph.00451E38
00524835 . 8B45 CC mov eax, dword ptr ss:[ebp-34]
00524838 . 8D55 D0 lea edx, dword ptr ss:[ebp-30] ; 这里EAX出现假注册名
0052483B . E8 A03EFFFF call Magic_Ph.005186E0
00524840 . 8B55 D0 mov edx, dword ptr ss:[ebp-30]
00524843 . 58 pop eax
00524844 . E8 C70CEEFF call Magic_Ph.00405510 这里是关键call; 啊,太阳出来了!寄存器EAX出现假注册码,EDX显示真注册码.
00524849 . 0F85 AA010000 jnz Magic_Ph.005249F9 这里是关键跳转; 这里不能跳,一跳就注册失败。如爆破就nop掉.
0052484F . 8B45 FC mov eax, dword ptr ss:[ebp-4]
00524852 . C680 84030000>mov byte ptr ds:[eax+384], 1
00524859 . 8D55 C8 lea edx, dword ptr ss:[ebp-38]
0052485C . 8B45 FC mov eax, dword ptr ss:[ebp-4]
0052485F . 8B80 60030000 mov eax, dword ptr ds:[eax+360]
00524865 . E8 CED5F2FF call Magic_Ph.00451E38
0052486A . 8B55 C8 mov edx, dword ptr ss:[ebp-38]
在00524844关键Call处查看寄存器内容如下:
EAX 00C20508 ASCII "111111"
ECX 00C215F8
EDX 00BE3788 ASCII "8629-8369-6549-9792"
EBX 00BA93F0
ESP 0012EB48
EBP 0012EBDC
ESI 0043D900 Magic_Ph.0043D900
EDI 0012ED7C
EIP 00524844 Magic_Ph.00524844
好,现在我们来做个注册机:
打开keymake2.0,选制作内存注册机一项,
点:添加
中断地址 00524844
次数 1
指令 E8
长度 5
内存方式
寄存器 EDX
最后点生成,OK!收工。
--------------------------------------------------------------------------------
【经验总结】
这是一次成功的破解,不但找到了爆破点,而且还找到了注册码,最后生成注册机实现了软件的完全破解,心里好开心啊!
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2010年05月10日 21:12:34
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课