首页
社区
课程
招聘
[旧帖] [原创]脱掉了一个不知名的壳,一起讨论一下 0.00雪花
2007-12-12 15:54 4318

[旧帖] [原创]脱掉了一个不知名的壳,一起讨论一下 0.00雪花

2007-12-12 15:54
4318
朋友给了我一个名叫“傀儡僵尸VIP1.4”的程序,说这个壳他脱不掉想让我看看,于是,我尝试着把这个壳脱掉了。
加壳信息:
文件名:傀儡僵尸VIP1.4.exe
PEiD:
入口点  :00045100
文件偏移:00016500
EP段   :.rdata
首字节  :60,BE,00,F0
加壳名称:“什么都没找到”

用PEiD查不出是什么壳,用OD打开显示出错,不过用OllyICE可以直接打开。可以用LoadPE先修复pe头。

用OllyICE载入后,入口是PUSHAD,然后找到了POPAD后,在445C6F处看到了一个段大跳,跳向441000这个地址。如下(如何找到POPAD就不用赘述了吧,会手动脱壳的都能找到这里,呵呵 ):

00445100 >  60                         pushad
00445101    BE 00F04200          mov     esi, 0042F000
00445106    8DBE 0020FDFF      lea     edi, dword ptr [esi+FFFD2000]
0044510C    57                          push    edi
0044510D    89E5                      mov     ebp, esp
0044510F    8D9C24 80C1FFFF lea     ebx, dword ptr [esp-3E80]
00445116    31C0                      xor     eax, eax
00445118    50                          push    eax
00445119    39DC                     cmp     esp, ebx
0044511B  ^ 75 FB                    jnz     short 00445118




00445C60    58                         pop     eax
00445C61    61                         popad
00445C62    8D4424 80            lea     eax, dword ptr [esp-80]
00445C66    6A 00                    push    0
00445C68    39C4                     cmp     esp, eax
00445C6A  ^ 75 FA                   jnz     short 00445C66
00445C6C    83EC 80                sub     esp, -80
00445C6F  ^ E9 8CB3FFFF        jmp     00441000
00445C74    0000                     add     byte ptr [eax], al

到了441000处,往下步过一个call,到达44100D处的一个JMP跳走,如下:

00441000    68 E4274400     push    004427E4
00441005    E8 B8150000     call    004425C2
0044100A    8B6D 00             mov     ebp, dword ptr [ebp]
0044100D    E9 88160000     jmp     0044269A
00441012    53                      push    ebx

来到了44269A,往下走到了44269F处有个往回跳的条件转移,如果想跳过去,就会启动程序,显然不能过,只能往回跳,中间又遇到一个往回跳的JMP,只能再往回跳,来到了442510处,从这里慢慢往下走,结果又回到了44269A这里,这样就陷入了442510到44269A的一个循环中,经过查看中间的所有跳转,只有442662处的retn可以离开这个循环,于是,在这里下个断点,如下:

00442510    0FB606             movzx   eax, byte ptr [esi]
00442513    66:98                cbw
00442515    98                     cwde
00442516    83ED 04            sub     ebp, 4
00442519    8945 00             mov     dword ptr [ebp], eax
0044251C    46                      inc     esi
0044251D    E9 78010000     jmp     0044269A
00442522    8B55 00             mov     edx, dword ptr [ebp]



0044265E    5F                     pop     edi
0044265F    5E                     pop     esi
00442660    5F                     pop     edi
00442661    5A                     pop     edx
00442662    C3                     retn
00442663    89E8                 mov     eax, ebp
00442665    83ED 04            sub     ebp, 4
00442668    8945 00             mov     dword ptr [ebp], eax
0044266B    E9 2A000000     jmp     0044269A
00442670    8B45 00             mov     eax, dword ptr [ebp]
00442673    0145 04             add     dword ptr [ebp+4], eax
00442676    9C                      pushfd
00442677    8F45 00             pop     dword ptr [ebp]
0044267A  ^ E9 62FFFFFF     jmp     004425E1
0044267F    8B45 00             mov     eax, dword ptr [ebp]
00442682    8B55 04             mov     edx, dword ptr [ebp+4]
00442685    8A4D 08             mov     cl, byte ptr [ebp+8]
00442688    83C5 02             add     ebp, 2
0044268B    0FADD0              shrd    eax, edx, cl
0044268E    8945 04             mov     dword ptr [ebp+4], eax
00442691    9C                      pushfd
00442692    8F45 00              pop     dword ptr [ebp]
00442695  ^ E9 47FFFFFF     jmp     004425E1
0044269A    8D47 50             lea     eax, dword ptr [edi+50]
0044269D    39C5                  cmp     ebp, eax
0044269F  ^ 0F87 3CFFFFFF   ja      004425E1
004426A5    89E2                   mov     edx, esp

运行后,断在442662这里,F8从这里跳到了402525,如下:

004024F3    8917                    mov     dword ptr [edi], edx
004024F5    8E35 61909090   mov   seg?, word ptr [90909061]  ; 未定义的段寄存器
004024FB    60                        pushad
004024FC    B8 00104000       mov     eax, 00401000
00402501    8130 90CD0E60   xor     dword ptr [eax], 600ECD90
00402507    8128 94433B01   sub     dword ptr [eax], 13B4394
0040250D    83C0 04              add     eax, 4
00402510    3D F8244000      cmp     eax, 004024F8
00402515  ^ 7C EA                jl      short 00402501
00402517    61                       popad
00402518  ^ E9 D6FFFFFF     jmp     004024F3
0040251D    58                      pop     eax
0040251E    2D 2F000000     sub     eax, 2F
00402523    50                      push    eax
00402524    C3                     retn
00402525    E8 F3FFFFFF      call    0040251D
0040252A    0000                 add     byte ptr [eax], al

过了retn后到达402525这个位置,要F7跟进,到达40251D处,向下走到一个retn处,跳到了4024FB处,这里是个PUSHAD,向下过了POPAD后到达一个JMP,到这里后,上边的4024F3,4024F5处本来是未定义寄存器,现在已经变成了新的Call,并且这个JMP正好跳向4024F3。特别注意:这里开始,又开始了新的循环,代码变成了和上面同样的格式。要F7跟进,然后经过PUSHAD和POPAD,再次跳向新的Call。不过不是原地循环,地址每次向上移动Hex(2D)个地址,一直这样一点一点的走,中间要走几十个这样的循环,最后一个循环中的JMP就是最终的跳转,直接跳到401D70处!这个位置就是真正的入口点。到401D70处后,使用LoadPE进行Dump,然后用ImportREC修复输入表,执行程序后,可以正常运行。
用PEiD查看,使用VC++6.0编写。

这个壳比较能迷惑人,不知道哪位高手知道这个是什么壳?

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞0
打赏
分享
最新回复 (4)
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
abxcc 2007-12-12 16:08
2
0
这类就是这样的  我也遇见过    区段显示 靓点 2字  郁闷
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ptsos 2007-12-12 19:44
3
0
来学习一下。
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
workgroup 2007-12-12 20:06
4
0
刚刚学习,来找点思路
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wuwenzhang 2007-12-14 13:43
5
0
学习了。。。。
游客
登录 | 注册 方可回帖
返回