VMProtect是一种很可靠的工具,可以保护应用程序代码免受分析和破解,但只有在应用程序内保护机制正确构建且没有可能破坏整个保护的严重错误的情况下,才能实现最好的效果。

本文继续对VMProtect中强大的内置脚本的使用进行介绍,希望对您有所帮助。

下载VMProtect最新试用版https://www.evget.com/product/1859/download

VMProtect具有内置的强大脚本语言LUA,极大地增强了VMProtect在每个保护阶段的默认保护功能。LUA语法非常类似于JavaScript,但与之不同的是,LUA不包含显式类。不过,脚本语言允许轻松地实现类、继承和事件等面向对象的编程机制。

对于如何使用脚本语言,可以进行以下三类的介绍:

  • 内置功能
  • 事件

第一部分:类

VMProtect中内置的脚本语言LUA是面向对象的:它在语法,意识形态和实现方面与JavaScript非常相似。脚本语言包括提供基本功能的标准类和提供对应用程序保护功能的访问的专用类。

▲文件夹

使用自定义文件夹的类:

class Folders {
public:int count(); //返回列表中文件夹的数量Folder item(int index); //返回具有给定索引的文件夹Folder add(string name);//添加一个新文件夹void clear(); //清除列表
};

:使用自定义文件夹的类:

class Folder {
public:int count(); //返回子文件夹的数量Folder item(int index); //返回具有给定索引的子文件夹Folder add(string name);//添加一个新的子文件夹string name(); //返回文件夹的名称void clear(); //清除子文件夹列表void destroy(); //销毁所有子文件夹中的文件夹
};

▲PE文件

使用PE格式的常量:

enum PEFormat {//目录条目IMAGE_DIRECTORY_ENTRY_EXPORT,IMAGE_DIRECTORY_ENTRY_IMPORT,IMAGE_DIRECTORY_ENTRY_RESOURCE,IMAGE_DIRECTORY_ENTRY_EXCEPTION,IMAGE_DIRECTORY_ENTRY_SECURITY,IMAGE_DIRECTORY_ENTRY_BASERELOC,IMAGE_DIRECTORY_ENTRY_DEBUG,IMAGE_DIRECTORY_ENTRY_ARCHITECTURE,IMAGE_DIRECTORY_ENTRY_TLS,IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG,IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT,IMAGE_DIRECTORY_ENTRY_IAT,IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT,IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR,//部分特征IMAGE_SCN_CNT_CODE,IMAGE_SCN_CNT_INITIALIZED_DATA,IMAGE_SCN_CNT_UNINITIALIZED_DATA,IMAGE_SCN_MEM_DISCARDABLE,IMAGE_SCN_MEM_NOT_CACHED,IMAGE_SCN_MEM_NOT_PAGED,IMAGE_SCN_MEM_SHARED,IMAGE_SCN_MEM_EXECUTE,IMAGE_SCN_MEM_READ,IMAGE_SCN_MEM_WRITE,//资源类型RT_CURSOR,RT_BITMAP,RT_ICON,RT_MENU,RT_DIALOG,RT_STRING,RT_FONTDIR,RT_FONT,RT_ACCELERATOR,RT_RCDATA,RT_MESSAGETABLE,RT_GROUP_CURSOR,RT_GROUP_ICON,RT_VERSION,RT_DLGINCLUDE,RT_PLUGPLAY,RT_VXD,RT_ANICURSOR,RT_ANIICON,RT_HTML,RT_MANIFEST,RT_DLGINIT,RT_TOOLBAR
};

处理PE文件的类:

public:string name(); //返回文件名string format(); //返回“PE”格式名称uint64 size(); //返回文件的大小int count(); //返回列表中的体系结构数量PEArchitecture item(int index); //返回具有给定索引的体系结构uint64 seek(uint64 offset); //设置文件位置uint64 tell(); //返回文件位置int write(string buffer); //记录文件的缓冲区
};

一个使用PE架构的类:

class PEArchitecture {
public:string name(); //返回体系结构的名称PEFile file(); //返回父文件uint64 entryPoint(); //返回起始地址uint64 imageBase(); // returns the base offsetOperandSize cpuAddressSize(); //返回基偏移量uint64 size(); //返回体系结构的位计数PESegments segments(); //返回架构的大小PESections sections(); //返回段列表PEDirectories directories(); //返回节的列表PEImports imports(); //返回目录列表PEExports exports(); //返回导入库的列表PEResources resources(); //返回导出函数的列表PEFixups fixups(); //返回资源列表MapFunctions mapFunctions(); //返回重置(修复)列表IntelFunctions functions(); //返回可用于保护的函数列表bool addressSeek(uint64 address); //返回受保护函数的列表uint64 seek(uint64 offset); //设置文件位置uint64 tell(); //返回文件位置int write(string buffer); //将缓冲区写入文件
};

