VMP源码编译之Debug_x64模式
最终依赖环境:Windows 7 x64 Ultimate、Visual Studio 2019、Windows SDK8.1、qt-opensource-windows-x86-msvc2015_64-5.6.0、.NET Framework 4.8、QT Visual Studio Tools(v3.0.2最新版)
0x00 源码
https://bbs.kanxue.com/thread-279796.htm
链接: https://pan.baidu.com/s/1Gp45rEymPv94FYpuawkmIg 提取码: 947c
0x01 操作系统
windows 7 x64 sp1 环境搭建(虚拟机)
0x02 软件安装
2. 1. Visual Studio 2019
https://www.alipan.com/s/eVHxk9pVVLQ
提取码: tt80
双击vs2019安装包后,提示如下错误
2. 2. .NET Framework 4.6.2(这个可无需安装,直接安装.NET Framework 4.8)
解决:按照上面操作的提示先安装一个 .NET Framework 4.6.2
https://dotnet.microsoft.com/en-us/download/dotnet-framework/net46
下载离线版
当运行安装时,出现如下错误:
修复:下载适应操作系统补丁
https://www.catalog.update.microsoft.com/search.aspx?q=kb4474419
进行安装,然后根据提示重启计算机
接着安装 .NET Framework 4.6.2
2.3 .NET Framework 4.8
https://dotnet.microsoft.com/en-us/download/dotnet-framework/net48
下载后直接安装即可
安装成功
重新再安装VS2019,选项勾选如下
勾选以上,选择安装位置后,点击安装即可
VS2019安装成功
VS2019 Pro激活码:NYWVH-HT4XC-R2WYW-9Y3CM-X4V3Y
2.4 QT 5.6.0
安装QT,下载地址:https://download.qt.io/new_archive/qt/5.6/5.6.0/
安装时,这里直接默认,没做任何修改,直接下一步安装即可
2.5 SDK 8.1
下载地址:https://developer.microsoft.com/zh-cn/windows/downloads/sdk-archive/
下载完成后,无需做任何修改,直接安装即可
**2.6 Notepad++
下载地址:https://notepad-plus-plus.org/downloads/
后续会用作配置文件等修改
2.7 QT Visual Studio Tools
这里直接在VS中安装(选择“扩展”>“管理扩展”>“在线”,搜索 Qt Visual Studio 工具)
或者直接下载v3.0.2版本
https://download.qt.io/official_releases/vsaddin/
安装成功后,退出VS2019,提示如下,点击 Modify 等待完成即可
0x03 环境变量配置
0x04 项目属性配置
解压源码
找到vmprotect.sln,用vs2019加载后弹出如下界面,全部选择 【无升级】后点击确定即可
设置VS属性管理器,方便设置项目属性
切换到属性管理器,将每个项目属性设置为:
1. Windows SDK 版本:8.1
2. 平台工具集:Visual Studio 2015 – Windows XP (v140_xp)
修改编译模式:Debug _ x64
确定QT插件是否识别
如果没有识别到,手动指定即可
转化 VMProtect 项目
转化完成后,继续右键该项目,选择属性设置
0x05 源码bug修复
遵循下面顺序编译原则:每个模块单独编译,修复所有报错
5.1 Common模块
Intel.cc:修复 Mutate函数
1 | void IntelFunction::Mutate( const CompileContext &ctx, bool for_virtualization, int index)
|
Intel.cc:修复 Compile函数
1 | void IntelObfuscation::Compile(IntelFunction *func, size_t index, size_t end_index, bool for_virtualization)
|
5.2 Misc模块
通过Notepad++将 /vmp/unit-tests/core_tests.cc 编码格式转换为 UTF-8 后保存
这个模块重新生成后,还遗留4个错误,暂时不管,先编译其它模块
5.3 MiniDumpFixer
无需修复
5.4 VMProtect.Runtime
单击VMProtect.Netcore模块进入csproj文件,修改如下内容:
1 2 3 | < TargetFrameworks >netstandard2.1;netcoreapp3.0;net20;net40;net48</ TargetFrameworks >
< RuntimeIdentifier >win-x64</ RuntimeIdentifier >
|
5.5 VMProtect.SDK
无需修复
5.6 VMProtectSDK
无需修复
5.7 VMProtectCon
无需修复
5.8 Win_runtime
无需修复
5.9 VMProtect
查看报错信息,显示res.bat存在问题
1 2 3 4 5 | 修复:
在源码 / vmp / VMProtect / res.bat 文件中
将相对路径: % QTDIR % / msvc2015_64 / bin / rcc.exe % RC_DIR % application.qrc - o % rc_out %
修改为绝对路径:
E: / Qt / Qt5. 6.0 / 5.6 / msvc2015_64 / bin / rcc.exe % RC_DIR % application.qrc - o % rc_out %
|
0x06 初运行
当点击 *本地Windows调试器 *执行时,弹出如下错误
将VMProtect模块右键设置为启动项目,重新执行则正常运行
0x07 VMProtect->ScintillaQT
经测试,这个QT模块中的错误全部来源于没有相应的头文件导致
相关开源代码可参考 notepad-plus-plus
https://github.com/notepad-plus-plus/notepad-plus-plus/tree/master/scintilla/qt/ScintillaEditBase
7.1 PlatQT.h
保持和如下头文件一致即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
7.2 PlatQT.cc
7.3 ScintillaEditBase.h
7.4 ScintillaEditBase.cc
7.5 ScintillaQt.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | |
7.6 ScintillaQt.cc
0x08 处理编译器所有告警
关于编码告警告处理
将以下源码文件通过Notepad++转换编码格式为:UTF-8
1 2 3 4 5 6 7 8 | Crypto.h
Watermarks_window.cc
Inifile.h
Models.cc
Mainwindow.cc
Main.cc
Registry_manager.cc
Pdb.h
|
将gmock-matchers.cc源码文件通过记事本另存的方式转换为unicode格式进行替换
关于C4996警告处理
严重性 |
代码 |
说明 |
项目 |
文件 |
警告 |
C4996 |
'std::tr1': warning STL4002: The non-Standard std::tr1 namespace and TR1-only machinery are deprecated and will be REMOVED. You can define _SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING to acknowledge that you have received this warning. |
gtest/unit-tests/win_runtime.Tests |
C:\Users\nothx\Desktop\vmp\third-party\gmock\include\gmock\internal\gmock-generated-internal-utils.h |
涉及该警告的主要是Misc模块下面的gtest/unit-tests/win_runtime.Tests三个文件
相应的模块上右键->属性->C/C++->预处理器->预处理器定义
添加宏:_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING
关于 目标框架“netcoreapp3.0”不受支持,将来不会收到安全更新 警告处理
单击VMProtect.Netcore模块,增加如下内容
1 | <CheckEolTargetFramework> false </CheckEolTargetFramework>
|
关于 MSB8051 面向 Windows XP 的支持已被弃用,将来的 Visual Studio 版本不再提供该支持 警告处理
1 2 3 | 文件路径:
E:\Microsoft Visual Studio\2019\Professional\MSBuild\Microsoft\VC\v150\Platforms\x64\PlatformToolsets\v141_xp\Toolset.targets
|
1 2 3 4 5 | < VCMessage Code = "MSB8051" Type = "Warning" Condition = "'$(XPDeprecationWarning)' != 'false'" />
修改为
< VCMessage Code = "MSB8051" Type = "Warning" Condition = "'$(XPDeprecationWarning)' == 'false'" />
|
关于 D9030 “/Gm”与多处理不兼容;忽略 /MP 开关 警告处理
将 启用最小重新生成 修改为 否(/Gm-)
0x09 授权
将/vmp/core/VMProtectLicense.ini 拷贝至/vmp/bin/64/Debug/目录
测试功能,加壳保护后程序依然正常运行
0x10 静态编译(续)
[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。