胡作为非的胡为 发表于 2024-8-19 09:02

修改VMP源码实现虚拟化IAT?

新人发帖..排版问题见谅~
先上图



通过对VMP源码的简单修改,可以实现对IAT调用指令的识别和单独虚拟化加密
加密效果?
用来对比的原图如下

根据图中信息可以清楚地看到
004DAF0F | FF15 78D24F00            | call dword ptr ds:[<GetVersion>]                                 |
这条非常明显IAT调用信息

在加密后,原来004DAF0F的地址变成了一个jmp,跟进看看?

一个push,一个call,标准的虚拟机入口

开始进入虚拟机执行代码
那么又有人要问了,那符号表呢

加密之前可以清楚地分析符号表和引用位置

加密之后被混淆
--------------
由此引申出两个问题
效率和兼容性?
先来说兼容性,众所周知的vmp兼容性好,基本上把各种可能出现的情况都做了预防和处理,而且如图所示,由于是只加密了一条指令,基本上不存在比较大的兼容性问题
然后是效率,既然vmp的兼容性好,在这基础上添砖加瓦也是顺手的事,由此带来的就是效率比较低,像图中一样,如果这个API被频繁调用,肯定会导致效率很低
由此引申出第二个概念,"去砖减瓦",vmp的源码内置一个2.x结构的虚拟机,而且内部大部分选项都可以在一开始对flags编码进行开启/关闭指定加密选项
那么可不可以,使用2.x的虚拟机然后数量设置为1,然后把内部的大部分加密选项都关掉,只留下关键的几个

在加密40条汇编指令后,大小仅增大10kb?!
小菜见解,大佬喷轻点~


结尾贴出所有文件的链接
程序来源于网络,务必在虚拟机内进行分析!
程序来源于网络,务必在虚拟机内进行分析!
程序来源于网络,务必在虚拟机内进行分析!


https://www.123pan.com/s/sBh9Td-4blf.html
https://www.123pan.com/s/sBh9Td-Mv7f.html







ssjjdns 发表于 2024-8-19 12:28

然鹅vmp本来就会对IAT进行加密...,你不标识他也会加密的,这不是脱裤子放屁吗0.0

redapple2008 发表于 2024-8-19 12:34

高手啊{:5_117:}

pjm123456 发表于 2024-8-19 12:48

谢谢分享

胡作为非的胡为 发表于 2024-8-19 13:08

ssjjdns 发表于 2024-8-19 12:28
然鹅vmp本来就会对IAT进行加密...,你不标识他也会加密的,这不是脱裤子放屁吗0.0 ...

支持大佬,这不是嫌弃原来的iat加密强度太低了吗

星宇咩 发表于 2024-8-19 13:15

谢谢分享

50311048 发表于 2024-8-19 13:49

谢谢分享。。

吃麻花麻花疼 发表于 2024-8-19 13:56

鹤醉晓. 发表于 2024-8-19 14:20

vmp本身对iat他就带有保护,只是本身的是“变异”,并不是虚拟机的保护,但是已经足够了 你全部用虚拟机来保护iat 只会过分的影响效率,而保护方面,利用模拟器跑似乎是一样的没有区别,一样可以一键跑出来,反而浪费了很多效率。。。似是无用功?

jzh 发表于 2024-8-19 15:03

学习一下
页: [1] 2 3
查看完整版本: 修改VMP源码实现虚拟化IAT?