一个与PE架构段一起工作的类:

class PESegment {
public:uint64 address(); //返回段的地址string name(); //返回段的名称uint64 size(); //返回段的大小int physicalOffset(); //返回段的文件位置(偏移量)int physicalSize(); //返回段的文件大小int flags(); //返回段的标志bool excludedFromPacking(); //返回“排除包装”属性void setName(string name); //设置段的名称
};

一个处理PE架构部分列表的类:

class PESections {
public:
PESection item(int index); //返回具有给定索引的节
int count(); //返回列表中的节数
PESection itemByAddress(uint64 address); //返回给定地址的部分
};

与PE架构部分一起工作的类:

class PESection {
public:
uint64 address(); //返回该节的地址
string name(); //返回该节的名称
uint64 size(); //返回该节的大小
int offset(); //返回该节的文件位置
PESegment segment(); //返回父段
};

与PE体系结构目录一起使用的类:

class PEDirectories {
public:
PEDirectory item(int index); //返回具有给定索引的目录
int count(); //返回列表中的目录数
PEDirectory itemByType(int type); //返回给定类型的目录
};

一个使用PE架构目录的类:

class PEDirectory {
public:
uint64 address(); //返回目录的地址
string name(); //返回目录名
uint64 size(); //返回目录的大小
int type(); //返回目录的类型
void setAddress(uint64 address); //设置目录的地址
void setSize(int size); //设置目录的大小
void clear(); //清除目录的地址和大小
};

用于PE体系结构的导入库列表的类:

class PEImports {
public:PEImport item(int index); //返回具有给定索引的库int count(); //返回列表中库的数量PEImport itemByName(string name); //返回具有给定名称的库
};

用于PE架构的导入库的类:

class PEImport {
public:
string name(); //返回库的名称
PEImportFunction item(int index); //返回带有给定索引的导入函数
int count(); //返回导入函数的数量
void setName(string name); //设置库的名称
};

使用PE架构导入函数的类:

class PEImportFunction {
public:
uint64 address(); //返回存储导入函数地址的内存地址
string name();  //返回导入函数的名称
};

用于PE体系结构的导出函数列表的类:

class PEExports {
public:string name(); //返回库的名称PEExport item(int index); //返回具有给定索引的导出函数int count(); //返回列表中导出函数的数量void clear(); //清除列表PEExport itemByAddress(uint64 address); //返回指定地址的导出函数PEExport itemByName(string name); //返回具有给定名称的导出函数
};

一个带有PE架构导出功能的wotk类:

class PEExports {
public:class PEExport {
public:
uint64 address(); //返回导出函数的地址
string name(); //返回导出函数的名称
int ordinal();  //返回导出函数的序号
string forwardedName(); //返回导出函数转发给的函数的名称
void destroy(); //销毁导出的函数
};

一个处理PE架构资源列表的类:

class PEResources {
public:
PEResource item(int index); //返回具有给定索引的资源
int count(); //返回列表中的资源数量
void clear(); //清除列表
PEResource itemByType(int type); //返回给定类型的资源
PEResource itemByName(string name); //返回具有给定名称的资源
};

一个使用PE架构资源的类:

class PEResource {
public:
PEResource item(int index); //返回具有给定索引的资源
int count(); //返回列表中的资源数量
void clear(); //清除列表
uint64 address(); //返回资源的地址
int size(); //返回资源的大小
string name(); //返回资源的名称
int type(); //返回资源的类型
bool isDirectory(); //返回“Directory”属性
void destroy(); //销毁资源
PEResource itemByName(string name); //返回具有给定名称的资源
bool excludedFromPacking(); //返回“排除包装”属性
};

处理PE架构修复(重定位)列表的类:

class PEFixups {
public:
PEFixup item(int index); //返回具有给定索引的元素
int count(); //返回列表中的元素数量
PEFixup itemByAddress(uint64 address); //返回给定地址的元素
};

使用PE架构修复(重新定位)的类:

class PEFixup {
public:
uint64 address(); //返回元素的地址
};

代码保护软件VMProtect用户手册之内置脚本的使用(2)——PE文件相关推荐

  1. 代码保护软件VMProtect用户手册之内置功能(1)——字符串功能作用

    VMProtect是一种很可靠的工具,可以保护应用程序代码免受分析和破解,但只有在应用程序内保护机制正确构建且没有可能破坏整个保护的严重错误的情况下,才能实现最好的效果. 本文继续对VMProtect ...

  2. 代码保护软件 VMProtect 用户手册:分析,破解和保护软件

