能力值:
( LV2,RANK:10 )
|
-
-
2 楼
你的教程怎么和我的不一样,能告一下你的教程下载地址吗?下面是我用的教程,请楼主参照一下,在练习中我也遇到个问题,请大家帮忙:
大家好,我是wynney,今天给大家做一个“穿山甲”(Armadillo)的动画
目标程序是网吧游戏管理系统(客户端) 1.31,大家首先要知道它是双进程的还是单进程的
运行原程序,打开任务管理器或者是LordPE查看进程,发现有两个一样的进程,所以确认它是双进程的壳
首先用PEID查壳:Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks [Overlay]
用OD载入,忽略所有异常,隐藏OD
004A0379 网吧>/$ 55 push ebp //程序入口
004A037A |. 8BEC mov ebp,esp
004A037C |. 6A FF push -1
004A037E |. 68 78524C00 push 网吧游戏.004C5278
004A0383 |. 68 60FD4900 push 网吧游戏.0049FD60 ; SE 句柄安装
首先需要把双进程转换成单进程,这要通过OpenMutexA断点来完成!
下断bp OpenMutexA,回车,Shift+F9!
断下后Ctrl+G:00401000,键入以下代码
00401000 60 pushad
00401001 9C pushfd
00401002 68 F0FB1200 push 12FBF0 ; ASCII "5B4::DAEBBBBF8D" //堆栈显示的值
00401007 33C0 xor eax,eax
00401009 50 push eax
0040100A 50 push eax
0040100B E8 B5A6A577 call kernel32.CreateMutexA
00401010 9D popfd
00401011 61 popad
00401012 - E9 7A13A677 jmp kernel32.OpenMutexA
二进制代码
60 9C 68 F0 FB 12 00 33 C0 50 50 E8 B5 A6 A5 77 9D 61 E9 7A 13 A6 77
新建EIP--Shift+F9再次中断--F2取消断点(按演示动画此处应为红色,但我的电脑上显示的为绿色,??????)--Ctrl+G:00401000 撤消修改
********************************************************************************************
已经把双进程转换成单进程了,接下来需要避开输入表加密
也就是要找我们说的Magic Jump了
he GetModuleHandleA+5,Shift+F9(运行到这一步,我的电脑提示运行错误,以下步骤在我的电脑上无法实现?????)
77E5AD8B /0F84 37010000 je kernel32.77E5AEC8 //断下!注意观察堆栈!
77E5AD91 |FF7424 04 push dword ptr ss:[esp+4]
77E5AD95 |E8 F8050000 call kernel32.77E5B392
77E5AD9A |85C0 test eax,eax
77E5AD9C |74 08 je short kernel32.77E5ADA6
下面是每一次F9时候,堆栈显示的情况
0012ECE4 77C059FC 返回到 msvcrt.77C059FC 来自 kernel32.GetModuleHandleA
0012ECE8 77BE31AC ASCII "kernel32.dll"
0012ECEC 77C2CA20 msvcrt.77C2CA20
0012ECF0 00000000
0012EDA8 631C9C01 返回到 SHLWAPI.631C9C01 来自 kernel32.GetModuleHandleA
0012EDAC 6318D3D0 ASCII "KERNEL32.DLL"
0012EDB0 00000000
0012EDB4 63180000 SHLWAPI.63180000
0012ECD0 770FB124 返回到 OLEAUT32.770FB124 来自 kernel32.GetModuleHandleA
0012ECD4 771722E4 ASCII "KERNEL32.DLL"
0012ECD8 770FAD56 返回到 OLEAUT32.770FAD56 来自 OLEAUT32.770FB119
0012ECDC 77172080 OLEAUT32.77172080
0012ECCC 770FB124 返回到 OLEAUT32.770FB124 来自 kernel32.GetModuleHandleA
0012ECD0 771722E4 ASCII "KERNEL32.DLL"
0012ECD4 770FADAC 返回到 OLEAUT32.770FADAC 来自 OLEAUT32.770FB119
0012ECD8 77172064 OLEAUT32.77172064
0012F55C 00496073 返回到 网吧游戏.00496073 来自 kernel32.GetModuleHandleA
0012F560 00000000
0012F564 7FFDEBF8
0012C280 003C5331 返回到 003C5331 来自 kernel32.GetModuleHandleA //取消断点,Alt+F9!
0012C284 0012C3BC ASCII "kernel32.dll"
0012C288 00000002
003C5331 8B0D 60D83E00 mov ecx,dword ptr ds:[3ED860] //返回到这里
003C5337 89040E mov dword ptr ds:[esi+ecx],eax
003C533A A1 60D83E00 mov eax,dword ptr ds:[3ED860]
003C533F 393C06 cmp dword ptr ds:[esi+eax],edi
003C5342 75 16 jnz short 003C535A
003C5344 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]
003C534A 50 push eax
003C534B FF15 B8503E00 call dword ptr ds:[3E50B8] ; kernel32.LoadLibraryA
003C5351 8B0D 60D83E00 mov ecx,dword ptr ds:[3ED860]
003C5357 89040E mov dword ptr ds:[esi+ecx],eax
003C535A A1 60D83E00 mov eax,dword ptr ds:[3ED860]
003C535F 393C06 cmp dword ptr ds:[esi+eax],edi
003C5362 0F84 AD000000 je 003C5415 //Magic Jump,改JMP
003C5368 33C9 xor ecx,ecx
003C536A 8B03 mov eax,dword ptr ds:[ebx]
003C536C 3938 cmp dword ptr ds:[eax],edi
003C536E 74 06 je short 003C5376
003C5370 41 inc ecx
003C5371 83C0 0C add eax,0C
003C5374 ^ EB F6 jmp short 003C536C
003C5376 8BC1 mov eax,ecx
003C5378 C1E0 02 shl eax,2
修改完Magic Jump之后,打开内存镜像,在00401000段F2下断!Shift+F9,直达OEP!全部是红色!
00480ABC 55 push ebp //OEP=80ABC,LordPE纠正大小DUMP!
00480ABD 8BEC mov ebp,esp
00480ABF 83C4 F0 add esp,-10
00480AC2 53 push ebx
00480AC3 56 push esi
00480AC4 B8 B4084800 mov eax,gamemana.004808B4
00480AC9 E8 C65DF8FF call gamemana.00406894
00480ACE 8B1D E0224800 mov ebx,dword ptr ds:[4822E0] ; gamemana.00483C60
00480AD4 8B35 EC224800 mov esi,dword ptr ds:[4822EC] ; gamemana.00483D08
00480ADA 8B03 mov eax,dword ptr ds:[ebx]
OD,不要关闭,打开Import 1.6在OEP处填80ABC(00480ABC-00400000),自动搜索IAT--获取输入表--显示无效函数--13个无效指针--全部直接CUT掉
另外大家看一下OEP处的代码就应该明白这个是Delphi写的程序了
先运行下脱壳修复后的程序,看看能够不能够正常运行,再用PEID查下壳,Borland Delphi 6.0 - 7.0
|
能力值:
( LV9,RANK:1140 )
|
-
-
3 楼
楼上说的我也学习过了,我试脱是成功的,请注意OD的设置和其他的问题,有时候,即使是一模一样的教程,也会得出不同的结果,楼上的朋友多加练习,不要死盯在一棵树上!
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
地址是http://bbs.pediy.com/showthread.php?threadid=10131
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
kernel32.OpenMutexA
kernel32.CreateMutexA
这种语句的十六进制编码应该怎么找?
|
能力值:
( LV9,RANK:1250 )
|
-
-
6 楼
在OD里bp下就知道地址了。
比如bp CreateMutexA,然后查看Ctrl+B(断点),那个地址就是你系统上的。
|
能力值:
( LV9,RANK:970 )
|
-
-
7 楼
双转单用这里的法子好点:)
http://bbs.pediy.com/showthread.php?t=41185
|