找回密码
 立即注册

QQ登录

只需一步,快速开始

1401软件论坛总版规【新人必看】如何正确发布收费帖子加入vip系统学习仅需498元免费获得1401软件安全论坛vip开通本站VIP会员请联系QQ 564853771
论坛纪念优盘Beyond EXE超强加密器V1.61401论坛破解工具包 2017-9-12[破解班vip]入门篇[破解班vip]基础篇
[破解班vip]脱壳篇[破解班vip]实战篇[破解班vip]网络验证篇[破解班vip]零基础HOOK教程[破解班vip]零基础易语言入门
[破解班vip]零基础c语言入门[破解班vip]零基础Delphi编程入门[破解班vip]寒假培训课程共7课[破解班vip]破解提高篇[破解班vip]易语言培训课程
[破解班vip]核心技术培训篇[破解班vip]pe格式与pe操作[破解班vip]2022全新封包-山寨-爆破全系列[原创课程]c++单文档框架课程[逆向班vip]汇编语句与反汇编基础
[逆向班vip]全自动扫雷辅助[逆向班vip]手机模拟按键[逆向班vip]植物大战僵尸辅助广告位招租...付费破解软件 +Q 564853771
查看: 4467|回复: 0

VMP脱壳加脚本(2)

[复制链接]
  • TA的每日心情
    奋斗
    2019-12-9 15:37
  • 签到天数: 44 天

    [LV.5]常住居民I

    11

    主题

    91

    回帖

    196

    积分

    终身vip会员

    UID
    9295
    元宝
    279
    威望
    60
    贡献
    3
    信誉值
    0
    精华
    0
    在线时间
    19 小时
    注册时间
    2017-10-31
    最后登录
    2019-12-9
    违规
    0
    积分
    196

    破解班vip

    发表于 2017-12-5 16:39:48 | 显示全部楼层 |阅读模式
    5、还原IAT
    随便找一个IAT调用函数跟一下,刚好OEP下面就有两个 FF25 型的IAT 调用,跟进去看下

                                   
    登录/注册后可看大图

    还是啥都看不懂,不过没关系 既然是调用IAT函数,肯定会在某一时刻调到真实函数地址去的 继续跟下面把整个跟的流程贴上来

                                   
    登录/注册后可看大图


                                   
    登录/注册后可看大图


                                   
    登录/注册后可看大图


                                   
    登录/注册后可看大图


                                   
    登录/注册后可看大图

    这是整个流程的实际执行的代码 ,现在分析下
    01059D91    53              push ebx                     保护环境
    01059D92    66:0FB6DB       movzx bx,bl          垃圾代码
    01059D96    66:BB 5D55      mov bx,0x555D   垃圾代码
    01059D9A    BB 5AC27200     mov ebx,0072C25A   这才是最终对EBX操作所以上面两条都是没用的代码
    00F3BBFF    8B9B 25697400   mov ebx,dword ptr ds:[ebx+0x746925]    计算地址
    01196B98    8D9B 5071F632   lea ebx,dword ptr ds:[ebx+0x32F67150]  计算地址
    00EA9FC2    871C24          xchg dword ptr ss:[esp],ebx   和栈顶交换,并还原EBX的原始值
    00F9FC9D    C2 0400         retn 0x4                  还原EBX 并返回函数
    这时候看下堆栈 栈顶出现真实函数的地址

                                   
    登录/注册后可看大图

    00F9FC9D    C2 0400         retn 0x4       分析下这条指令的执行流程,先EIP=栈顶的值 也就是真实函数地址,栈顶+4+4 懂汇编的人就会发现,栈顶+8的位置保存是当前CALL的返回地址 那执行了这条指令后返回地址不是没有了么?因为这个IAT调用 没加密前是 FF25型的 也就是 jmp [????????] 所以不需要返回地址 ,而调用这个IAT的时候 是有一个CALL的进CALL的时候就会PUSH返回地址到堆栈,所以这个IAT处理的很巧妙!执行完真实函数后直接就返回到调用IATCALL的下面继续执行了。
    看图片发现 这个CALL 下面有一条 RETN指令 看来这条 是VMP加上去的了,但是不要忽略了这条指令 因为这条指令很重要,VMP在获取 IAT地址的最后RETN的地址 会随机JMP到代码他添加的RETN 上,并不完全是在壳段 所以这个RETN 要留到最后处理。
    再找一个FF25 型的IAT调用看看

                                   
    登录/注册后可看大图

    跟进去看下,下面是执行流程代码
    00FB7DC7    90              nop
    00FB7DC8    0FB7D6          movzx edx,si        垃圾代码
    00FB7DCB    66:0FBED1       movsx dx,cl       垃圾代码
    00FB7DCF    5A              pop edx                   出栈               
    00FB7DD0    871424          xchg dword ptr ss:[esp],edx           交换栈顶的值,还原 EDX原始值
    00FB7DD3    52              push edx                              保护环境
    00FB7DD4    66:0FBED1       movsx dx,cl     垃圾
    00FB7DD8    0FB7D6          movzx edx,si      垃圾
    00FB7DDB    BA B7757D00     mov edx,007D75B7     计算地址
    010DFDAD    8B92 3D036900   mov edx,dword ptr ds:[edx+0x69033D]    计算地址
    0102B837    8D92 B52FE512   lea edx,dword ptr ds:[edx+0x12E52FB5]     计算地址
    00EACB30    871424          xchg dword ptr ss:[esp],edx   函数真实地址给栈顶 并还原环境         
    0115D36E    C2 0400         retn 0x4
    这个FF25 CALL 的第四行 有个POP  edx 而进这个CALL之前  有一个push edx ,可以看出 这个push edx 也是垃圾代码是 VMP自己添加上去的,看来VMP 会随机在上下 填充一个字节,在上面就是 PUSH 一个寄存器,在下面就是 retn
    找一个 FF15型的CALL看看

                                   
    登录/注册后可看大图

    跟进去看下流程
    010B27B9    BE B34E6E0B     mov esi,0xB6E4EB3    垃圾代码
    00EFFC5B    5E              pop esi               出栈
    00EEB9B0    873424          xchg dword ptr ss:[esp],esi    交换栈顶的值,还原 ESI原始值
    00F437BB    56              push esi   保存环境
    00F8D827    BE 4B084800     mov esi,0048084B    计算地址
    00FA55B3    8BB6 C005B900   mov esi,dword ptr ds:[esi+0xB905C0]  计算地址
    010E8053    8DB6 3F68AD31   lea esi,dword ptr ds:[esi+0x31AD683F] 计算地址
    00F44191    873424          xchg dword ptr ss:[esp],esi   真实函数地址给栈顶,还原环境
    0057A761    C3              retn
    第二行 pop esi  看来这个CALL 的push esi 是垃圾指令了,但是 发现这个 是retn 为什么不是,retn 04 呢?因为这个是 FF15 型调用,也就是 call [????????]  需要执行完后返回到call 下面继续执行
    再找一个FF15型调用看看

                                   
    登录/注册后可看大图



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

    本版积分规则

    QQ|Archiver|手机版|小黑屋|1401软件安全 ( ICP备16034480号 )

    GMT+8, 2026-11-1 12:42 , Processed in 0.132372 second(s), 26 queries , Gzip On.

    Powered by Discuz! X3.5

    Copyright © 2001-2020, Tencent Cloud.

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