VMProtect是一种很可靠的工具,可以保护应用程序代码免受分析和破解,但只有在应用程序内保护机制正确构建且没有可能破坏整个保护的严重错误的情况下,才能实现最好的效果。
之前对主窗口进行了介绍,接下来我们将对VMProtect中强大的内置脚本的使用进行介绍,希望对您有所帮助。>>体验VMProtect最新试用版
VMProtect具有内置的强大脚本语言LUA,极大地增强了VMProtect在每个保护阶段的默认保护功能。LUA语法非常类似于JavaScript,但与之不同的是,LUA不包含显式类。不过,脚本语言允许轻松地实现类、继承和事件等面向对象的编程机制。
对于如何使用脚本语言,可以进行以下三类的介绍:
- 类
- 内置功能
- 事件
第一部分:类
VMProtect中内置的脚本语言LUA是面向对象的:它在语法,意识形态和实现方面与JavaScript非常相似。脚本语言包括提供基本功能的标准类和提供对应用程序保护功能的访问的专用类。
▲核心
项目选择:
enum ProjectOption { None, Pack, ImportProtection, MemoryProtection, ResourceProtection, CheckDebugger, CheckKernelDebugger, CheckVirtualMachine, StripFixups, StripDebugInfo, DebugMode }
使用VMProtect核心的类:
class Core { public: string projectFileName();//返回项目的名称 void saveProject(); //保存项目 string inputFileName(); //返回当前项目的源文件的名称 string outputFileName(); //返回当前项目的输出文件的名称 void setOutputFileName(string name); //设置当前项目的输出文件的名称 string watermarkName(); //返回当前项目水印的名称 void setWatermarkName(string name); //设置当前项目的水印名称 int options(); //返回当前项目的选项 void setOptions(int options); //设置当前项目的选项 string vmSectionName(); //返回当前项目的VM段名称 void setVMSectionName(); //设置当前项目的VM段名称 Licenses licenses(); //返回当前项目的许可证列表 Files files(); //返回当前项目的文件列表 Watermarks watermarks(); //返回水印列表 PEFile/MacFile inputFile(); //返回源文件 PEFile/MacFile outputFile();//返回输出文件 PEArchitecture/MacArchitecture inputArchitecture(); //返回源架构 PEArchitecture/MacArchitecture outputArchitecture();//返回输出架构 };
▲水印
用于处理水印列表的类:
class Watermarks { public: Watermark item(int index); //返回带有给定索引的水印 int count(); //返回列表中的一些水印 Watermark itemByName(string name);//返回带有给定名称的水印 }
使用水印的类:
class Watermark {public: string name(); //返回水印的名称 string value();//返回水印的值 bool blocked();//返回“Blocked”属性 void setBlocked(bool value); //设置“Blocked”属性}
▲许可证
用于处理许可证列表的类:
class Licenses { public: int keyLength(); //返回键的长度 string publicExp(); //返回公共指数 string privateExp(); //返回私有指数 string modulus(); //返回模量 License item(int index); // 返回具有给定索引的许可证 int count(); //返回列表中的许可证数量 }
使用许可证的类:
class License { public: string date(string format = "%c"); //返回许可证的日期 string customerName(); //返回许可证所有者的名称 string customerEmail(); //返回许可证所有者的电子邮件 string orderRef();//返回购买许可证的订单id string comments();//返回许可的注释 string serialNumber(); //返回许可证的序列号 bool blocked(); //返回“Blocked”属性 void setBlocked(bool value); //设置“Blocked”属性 }
▲文件
用于处理文件列表的类:
class Files { public: File item(int index); // 返回具有给定索引的文件 int count(); //返回列表中的文件数量 }
使用文件的类:
class File { public: string name(); //返回文件的名称 string fileName(); //返回文件名 int options(); //返回选项 void setName(string name);//设置文件的名称 void setFileName(string name);//设置文件的文件名 void setOptions();//设置选项 }
-- 持续更新中