翻譯|其它|編輯:李顯亮|2019-07-22 09:57:50.877|閱讀 433 次
概述:VMProtect中內置的腳本語言LUA是面向對象的:它在語法,意識形態和實現方面與JavaScript非常相似。腳本語言包括提供基本功能的標準類和提供對應用程序保護功能的訪問的專用類。本文接著介紹VMProtect中強大的內置腳本的使用。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
VMProtect是一種很可靠的工具,可以保護應用程序代碼免受分析和破解,但只有在應用程序內保護機制正確構建且沒有可能破壞整個保護的嚴重錯誤的情況下,才能實現最好的效果。
本文繼續對VMProtect中強大的內置腳本的使用進行介紹,希望對您有所幫助。
VMProtect具有內置的強大腳本語言LUA,極大地增強了VMProtect在每個保護階段的默認保護功能。LUA語法非常類似于JavaScript,但與之不同的是,LUA不包含顯式類。不過,腳本語言允許輕松地實現類、繼承和事件等面向對象的編程機制。
對于如何使用腳本語言,可以進行以下三類的介紹:
第一部分:類
VMProtect中內置的腳本語言LUA是面向對象的:它在語法,意識形態和實現方面與JavaScript非常相似。腳本語言包括提供基本功能的標準類和提供對應用程序保護功能的訪問的專用類。
▲文件夾
使用自定義文件夾的類:
class Folders { public: int count(); //返回列表中文件夾的數量 Folder item(int index); //返回具有給定索引的文件夾 Folder add(string name);//添加一個新文件夾 void clear(); //清除列表 };
:使用自定義文件夾的類:
class Folder { public: int count(); //返回子文件夾的數量 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(); //返回列表中的體系結構數量 PEArchitecture item(int index); //返回具有給定索引的體系結構 uint64 seek(uint64 offset); //設置文件位置 uint64 tell(); //返回文件位置 int write(string buffer); //記錄文件的緩沖區 };
一個使用PE架構的類:
class PEArchitecture { public: string name(); //返回體系結構的名稱 PEFile file(); //返回父文件 uint64 entryPoint(); //返回起始地址 uint64 imageBase(); // returns the base offset OperandSize cpuAddressSize(); //返回基偏移量 uint64 size(); //返回體系結構的位計數 PESegments segments(); //返回架構的大小 PESections sections(); //返回段列表 PEDirectories directories(); //返回節的列表 PEImports imports(); //返回目錄列表 PEExports exports(); //返回導入庫的列表 PEResources resources(); //返回導出函數的列表 PEFixups fixups(); //返回資源列表 MapFunctions mapFunctions(); //返回重置(修復)列表 IntelFunctions functions(); //返回可用于保護的函數列表 bool addressSeek(uint64 address); //返回受保護函數的列表 uint64 seek(uint64 offset); //設置文件位置 uint64 tell(); //返回文件位置 int write(string buffer); //將緩沖區寫入文件 };
一個與PE架構段一起工作的類:
class PESegment { public: uint64 address(); //返回段的地址 string name(); //返回段的名稱 uint64 size(); //返回段的大小 int physicalOffset(); //返回段的文件位置(偏移量) int physicalSize(); //返回段的文件大小 int flags(); //返回段的標志 bool excludedFromPacking(); //返回“排除包裝”屬性 void setName(string name); //設置段的名稱 };
一個處理PE架構部分列表的類:
class PESections { public: PESection item(int index); //返回具有給定索引的節 int count(); //返回列表中的節數 PESection itemByAddress(uint64 address); //返回給定地址的部分 };
與PE架構部分一起工作的類:
class PESection { public: uint64 address(); //返回該節的地址 string name(); //返回該節的名稱 uint64 size(); //返回該節的大小 int offset(); //返回該節的文件位置 PESegment segment(); //返回父段 };
與PE體系結構目錄一起使用的類:
class PEDirectories { public: PEDirectory item(int index); //返回具有給定索引的目錄 int count(); //返回列表中的目錄數 PEDirectory itemByType(int type); //返回給定類型的目錄 };
一個使用PE架構目錄的類:
class PEDirectory { public: uint64 address(); //返回目錄的地址 string name(); //返回目錄名 uint64 size(); //返回目錄的大小 int type(); //返回目錄的類型 void setAddress(uint64 address); //設置目錄的地址 void setSize(int size); //設置目錄的大小 void clear(); //清除目錄的地址和大小 };
用于PE體系結構的導入庫列表的類:
class PEImports { public: PEImport item(int index); //返回具有給定索引的庫 int count(); //返回列表中庫的數量 PEImport itemByName(string name); //返回具有給定名稱的庫 };
用于PE架構的導入庫的類:
class PEImport { public: string name(); //返回庫的名稱 PEImportFunction item(int index); //返回帶有給定索引的導入函數 int count(); //返回導入函數的數量 void setName(string name); //設置庫的名稱 };
使用PE架構導入函數的類:
class PEImportFunction { public: uint64 address(); //返回存儲導入函數地址的內存地址 string name(); //返回導入函數的名稱 };
用于PE體系結構的導出函數列表的類:
class PEExports { public: string name(); //返回庫的名稱 PEExport item(int index); //返回具有給定索引的導出函數 int count(); //返回列表中導出函數的數量 void clear(); //清除列表 PEExport itemByAddress(uint64 address); //返回指定地址的導出函數 PEExport itemByName(string name); //返回具有給定名稱的導出函數 };
一個帶有PE架構導出功能的wotk類:
class PEExports { public: class PEExport { public: uint64 address(); //返回導出函數的地址 string name(); //返回導出函數的名稱 int ordinal(); //返回導出函數的序號 string forwardedName(); //返回導出函數轉發給的函數的名稱 void destroy(); //銷毀導出的函數 };
一個處理PE架構資源列表的類:
class PEResources { public: PEResource item(int index); //返回具有給定索引的資源 int count(); //返回列表中的資源數量 void clear(); //清除列表 PEResource itemByType(int type); //返回給定類型的資源 PEResource itemByName(string name); //返回具有給定名稱的資源 };
一個使用PE架構資源的類:
class PEResource { public: PEResource item(int index); //返回具有給定索引的資源 int count(); //返回列表中的資源數量 void clear(); //清除列表 uint64 address(); //返回資源的地址 int size(); //返回資源的大小 string name(); //返回資源的名稱 int type(); //返回資源的類型 bool isDirectory(); //返回“Directory”屬性 void destroy(); //銷毀資源 PEResource itemByName(string name); //返回具有給定名稱的資源 bool excludedFromPacking(); //返回“排除包裝”屬性 };
處理PE架構修復(重定位)列表的類:
class PEFixups { public: PEFixup item(int index); //返回具有給定索引的元素 int count(); //返回列表中的元素數量 PEFixup itemByAddress(uint64 address); //返回給定地址的元素 };
使用PE架構修復(重新定位)的類:
class PEFixup { public: uint64 address(); //返回元素的地址 };
- 持續更新中 -
VMProtect正版授權專享在線訂購特享超低價格!還不趕緊加入你的訂購清單?>>更多詳情可點擊咨詢購買
掃描關注“慧聚IT”微信公眾號,及時獲取最新動態及最新資訊
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: