# VMProtect GUI 界面详解

GUI 界面位于 `code/VMProtect/`,基于 **Qt** 框架开发。
## 1. 主窗口 (mainwindow.h / mainwindow.cc)
### 类定义
“`cpp
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow();
~MainWindow();
protected:
virtual void closeEvent(QCloseEvent *event);
virtual void dragEnterEvent(QDragEnterEvent *event);
virtual void dropEvent(QDropEvent *event);
};
“`
### 主要功能槽函数
“`cpp
private slots:
// 文件操作
void open(); // 打开文件
void loadFile(const QString &filenameOrBundle);
bool save(); // 保存
void saveAs(); // 另存为
bool closeFile(); // 关闭文件
// 编辑操作
void undo(); // 撤销
void redo(); // 重做
void copy(); // 复制
void cut(); // 剪切
void paste(); // 粘贴
// 项目操作
void addFunction(); // 添加函数
void addFolder(); // 添加文件夹
void addFunctionFolder(); // 添加函数文件夹
void rename(); // 重命名
void excludeFromCompilation(); // 排除编译
void block(); // 阻止
void del(); // 删除
// 编译执行
void compile(); // 编译
void execute(); // 执行
void executeOriginal(); // 执行原始文件
void executeProtected(); // 执行保护后的文件
// 许可证
void addLicense(); // 添加许可证
void createKeyPair(); // 创建密钥对
void saveLicenses(); // 保存许可证
// 文件管理
void addFileFolder(); // 添加文件文件夹
void addFile(); // 添加文件
// 帮助
void homePage(); // 主页
void help(); // 帮助
void about(); // 关于
“`
### 数据模型成员
“`cpp
private:
FunctionsModel *functions_model_; // 函数模型
ProjectModel *project_model_; // 项目模型
WatermarksModel *watermarks_model_; // 水印模型
TemplatesModel *templates_model_; // 模板模型
LogModel *log_model_; // 日志模型
InfoModel *info_model_; // 信息模型
DumpModel *dump_model_; // 转储模型
DisasmModel *disasm_model_; // 反汇编模型
SearchModel *search_model_; // 搜索模型
DirectoryModel *directory_model_; // 目录模型
“`
## 2. 数据模型 (models.h / models.cc)
### FunctionsModel – 函数模型
管理目标文件中的函数列表:
“`cpp
class FunctionsModel : public QAbstractItemModel
{
Q_OBJECT
public:
FunctionsModel(QObject *parent = nullptr);
// 模型接口
QModelIndex index(int row, int column, const QModelIndex &parent) const;
QModelIndex parent(const QModelIndex &child) const;
int rowCount(const QModelIndex &parent) const;
int columnCount(const QModelIndex &parent) const;
QVariant data(const QModelIndex &index, int role) const;
QVariant headerData(int section, Qt::Orientation orientation, int role) const;
// 函数操作
void AddFunction(IFunction *func);
void RemoveFunction(IFunction *func);
IFunction *GetFunction(const QModelIndex &index);
};
“`
### ProjectModel – 项目模型
管理保护项目的结构:
“`cpp
class ProjectModel : public QAbstractItemModel
{
Q_OBJECT
public:
ProjectModel(QObject *parent = nullptr);
// 节点操作
ProjectNode *AddFunction(IFunction *func);
ProjectNode *AddFolder(const QString &name);
void RemoveNode(ProjectNode *node);
// 编译选项
void SetCompilationType(ProjectNode *node, CompilationType type);
CompilationType GetCompilationType(ProjectNode *node);
};
“`
### 编译类型
“`cpp
enum CompilationType {
ctUnknown, // 未知
ctCompilation, // 编译(虚拟化)
ctProtection, // 保护(混淆)
ctNoCompilation, // 不编译
ctCount
};
“`
### LogModel – 日志模型
显示编译日志和错误信息:
“`cpp
class LogModel : public QAbstractListModel
{
Q_OBJECT
public:
void AddMessage(MessageType type, const QString &message);
void Clear();
private:
struct LogEntry {
MessageType type;
QString message;
QDateTime timestamp;
};
QList<LogEntry> entries_;
};
“`
## 3. 属性编辑器 (property_editor.h / property_editor.cc)
### 功能
编辑项目中各种对象的属性:
– 函数属性
– 节/段属性
– 导入/导出属性
– 资源属性
– 许可证属性
### 属性管理器
“`cpp
class FunctionPropertyManager : public QtAbstractPropertyManager
{
Q_OBJECT
public:
FunctionPropertyManager(QObject *parent = nullptr);
void SetFunction(IFunction *func);
IFunction *GetFunction() const;
private:
IFunction *function_;
};
class CorePropertyManager : public QtAbstractPropertyManager
{
// 核心属性管理
};
class LicensePropertyManager : public QtAbstractPropertyManager
{
// 许可证属性管理
};
“`
## 4. 自定义控件 (widgets.h / widgets.cc)
### SearchLineEdit – 搜索框
“`cpp
class SearchLineEdit : public QLineEdit
{
Q_OBJECT
public:
SearchLineEdit(QWidget *parent = nullptr);
signals:
void search(const QString &text);
void searchNext();
void searchPrevious();
};
“`
### ScriptEdit – 脚本编辑器
基于 Scintilla 的代码编辑器:
“`cpp
class ScriptEdit : public ScintillaEdit
{
Q_OBJECT
public:
ScriptEdit(QWidget *parent = nullptr);
void SetScript(const QString &script);
QString GetScript() const;
signals:
void modified();
private slots:
void scriptNotify(SCNotification *scn);
};
“`
### FindWidget – 查找控件
“`cpp
class FindWidget : public QWidget
{
Q_OBJECT
public:
FindWidget(QWidget *parent = nullptr);
signals:
void find(const QString &text, bool forward, bool caseSensitive);
void hideFind();
};
“`
### ElidedAction / ToolButtonElided
支持文本省略显示的按钮控件。
## 5. 对话框
### 许可证对话框 (license_dialog.h)
“`cpp
class LicenseDialog : public QDialog
{
Q_OBJECT
public:
LicenseDialog(QWidget *parent = nullptr);
void SetLicense(const LicenseInfo &info);
LicenseInfo GetLicense() const;
private slots:
void generateSerial();
void copySerial();
void verifySerial();
};
“`
### 导入许可证对话框 (import_license_dialog.h)
“`cpp
class ImportLicenseDialog : public QDialog
{
Q_OBJECT
public:
ImportLicenseDialog(QWidget *parent = nullptr);
QString GetSerialNumber() const;
QString GetHWID() const;
};
“`
### 导出密钥对对话框 (export_key_pair_dialog.h)
“`cpp
class ExportKeyPairDialog : public QDialog
{
Q_OBJECT
public:
ExportKeyPairDialog(QWidget *parent = nullptr);
void SetKeyPair(const RSA &rsa);
private slots:
void exportPublicKey();
void exportPrivateKey();
};
“`
### 关于对话框 (about_dialog.h)
“`cpp
class AboutDialog : public QDialog
{
Q_OBJECT
public:
AboutDialog(QWidget *parent = nullptr);
};
“`
### 水印对话框 (watermark_dialog.h)
“`cpp
class WatermarkDialog : public QDialog
{
Q_OBJECT
public:
WatermarkDialog(QWidget *parent = nullptr);
void SetWatermark(const WatermarkInfo &info);
WatermarkInfo GetWatermark() const;
};
“`
### 函数对话框 (function_dialog.h)
“`cpp
class FunctionDialog : public QDialog
{
Q_OBJECT
public:
FunctionDialog(QWidget *parent = nullptr);
void SetFunction(IFunction *func);
private slots:
void findFunction();
void setStartAddress();
void setEndAddress();
};
“`
## 6. 窗口类
### 模板窗口 (templates_window.h)
“`cpp
class TemplatesWindow : public QDialog
{
Q_OBJECT
public:
TemplatesWindow(QWidget *parent = nullptr);
void LoadTemplates();
void SaveTemplates();
private slots:
void addTemplate();
void removeTemplate();
void editTemplate();
void applyTemplate();
};
“`
### 水印窗口 (watermarks_window.h)
“`cpp
class WatermarksWindow : public QDialog
{
Q_OBJECT
public:
WatermarksWindow(QWidget *parent = nullptr);
void LoadWatermarks();
private slots:
void addWatermark();
void removeWatermark();
void editWatermark();
};
“`
### 帮助浏览器 (help_browser.h)
“`cpp
class HelpBrowser : public QDialog
{
Q_OBJECT
public:
HelpBrowser(QWidget *parent = nullptr);
void ShowTopic(const QString &topic);
private slots:
void backward();
void forward();
void home();
};
“`
## 7. 界面布局
### 主窗口布局
“`
+———————————————————-+
| 菜单栏 (File, Edit, View, Project, Help) |
+———————————————————-+
| 工具栏 (Open, Save, Compile, Execute) |
+———————————————————-+
| +—————-+ +———————————-+ |
| | 项目树 | | 属性编辑器 / 脚本编辑器 | |
| | – 函数 | | | |
| | – 文件 | | | |
| | – 许可证 | | | |
| | – 水印 | | | |
| +—————-+ +———————————-+ |
| +—————————————————-+ |
| | 日志 / 信息 / 转储 / 反汇编 | |
| +—————————————————-+ |
+———————————————————-+
| 状态栏 |
+———————————————————-+
“`
### 项目树结构
“`
Project
├── Functions
│ ├── Function1 (虚拟化)
│ ├── Function2 (混淆)
│ └── Folder1
│ ├── Function3
│ └── Function4
├── Files
│ ├── File1
│ └── Folder2
│ └── File2
├── Licenses
│ ├── License1
│ └── License2
└── Watermarks
└── Watermark1
“`
## 8. 样式表 (styles.qss)
VMProtect 使用 Qt 样式表自定义界面外观:
“`css
/* 主窗口 */
QMainWindow {
background-color: #f0f0f0;
}
/* 工具栏 */
QToolBar {
background-color: #ffffff;
border-bottom: 1px solid #cccccc;
}
/* 按钮 */
QToolButton {
border: none;
padding: 4px;
}
QToolButton:hover {
background-color: #e0e0e0;
}
/* 树形控件 */
QTreeView {
background-color: #ffffff;
border: 1px solid #cccccc;
}
QTreeView::item:selected {
background-color: #0078d7;
color: white;
}
/* 属性编辑器 */
QtPropertyBrowser {
background-color: #ffffff;
}
“`
## 9. 图标资源
图标位于 `code/VMProtect/images/`:
| 图标 | 用途 |
|——|——|
| `open.png` | 打开文件 |
| `save.png` | 保存 |
| `compile.png` | 编译 |
| `execute.png` | 执行 |
| `add.png` | 添加 |
| `delete.png` | 删除 |
| `copy.png` | 复制 |
| `cut.png` | 剪切 |
| `paste.png` | 粘贴 |
| `folder.png` | 文件夹 |
| `functions.png` | 函数 |
| `key.png` | 密钥 |
| `code.png` | 代码 |
| `database.png` | 数据库 |
| `gear.png` | 设置 |
| `help_icon.png` | 帮助 |
| `information.png` | 信息 |
| `warning.png` | 警告 |
| `error.png` | 错误 |
| `logo.png` | 程序图标 |
## 10. 远程控制 (remotecontrol.h)
支持 IDE 集成,允许从外部程序控制 VMProtect:
“`cpp
class RemoteControl : public QObject
{
Q_OBJECT
public:
RemoteControl(QObject *parent = nullptr);
bool StartServer();
void StopServer();
signals:
void compileRequested();
void executeRequested();
private slots:
void handleConnection();
void processCommand();
};
“`














暂无评论内容