首页
社区
课程
招聘
[旧帖] [求助]UPX+EXEStealth双重壳问题 0.00雪花
发表于: 2008-9-28 19:08 4119

[旧帖] [求助]UPX+EXEStealth双重壳问题 0.00雪花

2008-9-28 19:08
4119
自己随便用VB写了个程序,然后出于好奇,给他加了个UPX的壳(UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo)然后又继续给他加上个EXEStealth的壳(EXEStealth 2.72 - 2.73 -> WebToolMaster)试着运行了一下程序,能够正常运行!
加好壳后就准备试着脱壳.UPX的壳能用EXP脱掉,EXEStealth的壳也能利用前辈的经验脱掉!不过两个壳一起加上后问题就来了!加双重壳后查出来的是EXEStealth的壳!
我首先用OD载入程序,提示:模块 'a' 的快速统计报告表明其代码段可能被压缩, 加密, 或包含大量的嵌入数据. 代码分析将是非常不可靠或完全错误的. 您仍要继续分析吗?选择否!
 

0041B060 > /EB 00           jmp     short 0041B062    ;载入后停在这里
0041B062   \EB 2F           jmp     short 0041B093
0041B064    53              push    ebx
0041B065    68 61726577     push    77657261
0041B06A    61              popad
0041B06B    72 65           jb      short 0041B0D2
0041B06D    202D 20457865   and     byte ptr [65784520], ch
0041B073    53              push    ebx
0041B074    74 65           je      short 0041B0DB
0041B076    61              popad
0041B077    6C              ins     byte ptr es:[edi], dx
0041B078    74 68           je      short 0041B0E2
0041B07A    00EB            add     bl, ch
0041B07C    16              push    ss

异常做的如下设置:

 

然后shift+F9运行一次后停在了这里

0041B189    8BEF            mov     ebp, edi    ;停在这里
0041B18B    33DB            xor     ebx, ebx
0041B18D    64:8F03         pop     dword ptr fs:[ebx]
0041B190    83C4 04         add     esp, 4
0041B193    3C 04           cmp     al, 4
0041B195    74 05           je      short 0041B19C
0041B197    EB 01           jmp     short 0041B19A
0041B199  - E9 61C38B85     jmp     85CD74FF
0041B19E    B6 2F           mov     dh, 2F
0041B1A0    40              inc     eax
0041B1A1    0003            add     byte ptr [ebx], al
0041B1A3    40              inc     eax
0041B1A4    3C 05           cmp     al, 5
0041B1A6    8000 00         add     byte ptr [eax], 0
0041B1A9    008B 08038DB6   add     byte ptr [ebx+B68D0308], cl

再使用BP IsDebuggerPresent 命令下断点,之后接着shift+F9运行

7C813123 >  64:A1 18000000  mov     eax, dword ptr fs:[18]    ;中断在这里
7C813129    8B40 30         mov     eax, dword ptr [eax+30]
7C81312C    0FB640 02       movzx   eax, byte ptr [eax+2]
7C813130    C3              retn
7C813131    90              nop
7C813132    90              nop
7C813133    90              nop
7C813134    90              nop
7C813135    90              nop
7C813136    8BFF            mov     edi, edi
7C813138    55              push    ebp
7C813139    8BEC            mov     ebp, esp
7C81313B    56              push    esi
7C81313C    8B75 08         mov     esi, dword ptr [ebp+8]
7C81313F    8B06            mov     eax, dword ptr [esi]
7C813141    85C0            test    eax, eax
7C813143    57              push    edi

取消断点后继续shift+F9运行两次到了这里

0041B7F2    0000            add     byte ptr [eax], al
0041B7F4    0000            add     byte ptr [eax], al
0041B7F6    0000            add     byte ptr [eax], al
0041B7F8    0000            add     byte ptr [eax], al

这时堆栈为
0012FFBC   0012FFE0  指向下一个 SEH 记录的指针
0012FFC0   0041B795  SE处理程序
0012FFC4   7C817067  返回到 kernel32.7C817067

