"\u003Cdiv\u003E\u003Cp\u003E\u003Cstrong\u003E\u003Cu\u003EVMProtect\u003C\u002Fu\u003E\u003C\u002Fstrong\u003E是一種很可靠的工具,可以保護應用程序代碼免受分析和破解,但只有在應用程序內保護機制正確構建且沒有可能破壞整個保護的嚴重錯誤的情況下,才能實現最好的效果。本文繼續對VMProtect中強大的內置腳本的使用進行介紹,希望對您有所幫助。\u003C\u002Fp\u003E\u003Cp\u003EVMProtect具有內置的強大腳本語言LUA,極大地增強了VMProtect在每個保護階段的默認保護功能。LUA語法非常類似於JavaScript,但與之不同的是,LUA不包含顯式類。不過,腳本語言允許輕鬆地實現類、繼承和事件等面向對象的編程機制。\u003C\u002Fp\u003E\u003Cp\u003E對於如何使用腳本語言,可以進行以下三類的介紹:\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E\u003Cstrong\u003E類\u003C\u002Fstrong\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cstrong\u003E內置功能\u003C\u002Fstrong\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cstrong\u003E事件\u003C\u002Fstrong\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Chr\u003E\u003Ch1\u003E\u003Cstrong\u003E第一部分:類\u003C\u002Fstrong\u003E\u003C\u002Fh1\u003E\u003Cp\u003E\u003Cstrong\u003EVMProtect\u003C\u002Fstrong\u003E中內置的腳本語言LUA是面向對象的:它在語法,意識形態和實現方面與JavaScript非常相似。腳本語言包括提供基本功能的標準類和提供對應用程序保護功能的訪問的專用類。\u003C\u002Fp\u003E\u003Ch1\u003E\u003Cstrong\u003E▲Mach-O文件\u003C\u002Fstrong\u003E\u003C\u002Fh1\u003E\u003Cp\u003E\u003Cstrong\u003E使用Mach-O格式的常量:\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cpre\u003Eenum MacFormat {\u003Cbr\u003E\t\u002F\u002FLoad命令類型\u003Cbr\u003E\tLC_SEGMENT,\u003Cbr\u003E\tLC_SYMTAB,\u003Cbr\u003E\tLC_SYMSEG,\u003Cbr\u003E\tLC_THREAD,\u003Cbr\u003E\tLC_UNIXTHREAD,\u003Cbr\u003E\tLC_LOADFVMLIB,\u003Cbr\u003E\tLC_IDFVMLIB,\u003Cbr\u003E\tLC_IDENT,\u003Cbr\u003E\tLC_FVMFILE,\u003Cbr\u003E\tLC_PREPAGE,\u003Cbr\u003E\tLC_DYSYMTAB,\u003Cbr\u003E\tLC_LOAD_DYLIB,\u003Cbr\u003E\tLC_ID_DYLIB,\u003Cbr\u003E\tLC_LOAD_DYLINKER,\u003Cbr\u003E\tLC_PREBOUND_DYLIB,\u003Cbr\u003E\tLC_ROUTINES,\u003Cbr\u003E\tLC_SUB_FRAMEWORK,\u003Cbr\u003E\tLC_SUB_UMBRELLA,\u003Cbr\u003E\tLC_SUB_CLIENT,\u003Cbr\u003E\tLC_SUB_LIBRARY,\u003Cbr\u003E\tLC_TWOLEVEL_HINTS,\u003Cbr\u003E\tLC_PREBIND_CKSUM,\u003Cbr\u003E\tLC_LOAD_WEAK_DYLIB,\u003Cbr\u003E\tLC_SEGMENT_64,\u003Cbr\u003E\tLC_ROUTINES_64,\u003Cbr\u003E\tLC_UUID,\u003Cbr\u003E\tLC_RPATH,\u003Cbr\u003E\tLC_CODE_SIGNATURE,\u003Cbr\u003E\tLC_SEGMENT_SPLIT_INFO,\u003Cbr\u003E\tLC_REEXPORT_DYLIB,\u003Cbr\u003E\tLC_LAZY_LOAD_DYLIB,\u003Cbr\u003E\tLC_ENCRYPTION_INFO,\u003Cbr\u003E\tLC_DYLD_INFO,\u003Cbr\u003E\tLC_DYLD_INFO_ONLY,\u003Cbr\u003E\tLC_LOAD_UPWARD_DYLIB,\u003Cbr\u003E\tLC_VERSION_MIN_MACOSX,\u003Cbr\u003E\t\u002F\u002F段類型\u003Cbr\u003E\tSECTION_TYPE,\u003Cbr\u003E\tSECTION_ATTRIBUTES,\u003Cbr\u003E\tS_REGULAR,\u003Cbr\u003E\tS_ZEROFILL,\u003Cbr\u003E\tS_CSTRING_LITERALS,\u003Cbr\u003E\tS_4BYTE_LITERALS,\u003Cbr\u003E\tS_8BYTE_LITERALS,\u003Cbr\u003E\tS_LITERAL_POINTERS,\u003Cbr\u003E\tS_NON_LAZY_SYMBOL_POINTERS,\u003Cbr\u003E\tS_LAZY_SYMBOL_POINTERS,\u003Cbr\u003E\tS_SYMBOL_STUBS,\u003Cbr\u003E\tS_MOD_INIT_FUNC_POINTERS,\u003Cbr\u003E\tS_MOD_TERM_FUNC_POINTERS,\u003Cbr\u003E\tS_COALESCED,\u003Cbr\u003E\tS_GB_ZEROFILL,\u003Cbr\u003E\tS_INTERPOSING,\u003Cbr\u003E\tS_16BYTE_LITERALS,\u003Cbr\u003E\tS_DTRACE_DOF,\u003Cbr\u003E\tS_LAZY_DYLIB_SYMBOL_POINTERS,\u003Cbr\u003E\tSECTION_ATTRIBUTES_USR,\u003Cbr\u003E\tS_ATTR_PURE_INSTRUCTIONS,\u003Cbr\u003E\tS_ATTR_NO_TOC,\u003Cbr\u003E\tS_ATTR_STRIP_STATIC_SYMS,\u003Cbr\u003E\tS_ATTR_NO_DEAD_STRIP,\u003Cbr\u003E\tS_ATTR_LIVE_SUPPORT,\u003Cbr\u003E\tS_ATTR_SELF_MODIFYING_CODE,\u003Cbr\u003E\tS_ATTR_DEBUG,\u003Cbr\u003E\tSECTION_ATTRIBUTES_SYS,\u003Cbr\u003E\tS_ATTR_SOME_INSTRUCTIONS,\u003Cbr\u003E\tS_ATTR_EXT_RELOC,\u003Cbr\u003E\tS_ATTR_LOC_RELOC\u003Cbr\u003E};\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E\u003Cstrong\u003E一個使用Mach-O文件的類:\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cpre\u003Eclass MacFile {\u003Cbr\u003Epublic:\u003Cbr\u003E\tstring name(); \u002F\u002F返回文件\u003Cbr\u003E\tstring format(); \u002F\u002F返回“Mach-O”格式的\u003Cbr\u003E\tuint64 size(); \u002F\u002F返回文件的大小\u003Cbr\u003E\tint count(); \u002F\u002F 返回列表中的體系結構數量\u003Cbr\u003E\tMacArchitecture item(int index); \u002F\u002F返回具有給定索引的體系結構\u003Cbr\u003E\tuint64 seek(uint64 offset); \u002F\u002F設置文件位置\u003Cbr\u003E\tuint64 tell(); \u002F\u002F 返回文件位置\u003Cbr\u003E\tint write(string buffer); \u002F\u002F 向文件寫入緩衝區\u003Cbr\u003E};\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E\u003Cstrong\u003E一個使用Mach-O架構的類:\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cpre\u003Eclass MacArchitecture {\u003Cbr\u003Epublic:\u003Cbr\u003E\tstring name(); \u002F\u002F返回體系結構的名稱\u003Cbr\u003E\tMacFile file(); \u002F\u002F返回父文件\u003Cbr\u003E\tuint64 entryPoint(); \u002F\u002F返回起始地址\u003Cbr\u003E\tOperandSize cpuAddressSize(); \u002F\u002F返回體系結構的位計數\u003Cbr\u003E\tuint64 size(); \u002F\u002F返回架構的大小\u003Cbr\u003E\tMacSegments segments(); \u002F\u002F返回段列表\u003Cbr\u003E\tMacSections sections(); \u002F\u002F返回節的列表\u003Cbr\u003E\tMacCommands commands(); \u002F\u002F返回加載命令列表\u003Cbr\u003E\tMacSymbols symbols(); \u002F\u002F返回符號列表\u003Cbr\u003E\tMacImports imports(); \u002F\u002F返回導入庫的列表\u003Cbr\u003E\tMacExports exports(); \u002F\u002F返回導出函數的列表\u003Cbr\u003E\tMacFixups fixups(); \u002F\u002F返回修復程序列表(重新定位)\u003Cbr\u003E\tMapFunctions mapFunctions(); \u002F\u002F返回可用於保護的函數列表\u003Cbr\u003E\tIntelFunctions functions(); \u002F\u002F返回受保護函數的列表\u003Cbr\u003E\tbool addressSeek(uint64 address); \u002F\u002F設置文件位置\u003Cbr\u003E\tuint64 seek(uint64 offset); \u002F\u002F設置文件位置\u003Cbr\u003E\tuint64 tell(); \u002F\u002F返回文件位置\u003Cbr\u003E\tint write(string buffer); \u002F\u002F向文件寫入緩衝區\u003Cbr\u003E};\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E\u003Cstrong\u003E一個使用Mach-O架構段列表的類:\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cpre\u003Eclass MacSegments {\u003Cbr\u003Epublic:\u003Cbr\u003E\tMacSegment item(int index); \u002F\u002F返回具有給定索引的段\u003Cbr\u003E\tint count(); \u002F\u002F返回列表中的段數\u003Cbr\u003E\tMacSegment itemByAddress(); \u002F\u002F返回給定地址的段\u003Cbr\u003E};\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E\u003Cstrong\u003E與Mach-O架構部分一起使用的類:\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cpre\u003Eclass MacSegment {\u003Cbr\u003Epublic:\u003Cbr\u003E\tuint64 address(); \u002F\u002F返回段的地址\u003Cbr\u003E\tstring name(); \u002F\u002F返回段的名稱\u003Cbr\u003E\tuint64 size(); \u002F\u002F返回段的大小\u003Cbr\u003E\tint physicalOffset(); \u002F\u002F返回段的文件位置\u003Cbr\u003E\tint physicalSize(); \u002F\u002F返回段的文件大小\u003Cbr\u003E\tint flags(); \u002F\u002F返回段的標誌\u003Cbr\u003E\tbool excludedFromPacking(); \u002F\u002F返回“排除包裝”屬性\u003Cbr\u003E};\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E\u003Cstrong\u003E一個使用Mach-O架構部分列表的類:\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cpre\u003Eclass MacSections {\u003Cbr\u003Epublic:\u003Cbr\u003E\tMacSection item(int index); \u002F\u002F返回具有給定索引的節\u003Cbr\u003E\tint count(); \u002F\u002F返回列表中的節數\u003Cbr\u003E\tMacSection itemByAddress(uint64 address); \u002F\u002F返回給定地址的部分\u003Cbr\u003E};\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E\u003Cstrong\u003E使用Mach-O架構部分的類:\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cpre\u003Eclass MacSection {\u003Cbr\u003Epublic:\u003Cbr\u003E\tuint64 address(); \u002F\u002F返回該節的地址\u003Cbr\u003E\tstring name(); \u002F\u002F返回該節的名稱\u003Cbr\u003E\tuint64 size(); \u002F\u002F返回該節的大小\u003Cbr\u003E\tint offset(); \u002F\u002F返回該節的文件位置\u003Cbr\u003E\tMacSegment segment(); \u002F\u002F返回父段\u003Cbr\u003E};\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E\u003Cstrong\u003E一個使用Mach-O體系結構加載命令列表的類:\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cpre\u003Eclass MacCommands {\u003Cbr\u003Epublic:\u003Cbr\u003E\tMacCommand item(int index); \u002F\u002F返回帶有給定索引的命令\u003Cbr\u003E\tint count(); \u002F\u002F返回列表中命令的數量\u003Cbr\u003E\tMacCommand itemByType(int type); \u002F\u002F返回給定類型的命令\u003Cbr\u003E};\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E\u003Cstrong\u003E使用Mach-O體系結構加載命令的類:\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cpre\u003Eclass MacCommand {\u003Cbr\u003Epublic:\u003Cbr\u003E\tuint64 address(); \u002F\u002F返回命令的地址\u003Cbr\u003E\tint type(); \u002F\u002F返回命令的類型\u003Cbr\u003E\tstring name(); \u002F\u002F返回命令名\u003Cbr\u003E\tint size(); \u002F\u002F返回命令的大小\u003Cbr\u003E};\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E\u003Cstrong\u003E一個使用Mach-O架構符號列表的類:\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cpre\u003Eclass MacSymbols {\u003Cbr\u003Epublic:\u003Cbr\u003E\tMacSymbol item(int index); \u002F\u002F返回具有給定索引的符號\u003Cbr\u003E\tint count(); \u002F\u002F返回列表中的符號數量\u003Cbr\u003E};\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E\u003Cstrong\u003E用於處理Mach-O體系結構的導入庫列表的類:\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cpre\u003Eclass MacImports {\u003Cbr\u003Epublic:\u003Cbr\u003E\tMacImport item(int index); \u002F\u002F返回具有給定索引的導入庫\u003Cbr\u003E\tint count(); \u002F\u002F返回列表中導入的庫的數量\u003Cbr\u003E\tMacImport itemByName(string name); \u002F\u002F返回具有給定名稱的導入庫\u003Cbr\u003E};\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E\u003Cstrong\u003E使用Mach-O架構導入庫的類:\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cpre\u003Eclass MacImport {\u003Cbr\u003Epublic:\u003Cbr\u003E\tstring name(); \u002F\u002F返回導入庫的名稱\u003Cbr\u003E\tMacImportFunction item(int index); \u002F\u002F返回帶有給定索引的導入函數\u003Cbr\u003E\tint count(); \u002F\u002F返回列表中導入函數的數量\u003Cbr\u003E\tvoid setName(string name); \u002F\u002F設置導入庫的名稱\u003Cbr\u003E};\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E\u003Cstrong\u003E一個用於處理Mach-O架構的導出函數列表的類:\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cpre\u003Eclass MacExports {\u003Cbr\u003Epublic:\u003Cbr\u003E\tstring name(); \u002F\u002F返回庫的名稱\u003Cbr\u003E\tMacExport item(); \u002F\u002F返回具有給定索引的導出函數\u003Cbr\u003E\tint count(); \u002F\u002F返回列表中導出函數的數量\u003Cbr\u003E\tvoid clear(); \u002F\u002F清除列表\u003Cbr\u003E\tMacExport itemByAddress(uint64 address); \u002F\u002F返回指定地址的導出函數\u003Cbr\u003E\tMacExport itemByName(string name); \u002F\u002F返回具有給定名稱的導出函數\u003Cbr\u003E};\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E\u003Cstrong\u003E使用Mach-O架構導出函數的類:\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cpre\u003Eclass MacExport {\u003Cbr\u003Epublic:\u003Cbr\u003E\tuint64 address(); \u002F\u002F返回導出函數的地址\u003Cbr\u003E\tstring name(); \u002F\u002F返回導出函數的名稱\u003Cbr\u003E\tstring forwardedName(); \u002F\u002F返回被導出函數轉發到的函數的名稱\u003Cbr\u003E\tvoid destroy(); \u002F\u002F銷燬導出的函數\u003Cbr\u003E};\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E\u003Cstrong\u003E一個用於處理Mach-O架構的修正(重定位)列表的類:\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cpre\u003Eclass MacFixups {\u003Cbr\u003Epublic:\u003Cbr\u003E\tMacFixup item(int index); \u002F\u002F返回具有給定索引的元素\u003Cbr\u003E\tint count(); \u002F\u002F返回列表中的元素數量\u003Cbr\u003E\tMacFixup itemByAddress(uint64 address); \u002F\u002F返回給定地址的元素\u003Cbr\u003E};\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E\u003Cstrong\u003E使用Mach-O架構修復的類:\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cpre\u003Eclass MacFixup {\u003Cbr\u003Epublic:\u003Cbr\u003E\tuint64 address(); \u002F\u002F返回元素的地址\u003Cbr\u003E};\u003Cbr\u003E\u003C\u002Fpre\u003E\u003Cp\u003E點擊下方“瞭解更多”免費下載VMProtect最新版\u003C\u002Fp\u003E\u003C\u002Fdiv\u003E"'.slice(6, -6), groupId: '6718987159648338443
相關文章