VMProtect是一种很可靠的工具,可以保护应用程序代码免受分析和破解,但只有在应用程序内保护机制正确构建且没有可能破坏整个保护的严重错误的情况下,才能实现最好的效果。
【下载VMProtect最新试用版】
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正版授权专享在线订购特享超低价格!还不赶紧加入你的订购清单/span>>>更多详情可点击咨询购买
标签:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!