• <menu id="w2i4a"></menu>
  • logo VMProtect用戶手冊

    文檔首頁>>VMProtect用戶手冊>>代碼保護軟件VMProtect用戶手冊之內(nèi)置腳本的使用(3)——Mach-O文件

    代碼保護軟件VMProtect用戶手冊之內(nèi)置腳本的使用(3)——Mach-O文件


    VMProtect是一種很可靠的工具,可以保護應(yīng)用程序代碼免受分析和破解,但只有在應(yīng)用程序內(nèi)保護機制正確構(gòu)建且沒有可能破壞整個保護的嚴(yán)重錯誤的情況下,才能實現(xiàn)最好的效果。

    本文繼續(xù)對VMProtect中強大的內(nèi)置腳本的使用進行介紹,希望對您有所幫助。

    【下載VMProtect最新試用版】

    VMProtect具有內(nèi)置的強大腳本語言LUA,極大地增強了VMProtect在每個保護階段的默認保護功能。LUA語法非常類似于JavaScript,但與之不同的是,LUA不包含顯式類。不過,腳本語言允許輕松地實現(xiàn)類、繼承和事件等面向?qū)ο蟮木幊虣C制。

    對于如何使用腳本語言,可以進行以下三類的介紹:

    • 內(nèi)置功能
    • 事件


    第一部分:類

    VMProtect中內(nèi)置的腳本語言LUA是面向?qū)ο蟮模核谡Z法,意識形態(tài)和實現(xiàn)方面與JavaScript非常相似。腳本語言包括提供基本功能的標(biāo)準(zhǔn)類和提供對應(yīng)用程序保護功能的訪問的專用類。


    ▲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(); // 返回列表中的體系結(jié)構(gòu)數(shù)量
    	MacArchitecture item(int index); //返回具有給定索引的體系結(jié)構(gòu)
    	uint64 seek(uint64 offset); //設(shè)置文件位置
    	uint64 tell(); // 返回文件位置
    	int write(string buffer); // 向文件寫入緩沖區(qū)
    };

    一個使用Mach-O架構(gòu)的類:

    class MacArchitecture {
    public:
    	string name(); //返回體系結(jié)構(gòu)的名稱
    	MacFile file(); //返回父文件
    	uint64 entryPoint(); //返回起始地址
    	OperandSize cpuAddressSize(); //返回體系結(jié)構(gòu)的位計數(shù)
    	uint64 size(); //返回架構(gòu)的大小
    	MacSegments segments(); //返回段列表
    	MacSections sections(); //返回節(jié)的列表
    	MacCommands commands(); //返回加載命令列表
    	MacSymbols symbols(); //返回符號列表
    	MacImports imports(); //返回導(dǎo)入庫的列表
    	MacExports exports(); //返回導(dǎo)出函數(shù)的列表
    	MacFixups fixups(); //返回修復(fù)程序列表(重新定位)
    	MapFunctions mapFunctions(); //返回可用于保護的函數(shù)列表
    	IntelFunctions functions(); //返回受保護函數(shù)的列表
    	bool addressSeek(uint64 address); //設(shè)置文件位置
    	uint64 seek(uint64 offset); //設(shè)置文件位置
    	uint64 tell(); //返回文件位置
    	int write(string buffer); //向文件寫入緩沖區(qū)
    };

    一個使用Mach-O架構(gòu)段列表的類:

    class MacSegments {
    public:
    	MacSegment item(int index); //返回具有給定索引的段
    	int count(); //返回列表中的段數(shù)
    	MacSegment itemByAddress(); //返回給定地址的段
    };

    與Mach-O架構(gòu)部分一起使用的類:

    class MacSegment {
    public:
    	uint64 address(); //返回段的地址
    	string name(); //返回段的名稱
    	uint64 size(); //返回段的大小
    	int physicalOffset(); //返回段的文件位置
    	int physicalSize(); //返回段的文件大小
    	int flags(); //返回段的標(biāo)志
    	bool excludedFromPacking(); //返回“排除包裝”屬性
    };

    一個使用Mach-O架構(gòu)部分列表的類:

    class MacSections {
    public:
    	MacSection item(int index); //返回具有給定索引的節(jié)
    	int count(); //返回列表中的節(jié)數(shù)
    	MacSection itemByAddress(uint64 address); //返回給定地址的部分
    };

    使用Mach-O架構(gòu)部分的類:

    class MacSection {
    public:
    	uint64 address(); //返回該節(jié)的地址
    	string name(); //返回該節(jié)的名稱
    	uint64 size(); //返回該節(jié)的大小
    	int offset(); //返回該節(jié)的文件位置
    	MacSegment segment(); //返回父段
    };

    一個使用Mach-O體系結(jié)構(gòu)加載命令列表的類:

    class MacCommands {
    public:
    	MacCommand item(int index); //返回帶有給定索引的命令
    	int count(); //返回列表中命令的數(shù)量
    	MacCommand itemByType(int type); //返回給定類型的命令
    };

    使用Mach-O體系結(jié)構(gòu)加載命令的類:

    class MacCommand {
    public:
    	uint64 address(); //返回命令的地址
    	int type(); //返回命令的類型
    	string name(); //返回命令名
    	int size(); //返回命令的大小
    };

    一個使用Mach-O架構(gòu)符號列表的類:

    class MacSymbols {
    public:
    	MacSymbol item(int index); //返回具有給定索引的符號
    	int count(); //返回列表中的符號數(shù)量
    };

    用于處理Mach-O體系結(jié)構(gòu)的導(dǎo)入庫列表的類:

    class MacImports {
    public:
    	MacImport item(int index); //返回具有給定索引的導(dǎo)入庫
    	int count(); //返回列表中導(dǎo)入的庫的數(shù)量
    	MacImport itemByName(string name); //返回具有給定名稱的導(dǎo)入庫
    };

    使用Mach-O架構(gòu)導(dǎo)入庫的類:

    class MacImport {
    public:
    	string name(); //返回導(dǎo)入庫的名稱
    	MacImportFunction item(int index); //返回帶有給定索引的導(dǎo)入函數(shù)
    	int count(); //返回列表中導(dǎo)入函數(shù)的數(shù)量
    	void setName(string name); //設(shè)置導(dǎo)入庫的名稱
    };

    一個用于處理Mach-O架構(gòu)的導(dǎo)出函數(shù)列表的類:

    class MacExports {
    public:
    	string name(); //返回庫的名稱
    	MacExport item(); //返回具有給定索引的導(dǎo)出函數(shù)
    	int count(); //返回列表中導(dǎo)出函數(shù)的數(shù)量
    	void clear(); //清除列表
    	MacExport itemByAddress(uint64 address); //返回指定地址的導(dǎo)出函數(shù)
    	MacExport itemByName(string name); //返回具有給定名稱的導(dǎo)出函數(shù)
    };

    使用Mach-O架構(gòu)導(dǎo)出函數(shù)的類:

    class MacExport {
    public:
    	uint64 address(); //返回導(dǎo)出函數(shù)的地址
    	string name(); //返回導(dǎo)出函數(shù)的名稱
    	string forwardedName(); //返回被導(dǎo)出函數(shù)轉(zhuǎn)發(fā)到的函數(shù)的名稱
    	void destroy(); //銷毀導(dǎo)出的函數(shù)
    };

    一個用于處理Mach-O架構(gòu)的修正(重定位)列表的類:

    class MacFixups {
    public:
    	MacFixup item(int index); //返回具有給定索引的元素
    	int count(); //返回列表中的元素數(shù)量
    	MacFixup itemByAddress(uint64 address); //返回給定地址的元素
    };

    使用Mach-O架構(gòu)修復(fù)的類:

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

    - 持續(xù)更新中 -


    VMProtect正版授權(quán)專享在線訂購特享超低價格!還不趕緊加入你的訂購清單?>>更多詳情可點擊咨詢購買

    掃描關(guān)注“慧聚IT”微信公眾號,及時獲取最新動態(tài)及最新資訊

    1562572142.jpg
    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();