VMProtect是一种很可靠的工具,可以保护应用程序代码免受分析和破解,但只有在应用程序内保护机制正确构建且没有可能破坏整个保护的严重错误的情况下,才能实现最好的效果。
【下载VMProtect最新试用版】
VMProtect具有内置的强大脚本语言LUA,极大地增强了VMProtect在每个保护阶段的默认保护功能。LUA语法非常类似于JavaScript,但与之不同的是,LUA不包含显式类。不过,脚本语言允许轻松地实现类、继承和事件等面向对象的编程机制。
对于如何使用脚本语言,可以进行以下三类的介绍:
- 类
- 内置功能
- 事件
第一部分:类
VMProtect中内置的脚本语言LUA是面向对象的:它在语法,意识形态和实现方面与JavaScript非常相似。脚本语言包括提供基本功能的标准类和提供对应用程序保护功能的访问的专用类。
▲Mach-O文件
使用Mach-O格式的常量:
enum MacFormat {//Load命令类型LC_SEGMENT,LC_SYMTAB,LC_SYMSEG,LC_THREAD,LC_UNIXTHREAD,LC_LOADFVMLIB,LC_IDFVMLIB,LC_IDENT,LC_FVMFILE,LC_PREPAGE,LC_DYSYMTAB,LC_LOAD_DYLIB,LC_ID_DYLIB,LC_LOAD_DYLINKER,LC_PREBOUND_DYLIB,LC_ROUTINES,LC_SUB_FRAMEWORK,LC_SUB_UMBRELLA,LC_SUB_CLIENT,LC_SUB_LIBRARY,LC_TWOLEVEL_HINTS,LC_PREBIND_CKSUM,LC_LOAD_WEAK_DYLIB,LC_SEGMENT_64,LC_ROUTINES_64,LC_UUID,LC_RPATH,LC_CODE_SIGNATURE,LC_SEGMENT_SPLIT_INFO,LC_REEXPORT_DYLIB,LC_LAZY_LOAD_DYLIB,LC_ENCRYPTION_INFO,LC_DYLD_INFO,LC_DYLD_INFO_ONLY,LC_LOAD_UPWARD_DYLIB,LC_VERSION_MIN_MACOSX,//段类型SECTION_TYPE,SECTION_ATTRIBUTES,S_REGULAR,S_ZEROFILL,S_CSTRING_LITERALS,S_4BYTE_LITERALS,S_8BYTE_LITERALS,S_LITERAL_POINTERS,S_NON_LAZY_SYMBOL_POINTERS,S_LAZY_SYMBOL_POINTERS,S_SYMBOL_STUBS,S_MOD_INIT_FUNC_POINTERS,S_MOD_TERM_FUNC_POINTERS,S_COALESCED,S_GB_ZEROFILL,S_INTERPOSING,S_16BYTE_LITERALS,S_DTRACE_DOF,S_LAZY_DYLIB_SYMBOL_POINTERS,SECTION_ATTRIBUTES_USR,S_ATTR_PURE_INSTRUCTIONS,S_ATTR_NO_TOC,S_ATTR_STRIP_STATIC_SYMS,S_ATTR_NO_DEAD_STRIP,S_ATTR_LIVE_SUPPORT,S_ATTR_SELF_MODIFYING_CODE,S_ATTR_DEBUG,SECTION_ATTRIBUTES_SYS,S_ATTR_SOME_INSTRUCTIONS,S_ATTR_EXT_RELOC,S_ATTR_LOC_RELOC};
一个使用Mach-O文件的类:
class MacFile {public:string name(); //返回文件string format(); //返回“Mach-O”格式的uint64 size(); //返回文件的大小int count(); // 返回列表中的体系结构数量MacArchitecture item(int index); //返回具有给定索引的体系结构uint64 seek(uint64 offset); //设置文件位置uint64 tell(); // 返回文件位置int write(string buffer); // 向文件写入缓冲区};
一个使用Mach-O架构的类:
class MacArchitecture {public:string name(); //返回体系结构的名称MacFile file(); //返回父文件uint64 entryPoint(); //返回起始地址OperandSize cpuAddressSize(); //返回体系结构的位计数uint64 size(); //返回架构的大小MacSegments segments(); //返回段列表MacSections sections(); //返回节的列表MacCommands commands(); //返回加载命令列表MacSymbols symbols(); //返回符 列表MacImports imports(); //返回导入库的列表MacExports exports(); //返回导出函数的列表MacFixups fixups(); //返回修复程序列表(重新定位)MapFunctions mapFunctions(); //返回可用于保护的函数列表IntelFunctions functions(); //返回受保护函数的列表bool addressSeek(uint64 address); //设置文件位置uint64 seek(uint64 offset); //设置文件位置uint64 tell(); //返回文件位置int write(string buffer); //向文件写入缓冲区};
一个使用Mach-O架构段列表的类:
class MacSegments {public:MacSegment item(int index); //返回具有给定索引的段int count(); //返回列表中的段数MacSegment itemByAddress(); //返回给定地址的段};
与Mach-O架构部分一起使用的类:
class MacSegment {public:uint64 address(); //返回段的地址string name(); //返回段的名称uint64 size(); //返回段的大小int physicalOffset(); //返回段的文件位置int physicalSize(); //返回段的文件大小int flags(); //返回段的标志bool excludedFromPacking(); //返回“排除包装”属性};
一个使用Mach-O架构部分列表的类:
class MacSections {public:MacSection item(int index); //返回具有给定索引的节int count(); //返回列表中的节数MacSection itemByAddress(uint64 address); //返回给定地址的部分};
使用Mach-O架构部分的类:
class MacSection {public:uint64 address(); //返回该节的地址string name(); //返回该节的名称uint64 size(); //返回该节的大小int offset(); //返回该节的文件位置MacSegment segment(); //返回父段};
一个使用Mach-O体系结构加载命令列表的类:
class MacCommands {public:MacCommand item(int index); //返回带有给定索引的命令int count(); //返回列表中命令的数量MacCommand itemByType(int type); //返回给定类型的命令};
使用Mach-O体系结构加载命令的类:
class MacCommand {public:uint64 address(); //返回命令的地址int type(); //返回命令的类型string name(); //返回命令名int size(); //返回命令的大小};
一个使用Mach-O架构符 列表的类:
class MacSymbols {public:MacSymbol item(int index); //返回具有给定索引的符 int count(); //返回列表中的符 数量};
用于处理Mach-O体系结构的导入库列表的类:
class MacImports {public:MacImport item(int index); //返回具有给定索引的导入库int count(); //返回列表中导入的库的数量MacImport itemByName(string name); //返回具有给定名称的导入库};
使用Mach-O架构导入库的类:
class MacImport {public:string name(); //返回导入库的名称MacImportFunction item(int index); //返回带有给定索引的导入函数int count(); //返回列表中导入函数的数量void setName(string name); //设置导入库的名称};
一个用于处理Mach-O架构的导出函数列表的类:
class MacExports {public:string name(); //返回库的名称MacExport item(); //返回具有给定索引的导出函数int count(); //返回列表中导出函数的数量void clear(); //清除列表MacExport itemByAddress(uint64 address); //返回指定地址的导出函数MacExport itemByName(string name); //返回具有给定名称的导出函数};
使用Mach-O架构导出函数的类:
class MacExport {public:uint64 address(); //返回导出函数的地址string name(); //返回导出函数的名称string forwardedName(); //返回被导出函数转发到的函数的名称void destroy(); //销毁导出的函数};
一个用于处理Mach-O架构的修正(重定位)列表的类:
class MacFixups {public:MacFixup item(int index); //返回具有给定索引的元素int count(); //返回列表中的元素数量MacFixup itemByAddress(uint64 address); //返回给定地址的元素};
使用Mach-O架构修复的类:
class MacFixup {public:uint64 address(); //返回元素的地址};
– 持续更新中 –
VMProtect正版授权专享在线订购特享超低价格!还不赶紧加入你的订购清单/span>>>更多详情可点击咨询购买
标签:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!