-
-
[原创]Pohernah 手动脱壳手记
-
发表于: 2008-10-23 21:17 5017
-
工具:od && import REC
平台:xp
今天碰到Pohernah ,那就手动脱一下吧,有失误之处还请大虾指正
前提理论基础:
对于脱壳有很多理论可以依照,同样对于本加壳程序也是如此
对于加壳软件,保证外壳的各个寄存器与源程序的环境相同是必要,esp、ebp等。初始化保存各个寄存器的值,然后执行完毕恢复之。
常用处理指令为pushad/popad、pushfd/popfd 归根结底就是堆栈平衡原理。
好了,let's go
第一步,OD 加载
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执行程序,程序断下来了,
F8单步,看到如下
需要整理一下
ctrl A 强制整理,代码如下
可以发现,其实我们已经进入到源程序中了,yes!!!
接着当然很顺利了,dump出来 dump.exe
这个时候就用到 import REC
oep 中填入271B0 然后IAT aturosearch |Get Import |Show Invalid
然后fix dump
ok ,dump_.exe
然后这个就是脱的文件了,运行一下,ok
附件带源文件,和脱壳后文件
平台: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
附件带源文件,和脱壳后文件
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
谁下载
fly
kanxue
骨灰C
winndy
xingbing
脱壳请教
cyliu
Xacs
yunfeng
sungy
skyXnet
kyc
ericliu
wynney
shoooo
miza
西马
cyto
herx
heimei
skylly
gtboy
逍遥风
paradise
RuShi
yzjsdn
hcg
峰回路转
flyjmu
maiqi
笨笨雄
rocketming
sandywzg
gongcctv
apox
sdfcfy
daienming
李敬利
gzdang
popeylj
heiyelang
独孤剑圣
goujunnb
ffcc
winsunxs
CHYX
bobowu
邻a居b
lovaya
qifeon
北极狐狸
XPoy
liuxingyuu
lunglungyu
isiah
xx
hacktrace
哈哈在世
qslljm
ximo
xiaoxyz
jxdyxg
那年夏天
hua杭
笨笨虫
天涯一鸿
太难了
syziy
kuaishen风
zqxfxm
ficient
内伤
wfmao
annma
HateCS
雪飘
blbfxm
caihedong
livand
yaolibing
西风巨
zhongwang
mzdlinux
maizchen
WANGVF
章含羽
luckymen
mrhts
张相公
cuthen
LeoF
akong
BeyondCy陈
看原图
赞赏
雪币:
留言: