xp变X王不完全脱壳。
使用fly修改版OllyDbg,设置OllyDbg忽略所有其它异常选项。用IsDebug插件去掉OllyDbg的调试器标志。
―――――――――――――――――――――――――――――――――
1、寻找OEP+Dump
0077C413 X>/$ 55 push ebp=》进入OllyDbg后暂停在这
0077C414 |. 8BEC mov ebp,esp
0077C416 |. 6A FF push -1
0077C418 |. 68 F86E7A00 push XPStyle.007A6EF8
0077C41D |. 68 50C17700 push XPStyle.0077C150 ; SE handler installation
0077C422 |. 64:A1 00000000 mov eax,dword ptr fs:[0]
0077C428 |. 50 push eax
0077C429 |. 64:8925 00000000 mov dword ptr fs:[0],esp
0077C430 |. 83EC 58 sub esp,58
0077C433 |. 53 push ebx
0077C434 |. 56 push esi
0077C435 |. 57 push edi
0077C436 |. 8965 E8 mov dword ptr ss:[ebp-18],esp
0077C439 |. FF15 88117A00 call dword ptr ds:[<&KERNEL32.GetVersion>] ; kernel32.GetVersion
0077C43F |. 33D2 xor edx,edx
BP WaitForDebugEvent
中断后取消断点,看堆栈:
0012BCBC 0076C60F /CALL 到 WaitForDebugEvent 来自 XPStyle.0076C609
0012BCC0 0012CD90 |pDebugEvent = 0012CD90
0012BCC4 000003E8 \Timeout = 1000. ms
接着下断:BP WriteProcessMemory
现在去代码窗口Ctrl+G:0076C60F
Ctrl+F在当前位置下搜索命令:or eax,0FFFFFFF8
找到第一处在0076CBDF处,在其上cmp dword ptr ss:[ebp-A34],0处设置断点。
0076CB93 > \83BD CCF5FFFF 00 cmp dword ptr ss:[ebp-A34],0 =》下断,Shift+F9中断下来 把Stack ss:[0012CD7C]=00000273清0
0076CB9A . /0F8C A8020000 jl XPStyle.0076CE48
0076CBA0 . |8B8D CCF5FFFF mov ecx,dword ptr ss:[ebp-A34]
0076CBA6 . |3B0D 20837A00 cmp ecx,dword ptr ds:[7A8320]=》注意[7A8320]
0076CBAC . |0F8D 96020000 jge XPStyle.0076CE48 =》解码结束后跳转0076CE48 在0076CE48处下断
0076CBFA . 83CA F8 or edx,FFFFFFF8 =》找到这里
0076CBFD . 42 inc edx
0076CBFE > 33C0 xor eax,eax
0076CC00 . 8A82 315D7A00 mov al,byte ptr ds:[edx+7A5D31]
0076CC06 . 8B3C8D 70137A00 mov edi,dword ptr ds:[ecx*4+7A1370]
0076CC0D . 333C85 70137A00 xor edi,dword ptr ds:[eax*4+7A1370]
0076CC14 . 8B8D CCF5FFFF mov ecx,dword ptr ss:[ebp-A34]
0076CC1A . 81E1 07000080 and ecx,80000007
0076CC20 . 79 05 jns short XPStyle.0076CC27
0076CC22 . 49 dec ecx
0076CC23 . 83C9 F8 or ecx,FFFFFFF8
0076CC26 . 41 inc ecx
0076CC27 > 33D2 xor edx,edx
0076CC29 . 8A91 325D7A00 mov dl,byte ptr ds:[ecx+7A5D32]
0076CC2F . 333C95 70137A00 xor edi,dword ptr ds:[edx*4+7A1370]
0076CC36 . 8B85 CCF5FFFF mov eax,dword ptr ss:[ebp-A34]
0076CC3C . 99 cdq
0076CC3D . B9 1C000000 mov ecx,1C
0076CC42 . F7F9 idiv ecx
0076CC44 . 8BCA mov ecx,edx
0076CC46 . D3EF shr edi,cl
0076CC48 . 83E7 0F and edi,0F
0076CC4B . 03F7 add esi,edi
0076CC4D . 8B15 04837A00 mov edx,dword ptr ds:[7A8304]
0076CC53 . 8D04B2 lea eax,dword ptr ds:[edx+esi*4]
0076CC56 . 50 push eax
0076CC57 . 8B8D CCF5FFFF mov ecx,dword ptr ss:[ebp-A34]
0076CC5D . 51 push ecx
0076CC5E . E8 B0200000 call XPStyle.0076ED13
0076CC63 . 83C4 0C add esp,0C
0076CC66 . 25 FF000000 and eax,0FF=》这里Patch
0076CC6B . 85C0 test eax,eax
0076CC6D . 0F84 D5010000 je XPStyle.0076CE48
Patch代码:
0076CC66 FF85 CCF5FFFF inc dword ptr ss:[ebp-A34]
0076CC6C C705 24837A00 01000000 mov dword ptr ds:[7A8324],1
0076CC76 ^ E9 18FFFFFF jmp XPStyle.0076CB93
Shift+F9,中断在上面BP WriteProcessMemory断点处。看右下窗口:
0012CD90 |00000001
0012CD94 |00000E98
0012CD98 |00000E9C
0012CD9C |80000001
0012CDA0 |00000000
0012CDA4 |00000000
0012CDA8 |00674110 XPStyle.00674110
0012CDAC |00000002
0012CDB0 |00000000
0012CDB4 |00674110 XPStyle.00674110
0012CDB8 |00674110 XPStyle.00674110
0012CDBC |00000001
很明显可以看到OEP=00674110
取消WriteProcessMemory处断点,继续Shift+F9,中断在0076CB93处
此时子进程代码已经解开,运行LordPE,完全Dump出子进程,保存为dump.exe
2、魔法跳
载入dump.exe
下断:BP DebugActiveProcess 中断后看堆栈:
0012BCC0 0076C46A /CALL 到 DebugActiveProcess 来自 XPStyle.0076C464
0012BCC4 00000CA4 \ProcessId = CA4 =》子程序的ProcessId
新开一个OllyDbg,附加进程ID CA4的子进程
F9,再F12,会暂停在EP处
0077C413 X>/$- EB FE jmp short XPStyle.<ModuleEntryPoint>=》恢复原来EP处的代码:55 8B
切换单进程。BP OpenMutexA Shift+F9,中断后看堆栈:
0012D7AC 00768038 /CALL 到 OpenMutexA 来自 XPStyle.00768032
0012D7B0 001F0001 |Access = 1F0001
0012D7B4 00000000 |Inheritable = FALSE
0012D7B8 0012DDEC \MutexName = "CA4::DAD202B65B" =》注意0012DDEC
Ctrl+G:401000 键入以下分离代码
00401000 60 pushad
00401001 9C pushfd
00401002 68 ECDD1300 push 12DDEC =》堆栈里看到的值
00401007 33C0 xor eax,eax
00401009 50 push eax
0040100A 50 push eax
0040100B E8 2FDB407C call 7C80EB3F ;
kernel32.CreateMutexA
00401010 9D popfd
00401011 61 popad
00401012 E9 04DC407C jmp 7C80EC1B ;
kernel32.OpenMutexA
60 9C 68 EC DD 12 00 33 C0 50 50 E8 2F DB 40 7C 9D 61 E9 04 DC
40 7C
在401000处新建EIP,F9运行,再次中断在OpenMutexA处。
返回401000处,“撤销选择”,清掉写入的代码。再取消OpenMutexA断点。
下断:HE GetModuleHandleA 按2下Shift+F9,注意看堆栈:
0012D750 00767173 /CALL 到 GetModuleHandleA 来自 XPStyle.0076716D
0012D754 00000000 \pModule = NULL
堆栈如上时,取消GetModuleHandleA处断点,Alt+F9返回
0076716D |. FF15 4C107A00 call dword ptr ds:[<&KERNEL32.GetModuleHandleA>] ; \GetModuleHandleA
//返回这里
00767173 |. 8945 A4 mov dword ptr ss:[ebp-5C],eax ; XPStyle.00400000
00767176 |> 8B55 A4 mov edx,dword ptr ss:[ebp-5C]
00767179 |. 8955 E4 mov dword ptr ss:[ebp-1C],edx
0076717C |. A1 6C137A00 mov eax,dword ptr ds:[7A136C]
00767181 |. 8945 E8 mov dword ptr ss:[ebp-18],eax
00767184 |. C745 EC FFFFFFFF mov dword ptr ss:[ebp-14],-1
0076718B |. 8D4D C4 lea ecx,dword ptr ss:[ebp-3C]
0076718E |. 51 push ecx
0076718F |. FF55 F0 call dword ptr ss:[ebp-10]
00767192 |. 83C4 04 add esp,4
00767195 |. 8945 FC mov dword ptr ss:[ebp-4],eax
00767198 |. 837D EC FF cmp dword ptr ss:[ebp-14],-1
0076719C |. 74 0B je short XPStyle.007671A9
0076719E |. 8B55 EC mov edx,dword ptr ss:[ebp-14]
007671A1 |. 8915 F4827A00 mov dword ptr ds:[7A82F4],edx
007671A7 |. EB 10 jmp short XPStyle.007671B9
007671A9 |> 837D FC 01 cmp dword ptr ss:[ebp-4],1
007671AD |. 74 0A je short XPStyle.007671B9
007671AF |. C705 F4827A00 01000000 mov dword ptr ds:[7A82F4],1
007671B9 |> 837D B0 00 cmp dword ptr ss:[ebp-50],0
007671BD |. 74 0A je short XPStyle.007671C9
//Magic Jump! 修改为:jmp 007671C9 ★
007671BF |. 8B45 B0 mov eax,dword ptr ss:[ebp-50]
007671C2 |. 50 push eax
3、输入表
我不会。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课