首页
社区
课程
招聘
vmp2代码还原分享
发表于: 2022-4-3 17:06 10907

vmp2代码还原分享

2022-4-3 17:06
10907


一般来说还原的话,要先能够像fkvmp这种插件先能从指令流中把虚拟机执行的流程弄出来,

弄出来之后分静态和动态两种方法,静态分析的缺点在于它本身就是堆栈机,堆栈这种本身就是一种动态的思想,静态无法获得堆栈信息,

但是他那个vJcc,也就是分支跳转,是在堆栈中各种运算出来的。如果是动态的话,也就是用unicorn或者triton什么玩意的仿真执行的引擎,

有可能执行的时候堆栈中的数和文件在真机下运行的堆栈情况不同,导致vJcc跳转目的地不对(这个我目前没找到问题在哪)。



```

vm-entry  到vm-exit的流程,这是第一步要获得的。

[vip 14000ace9]SREGQ

[vip 14000ace7]LCONSTDWSXQ

[vip 14000ace2]ADDQ

[vip 14000ace1]SREGQ

[vip 14000acdf]SREGQ

[vip 14000acdd]SREGQ

[vip 14000acdb]SREGQ

[vip 14000acd9]SREGQ

[vip 14000acd7]SREGQ

[vip 14000acd5]SREGQ

[vip 14000acd3]SREGQ

[vip 14000acd1]SREGQ

[vip 14000accf]SREGQ

[vip 14000accd]SREGQ

[vip 14000accb]SREGQ

[vip 14000acc9]SREGQ

[vip 14000acc7]SREGQ

[vip 14000acc5]SREGQ

[vip 14000acc3]SREGQ

[vip 14000acc1]SREGQ

[vip 14000acbf]SREGQ

[vip 14000acbd]SREGQ

[vip 14000acbb]SREGQ

[vip 14000acb9]SREGQ

[vip 14000acb7]LCONSTQ

[vip 14000acae]LREGQ

[vip 14000acac]ADDQ

[vip 14000acab]SREGQ

[vip 14000aca9]LCONSTQ

[vip 14000aca0]LREGQ

[vip 14000ac9e]ADDQ

[vip 14000ac9d]SREGQ

[vip 14000ac9b]LREGQ

[vip 14000ac99]LREGQ

[vip 14000ac97]LREGQ

[vip 14000ac95]LREGQ

[vip 14000ac93]LCONSTQ

[vip 14000ac8a]LREGQ

[vip 14000ac88]ADDQ

[vip 14000ac87]SREGQ

[vip 14000ac85]SREGQ

[vip 14000ac83]LREGDW

[vip 14000ac81]LREGDW

[vip 14000ac7f]LREGQ

[vip 14000ac7d]LCONSTQ

[vip 14000ac74]ADDQ

[vip 14000ac73]SREGQ

[vip 14000ac71]WRITEDW

[vip 14000ac70]SREGDW

[vip 14000ac6e]LCONSTBSXDW

[vip 14000ac6c]SREGDW

[vip 14000ac6a]LREGQ

[vip 14000ac68]LREGQ

[vip 14000ac66]LREGQ

[vip 14000ac64]LREGQ

[vip 14000ac62]LREGQ

[vip 14000ac60]LREGQ

[vip 14000ac5e]LREGQ

[vip 14000ac5c]LREGQ

[vip 14000ac5a]LREGQ

[vip 14000ac58]LREGQ

[vip 14000ac56]LREGQ

[vip 14000ac54]LREGQ

[vip 14000ac52]LREGQ

[vip 14000ac50]LREGQ

[vip 14000ac4e]LREGQ

vm-exit

```


其次为每个handler写lifter,lifter的作用就是生成同样作用的IR,我是用的llvm的ir,git上面有个东西叫vtil,他好像也能生成ir,还有能专门针对堆栈机的优化,最后代码还原的效果直接取决于优化的,但是他的项目没文档,c++新特性还用的多,代码看都看不懂。


比如下面这个lifter,

```

lifters addq

{

vm::handler::ADDQ,

[](_cvmp2& vmp2, std::variant<uint64_t, uint32_t, uint16_t, uint8_t> param1)


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (1)
雪    币: 3836
活跃值: (4142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感谢分享
2022-8-19 16:56
0
游客
登录 | 注册 方可回帖
返回
//