首页
社区
课程
招聘
[原创][分享] VMP源码编译之Debug_x64模式(新)
2023-12-14 20:00 11937

[原创][分享] VMP源码编译之Debug_x64模式(新)

2023-12-14 20:00
11937

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
#include <QPaintDevice>
#include <QFont>
#include <QColor>
#include <QRect>
#include <QPixmap>
#include <qpainter.h>
#include <QListWidget>
#include <qtextcodec.h>
#include <qtextlayout.h>
#include <qpaintdevice.h>
#include <QPaintEngine>
#include <qdesktopwidget.h>
#include <qapplication.h>
#include <QMenu>
#include <QLibrary>
#include <QMessageBox>
#include <QTime>
#include "Platform.h"

7.2 PlatQT.cc

1
2
3
#include "PlatQt.h"
#include "FontQuality.h"
#include "ScintillaQt.h"

7.3 ScintillaEditBase.h

1
2
3
4
5
6
7
#include <QTime>
#include <QObject>
#include <vector>
#include <QAbstractScrollArea>
#include "qmimedata.h"
#include "ScintillaQt.h"
#include "qwidget.h"

7.4 ScintillaEditBase.cc

1
2
3
4
5
6
#include <QScrollBar>
#include <QTextFormat>
#include <QClipboard>
#include "ScintillaEditBase.h"
#include "ScintillaQt.h"
#include "PlatQt.h"

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
#include "Scintilla.h"
#include "Platform.h"
#include "ILexer.h"
#include "SplitVector.h"
#include "Partitioning.h"
#include "RunStyles.h"
#include "ContractionState.h"
#include "CellBuffer.h"
#include "CallTip.h"
#include "KeyMap.h"
#include "Indicator.h"
#include "XPM.h"
#include "LineMarker.h"
#include "Style.h"
#include "AutoComplete.h"
#include "ViewStyle.h"
#include "CharClassify.h"
#include "Decoration.h"
#include "CaseFolder.h"
#include "Document.h"
#include "Selection.h"
#include "PositionCache.h"
#include "Editor.h"
#include "ScintillaBase.h"
#include "CaseConvert.h"
#include "qclipboard.h"

7.6 ScintillaQt.cc

1
2
3
4
5
6
7
8
#include <QTextCodec>
#include <QScrollBar>
#include <QTimer>
#include <QDrag>
#include <QClipboard>
#include <QMimeData>
#include "PlatQt.h"
#include "ScintillaQt.h"

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漏洞挖掘与利用;代码审计。

收藏
点赞15
打赏
分享
最新回复 (21)
雪    币: 24
活跃值: (90)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
丿丶小强 2023-12-15 00:58
2
0
沙发~
雪    币: 4038
活跃值: (1734)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mfkiwl 2023-12-15 03:15
3
0
整到一个网盘里呗,这样就方便了
雪    币: 5163
活跃值: (3250)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
樂樂 2023-12-15 08:05
4
0
感谢分享 期待0x10 静态编译(续)
雪    币: 287
活跃值: (275)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wx_姓郑的都挺乐观i 2023-12-15 08:35
5
0
nice
雪    币: 2214
活跃值: (729)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
NoThx 2023-12-15 09:05
6
1
所需环境网盘可下载。
链接: https://pan.baidu.com/s/1FJML6hmIMxAn6qQeeDJfkA?pwd=drxd 提取码: drxd
雪    币: 1412
活跃值: (4209)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
IamHuskar 4 2023-12-15 09:27
7
0
支持一下。保姆级别的了
雪    币: 8285
活跃值: (1767)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
广岛秋泽 2023-12-15 10:04
8
0
支持~
雪    币: 59
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_man_611 2023-12-15 10:43
9
0
感谢,如果有精力,直接吧虚拟机也上传吧,来个阿里云吧,度盘下载恶心死人了
雪    币: 774
活跃值: (1516)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
tjszlqq 1 2023-12-15 11:20
10
0
很牛哇!
雪    币: 1337
活跃值: (1256)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xggd 2023-12-15 21:48
11
0
期待静态编译教程,试了几天没成功。
雪    币: 19431
活跃值: (29097)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
秋狝 2023-12-15 23:36
12
1
感谢分享
雪    币: 5163
活跃值: (3250)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
樂樂 2023-12-16 10:46
13
0
QT好难编译啊!静态更难
雪    币: 2012
活跃值: (2775)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
xiaohang 3 2023-12-17 11:24
14
0
我也尝试搭编译环境了,卡在了qt,本来就是是来学习核心的,感觉界面这块用不到就放弃了,能编译核心就行。没用虚拟机,感觉用来了虚拟机,阅读代码时没法使用多屏。建议楼主直接把vm镜像贴出来,可以帮大家省很多麻烦
雪    币: 1761
活跃值: (2073)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
iamshy 2023-12-18 14:50
15
0
多谢分享
雪    币: 14
活跃值: (1929)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
helloworda 2023-12-18 17:17
16
0
+1 希望楼主直接分析编译好的vm虚拟机
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
一点不会 2023-12-18 21:38
17
0
错误        MSB4181        “QtRunWork”任务返回了 false,但未记录错误。        VMProtect        C:\Users\chen\AppData\Local\QtMsBuild\qt_globals.targets        272        
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
一点不会 2023-12-20 20:01
18
0
俺也编译出来了
雪    币: 32
活跃值: (492)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
natpacket 2023-12-21 15:58
19
0
俺也编译出来了
雪    币: 255
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
ShaShen4404 2024-2-22 15:28
20
0
感谢分享
雪    币: 21
活跃值: (641)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
vbuser 2024-2-28 09:30
21
0
感谢分享,必须收藏!
雪    币: 2214
活跃值: (729)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
NoThx 2024-3-5 18:07
22
0
有兄弟反馈资源失效,重新补充:

链接: https://pan.baidu.com/s/1Zaj4unIjHtvoyL33UIBDlA?pwd=8jwf 提取码: 8jwf
游客
登录 | 注册 方可回帖
返回