VMP 源码编译 【摘要】 本文展示Leak的VMP源码编译console与GUI的调试版,以及注册测试使用配置的图文过程。
【前言】 完整的泄露已经两月有余,这里只简测。
测试环境:Win11 64位系统,Visual Studio Community 2015(免费社区版),另安装VC2008的【en_visual_studio_2008_professional_x86_dvd_x14-26326.iso】里的64位编译工具x86_amd(如果不改变配置,解决方案中的VMProtectSDK工程会用到),【qt-opensource-windows-x86-msvc2015-5.6.0.exe】中的msvc2015_64(编译GUI版本需要,用于使用QT共享库模式,若要编译静态模式,需要另寻或自行编译msvc2015_static64),最终得到可用及可调试console与GUI的64位版。
第1节 部分三方比较 对部分三方leak源代码做了部分比较, 完整的是git上的 GitHub - jmpoep/vmprotect-3.5.1 ,其他一个【vmp】及【vmpsrc】是早前其他leak缺省版。
主要还是git上的vmprotect351与vmpsrc的差别。三方比较通过UltraCompare进行。
(1)mac平台文件 vmpsrc独有的Info.plist 为mac平台的相关信息
(2)dll与inc vmpsrc多了许多NET相关的dll,初步估计对应于inc,本文测试未考究
(3)核心intel.cc及processors.cc 相对早前leak版本,vmprotect351具有缺失的核心文件intel.cc、processors.cc,部分代码声明与定义有出入,需要修正,参见后述。
下图中,vmpprotect351缺失的lang*.inc\.tmp等由lang.bat生成,缺失的version.h由version.bat生成。
(4)脚本测试样例 缺失的*.exe应该是用于对应脚本功能的vmp防护测试实例,相关vmp防护配置*.vmp还保留
(5)Qt的moc文件 缺失的MOC文件会由Qt编译工具的moc.exe对相应头文件编译产生
(6)其他
第2节 VMPProtectCon项目工程编译 即console控制台版本
(1)类的非重载成员函数错误 这是由于【IntelFunction类中Mutate成员函数】及【IntelObfuscation类中Compile成员函数】的声明与定义参数不一致产生,
在定义中添加完整的参数定义即可,如下述图示
(2)缺失lib错误 修正编译后,会出现上图中的VMProtectSDK64.lib链接缺失错误,这时候需要我们完成VMProtectSDK(visual studio 2008)的64位编译。
这里没有改动原来编译工具配置,所以需要安装vc2008的64位编译工具。
可以下载VS2008的相关ISO安装镜像,要注意,如果默认安装,其可能会忽略我们需要的64位编译工具,如图,选中64位工具安装,
(3)con版本 直接编译 VMProtectSDK即可得到VMProtectSDK64.lib,再编译VMPProtectCon工程即可完成。
如果不使用GUI版本,到此即可,当然,还需要提供测试用的注册配置,否则无法正常使用和对其他程序进行编译保护。
相关注册配置参考后续内容。
第3节 VMProtect项目工程编译 即Qt的GUI版本
(1)Qt缺失错误 直接编译,若没有Qt配置环境,直接编译或有下列错误。
(2)Qt共享库版本 需要 https://download.qt.io/new_archive/qt/5.6/5.6.0/ 中下载其中的 msvc2015_64 版本。
特别注意,如果安装默认路径C:\Qt,后续不需要改项目工程配置,否则需要做相应工程配置修改,
这里安装非默认路径,相应工程配置修改参考后续说明。
(3)关键环境变量配置 从VC项目工程以及相关用户宏属性配置可知,原配置用的是Qt5.6.0版本,QIDIR配置路径是默认的C:\Qt\Qt5.6.0\5.6
(4) 命令行启动变量 PATH 及 QTDIR 若Qt不是5.6.0版本或不是默认路径,则需要在属性管理中作出相应修改,如下图所示。
若要调试,最好在启动新命令行,在命令行中设置PATH,并在命令行中启动VS2015,这样,调试启动时,会自动找到Qt相关动态库,否则启动调试会出错。
运行GUI程序也同理,需要在PATH中找到Qt相关动态库
set path=D:\Qt\Qt5.6.0_x64\5.6\msvc2015_64\bin;%path% PATH中添加Qt动态库路径
"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Visual Studio 2015.lnk" 启动VS2015
D:\vmprotect-3.5.1\bin\64\Debug\VMProtect.exe 执行编译得到的GUI版vmp
第4节 版本管理与注册配置
(1)版本管理 其版本号是由 D:\vmprotect-3.5.1\core\version.bat 批文件管理的,
如下图,我们将原来的 1.0.0.0 build 0修改位 【3.5.1 build 1024】,重新编译(非增量编译)生效
(2)注册配置 根据VMP源码,要让源码版VMP正常工具,需要在编译结果exe同目录下提供注册配置信息
以下是根据VMP源码拟出的一种可用测试配置,保存为【VMProtectLicense.ini】文件,与VMProtect.exe(或VMProtectCon.exe)同目录。
;VMProtectLicense.ini
[TestLicense]
AcceptedSerialNumber=SerialNumber
BlackListedSerialNumber=BlkSerialNumber
TimeLimit=-1
ExpDate=20481024
MaxBuildDate=20481024
KeyHWID=ABC
MyHWID=ABC
UserName=0day
EMail=0day@xday.com
;UserData[0] as productId, should in
; 00 VPI_NOT_SPECIFIED
; 05 VPI_ULTM_PERSONAL = VPI_ULTM_WIN_PERSONAL
; 06 VPI_ULTM_COMPANY = VPI_ULTM_WIN_COMPANY
UserData=05
【附件】 vmprotect-3.5.1-master.part01.rar 和 vmprotect-3.5.1-master.part02.rar 为git上的代码,7M分包。
VMProtectLicense.ini 为注册测试使用配置。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
上传的附件: