首页
社区
课程
招聘
对VMProtect的跳转表一点疑惑[讨论]
发表于: 2006-6-3 15:19 5217

对VMProtect的跳转表一点疑惑[讨论]

2006-6-3 15:19
5217

最近在看一个用VMProtect加的软件,发现无法从堆栈上查找代码执行的踪迹,最后发现了那个push xx,jmp xx代码最终都会执行到的VMProtect的那个跳转表,可是通过模拟发现那个跳转表基本上都是循环几百次以后才有出口的,有的还没有出口。
VMP的那个switch跳转表有256个表项,重复的很多,实际只有57个表项值。另外,这个57个表项中,只有一个通过ret能出口到目的代码中,其他的表项全部都回跳到那个switch前面几条语句,接着循环。
我的疑惑是VMP设计的时候,怎么能知道如何通过几百次看似无意义的循环,最后能通过那个唯一的出口跳出去呢。它在数学上的规律是什么?


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (2)
雪    币: 207
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
它当然知道
它把要抽的代码反汇编了
并且把每行代码扩大百倍拆成类似原子操作等
每个原子操作都用一个pcode表示
每次循环解析pcode
然后么就这样了
2006-6-4 09:31
0
雪    币: 208
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
可能我表述的不太清楚
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!
2006-6-4 11:37
0
游客
登录 | 注册 方可回帖
返回
//