宝峰科技

 找回密码
 注册

QQ登录

只需一步,快速开始

智能终端设备维修查询系统注册会员邮箱认证须知!
查看: 4059|回复: 0

强力促进钢蛋壳升级--VProtect1.72demo主程序iat修复脚本

[复制链接]

该用户从未签到

破解狼人 发表于 2010-10-31 23:52:16 | 显示全部楼层 |阅读模式

欢迎您注册加入!这里有您将更精采!

您需要 登录 才可以下载或查看,没有账号?注册

x
促进钢蛋壳升级-简单分析及脱VProtect1.72demo版加密VB程序

到达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 kebase1,007fc000
mov kebase2,00bde000
mov iatstartaddr,00401000

start:

              mov oep,eip
              mov temesp,esp

findkebase1tzm:

              mov eip,kebase1
              find  eip, #595B588BC18B4F24519D03C38B5F4489039C58#
              cmp   $RESULT,0
              je findkebase2tzm
              add  $RESULT,11
              bp $RESULT

findkebase2tzm:

              mov eip,kebase2
              find  eip, #595B588BC18B4F24519D03C38B5F4489039C58#
              cmp   $RESULT,0
              je start
              add  $RESULT,11
              bp $RESULT

start:              
              mov esp,temesp
              mov eip,iatstartaddr
              mov ptr1,eip

iatfind:
               
               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


nextfind:
               add ptr1,3
               jmp tzm3iatfind
exit:
              mov esp,temesp
              mov eip,oep
              ret



又重新看了下主程序 主程序中的IAT可以修复了 但是还有一种IAT加密没有修复 运行会出错的 就是这种 估计要把这种也修复了 才可以运行的 不过这种加密的修复是最简单的 先不修复了 有空再看看


008194D8    50              PUSH EAX
008194D9    60              PUSHAD
008194DA    9C              PUSHFD
008194DB    B8 B3D0FDC3     MOV EAX,C3FDD0B3
008194E0    BB 6D74833C     MOV EBX,3C83746D
008194E5    03C3            ADD EAX,EBX
008194E7    8B00            MOV EAX,DWORD PTR DS:[EAX]
008194E9    8D0418          LEA EAX,DWORD PTR DS:[EAX+EBX]
008194EC    874424 24       XCHG DWORD PTR SS:[ESP+24],EAX
008194F0    9D              POPFD
008194F1    61              POPAD
008194F2    C3              RETN



类似这个代码的  如果这个代码全部修复的话 理论上是可以 运行的  很怪的一件事就是  我DUMP后的程序 直接添加了一个区段 然后把IAT自己拷贝进去 在OD里面 脱壳后的程序就可以运行了 但是我DUMP那个区段 补上区段后 就出错了 运行不起来 还没有看清楚是哪里的问题
针对上面的地三种加密方式 写的处理脚本 运行完1  和2 后运行第三个脚本,然后修复OK

脚本三:


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,#50609CB8????????BB????????

03C38B008D0418874424249D61#   
               cmp   $RESULT,0
               je    exit
               
               mov   ptr,$RESULT   
               mov   ptr1,ptr
               mov   eip,ptr
               mov   refaddr, ptr
               add $RESULT,14
               bp $RESULT   
               jne  tzm3iataddrfind     


tzm3iataddrfind:
               esto
               mov iataddr,eax
               gn iataddr
               cmp   $RESULT,0
               jnz tzm3iatfix
               msg "请手动修复错误的,然后再次重新运行脚本"

tzm3iatfix:

               
               sub eax,refaddr
               SUB eax,5
               mov refaddr,ptr
               mov [refaddr],#E9909090909#
               add refaddr,1
               mov [refaddr],eax,4
               mov esp,temesp


nextfind:
               add ptr1,3
               jmp tzm3iatfind
exit:
              mov esp,temesp
              mov eip,oep
              ret

您需要登录后才可以回帖 登录 | 注册

本版积分规则

免责声明

本站中所有被研究的素材与信息全部来源于互联网,版权争议与本站无关。本站所发布的任何软件编程开发或软件的逆向分析文章、逆向分析视频、补丁、注册机和注册信息,仅限用于学习和研究软件安全的目的。全体用户必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。学习编程开发技术或逆向分析技术是为了更好的完善软件可能存在的不安全因素,提升软件安全意识。所以您如果喜欢某程序,请购买注册正版软件,获得正版优质服务!不得将上述内容私自传播、销售或者用于商业用途!否则,一切后果请用户自负!

QQ|Archiver|手机版|小黑屋|联系我们|宝峰科技 ( 滇公网安备 53050202000040号 | 滇ICP备09007156号-2 )

Copyright © 2001-2023 Discuz! Team. GMT+8, 2024-12-22 16:43 , File On Powered by Discuz! X3.49

快速回复 返回顶部 返回列表