首页
社区
课程
招聘
[原创]Pohernah 手动脱壳手记
发表于: 2008-10-23 21:17 4925

[原创]Pohernah 手动脱壳手记

2008-10-23 21:17
4925
工具:od && import REC
平台:xp

今天碰到Pohernah ,那就手动脱一下吧,有失误之处还请大虾指正

前提理论基础:
对于脱壳有很多理论可以依照,同样对于本加壳程序也是如此
对于加壳软件,保证外壳的各个寄存器与源程序的环境相同是必要,esp、ebp等。初始化保存各个寄存器的值,然后执行完毕恢复之。

常用处理指令为pushad/popad、pushfd/popfd 归根结底就是堆栈平衡原理。

pushad ;pushad 相当于push eax,ecx,edx,ebx,esp,ebp,esi,edi
......       ;外壳代码部分
popad   ;相当于pop edi,esi,ebp,esp,ebx,edx,ecx,eax先进后出嘛
jmp oep;准备进入入口处
oep:......;程序源代码


好了,let's go

第一步,OD 加载
00469000 >  60              pushad ;停在这
00469001    E8 00000000     call    00469006
00469006    5D              pop     ebp
00469007    81ED F1264000   sub     ebp, 004026F1
0046900D    8BBD 18284000   mov     edi, dword ptr ss:[ebp+402818]
00469013    8B8D 20284000   mov     ecx, dword ptr ss:[ebp+402820]
00469019    B8 38284000     mov     eax, 00402838
0046901E    01E8            add     eax, ebp
00469020    8030 05         xor     byte ptr ds:[eax], 5
00469023    83F9 00         cmp     ecx, 0
00469026    74 71           je      short 00469099


F8单步一下到00469001,观察右侧的寄存器,注意ESP的值为0012FFA4

右键数据串口中跟随,查看数据窗口

0012FFA4  00 00 00 00 00 00 00 00 F0 FF 12 00 C4 FF 12 00  ........?.?.
0012FFB4  00 E0 FD 7F EC 85 95 7C B0 FF 12 00 00 00 00 00  .帻靺晐?.....
0012FFC4  3B F2 82 7C 00 00 00 00 00 00 00 00 00 E0 FD 7F  ;騻|.........帻

然后在数据窗口的前四个字节,断点|硬件访问|DWORD,然后F9执行程序,程序断下来了,

004690A4  - FFE0            jmp     eax                             
004690A6    56              push    esi
004690A7    57              push    edi
004690A8    4F              dec     edi
004690A9    F7D7            not     edi
004690AB    21FE            and     esi, edi
004690AD    89F0            mov     eax, esi


F8单步,看到如下
004271B0      55            db      55                               ;  CHAR 'U'
004271B1      8B            db      8B
004271B2      EC            db      EC
004271B3      6A            db      6A                               ;  CHAR 'j'
004271B4      FF            db      FF
004271B5      68            db      68                               ;  CHAR 'h'
004271B6      60            db      60                               ;  CHAR '`'
004271B7      0E            db      0E
004271B8      45            db      45                               ;  CHAR 'E'
004271B9      00            db      00
004271BA      68            db      68                               ;  CHAR 'h'


需要整理一下
ctrl A 强制整理,代码如下

004271B0   .  55            push    ebp
004271B1   .  8BEC          mov     ebp, esp
004271B3   .  6A FF         push    -1
004271B5   .  68 600E4500   push    00450E60
004271BA   .  68 C8924200   push    004292C8                         ;  SE 处理程序安装
004271BF   .  64:A1 0000000>mov     eax, dword ptr fs:[0]
004271C5   .  50            push    eax
004271C6   .  64:8925 00000>mov     dword ptr fs:[0], esp
004271CD   .  83C4 A8       add     esp, -58
004271D0   .  53            push    ebx
004271D1   .  56            push    esi


可以发现,其实我们已经进入到源程序中了,yes!!!

接着当然很顺利了,dump出来 dump.exe

这个时候就用到 import REC

oep 中填入271B0 然后IAT aturosearch |Get Import |Show Invalid

然后fix dump

ok ,dump_.exe

然后这个就是脱的文件了,运行一下,ok

附件带源文件,和脱壳后文件

[课程]Linux pwn 探索篇!

上传的附件:
  • 1.rar (500.64kb,64次下载)
  • 2.JPG (21.64kb,110次下载)
收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 346
活跃值: (1953)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
呀!看看,还没听说过这壳呢
2008-10-23 23:58
0
游客
登录 | 注册 方可回帖
返回
//