VMP 3.5 JCC爆破
使用软件:易语言VMP3.5 Unicorn X32dbgOllyDbg首先用易语言写一个最简单的程序用VMP 3.5虚拟化函数
(由于为了后期分析方便,字符串比较函数就不用虚拟了,而且爆破点也不是在字符串比较函数那里)
VMP其他保护都不用开,调试器检测那些,因为这里只分析他虚拟机里面的JCC模拟
程序代码
然后用VMP3.5给他关键函数虚拟掉
然后载入x32dbg(Ollydbg也行)
通过FF 55 FC 5F 5E断点
直接定位到函数头部
004010A9 | E9 29430C00 | jmp 3.3.1.vmp.4C53D7 |
进去jmp以后就是
004C53D7 | 68 99055F98 | push 985F0599 |
004C53DC | E8 499AFFFF | call 3.3.1.vmp.4BEE2A |
这个是典型的 VMP3.5入口特征
不过我们的目标并不是这个虚拟机,因为这个虚拟机只模拟到第一个call
但是第一个call并不是字符串比较函数
所以这个虚拟机直接跳过
不用看了
这里怎么定位他跳到哪个地址呢
可以用Unicorn模拟引擎来定位,因为代码段内存并没有被映射
所以unicorn就会错误8(未映射的内存地址)
如果没有unicorn模拟引擎的框架呢
也可以使用运行到返回或者 记录日志
这里就不详细说怎么定位了
我这里通过unicorn定位到了他最后的返回地址应该是
0x401194
通过这个函数以后,我们依然是一样的,找到下一个虚拟机
然后利用同样的方法找到地址
**** Hidden Message *****
实际上如果你够熟练了
你甚至可以通过unicorn模拟ZF位来判断这个JCC指令 爆破应该是0x0 还是 0x1 也可以把两种不同的结果执行的不同虚拟机地址打印出来
想实现更复杂的JCC,还需要对这个地址有更详细的判断,最好能够用unicorn模拟出两种不同shr指令的结果
看看软件下载下载 感谢分享
感谢分享 繁花丶 发表于 2023-8-16 13:19
看看软件下载下载
Unicorn可以去B站找周壑的教程,他那里面有详细的unicorn框架和很多测试 谢谢老师的分享!太牛了
感谢分享 谢谢分享 感谢分享