不多说了吧,详细的脱壳过程可以看我写的这篇文章-《促进钢蛋壳升级-简单分析及脱VProtect1.72demo版加密VB程序》地址:http://www.52pojie.cn/thread-52705-1-1.html
到达OEP后直接跑脚本就可以了 脚本跑完后 UIF修复一下 然后DUMP 修复 就可以了,但是这样修复的程序只能在本机 运行 不能跨平台,IAT脚本中查找IAT的方法不变,只是在之前的基础上修改而来的,查找效率有了不小的提升,目前只知道支持1.72DEMO 估计不支持 VP加壳的程序,因为VP主程序 修复的时候相当的慢 ,基本上今天一天我都在修改脚本,有兴趣的可以自己测试一下脚本能否使用,我这里可以顺利跑完,也就是只修复了00401000那部分的IAT ,对于主程序那里的IAT也都被壳处理了,但是我同时都修复后 却没有成功,只修复00401000那部分还可以本机运行,功能也可以正常使用,所以就没有再做大强度的测试了,因为用脚本完全跑完真个VP程序 不止一个小时呢,我个人感觉应该可以分两步来完成修复IAT ,先修复00401000那部分修复好后可以本机运行 然后在修复主程序段段内IAT,不过我是没有精力再搞了。还是放下脚本让有兴趣的继续研究吧。
脚本共两个,第一个脚本是修复00401000段内调用的IAT的,第二个脚本是修复主程序段也就是OEP所在的段内调用IAT的,另外第脚本二在运行过程中当EIP 也就是运行到0080a938这行时会出错,这个时候要手动该脚本为单步,然后在脚本合适的地方重新运行那样停止的程序就会能重新运行,然后重新在OEP处新建EIP,并修改一下ESP的值,保证堆栈平衡,然后重新再跑一遍脚本二 就可以修复完的 好了不多说了有兴趣的自己看看吧!
再次支持苦力升级!
注意:一定要先运行脚本一,修复完后再运行脚本二!因为004010000那里的调用IAT时 第一个跳转就是调向主程序段调用的IAT那里的!
脚本一:
var oep
var ptr
var ip1
var addr
var refaddr
var refaddr2
var temesp
var ptr1
var kebase1
var kebase2
var iataddr1
var iataddr2
var iatstartaddr
mov temesp,esp
find ptr1, #e9??????00008bc0#
cmp $RESULT,0
je exit
mov ptr,$RESULT
mov ptr1,ptr
mov eip,ptr
mov refaddr, ptr
sti
sti
sti
sti
mov ip1, eip
mov ip1, [ip1]
and ip1, 0ff
cmp9c:
cmp ip1,9c
jnz tzm1iataddrfind
je iat23addrfind
tzm1iataddrfind:
sti
mov iataddr,eax
gn iataddr
cmp $RESULT,0
je tzm1iataddrfind
tzm1iatfix:
sub eax,refaddr
SUB eax,5
mov refaddr,ptr
mov [refaddr],#e99090909090#
add refaddr,1
mov [refaddr],eax,4
mov esp,temesp
nextfind:
add ptr1,3
jmp iatfind
iat23addrfind:
esto
mov iataddr,eax
gn iataddr
cmp $RESULT,0
jne tzm3iatfix
mov iataddr,ebx
gn iataddr
cmp $RESULT,0
je iat23addrfind
tzm2iatfix:
sub ebx,refaddr
SUB ebx,5
mov refaddr,ptr
mov [refaddr],#e99090909090#
add refaddr,1
mov [refaddr],ebx,4
mov esp,temesp
jmp nextfind
tzm3iatfix:
sub eax,refaddr
SUB eax,5
mov refaddr,ptr
mov [refaddr],#e99090909090#
add refaddr,1
mov [refaddr],eax,4
mov esp,temesp
jmp nextfind
exit:
mov esp,temesp
mov eip,oep
ret
脚本二:
var oep
var ptr
var ip1
var addr
var refaddr
var temesp
var ptr1
var code
var kebase1
var kebase2
var iataddr
mov kebase1,007fc000
mov kebase2,00bde000
mov oep,eip
mov temesp,esp
start:
mov esp,temesp
mov eip,kebase1 //查找的起始位置
mov ptr1,eip
tzm3iatfind:
mov temesp,esp
find ptr1,#E9??????
00?????????????????????????????????????????????????CCCCC#
cmp $RESULT,0
je exit
mov ptr,$RESULT
mov ptr1,ptr
mov eip,ptr
mov refaddr, ptr
sti
mov ip1, eip
mov ip1, [ip1]
and ip1, 0ff
finde9:
cmp ip1,e9
jnz find68
sti
mov ip1, eip
mov ip1, [ip1]
and ip1, 0ff
cmp ip1,50
jnz nextfind
sti
mov ip1, eip
mov ip1, [ip1]
and ip1, 0ff
cmp ip1,e9
jnz nextfind
je tzm3iataddrfind
find68:
cmp ip1,68
jnz find50
sti
mov ip1, eip
mov ip1, [ip1]
and ip1, 0ff
cmp ip1,9c
jnz nextfind
sti
mov ip1, eip
mov ip1, [ip1]
and ip1, 0ff
cmp ip1,81
jnz nextfind
sti
mov ip1, eip
mov ip1, [ip1]
and ip1, 0ff
cmp ip1,9d
jnz nextfind
je tzm3iataddrfind
find50:
cmp ip1,50
jnz nextfind
sti
mov ip1, eip
mov ip1, [ip1]
and ip1, 0ff
cmp ip1,e9
jnz nextfind
tzm3iataddrfind:
sti
mov iataddr,eax
gn iataddr
cmp $RESULT,0
je tzm3iataddrfind
tzm3iatfix:
sub eax,refaddr
SUB eax,5
mov refaddr,ptr
mov [refaddr],#E9909090909#
add refaddr,1
mov [refaddr],eax,4
mov esp,temesp