2 回答

TA貢獻1851條經(jīng)驗 獲得超4個贊
Cydia Substrate是一個代碼修改平臺。它可以修改任何主進程的代碼,不管是用Java還是C/C++(native代碼)編寫的。而Xposed只支持 HOOK app_process中的java函數(shù),因此Cydia Substrate是一款強大而實用的HOOK工具。
Substrate幾個重要API介紹
MS.hookClassLoad
函數(shù)原型:void hookClassLoad(String name, MS.ClassLoadHook hook);
該方法實現(xiàn)在指定的類被加載的時候發(fā)出通知。因為一個類可以在任何時候被加載,所以Substrate提供了一個方法用來檢測用戶感興趣的類何時被加載。

TA貢獻1757條經(jīng)驗 獲得超8個贊
首先解釋下dalvik虛擬機中的Method結(jié)構(gòu)體,Method結(jié)構(gòu)體聲明在源碼目錄樹下的dalvik/vm/oo/Object.h文件內(nèi),在dalvik的世界中,每一個java方法都有一個對應(yīng)的Method對象,
dalvik虛擬機在執(zhí)行java方法時,就會通過該方法的Method對象調(diào)用到方法的具體實現(xiàn)代碼,Method結(jié)構(gòu)體內(nèi)有個成員,名位insns,該字段保存著java方法具體的實現(xiàn)代碼。那么我今天提供的這個dalvik hook的實現(xiàn)原理就是通過修改Method對象中的insns字段的值來達到hook java的目的。
這里簡短的用文字的形式描述下Hook的實現(xiàn)過程。
現(xiàn)在有一個返回字符串的函數(shù)原型聲明為:
public String truth()
{
return "hello from truth";
}
另外聲明一個方法為:
public String fake()
{
return "fake string";
}
之后,該類被加載后,分別獲得truth和fake方法的Method對象,并將fake方法的實現(xiàn)代碼賦值給truth的Method對象,之后,應(yīng)用程序調(diào)用truth方法時,獲得的字符串為"fake string"。
添加回答
舉報