a070458 发表于 2015-7-31 20:05

VMProtect 2.12.3 IAT修复方法&修复脚本

本帖最后由 a070458 于 2015-8-3 12:38 编辑

-------------------------------------------------【文章简介】-------------------------------------------------
【文章标题】 VMProtect 2.12.3 IAT修复方法&修复脚本
【文章作者】 a070458
【作者邮箱】 无
【作者主页】 无
【软件名称】 C++.vmp.exe
【软件大小】 自己加壳
【下载地址】 自己搜索下载
【加壳方式】 VMP2.12.3
【保护方式】 VMP
【编写语言】 VC
【使用工具】 OD
【操作平台】 XP
【软件介绍】 自己搜索
【作者声明】 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
-------------------------------------------------【文章正文】-------------------------------------------------


1.加壳设置,这里就不V掉OEP和资源保护了其他默认设置


2.OEP的寻找
OEP的寻找也是用很旧很旧大牛们总结的方法了   VirtualProtect下段 一路F9等他设置最后一个区段的时候找个Vm_retn 下断点运行后直接对text段下断点一路F9就到达OEP或OEP附近了



3. 修复call的寻找
这个好找在代码断寻找所有call 然后看谁跳向vmp0区段就对了


4.寻找正确api
   这个也好找 随便跟进几个call你发现一路F7最后会都会到达
push dword ptr ss:;retn const
然后F7到达真正的API,所以 这2句代码就有用了可以剩下N个F7的时间
这里在VMP0区段搜索所有符合的代码下段
大概长成这样


这里吐糟一下od脚本的findcmd 命令搜索命令是这样的如果搜索call 如果发现E8 E8 ???????? 他就会搜索出第一个e8当做call 指令 然后+5继续寻找这样就漏掉一个咯



5. 修复思路和IAT识别
脚本大概思路 就是寻找需修复的api的call的地址------保存当前的ESP和【ESP】的值,把寄存器全部变为0,然后运行 ,到达retn处-----F7一下到达api----------然后获取当前ESP的值和【ESP】的值,比较一下 就能识别所有类型
VMP会把所有IAT类型全都变为E8 CALL 5字节,如果是FF15 FF25 这些6字节的剩下一字节就会随机填充
但是VMP会这样的   push r32,call VMP0;然后在call 里面pop 掉达到堆栈平行,这样就需要识别出来然后把call 的地址往上移动1字节了,这个也可以从的值可以看出来,因为他也要返回,所以到达API 他肯定要还原 所以从的值就可以看出来了
基本就是6种类型
////////////////////////////
类型1push xxx call xxxxxxx(FF15 XXXXXX)   //FF15 前一字节NOP    MEsp==NowEsp    进call前!=进call后
类型2call xxxxxxx 一字节垃圾代码 (FF15 XXXXXX)//FF15 后一字节NOP      MEsp-NowEsp=4
类型3   push xxx call xxxxx   (FF25 XXXXXX) //FF25 后一字节NOP       MEsp==NowEsp   进call前==进call后
类型4call xxxxxxx 一字节垃圾代码 (FF25 XXXXXX)//FF25 前一字节NOP         NowEsp- Mesp =4
类型5mov r32,(5字节)// mov r32, 后返回的地址的不会跳过1字节
类型6mov r32,(6字节)// mov r32, 后返回的地址跳过1字节
/////////////////////////////////
随便找个call跟进对照一下就明白了,可能有错,欢迎各位大牛指出
//////////////////////////////
6.其他问题
   因为是采用寻找所有修复call 然后修复,肯定会有1 2个会找错或者修复错,如果这样把程序弄崩溃了,(脚本运行效率太慢了,如果运行到一半挂掉了 就白费功夫了)所以 HOOOK KiUserExceptionDispatcher 达到跳过修复的call然后继续往下修复。

   有的可能修复不了具体看log窗口吧 有提示信息。

7.资源的修复
   隔壁UPK大神有工具和方法,有兴趣自己去学习


/////////////////////////////////////////////////////////
基本框架都在啦 有兴趣自行扩展
然后就发现会修IAT才是长征的开始
////////////////////////////////////////////////////////

附上脱壳脚本


这里感谢吾爱大家庭,最开始就是接触到这个论坛,在这学会很多很多东西







a070458 发表于 2015-8-18 12:50

lwy9299 发表于 2015-8-14 22:52
看得有点头晕,“VirtualProtect下段 一路F9等他设置最后一个区段的时候”这里不明白

因为壳会使用VirtualProtect 对每个段设置保护选项
他设置最后一个区段的时候离OEP最近

weiwj520 发表于 2017-9-20 20:43

本帖最后由 weiwj520 于 2017-9-20 20:49 编辑

大神,这个vmp壳脱壳脚本使用出现错误!
求助大神,能不能帮忙脱个壳,新手脱这个vmp实在乏力,研究了几天没法。
附件地址:链接: https://pan.baidu.com/s/1dF7yrkP 密码: dtsg

LoongKing 发表于 2015-7-31 20:20

膜拜大大,小弟受教了!http://www.52pojie.cn/static/image/smiley/default/51.gif

zf616545 发表于 2015-7-31 20:34

谢谢楼主,我是新手,顶帖

别提曾经. 发表于 2015-7-31 20:39

楼主壳怎么脱呢

蚯蚓翔龙 发表于 2015-7-31 20:47

暂时只能看懂大概。。。

xiawan 发表于 2015-7-31 21:21

都是大神,都在研究这个东西了

z4689528 发表于 2015-7-31 21:24

支持楼主 加油 哦!!

bambooqj 发表于 2015-7-31 21:31

师傅 终于发帖了。。。。。

z4689528 发表于 2015-7-31 21:34

哎吾爱币 少了!!

longruan 发表于 2015-7-31 21:41

不明觉厉啊
页: [1] 2 3 4 5 6 7 8 9
查看完整版本: VMProtect 2.12.3 IAT修复方法&修复脚本