脱壳在fly兄弟教程指导下完成,在此感谢!用OD载入需要脱壳的DLL文件,完成初始化。
10030000 55 push ebp
10030001 8BEC mov ebp,esp
10030003 83EC 0C sub esp,0C
10030006 8B45 10 mov eax,dword ptr ss:[ebp+10]
10030009 50 push eax
1003000A E8 0B680200 call <jmp.&MSVCRT.operator new>
下断点:HE GetModuleHandleA,必须下硬件断点。
重新启动OD。
==================================================================================
---Magic Jump---
到这里断下了。
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
==============================================================
0006EAC4 77C079B2 /CALL 到 GetModuleHandleA 来自 77C079AC
0006EAC8 77BE31BC \pModule = "kernel32.dll"
0006BB3C 0098F613 /CALL 到 GetModuleHandleA 来自 0098F60D
0006BB40 009A0B58 \pModule = "kernel32.dll"
0006BB44 009A1BB4 ASCII "VirtualAlloc"
0006BB3C 0098F630 /CALL 到 GetModuleHandleA 来自 0098F62A
0006BB40 009A0B58 \pModule = "kernel32.dll"
0006BB44 009A1BA8 ASCII "VirtualFree"
Shift+F9
0006B8B4 00979705 /CALL 到 GetModuleHandleA 来自 009796FF
0006B8B8 0006B9F0 \pModule = "kernel32.dll"
删除硬件断点,Alt+F9,返回到这里。
00979705 8B0D C04C9A00 mov ecx,dword ptr ds:[9A4CC0]
0097970B 89040E mov dword ptr ds:[esi+ecx],eax
0097970E A1 C04C9A00 mov eax,dword ptr ds:[9A4CC0]
00979713 393C06 cmp dword ptr ds:[esi+eax],edi
00979716 75 16 jnz short 0097972E
00979718 8D85 B4FEFFFF lea eax,dword ptr ss:[ebp-14C]
0097971E 50 push eax
0097971F FF15 D0B09900 call dword ptr ds:[99B0D0] ; kernel32.LoadLibraryA
00979725 8B0D C04C9A00 mov ecx,dword ptr ds:[9A4CC0]
0097972B 89040E mov dword ptr ds:[esi+ecx],eax
0097972E A1 C04C9A00 mov eax,dword ptr ds:[9A4CC0]
00979733 393C06 cmp dword ptr ds:[esi+eax],edi
00979736 0F84 AD000000 je 009797E9 ; Magic Jump! 修改为:jmp 009797E9
0097973C 33C9 xor ecx,ecx
0097973E 8B03 mov eax,dword ptr ds:[ebx]
00979740 3938 cmp dword ptr ds:[eax],edi
00979742 74 06 je short 0097974A
===================================================================================
----OEP---
下断:BP _set_new_handler ,F9。
77BF9D0D m> 8BFF mov edi,edi
77BF9D0F 55 push ebp
77BF9D10 8BEC mov ebp,esp
77BF9D12 56 push esi
77BF9D13 6A 04 push 4
77BF9D15 E8 A1080100 call msvcrt._lock
中断后取消断点,Alt+F9返回,返回到这里。
100461B7 83C4 04 add esp,4
100461BA 837D FC 01 cmp dword ptr ss:[ebp-4],1
100461BE 75 0E jnz short AppClien.100461CE
100461C0 68 28340710 push AppClien.10073428
100461C5 FF15 4C340710 call dword ptr ds:[1007344C]
100461CB 83C4 04 add esp,4
100461CE 8B45 FC mov eax,dword ptr ss:[ebp-4]
100461D1 8BE5 mov esp,ebp
100461D3 5D pop ebp
100461D4 C3 retn
来到这里。
10046242 8945 FC mov dword ptr ss:[ebp-4],eax
10046245 837D FC 01 cmp dword ptr ss:[ebp-4],1
10046249 75 40 jnz short AppClien.1004628B
1004624B 833D 44340710 >cmp dword ptr ds:[10073444],0
10046252 74 30 je short AppClien.10046284
10046254 68 68360710 push AppClien.10073668
10046259 6A 01 push 1
1004625B 8B0D 10340710 mov ecx,dword ptr ds:[10073410] ; AppClien.10000000
10046261 51 push ecx
10046262 FF15 44340710 call dword ptr ds:[10073444] ; 飞向光明之巅(fly名言)
进来后。
10005398 55 push ebp ; OEP在招手!
10005399 8BEC mov ebp,esp
1000539B 53 push ebx
1000539C 8B5D 08 mov ebx,dword ptr ss:[ebp+8]
1000539F 56 push esi
100053A0 8B75 0C mov esi,dword ptr ss:[ebp+C]
100053A3 57 push edi
100053A4 8B7D 10 mov edi,dword ptr ss:[ebp+10]
100053A7 85F6 test esi,esi
100053A9 75 09 jnz short AppClien.100053B4
===================================================================================
---Code Splicing修复---
Alt+M,打开内存窗口,选择:物主=AppClien。
1、记下这个DLL的text段地址、大小,填到ArmInline。
内存映射,项目 41
地址=10001000
大小=0001A000 (106496.)
物主=AppClien 10000000
区段=.text
类型=Imag 01001002
访问=R
初始访问=RWE
2、找大小=10000~20000的行, 访问=RWE或访问=R E,初始访问=RWE,类型=Priv 。 一般有Code Splicing都具备这些条件。
内存映射,项目 40
地址=02210000
大小=0001D000 (118784.)
物主= 02210000 (自身)
区段=
类型=Priv 00021040
访问=RWE
初始访问=RWE
2、找大小=10000~20000的行, 访问=RWE或访问=R E,初始访问=RWE,类型=Priv 。
一般有Code Splicing都具备这些条件。
地址=02210000、大小=0001D000 填到ArmInline。
3、文件--->附加---->PID填到ArmInline。"Remove Splices"OK,Code Splicing修复结束。
===================================================================================
---Import Table Elimination修复---
数据窗口,Ctrl+G:389000
IAT头
00389814 001C0746 UNICODE " Country"
00389818 7C812C8D kernel32.GetCommandLineA
0038981C 7C832E2B kernel32.LCMapStringA
00389820 0097A733
00389824 77EFC449 GDI32.TextOutA
00389828 7C801A24 kernel32.CreateFileA
。。。。。。。。。。
00389E50 7C882FC4 kernel32.LoadLibraryA
00389E54 0097A60E
00389E58 77D1EEA2 USER32.RemovePropA
00389E5C 7C809BF5 kernel32.TlsSetValue
00389E60 77F0F27C GDI32.OffsetViewportOrgEx
00389E64 77EF9012 GDI32.ExtTextOutA
00389E68 71A2664D WS2_32.WSAStartup
00389E6C ABABABAB
IAT尾
Size:00389E68-00389818=650
选择空地在10070000。填到ArmInline。

==================================================================================
打开LordPE,选loaddll.exe,在下部窗口选脱壳的DLL,完整转存。
打开RecImport,选loaddll.exe,再选取DLL。

OEP=5398
RVA=70000
Size=1000
获取输入表,切掉无效指针,得到392个指针,修复抓取文件。
另开一个OD,载入脱壳后文件,F9,运行正常。呵呵,补充一下,用PEID查还是ARM,在PE后一点找到5352改成0000。
存在问题,还不会优化DLL,谁会教我一下,谢谢了!