VMP壳学习笔记
前言
最近想尝试写个代码混淆器,所以尝试先看看市面上的壳有哪些操作可以学一下,防止走歪路
快速认识 VMP 3.x 第一部分 壳代码篇 - 吾爱破解 - 52pojie.cn
快速认识VMP 3.x 第二部分 代码变异篇 - 吾爱破解 - 52pojie.cn
🔥 Quick look around VMP 3.x - Part 3 : Virtualization | r0da’s Blog
看的主要是这三篇博客
基本操作
加壳
这个部分是一般的壳都会做的操作,对可执行文件的节区进行压缩和加密防止被静态分析
原始节区的内容被放入.vmp1节区,含有被加密的节区内容,壳代码,节区信息
VMP使用ZwProtectVirtualMemory函数来修改节区权限从而执行解密代码
IAT混淆
原始IAT还存在,但是不会被使用,所有调用API的操作,都会被转换为运算时动态执行
具体是
1 | call dword ptr ds:[<&targetFunction>] |
变为等长的
1 | push reg |
api解析器中通过一些计算得到地址然后用ret跳转到api函数中
代码变异
VMP会向代码中加入垃圾代码,等效替换,控制流保护
关于插入垃圾代码和代码替换这部分不是很清楚它是怎么做的。
控制流中,VMP添加了更多无条件跳转,同时拆分了代码块,让函数和函数交错在一起,代码块不一定是对齐的,这导致了顺序的反汇编器很可能失效
评论