    是一款虚拟机保护软件,是目前最为流行的保护壳之一.VMProtect将保护后的代码放到虚拟机中运行, 这将使分析反编译后的代码和破解变得极为困难.除了代码保护,VMProtect 还可以生成和验证序列 ...

  3. 代码保护软件VMProtect用户手册主窗口之主菜单

    VMProtect是一种很可靠的工具,可以保护应用程序代码免受分析和破解,但只有在应用程序内保护机制正确构建且没有可能破坏整个保护的严重错误的情况下,才能实现最好的效果. 下载VMProtect最新试 ...

  4. 代码保护软件VMProtect用户手册主窗口之控制面板“项目”部分(4)

    VMProtect是一种很可靠的工具,可以保护应用程序代码免受分析和破解,但只有在应用程序内保护机制正确构建且没有可能破坏整个保护的严重错误的情况下,才能实现最好的效果. 下载VMProtect最新试 ...

  5. 代码保护软件 VMProtect 用户手册: 保护应用程序的三大要素

    VMProtect 是一种很可靠的工具,可以保护应用程序代码免受分析和破解,但只有在应用程序内保护机制正确构建且没有可能破坏整个保护的严重错误的情况下,才能实现最好的效果. 让我们一起来看看为应用程序 ...

  6. 代码保护软件 VMProtect 用户手册之准备项目: 使用标记

    VMProtect​​​​​​​ 是一种很可靠的工具,可以保护应用程序代码免受分析和破解,但只有在应用程序内保护机制正确构建且没有可能破坏整个保护的严重错误的情况下,才能实现最好的效果 要保护代码的各 ...

  7. 代码保护软件 VMProtect 用户手册之使用VMProtect: 准备项目

    VMProtect 是一种很可靠的工具,可以保护应用程序代码免受分析和破解,但只有在应用程序内保护机制正确构建且没有可能破坏整个保护的严重错误的情况下,才能实现最好的效果. VMProtect最新试用 ...

  8. 代码保护软件 VMProtect 3.3已将Taggant System移除

    VMProtect通过在具有非标准体系结构的虚拟机上执行代码来保护代码,这将使分析和破解软件变得十分困难.除此之外,VMProtect还可以生成和验证序列号,限制免费升级等等. 本篇文章主要是想告知大 ...

  9. 代码加密软件VMProtect 全新v3.6震撼上线,强势助力软件加密

    VMProtect 是一款性能强悍且无需任何解密代码的实力派软件保护解决方案! VMProtect 从发行以来,因其虚拟化代码,无需解码.支持几乎所有可执行文件格式及Windows等特点,深受开发者信 ...

最新文章

  1. 使用datatables实现列宽设置、水平滚动条、显示某列部分内容
  2. Python 三十大实践、建议和技巧(附代码链接)
  3. PHP 安全email
  4. Linux下查看操作系统的位数和系统名称版本信息
  5. 解决SpringMVC中的 Could not find acceptable represent
  6. 采用递归与栈结合的方式实现迷宫分析与走迷宫(python3)
  7. 不编程也开发13个无需编程的iOS开发工具
  8. 计算机硬盘如何安装系统,电脑硬盘怎么装系统
  9. caxa画图怎么倒角_CAXA怎么画倒角和圆角?
  10. 《基于深度学习的自然语言处理》中文PDF+英文PDF+学习分析
  11. 3月24日服务器维护公告,梦幻西游3月24日更新了什么_梦幻西游3月24日维护及系统调整公告_游戏堡...
  12. 每日新闻丨2020年芯片产业即迎来大变局;AMD推出64核128线程HEDT平台
  13. srand( 在php,PHP srand( )用法及代码示例
  14. bzoj3168 [Heoi2013]钙铁锌硒维生素(矩阵求逆+匈牙利)
  15. log4j2设置控制台日志打印颜色
  16. 上位机发送与接收下位机数据
  17. XILINX 7series/ultrascale IDDR/ODDR使用区别
  18. Vivado中DDR4的使用
  19. 软件开源真正意义何在?
  20. html游戏 养狗,养宠物游戏哪个好玩 手机上最火爆的十款养宠物游戏推荐

热门文章

  1. Web端点餐系统(HTML5 + CSS3 + JS(jQuery))
  2. Cortex-M3存储器映射
  3. 猿创征文|ES索引字段映射类型以及ES底层打分逻辑
  4. HDU 5375 Gray code (简单dp)
  5. 文字检测识别技术的未来发展趋势和面临的选择
  6. 机器学习课程-北京大学蒋严冰.md
  7. 幼儿园老师计算机培训,幼儿园教师计算机培训计划方案
  8. 「C/C++」C/C++软件跨平台思维
  9. Revit Navisworks 二次开发—获取材质贴图
  10. Unity知识二:显示和隐藏游戏对象