作者论坛账号:我爱胡萝卜
VMP源码编译
话不多说,先上成果图:
整天两天,全是bug,不是这⾥问题就是那⾥问题,还是⻅都没⻅过的。
整个项⽬就是默认论坛⾥的那个直接打开就好了。
⼤概说⼀下:⾸先说⼀下环境问题:我是VS2019 +QT5.60 + Windows SDK 8.1 +.net4.5
先说VS⾥⾯的:
由于初始项⽬默认我打开的时候是显示Visual Studio 2015 - Windows XP (v140_xp) 所以我们最好跟他差不多就⾏了。
开始:
我们运⾏VS的visual studio installer:点击修改 在单个组件⾥⾯搜2015
安装的时候我们可以看到组件⾥⾯只有:vs2015 不带xp环境;我们勾上他
安装1:勾选上vs2015 C++⼯具集
安装2:安装一个vs2017 xp支持组件
安装3:接下来需要下载一个Windows 8.1 sdk,因为需要支持xp,不能用Windows 10 sdk,我觉得应该是这样,建议下载。微软sdk下载官网。
ht--tps://developer.microsoft.com/zh-cn/windows/downloads/sdk-archive/
安装好了就可以重启。我们点击视图->其他窗口->属性管理器,方便设置属性
现在就可以给项目设置属性了:右键项目,属性
全部都设置一下
设置目标平台版本:8.1
平台工具集:vs2015 xp
其他都是默认。
现在说QT:
安装4:
qt-opensource-windows-x86-msvc2015_64-5.6.0.exe
QT在清华源下载
ht--tps://download.qt.io/new_archive/qt/5.6/5.6.0/
安装5:vs的QT插件:因为我的是vs2019,新版的vsaddin支持不好我选择qt-vsaddin-msvc2019-2.4.3.vsix
https://mirrors.tuna.tsinghua.edu.cn/qt/archive/vsaddin/2.4.3/
安装这个插件是因为下面这个项目需要用QT插件转化一下:
安装完记得把这个插件设置一下:别让他更新了。
然后我们就要设置环境变量,最好是设置:
安装好QT会有你设置的目录,我们复制能看到bin,include,lib这些目录的路径
我这里是F:\QT\5.15.2\msvc2015_64\5.6\msvc2015_64
环境变量里面新建,QTDIR:
设置好了我们给QT vs的插件配置一下:
因为有系统配置的原因就直接显示了:
没有也没关系,我们add,找到前面说的路径添加进去就好了。
然后我们就对说的那个QT项目转化一下。
转化之后:右键这个项目,属性
修改两个地方:1. Qt Installation 这个要指定我们的QT版本
2.Qt Modules 选择 core gui widgets
以防万一我们把这个项目需要的依赖都设置一下:
我的是:F:\QT\5.15.2\msvc2015_64\5.6\msvc2015_64 下的include和lib
F:\QT\5.15.2\msvc2015_64\5.6\msvc2015_64\include;
F:\QT\5.15.2\msvc2015_64\5.6\msvc2015_64\lib;
附加包含目录也同样设置一下,可能这个设不设置都一样
还有连接器里面的附加依赖项:我们遵循原来初始项目的依赖
他的就是
qtmaind.lib;Qt5Guid.lib;Qt5Cored.lib;Qt5Concurrentd.lib;Qt5Widgetsd.lib;Qt5WinExtrasd.lib;Qt5Helpd.lib;%(AdditionalDependencies)
到这里关于项目属性的应该就设置好了。如果哪里有问题我可以回答下面是跟代码有关的:
intel.cc里面的定义需要修改:
第一个函数是:IntelFunction::Mutate
第二个函数是:IntelObfuscation::Compile
修改成下面的就好了:原因就是定义里面的参数和声明里面的不一样,以前代码编写可能是声明如果写了默认值定义就不用写?
void IntelFunction::Mutate(const CompileContext& ctx, bool for_virtualization, int index )
void IntelObfuscation::Compile(IntelFunction* func, size_t index, size_t end_index , bool for_virtualization )
改了这两玩意core项目就没问题了;
下面是Qt的代码:
首先是PlatQt.h
因为电进去都是报红的,我就直接不管那么多先消掉在说,就添加了很多头文件:
#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"
然后是PlatQt.cc的
还有ScintillaEditBase.h的:
ScintillaEditBase.cc
ScintillaQt.h应该是没有动过;
ScintillaQt.cc的
下面是这个文件:
这个文件是res,bat生成的:
他是在项目的VMProtect文件夹里面
因为我每次编译
echo res.bat: generating QT resources...
SET RC_DIR=%~dp0
set rc_out=%RC_DIR%resources.cc
set rc=%rc_out%
set check_rc=0
if exist %rc_out% (
set rc_out=%RC_DIR%resources.cc.tmp
set check_rc=1
)
F:/QT/5.15.2/msvc2015_64/5.6/msvc2015_64/bin/rcc.exe %RC_DIR%application.q
rc -o %rc_out%
call :ReplaceOld %check_rc% %rc_out% %rc%
goto :EOF
:ReplaceOld
setlocal enableextensions enabledelayedexpansion
if "%1" == "1" (
fc %2 %3 /B>>nul 2>&1
if !ERRORLEVEL! == 1 (
copy /y %2 %3>>nul 2>&1
del %2>>nul 2>&1
echo res.bat: QT resources '%3' are updated
) else (
echo res.bat: QT resources '%3' are up to date
)
) else (
echo res.bat: QT resources '%3' are generated
)
endlocal
goto :EOF
问题大概就是这样了,论坛那个就是完整的。github那个我之前编译不行也不知道为什么。
我记得的问题大概就这么多了,可能还有一些细节问题;
补充一个,打开项目的时候设置为x64,如果你要编译x32就用x32,那就另外的事了,相应的流程也差不多就是编译器切换一下,QT下载32位的。
--------------------------------------------
补充一下core_tests.cc这里,如果不是utf-8编码,这里会是乱码,也会导致报错
方法就是用好点的文本编辑器打开,全部复制粘贴进去就好了,俄文是这样的
VMProtect Leaked Source Code Full
https://www.52pojie.cn/thread-1866430-1-1.html
-官方论坛
www.52pojie.cn
👆👆👆