Motu 发表于 2024-8-2 11:44

关于VMProtect3.5源码的变异能否使用内部的2.x虚拟机

本帖最后由 Motu 于 2024-8-2 12:48 编辑

新人第一次发帖,哪里写的不好见谅
vmp的源码也是出来好久了,各种功能也是被研究和开发出来了.....
事情起因也很简单,在core/intel.cc文件中有如下代码
------------------------分割符-------------------------
void IntelVirtualMachineList::Prepare(const CompileContext &ctx)
{
      size_t i;
      IntelOpcodeList visible_opcode_list;
      OperandSize cpu_address_size = ctx.file->cpu_address_size();

      VirtualMachineType type =
#ifdef DEMO
                true
#else
                ((ctx.options.flags & cpUnregisteredVersion) != 0 || ((ctx.options.vm_flags & 1) != 0))
#endif      
                ? vtClassic : vtAdvanced;
------------------------分割符-------------------------

VirtualMachineType type表示虚拟机的类型
在vmp从2.x进化到3.x的时候,其内部仍然保留了原来2.x的虚拟机生成代码
----vtclassic表示的就是其仍保留的2.x虚拟机结构
----vtAdvanced表示的就是3.x的虚拟机结构

------------------------分割符-------------------------
在core/core.cc中有一个bool Core::Compile()函数,负责编译的初始化,其中有关于虚拟机数量的定义
      options.vm_count =
#ifdef DEMO
                true
#else
                ((options.flags & cpUnregisteredVersion) != 0 || (options.vm_flags & 2) != 0)
#endif      
                ? 1 : 10;
------------------------分割符-------------------------
也就是这一段,也是对Demo版本进行了特殊对待,如果是Demo版本就把虚拟机数量设置为1个
------------------------分割符-------------------------
然后如果把虚拟机数量设置成1,然后虚拟机版本选择vtclassic,然后选择虚拟加密,原本17kb的程序加密完仅仅27kb,仅仅增大10kb,
所以这就延伸了一个奇思妙想,能否把他的变异替换成1个2.x的虚拟机进行加密,然后虚拟的时候使用正常的10个3.x虚拟机
这样变异的函数有了很大的保护强度,性能损失也很少~

Motu 发表于 2024-8-2 15:25

Hmily 发表于 2024-8-2 15:13
和这个差不多,当时有个隐藏功能,开启后就是加出来这个感觉。

我想修改现有的这份源码让最后vmp对代码的保护只有两个选项"微虚拟"和"虚拟"
去掉变异和超级,然后原本的Mutate只在内部使用,
再把源码里现有2.x的虚拟机进行阉割,让他有更快地执行速度,再给2.x的虚拟机只分配1个让她代替原来VMP的"变异"功能,也就是变成了我上面提到的"微虚拟"
然后"虚拟"就正常使用10个3.x的虚拟机,也就是原本的加密方式{:1_918:}

Motu 发表于 2024-8-2 14:01

Hmily 发表于 2024-8-2 13:49
可以把编译去掉,直接试试只有虚拟化看看大小,2.x的时候有过这么diy的,生成后用来分析虚拟机很方便。

试过了,修改flags把所有虚拟机的保护全部去掉,然后用1个2.x虚拟机差不多就增大了9kb,稍等我上个附件可以看一下,因为当前的vmp的变异,感觉强度还是太低,基本就是插入垃圾指令然后把非常少一部分的指令进行等价变形,基本上稍微分析一下就出来了,但是直接用3.x的虚拟机就又会导致执行效率太低,所以我想的就是把vmp加密函数的时候那个变异换成1个2.x的虚拟机,然后虚拟就正常用10个3.x的虚拟机

Hmily 发表于 2024-8-2 11:59

强度不就来源于新的虚拟机架构?

Motu 发表于 2024-8-2 12:42

Hmily 发表于 2024-8-2 11:59
强度不就来源于新的虚拟机架构?

我的想法是把vmp的变异替换成一个非常弱的2.x虚拟机,然后其他的虚拟按照正常的3.x虚拟机结构进行加密

Hmily 发表于 2024-8-2 13:49

Motu 发表于 2024-8-2 12:42
我的想法是把vmp的变异替换成一个非常弱的2.x虚拟机,然后其他的虚拟按照正常的3.x虚拟机结构进行加密

可以把编译去掉,直接试试只有虚拟化看看大小,2.x的时候有过这么diy的,生成后用来分析虚拟机很方便。

Motu 发表于 2024-8-2 14:05

Motu 发表于 2024-8-2 14:01
试过了,修改flags把所有虚拟机的保护全部去掉,然后用1个2.x虚拟机差不多就增大了9kb,稍等我上个附件可以 ...

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

艾莉希雅 发表于 2024-8-2 14:40


之前不是有个人弄了个winmm.dll来搞这个,有没有用我就不知道了

Hmily 发表于 2024-8-2 15:09

Motu 发表于 2024-8-2 14:05
https://www.123pan.com/s/sBh9Td-4blf.html

这个看起来就是2.x的好像。

Hmily 发表于 2024-8-2 15:10

艾莉希雅 发表于 2024-8-2 14:40
之前不是有个人弄了个winmm.dll来搞这个,有没有用我就不知道了

3.x gui 加出来2.x?:rggrg

Hmily 发表于 2024-8-2 15:13

Motu 发表于 2024-8-2 14:05
https://www.123pan.com/s/sBh9Td-4blf.html

VMProtect.Ultimate.V2.09.CracKed.By.LCG
https://www.52pojie.cn/thread-129044-1-1.html

和这个差不多,当时有个隐藏功能,开启后就是加出来这个感觉。
页: [1] 2
查看完整版本: 关于VMProtect3.5源码的变异能否使用内部的2.x虚拟机