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

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

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


    VMProtect是一種很可靠的工具,可以保護應(yīng)用程序代碼免受分析和破解,但只有在應(yīng)用程序內(nèi)保護機制正確構(gòu)建且沒有可能破壞整個保護的嚴重錯誤的情況下,才能實現(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)準類和提供對應(yīng)用程序保護功能的訪問的專用類。


    ▲文件夾

    使用自定義文件夾的類:

    class Folders {
    public:
    	int count(); //返回列表中文件夾的數(shù)量
    	Folder item(int index); //返回具有給定索引的文件夾
    	Folder add(string name);//添加一個新文件夾
    	void clear(); //清除列表
    };

    :使用自定義文件夾的類:

    class Folder {
    public:
    	int count(); //返回子文件夾的數(shù)量
    	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(); //返回列表中的體系結(jié)構(gòu)數(shù)量
    	PEArchitecture item(int index); //返回具有給定索引的體系結(jié)構(gòu)
    	uint64 seek(uint64 offset); //設(shè)置文件位置
    	uint64 tell(); //返回文件位置
    	int write(string buffer); //記錄文件的緩沖區(qū)
    };

    一個使用PE架構(gòu)的類:

    class PEArchitecture {
    public:
    	string name(); //返回體系結(jié)構(gòu)的名稱
    	PEFile file(); //返回父文件
    	uint64 entryPoint(); //返回起始地址
    	uint64 imageBase(); // returns the base offset
    	OperandSize cpuAddressSize(); //返回基偏移量
    	uint64 size(); //返回體系結(jié)構(gòu)的位計數(shù)
    	PESegments segments(); //返回架構(gòu)的大小
    	PESections sections(); //返回段列表
    	PEDirectories directories(); //返回節(jié)的列表
    	PEImports imports(); //返回目錄列表
    	PEExports exports(); //返回導(dǎo)入庫的列表
    	PEResources resources(); //返回導(dǎo)出函數(shù)的列表
    	PEFixups fixups(); //返回資源列表
    	MapFunctions mapFunctions(); //返回重置(修復(fù))列表
    	IntelFunctions functions(); //返回可用于保護的函數(shù)列表
    	bool addressSeek(uint64 address); //返回受保護函數(shù)的列表
    	uint64 seek(uint64 offset); //設(shè)置文件位置
    	uint64 tell(); //返回文件位置
    	int write(string buffer); //將緩沖區(qū)寫入文件
    };

    一個與PE架構(gòu)段一起工作的類:

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

    一個處理PE架構(gòu)部分列表的類:

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

    與PE架構(gòu)部分一起工作的類:

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

    與PE體系結(jié)構(gòu)目錄一起使用的類:

    class PEDirectories {
    public:
    PEDirectory item(int index); //返回具有給定索引的目錄
    int count(); //返回列表中的目錄數(shù)
    PEDirectory itemByType(int type); //返回給定類型的目錄
    };

    一個使用PE架構(gòu)目錄的類:

    class PEDirectory {
    public:
    uint64 address(); //返回目錄的地址
    string name(); //返回目錄名
    uint64 size(); //返回目錄的大小
    int type(); //返回目錄的類型
    void setAddress(uint64 address); //設(shè)置目錄的地址
    void setSize(int size); //設(shè)置目錄的大小
    void clear(); //清除目錄的地址和大小
    };

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

    class PEImports {
    public:
    	PEImport item(int index); //返回具有給定索引的庫
    	int count(); //返回列表中庫的數(shù)量
    	PEImport itemByName(string name); //返回具有給定名稱的庫
    };

    用于PE架構(gòu)的導(dǎo)入庫的類:

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

    使用PE架構(gòu)導(dǎo)入函數(shù)的類:

    class PEImportFunction {
    public:
    uint64 address(); //返回存儲導(dǎo)入函數(shù)地址的內(nèi)存地址
    string name();  //返回導(dǎo)入函數(shù)的名稱
    };

    用于PE體系結(jié)構(gòu)的導(dǎo)出函數(shù)列表的類:

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

    一個帶有PE架構(gòu)導(dǎo)出功能的wotk類:

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

    一個處理PE架構(gòu)資源列表的類:

    class PEResources {
    public:
    PEResource item(int index); //返回具有給定索引的資源
    int count(); //返回列表中的資源數(shù)量
    void clear(); //清除列表
    PEResource itemByType(int type); //返回給定類型的資源
    PEResource itemByName(string name); //返回具有給定名稱的資源
    };

    一個使用PE架構(gòu)資源的類:

    class PEResource {
    public:
    PEResource item(int index); //返回具有給定索引的資源
    int count(); //返回列表中的資源數(shù)量
    void clear(); //清除列表
    uint64 address(); //返回資源的地址
    int size(); //返回資源的大小
    string name(); //返回資源的名稱
    int type(); //返回資源的類型
    bool isDirectory(); //返回“Directory”屬性
    void destroy(); //銷毀資源
    PEResource itemByName(string name); //返回具有給定名稱的資源
    bool excludedFromPacking(); //返回“排除包裝”屬性
    };

    處理PE架構(gòu)修復(fù)(重定位)列表的類:

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

    使用PE架構(gòu)修復(fù)(重新定位)的類:

    class PEFixup {
    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); })();