翻譯|使用教程|編輯:李顯亮|2019-07-29 10:25:26.990|閱讀 407 次
概述:VMProtect中內置的腳本語言LUA是面向對象的:它在語法,意識形態和實現方面與JavaScript非常相似。腳本語言包括提供基本功能的標準類和提供對應用程序保護功能的訪問的專用類。本文接著介紹VMProtect中強大的內置腳本的使用中的Mach-O文件。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
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正版授權專享在線訂購特享超低價格!還不趕緊加入你的訂購清單?>>更多詳情可點擊咨詢購買
掃描關注“慧聚IT”微信公眾號,及時獲取最新動態及最新資訊

本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@ke049m.cn