【文章标题】: 【原创】ASPr 2.1x不完全脱壳 + 动态调试注册码
【文章作者】: HappyTown
【软件名称】: IParmor 5.51
【下载地址】: happytown.ys168.com的共享文件夹内
【加壳方式】: ASPr 2.1x
【编写语言】: Delphi 5
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
1)请务必先阅读爱暴(loveboom)的大作:
穿透eXeCryptor 2.2x 保护体系(年终篇);
2)设置OllyDbg_Execryptor为just-in-time debugger,设置完后关闭之;
3)OllyICE载入IParmor后:
a. 按Shift + F9共33次(因为第34次就跑飞了)来到这里:
0100FAA5 >mov dword ptr [eax], 855CCAEF
0100FAAB >pop dword ptr fs:[0]
0100FAB1 >add esp, 4
0100FAB4 >sub eax, -51
0100FAB7 >or eax, 4B
0100FABA >pop eax
b. 按Alt + M打开内存镜像,在
地址 大小 属主 区段 包含
00401000 00189000 Iparmor 代码
这一行上右键->“设置内存访问断点”,Shift + F9后来到这里:
00588FB4 55 push ebp
00588FB5 8BEC mov ebp, esp
00588FB7 B9 04000000 mov ecx, 4
00588FBC 6A 00 push 0
00588FBE 6A 00 push 0
00588FC0 49 dec ecx
00588FC1 ^ 75 F9 jnz short 00588FBC
00588FC3 51 push ecx
00588FC4 53 push ebx
00588FC5 56 push esi
00588FC6 57 push edi
00588FC7 B8 CC865800 mov eax, 005886CC
00588FCC E8 9FE4E7FF call 00407470
然后删除内存断点。
c. 打开PE Tools->dump full,保存为dumped.exe,关闭OllyICE;
d. 用PEiD上一步的dumped.exe,得知程序为Delphi语言编写;
e. 用Resource Hacker打开dumped.exe,RC数据->TFORM7,查看到:
Caption = 'RegNow'
OnClick = SpeedButton1Click
d. 用DeDe打开dumped.exe,在Procedures中我们找到如下信息:
Unit Name Class Name | Events RVA Hint
Unit7 TForm7 | SpeedButton1Click 005876A8 18
由此得知“注册”按钮的事件地址为005876A8,记下它,后面要用到。
4)运行IParmor,点击“注册软件”,输入用户名称 happy 和注册码 7654321,点击“注册”,提示注册失败,点击“确定”,不要关闭这个窗口,让它留着;
5)运行Procexp,杀掉Iparmor除最上面的主线程以外的其它线程,然后在Procexp主界面中右击Iparmor->调试;
6)在调试器窗口中居然什么都没有显示,不用管它,在下面的命令行中输入 bp 5876A8,点击“注册”按钮。呵呵,断下来了:
005876A8 PUSH EBP
005876A9 MOV EBP,ESP
005876AB MOV ECX,26
005876B0 PUSH 0
005876B2 PUSH 0
005876B4 DEC ECX
005876B5 JNZ SHORT Iparmor.005876B0
005876B7 PUSH EBX
005876B8 PUSH ESI
005876B9 MOV EBX,EAX
005876BB XOR EAX,EAX
005876BD PUSH EBP
005876BE PUSH Iparmor.00587993
005876C3 PUSH DWORD PTR FS:[EAX]
005876C6 MOV DWORD PTR FS:[EAX],ESP
005876C9 LEA EDX,DWORD PTR SS:[EBP-8]
005876CC MOV ESI,DWORD PTR DS:[EBX+2E0]
005876D2 MOV EAX,ESI
005876D4 CALL Iparmor.00437BB8
005876D9 MOV EAX,DWORD PTR SS:[EBP-8] ; name
005876DC LEA EDX,DWORD PTR SS:[EBP-4]
005876DF CALL Iparmor.004096B8
005876E4 MOV EDX,DWORD PTR SS:[EBP-4] ; name
005876E7 MOV EAX,ESI
005876E9 CALL Iparmor.00437BE8
005876EE LEA EDX,DWORD PTR SS:[EBP-10]
005876F1 MOV ESI,DWORD PTR DS:[EBX+2D8]
005876F7 MOV EAX,ESI
005876F9 CALL Iparmor.00437BB8
005876FE MOV EAX,DWORD PTR SS:[EBP-10] ; sn
00587701 LEA EDX,DWORD PTR SS:[EBP-C]
00587704 CALL Iparmor.004096B8
00587709 MOV EDX,DWORD PTR SS:[EBP-C] ; sn
0058770C MOV EAX,ESI
0058770E CALL Iparmor.00437BE8
00587713 LEA EDX,DWORD PTR SS:[EBP-118]
00587719 MOV EAX,DWORD PTR DS:[EBX+2E0]
0058771F CALL Iparmor.00437BB8
00587724 MOV EAX,DWORD PTR SS:[EBP-118] ; name
0058772A LEA EDX,DWORD PTR SS:[EBP-114]
00587730 CALL Iparmor.00409474
00587735 MOV EDX,DWORD PTR SS:[EBP-114] ; name转换为大写:HAPPY
0058773B LEA EAX,DWORD PTR SS:[EBP-110]
00587741 MOV ECX,0FF
00587746 CALL Iparmor.0040422C
0058774B LEA EDX,DWORD PTR SS:[EBP-110] ; HAPPY
00587751 MOV EAX,DWORD PTR DS:[EBX+2D0]
00587757 CALL Iparmor.0049F8C8
0058775C LEA EDX,DWORD PTR SS:[EBP-11C]
00587762 MOV EAX,DWORD PTR DS:[EBX+2D8]
00587768 CALL Iparmor.00437BB8
0058776D MOV EAX,DWORD PTR SS:[EBP-11C] ; sn
00587773 PUSH EAX
00587774 MOV EAX,DWORD PTR DS:[EBX+2D0]
0058777A MOV EAX,DWORD PTR DS:[EAX+224]
00587780 ADD EAX,4EA
00587785 CDQ ; F489AB3:16进制的真正注册码,转换为10进制即可
00587786 XOR EAX,EDX
00587788 SUB EAX,EDX
0058778A LEA EDX,DWORD PTR SS:[EBP-120]
00587790 CALL Iparmor.004099A0
00587795 MOV EDX,DWORD PTR SS:[EBP-120] ; 256416435:10进制真正注册码字符串
0058779B POP EAX ; 假码:7654321
0058779C CALL Iparmor.00404360
005877A1 JNZ Iparmor.005878DE ; 判断是否注册成功
既然是明码比较,那我们就不追踪注册算法了。
--------------------------------------------------------------------------------
【经验总结】
聪明的你一定注意到了,上面没有修复IAT表,当然dump出来的文件也就不能运行,但没关系,我们dump它只是为了找到下
断点的地方而已。也就是说,不一定非要完整脱壳才能分析加了ASPr/EXECryptor等强壳的程序。
当然,也可以不用Resource Hacker和DeDe,而直接用W32DASM来查找demped.exe里的失败信息字符串,因为我们的目标是找
个下断的地方即可。呵呵,思路一定要灵活。
感谢爱暴,感谢看到这里的你。
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪软件安全论坛, 转载请注明作者并保持文章的完整, 谢谢!
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)