翻譯|其它|編輯:李顯亮|2019-07-22 09:57:50.877|閱讀 433 次
概述:VMProtect中內(nèi)置的腳本語言LUA是面向?qū)ο蟮模核谡Z法,意識形態(tài)和實現(xiàn)方面與JavaScript非常相似。腳本語言包括提供基本功能的標準類和提供對應用程序保護功能的訪問的專用類。本文接著介紹VMProtect中強大的內(nèi)置腳本的使用。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
VMProtect是一種很可靠的工具,可以保護應用程序代碼免受分析和破解,但只有在應用程序內(nèi)保護機制正確構(gòu)建且沒有可能破壞整個保護的嚴重錯誤的情況下,才能實現(xiàn)最好的效果。
本文繼續(xù)對VMProtect中強大的內(nèi)置腳本的使用進行介紹,希望對您有所幫助。
VMProtect具有內(nèi)置的強大腳本語言LUA,極大地增強了VMProtect在每個保護階段的默認保護功能。LUA語法非常類似于JavaScript,但與之不同的是,LUA不包含顯式類。不過,腳本語言允許輕松地實現(xiàn)類、繼承和事件等面向?qū)ο蟮木幊虣C制。
對于如何使用腳本語言,可以進行以下三類的介紹:
第一部分:類
VMProtect中內(nèi)置的腳本語言LUA是面向?qū)ο蟮模核谡Z法,意識形態(tài)和實現(xiàn)方面與JavaScript非常相似。腳本語言包括提供基本功能的標準類和提供對應用程序保護功能的訪問的專用類。
▲文件夾
使用自定義文件夾的類:
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); //設置文件位置 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(); //返回導入庫的列表
	PEResources resources(); //返回導出函數(shù)的列表
	PEFixups fixups(); //返回資源列表
	MapFunctions mapFunctions(); //返回重置(修復)列表
	IntelFunctions functions(); //返回可用于保護的函數(shù)列表
	bool addressSeek(uint64 address); //返回受保護函數(shù)的列表
	uint64 seek(uint64 offset); //設置文件位置
	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(); //返回段的標志
	bool excludedFromPacking(); //返回“排除包裝”屬性
	void setName(string name); //設置段的名稱
};一個處理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); //設置目錄的地址
void setSize(int size); //設置目錄的大小
void clear(); //清除目錄的地址和大小
};用于PE體系結(jié)構(gòu)的導入庫列表的類:
class PEImports {
public:
	PEImport item(int index); //返回具有給定索引的庫
	int count(); //返回列表中庫的數(shù)量
	PEImport itemByName(string name); //返回具有給定名稱的庫
};用于PE架構(gòu)的導入庫的類:
class PEImport {
public:
string name(); //返回庫的名稱
PEImportFunction item(int index); //返回帶有給定索引的導入函數(shù)
int count(); //返回導入函數(shù)的數(shù)量
void setName(string name); //設置庫的名稱
};使用PE架構(gòu)導入函數(shù)的類:
class PEImportFunction {
public:
uint64 address(); //返回存儲導入函數(shù)地址的內(nèi)存地址
string name();  //返回導入函數(shù)的名稱
};用于PE體系結(jié)構(gòu)的導出函數(shù)列表的類:
class PEExports {
public:
	string name(); //返回庫的名稱
	PEExport item(int index); //返回具有給定索引的導出函數(shù)
	int count(); //返回列表中導出函數(shù)的數(shù)量
	void clear(); //清除列表
	PEExport itemByAddress(uint64 address); //返回指定地址的導出函數(shù)
	PEExport itemByName(string name); //返回具有給定名稱的導出函數(shù)
};一個帶有PE架構(gòu)導出功能的wotk類:
class PEExports {
public:
	class PEExport {
public:
uint64 address(); //返回導出函數(shù)的地址
string name(); //返回導出函數(shù)的名稱
int ordinal();  //返回導出函數(shù)的序號
string forwardedName(); //返回導出函數(shù)轉(zhuǎn)發(fā)給的函數(shù)的名稱
void destroy(); //銷毀導出的函數(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)修復(重定位)列表的類:
class PEFixups {
public:
PEFixup item(int index); //返回具有給定索引的元素
int count(); //返回列表中的元素數(shù)量
PEFixup itemByAddress(uint64 address); //返回給定地址的元素
};使用PE架構(gòu)修復(重新定位)的類:
class PEFixup {
public:
uint64 address(); //返回元素的地址
};- 持續(xù)更新中 -
VMProtect正版授權(quán)專享在線訂購特享超低價格!還不趕緊加入你的訂購清單?>>更多詳情可點擊咨詢購買
掃描關(guān)注“慧聚IT”微信公眾號,及時獲取最新動態(tài)及最新資訊

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