2010.12.09_ximo_再来和谐下VMP2.07的脱壳

来源:互联网 发布:大数据时代电子书 编辑:程序博客网 时间:2024/04/29 19:08

http://hi.baidu.com/ximo2006/blog/item/9c61dd3ae2b6e63296ddd833.html


今天拿到了VMP2.07的bin,看了下新版的外壳,发现处理上有了些变化,于是,fuck之。

大致的脱壳流程还是没什么变:

1.到OEP后dump

2.生成IAT的对应关系txt

3.添加进DLL,实现跨平台

但是,IAT的处理,新版的VMP有了点变化,之前的版本,外壳是获取全部的IAT地址后,存放在某内存区域,然后进行填充;而新版的VMP的,则是获取1个,填充1个。其实也是换汤不换药的更新,只是,以前的脚本都失效了,于是只能自己动手搞一下。

首先,用fkvmp,获取2条handler的地址:VM_Retn和VM_WmDs32,这2跳handler的地址,一会要手动修改脚本里的2个地址。

具体不多说了,就给出2个脚本:

一:OEP Founder:

/*
VMProtect OEP Founder
by ximo[LCG][DFJG]
just for fun
*/

var imagebase
var tmp
var pNtHeader
var sectionaddr
var sectionsize
var sum
var protection
var retn

//VM_Retn
mov retn,0104f1fe

bc
bphwc


GMI eip, MODULEBASE
mov imagebase, $RESULT
mov tmp,[imagebase+3c]
add tmp,imagebase
mov pNtHeader,tmp
add pNtHeader,f8
mov tmp,pNtHeader
add tmp,c
mov sectionaddr,[tmp]
add sectionaddr,imagebase
mov tmp,pNtHeader
add tmp,8
mov sectionsize,[tmp]
mov sum,sectionaddr
add sum,sectionsize


gpa "VirtualProtect", "kernel32"
cmp $RESULT, 0
je err
bp $RESULT+13

loop:
esto
mov protection,[esp+c]
cmp protection,20
je next
jmp loop

next:
bc
rtu

find:
bp retn
esto
bc


bprm sectionaddr,sectionsize
esto

cmp eip,sum
bpmc
ja find

finded:
cmt eip,"this is OEP or Near OEP!"
ret

err:
ret

 

二:Fake IAT:

/*
VMProtect 2.07 Unpacker
by ximo[LCG][DFJG]
just for fun
*/

var getfunc
var dllname
var apiname
var writeaddr
var addr
var apiaddr
var key
var info
var end

var logfile
mov logfile,"FkIAT.txt"


/*
VM_WmDs32:      
01050DA5    8910                  mov dword ptr ds:[eax],edx
*/

mov writeaddr,01050DA5
//OEP or stop script addr
mov end,0100739d

bc
bphwc

gpa "CreateFileA", "kernel32"
cmp $RESULT, 0
je err
bp $RESULT+26
esto
bc
rtu

mov getfunc,eip
bphws getfunc, "x"
bphws end, "x"

loop:
run
cmp eip,end
je end
gn eax
cmp $RESULT,0
je next

do:
mov apiaddr,eax
mov dllname,$RESULT_1
mov apiname,$RESULT_2
bp writeaddr
esto
bc eip
mov addr,eax
mov key,apiaddr
sub key,edx
eval "{addr},{key},{dllname},{apiname}"
mov info,$RESULT
wrta logfile,info

next:
jmp loop

end:
ret

err:
bc
bphwc
ret

 

跑完脚本后,dump下来,然后添加进修复的dll,跟fkiat.txt放一起,就可以实现跨平台了。

附件是脚本跟试练样本:

http://u.115.com/file/f888266ccb



原创粉丝点击