天天看點

Xposed擷取對象loadClass、擷取方法getMethod、擷取成員變量findfield

0、拿對象 classLoader.loadClass("com.ss.sys.ces.b.a");

                                    formClass("com.ss.sys.ces.b.a")

         Class.forName(className)方法,内部實際調用的方法是  Class.forName(className,true,classloader);

第2個boolean參數表示類是否需要初始化,  Class.forName(className)預設是需要初始化。

一旦初始化,就會觸發目标對象的 static塊代碼執行,static參數也也會被再次初始化。

       ClassLoader.loadClass(className)方法,内部實際調用的方法是  ClassLoader.loadClass(className,false);

第2個 boolean參數,表示目标對象是否進行連結,false表示不進行連結,由上面介紹可以,

不進行連結意味着不進行包括初始化等一些列步驟,那麼靜态塊和靜态對象就不會得到執行

相比之下資料庫要使用forName(className),因為Driver源碼Static{},Class.forName(classname)才能反射回去類的時候執行static塊

1、找方法 getDeclareMethod(),getMethod("方法名",“參數對象類型”)。

2、找成員變量class.getDeclareField(“ e”)或XposedHelper.FindField("對象執行個體","e")

或getObjectByField(param.thisObject,“e”)

FieldByName和FindField都是用來查找字段,不同在于FindField找不帶符合條件的字段時傳回的是null,而FieldByName找不到則直接抛出異常。FieldByName在内部是調用FindField實作的。

thisOpject  //擷取要執行的目前對象

3、performClick()方法 是使用代碼主動去調用控件的點選事件(模拟人手去觸摸控件)

還有什麼問題不明白,或者不會,我給你解答

歡迎加入我的Java與Android逆向開發交流QQ群,一起交流學習。

Xposed擷取對象loadClass、擷取方法getMethod、擷取成員變量findfield