很多年没有来论坛了,最近刚好有点时间,编译了VMP,发现对于初学者还是可能会有一点帮助的,记录下编译过程。
VMP源码泄露了一段时间了,吾爱破解论坛上发表了《VMProtect编译成功过程梳理》文章,过程较为繁琐,我利用最近时间仔细学习了一遍,很快编译成功了,然后自己重新完整尝试没有博文指导下,记录编译过程,发现原来文章其实有些步骤是多余的。
1、查看工程文件
利用记事本打开vmprotect.sln可以看到:
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.28307.2092
MinimumVisualStudioVersion = 10.0.40219.1
原来的工程是VS2015编译的。
利用记事本打开VMProtectSDK.vcxproj,可以看到以下信息:
<PropertyGroup Label="Globals">
<ProjectGuid>{F3B5035B-34E5-4A8A-9B2B-485C3C79B67A}</ProjectGuid>
<RootNamespace>VMProtectSDK</RootNamespace>
<Keyword>Win32Proj</Keyword>
<ProjectName>VMProtectSDK</ProjectName>
<WindowsTargetPlatformVersion>7.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<PlatformToolset>v90</PlatformToolset>
</PropertyGroup>
7.0指用于构建项目的 Windows SDK 的版本号,实际上是支持winxp的sdk,V90对应着VS2008的编译器和相关C++库。
2、开发环境
根据上面,我电脑配置了开发环境为:VS2022 +QT5.7+Windows SDK10.0+.net4.8
3、编译过程
利用VS2022打开项目文件,自动检查解决方案不匹配的地方,显示如下对话框,允许项目升级(不考虑支持XP系统,之前在安装VS2022是选择安装vs2017 xp支持组件v141_XP),点击确定。
升级完成后,设置工程为X64,直接在VMProtectSDK工程上右键“生成”,很快显示成功。
1> 正在创建库 E:\vmp3\vmp\bin\64\Debug\VMProtectSDK64.lib 和对象 E:\vmp3\vmp\bin\64\Debug\VMProtectSDK64.exp
1>VMProtectSDK.vcxproj -> E:\vmp3\vmp\bin\64\Debug\VMProtectSDK64.dll
========== 生成: 1 成功,0 失败,0 最新,0 已跳过 ==========
========== 生成 于 下午 3:03 完成,耗时 04.115 秒 ==========
在VMProtect工程上右键“生成”,报错106个,找到第一错误
严重性
代码
说明
项目
文件
行
禁止显示状态
详细信息
错误
C2511
“void IntelFunction::Mutate(const CompileContext &,bool)”:“IntelFunction”中没有找到重载的成员函数
core
e:\vmp3\vmp\core\intel.cc
16040
找到该函数声明:
void Mutate(const CompileContext &ctx, bool for_virtualization, int index = 0);
原因是声明中使用默认构造参数,定义中直接缺少了构造参数。
intel.cc将其修改为:
void IntelFunction::Mutate(const CompileContext& ctx, bool for_virtualization, int index )
重新编译,报错38个,找到第一个错误
严重性
代码
说明
项目
文件
行
禁止显示状态
详细信息
错误
C2511
“void IntelObfuscation::Compile(IntelFunction *,size_t)”:“IntelObfuscation”中没有找到重载的成员函数
core
e:\vmp3\vmp\core\intel.cc
17335
同样的原因,intel.cc将其修改为:
void IntelObfuscation::Compile(IntelFunction* func, size_t index, size_t end_index, bool for_virtualization)
重新编译,报错1个
res.bat: QT resources 'E:\vmp3\vmp\VMProtect\resources.cc' are up to date
直接在命令行中运行res.bat发现:
E:\vmp3\vmp\VMProtect>D:\DATA\Qt1\5.7\msvc2015_64/msvc2015_64/bin/rcc.exe E:\vmp3\vmp\VMProtect\application.qrc -o E:\vmp3\vmp\VMProtect\resources.cc.tmp
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2023-12-20 15:14
被laowanghai编辑
,原因: 补充VMP Ultimate版本的编译过程