按ctrl+G转到0041B795 后下断点,再继续shift+F9运行

0041B795    55              push    ebp    ;断点到此处后F8单步走
0041B796    8BEC            mov     ebp, esp
0041B798    57              push    edi
0041B799    8B45 10         mov     eax, dword ptr [ebp+10]
0041B79C    8BB8 C4000000   mov     edi, dword ptr [eax+C4]
0041B7A2    FF37            push    dword ptr [edi]
0041B7A4    33FF            xor     edi, edi
0041B7A6    64:8F07         pop     dword ptr fs:[edi]
0041B7A9    8380 C4000000 0>add     dword ptr [eax+C4], 8
0041B7B0    8BB8 A4000000   mov     edi, dword ptr [eax+A4]
0041B7B6    C1C7 07         rol     edi, 7
0041B7B9    89B8 B8000000   mov     dword ptr [eax+B8], edi
0041B7BF    B8 00000000     mov     eax, 0
0041B7C4    5F              pop     edi    ;直到这里停
0041B7C5    C9              leave
0041B7C6    C3              retn

到0041B795    后一直单步走,一直到0041B7C4    5F              pop     edi  这里后停下来!
信息面板提示:
堆栈 [0012FBE4]=00000000
edi=004130E0 (a.004130E0)

这里edi应该就是oep了,ctrl+G 转到004130E0下断点,再shift+F9运行到这后脱壳,检查了下脱壳出来的程序,提示被加了UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo的壳!试着运行了下,不能运行。然后我又用上面的方法脱了一遍,这次到了
004130E0    60              pushad
这里后没有脱壳,继续用ESP定律脱UPX的壳,F8后到了
004130E1    BE 00E04000     mov     esi, 0040E000
这时寄存器的ESP为红色显示,右击ESP选择数据窗口中跟随,数据面板变成了
0012FFA4  0012BEF4
0012FFA8  7C92E900  ntdll.7C92E900
0012FFAC  0012FFF0
0012FFB0  0012FFC4
然后右击0012FFA4  0012BEF4下硬件访问断点word后F9运行,到了
7C81CB09    E8 46FFFFFF     call    7C81CA54    ;在这里被断下来了
7C81CB0E    E9 9ACF0100     jmp     7C839AAD
7C81CB13    90              nop
7C81CB14    90              nop
7C81CB15    90              nop
7C81CB16    90              nop
7C81CB17    90              nop
7C81CB18  - FF25 0414807C   jmp     dword ptr [<&ntdll.LdrShutdownPr>; ntdll.LdrShutdownProcess
7C81CB1E    90              nop
7C81CB1F    90              nop
删除硬件断点后用F8单步,转到了
7C92E4F4 >  C3              retn      ;停在这里
7C92E4F5    8DA424 00000000 lea     esp, dword ptr [esp]
7C92E4FC    8D6424 00       lea     esp, dword ptr [esp]
7C92E500 >  8D5424 08       lea     edx, dword ptr [esp+8]
7C92E504    CD 2E           int     2E
7C92E506    C3              retn
7C92E507    90              nop
7C92E508 >  55              push    ebp
7C92E509    8BEC            mov     ebp, esp
7C92E50B    9C              pushfd
7C92E50C    81EC D0020000   sub     esp, 2D0

之后进程终止!

我把第一次脱出来的程序单独用ESP定律脱壳也是一样的情况,不知道是哪里错了,请高手指点下!我OD已隐藏!

补充说明:
在脱掉ExeStealth壳后我使用importREC修复过,也不能运行!

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
  • 1.jpg (11.81kb,76次下载)
收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 9
活跃值: (132)
能力值: ( LV12,RANK:200 )
在线值:
发帖
回帖
粉丝
2
并没回到主线程
2008-9-29 03:19
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
能说详细点麽
2008-9-29 13:13
0
游客
登录 | 注册 方可回帖
返回
//