飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2364|回复: 1

[原创] 强力促进钢蛋壳升级--VP1.72demo主程序iat修复脚本

[复制链接]
  • TA的每日心情
    开心
    2015-12-7 14:03
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2010-7-18 23:59:41 | 显示全部楼层 |阅读模式
    本帖最后由 wuqing1501 于 2010-7-19 00:07 编辑

    不多说了吧,详细的脱壳过程可以看我写的这篇文章-《促进钢蛋壳升级-简单分析及脱VProtect1.72demo版加密VB程序》地址:https://www.chinapyg.com/viewthr ... &extra=page%3D1
            到达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
    不好意思刚才的附件里忘 了放脚本就发了出来
    重现上传

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?加入我们

    x
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    昨天 06:40
  • 签到天数: 2187 天

    [LV.Master]伴坛终老

    发表于 2010-7-19 17:51:26 | 显示全部楼层
    沙发,谢谢楼主。
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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