找回密码
 立即注册

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
查看: 3579|回复: 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, 2024-5-3 08:04 , Processed in 0.164645 second(s), 25 queries , Gzip On.

    Powered by Discuz! X3.5

    Copyright © 2001-2020, Tencent Cloud.

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