编写VMP爆破插件(下)
原本应该是中期,但是IAT修复打算另起帖子讲,不与jcc爆破合并一起,所以直接到下期,iat还原过几天也会写的快一个星期了,把下期也写一下
本期开始先补充一点理论知识
关于VMP JCC的知识:
在实际中,我们会采用CMP来判断,JCC使用的ZF位判断跳or不跳
我们vmp也是同样
但是不是使用cmp来判断
vmp利用其它加减法指令代替了原有的CMP指令
而加减法指令被他的万用门实现了,所以我们vm虚拟机中没有直接判断jcc的cmp
cmp eax,0x1000
sub eax,0x1000
这两个指令得到的ZF标志位相同
这里知道了,那么VMP是如何提取出一个EFL中ZF标志位的呢
这是我找的一张图片,里面的ZF前面mask对应的是0x40
那么实际中就需要
and eax,ecx eax=0x40 ecx=eflangs
然后这一步后,
还要看他前面的Bit#
shr eax,0x6
综合起来就是
and eax,ecx
shr eax,0x6
and ---eax=0x40 ecx=eflangs
shr ---如果eax=0x40则eax=0x1 如果eax≠0x40则eax=0x0
然后vmp就通过判断这个执行jcc跳转
所以这就是为什么我的插件可以发现,每一个版本基本都是搜索shr xxx,0x6
然后jcc理论知识补充完毕,开始实战写代码
**** Hidden Message *****
以后会有更多好东西发出来的~
希望下次是编写vmp还原插件
我看看 希望能增加x64dbg插件 先藏为敬 谢谢分享,学习一下。{:5_116:} 巡查员强啊 希望能增加x64dbg插件。 50311048 发表于 2023-10-5 22:30
希望能增加x64dbg插件。
请问有没有xdbg的插件开发文档和sdk?想找一份开发 看看思路 好处理一点