可能我表述的不太清楚
VMProtect在堆栈中解码的函数我看到一些,应该是下面这些代码:
mov byte ptr [ebp-xx],55
mov byte ptr [ebp-xx],8B
mov byte ptr [ebp-xx],EC
....
但是这些代码都在VMProtect加的段中,而code段中的那些
push xx
jmp xx
的代码是要经过几百次的循环才出口,我的疑惑是首先我发现的出口并没有和那些在堆栈中解码的函数有任何关心,另外一点在模拟代码运行的时候,很多
Push xx
jmp xx
的代码是没有正确出口的。这些可能是我分析的不透彻,也可能是一些初始条件不对。但我是觉得那么多的跳转代码,使用同一个跳转表,我很难考虑如何在几百次跳转之后仍然能保存堆栈平衡,同时修改堆栈上的返回地址。我是说应该有一个公式,能从最初的push xx就能推导出最后的出口地址是什么,或者是反向的,就是只要知道最后的出口地址是什么,就能算出需要push的值,当然也可能是很多个值。
But it is out of my image!