好友
阅读权限10
听众
最后登录1970-1-1
|
Motu
发表于 2024-8-2 11:44
本帖最后由 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虚拟机
这样变异的函数有了很大的保护强度,性能损失也很少~ |
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|