自己加的幻影2.33+Armadillo标准壳应该如何脱?
先加的幻影2.33,然后加的Armadillo标准壳。主要是想探讨脱壳方法
自己脱了n次都不成功,特请教大侠。
我是先脱Armadillo
OD载入程序,插件自动隐藏OD,忽略所有异常
010ADD5D n>/$ 55 push ebp //外壳入口
010ADD5E |. 8BEC mov ebp,esp
010ADD60 |. 6A FF push -1
010ADD62 |. 68 309A0C01 push notepad.010C9A30
010ADD67 |. 68 40D70A01 push notepad.010AD740 ; SE handler installation
010ADD6C |. 64:A1 00000000 mov eax,dword ptr fs:[0]
010ADD72 |. 50 push eax
010ADD73 |. 64:8925 00000000 mov dword ptr fs:[0],esp
010ADD7A |. 83EC 58 sub esp,58
命令行下断点 BP OpenMutexA,F9运行。
中断
7C80EC1B k> 8BFF mov edi,edi //
7C80EC1D 55 push ebp
7C80EC1E 8BEC mov ebp,esp
7C80EC20 51 push ecx
7C80EC21 51 push ecx
7C80EC22 837D 10 00 cmp dword ptr ss:[ebp+10],0
堆栈内容
0013D7A4 001F0001 |Access = 1F0001
0013D7A8 00000000 |Inheritable = FALSE
0013D7AC 0013DDE0 \MutexName = "F04::DADA53A618"
0013D7B0 0013FF2C
0013D7B4 00000000
0013D7B8 7FFD3000
找一块程序领空空地址,写入一些欺骗Arm的代码。
Ctrl+G 1001000
001001000 0000 ADD BYTE PTR DS:[EAX],AL //都是空地址。
.
.
.
OD直接双击修改,填入以下代码。
01001000 60 pushad
01001001 9C pushfd
01001002 68 E0DD1300 push 13DDE0 ; ASCII "E60::DADA53A618"
01001007 33C0 xor eax,eax
01001009 50 push eax
0100100A 50 push eax
0100100B E8 2FDB807B call kernel32.CreateMutexA
01001010 9D popfd
01001011 61 popad
01001012 - E9 04DC807B jmp kernel32.OpenMutexA
01001017 90 nop
.将当前的 Eip 7C80EC1B 切换到 1001000 来。
点右键 选在此处新建 Eip ,看到Eip 变为 401000
F9运行。
中断
7C80EC1B k> 8BFF mov edi,edi //双击它或F2清除断点
7C80EC1D 55 push ebp
7C80EC1E 8BEC mov ebp,esp
7C80EC20 51 push ecx
7C80EC21 51 push ecx
7C80EC22 837D 10 00 cmp dword ptr ss:[ebp+10],0
找 magic jmp 命令行下断点,bp GetModuleHandleA
7C80B529 k> 8BFF mov edi,edi//去掉断点,改为硬件执行
7C80B52B 55 push ebp
7C80B52C 8BEC mov ebp,esp
7C80B52E 837D 08 00 cmp dword ptr ss:[ebp+8],0
7C80B532 74 18 je short kernel32.7C80B54C
F9运行,多次硬件中断,注意堆栈值。
5次F9提示一个非法指令错误,Shift+F9忽略。
堆栈内容
00138A84 00BC9900 /CALL 到 GetModuleHandleA 来自 00BC98FA
00138A88 00138BC0 \pModule = "kernel32.dll"
点调试菜单,里面清除硬件断点。
Ctrl+F9 返回。
00BC98FA FF15 CCD0BE00 call dword ptr ds:[BED0CC] ; kernel32.GetModuleHandleA
00BC9900 8B0D 0881BF00 mov ecx,dword ptr ds:[BF8108]
00BC9906 89040E mov dword ptr ds:[esi+ecx],eax
00BC9909 A1 0881BF00 mov eax,dword ptr ds:[BF8108]
00BC990E 393C06 cmp dword ptr ds:[esi+eax],edi
00BC9911 75 16 jnz short 00BC9929
00BC9913 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]
00BC9919 50 push eax
00BC991A FF15 D4D0BE00 call dword ptr ds:[BED0D4] ; kernel32.LoadLibraryA
00BC9920 8B0D 0881BF00 mov ecx,dword ptr ds:[BF8108]
00BC9926 89040E mov dword ptr ds:[esi+ecx],eax
00BC9929 A1 0881BF00 mov eax,dword ptr ds:[BF8108]
00BC992E 393C06 cmp dword ptr ds:[esi+eax],edi
00BC9931 0F84 AD000000 je 00BC99E4===================//这是magic jmp,我改jmp
00BC9937 33C9 xor ecx,ecx
00BC9939 8B03 mov eax,dword ptr ds:[ebx]
清除所有断点。在401000段下内存断点,按F9
问题来了,程序不能跳转到oep!!!
od下方显示为 c:\windows\system32\msctf.dll
然后程序长时间都没反应了,不能到oep,不能dump,该怎么办???
附件:notepad.part1.rar 附件:notepad.part2.rar
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课