【加壳方式】Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks
【下载地址】http://www.sharebank.com.cn/soft/ClassList_10_2.htm
【操作系统】Windows XP
【破解工具】PEID,OllyDbg,LordPE,ImportREC
【破解声明】第一次学破解,望各位多多指教。破解完全出于兴趣,无任何商业目的。
由于是新学,在网上随便找个软件下手,没有找网上现成破解的例子.
1.用PEID载入程序邮箱密码.exe,显示为Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks加密
2.用OllyDbg 1.10版打开程序,用插件隐身OD,并且在 选项->调试设置->异常 里忽略所有异常。OD停在:
004D0243 > 55 push ebp
004D0244 |. 8BEC mov ebp, esp
004D0246 |. 6A FF push -1
004D0248 |. 68 409F4F00 push 004F9F40
004D024D |. 68 80FF4C00 push 004CFF80 ; SE 处理程序安装
004D0252 |. 64:A1 0000000>mov eax, dword ptr fs:[0]
004D0258 |. 50 push eax
004D0259 |. 64:8925 00000>mov dword ptr fs:[0], esp
004D0260 |. 83EC 58 sub esp, 58
004D0263 |. 53 push ebx
004D0264 |. 56 push esi
3、用命令行插件下断 BP OpenMutexA,按F9运行程序,得到的汇编代码如下:
7C80EA1B > 8BFF mov edi, edi ; ntdll.7C930738中断在这里!
7C80EA1D 55 push ebp
7C80EA1E 8BEC mov ebp, esp
7C80EA20 51 push ecx
7C80EA21 51 push ecx
7C80EA22 837D 10 00 cmp dword ptr [ebp+10], 0
7C80EA26 56 push esi
7C80EA27 0F84 66530300 je 7C843D93
7C80EA2D 64:A1 18000000 mov eax, dword ptr fs:[18]
7C80EA33 FF75 10 push dword ptr [ebp+10]
7C80EA36 8DB0 F80B0000 lea esi, dword ptr [eax+BF8]
OD右下角堆栈窗口,显示为:
0012F798 004BBDB8 /CALL 到 OpenMutexA 来自 邮箱密码.004BBDB2
0012F79C 001F0001 |Access = 1F0001
0012F7A0 00000000 |Inheritable = FALSE
0012F7A4 0012FDD8 \MutexName = "940::DA8E6EF256"
0012F7A8 7C930738 ntdll.7C930738
0012F7AC 00000000
0012F7B0 7FFDF000
4、Ctrl+G定位到00401000处,修改这一片连续地址内容,输入以下内容:
00401000 60 PUSHAD
00401001 9C PUSHFD
00401002 68 F0FB1200 PUSH 12FDD8 ;这是堆栈中看到的值
00401007 33C0 XOR EAX,EAX
00401009 50 PUSH EAX
0040100A 50 PUSH EAX
0040100B E8 2FDB407C CALL kernel32.CreateMutexA
00401010 9D POPFD
00401011 61 POPAD
00401012 - E9 04DC407C JMP kernel32.OpenMutexA
修改完后,在00401000处单击右键,选择此为新起源。然后按F9,再次回到断点:
7C80EA1B > 8BFF mov edi, edi ; ntdll.7C930738
7C80EA1D 55 push ebp
7C80EA1E 8BEC mov ebp, esp
7C80EA20 51 push ecx
7C80EA21 51 push ecx
7C80EA22 837D 10 00 cmp dword ptr [ebp+10], 0
7C80EA26 56 push esi
7C80EA27 0F84 66530300 je 7C843D93
7C80EA2D 64:A1 18000000 mov eax, dword ptr fs:[18]
5、按F2取消断点,Ctrl+G再次定位到00401000处,把刚才所做的修改再改回去.然后下断:BP GetModuleHandleA ,之后按F9继续运行
7C80B6A1 > 8BFF mov edi, edi 中断在这里,按F2取消这里
7C80B6A3 55 push ebp
7C80B6A4 8BEC mov ebp, esp
7C80B6A6 837D 08 00 cmp dword ptr [ebp+8], 0
7C80B6AA 74 18 je short 7C80B6C4 这里按F2下断!!
7C80B6AC FF75 08 push dword ptr [ebp+8]
7C80B6AF E8 C0290000 call 7C80E074
6.本人在走到这里的时候,在右下角堆栈窗口试着找了很多次,停止后按F2取消断点,然后Alt+F9返回,总是找不到关键的Magic Jump地方,只有一次找到Magic Jump地方并修改转移指令JE为JMP,修改之后我Alt+M查看内存,在00401000处点击右键,选择“设置内存访问断点”,然后按F9运行,看到一大片红色汇编代码,以为是真正的OEP了。但是在用LordPE选择进程单击右键选择dump full时提示错误.
7.在此想向高手请教我错在哪里,望高手指点迷津,谢谢!
[课程]Android-CTF解题方法汇总!