首页
社区
课程
招聘
xp变X王不完全脱壳。
发表于: 2005-5-15 16:56 4260

xp变X王不完全脱壳。

2005-5-15 16:56
4260
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直播授课

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 898
活跃值: (4054)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
2
里面还有远程跳转、CC
2005-5-15 16:58
0
游客
登录 | 注册 方可回帖
返回