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群,一起交流學習。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38CXlZHbvN3cpR2Lc1TPB10QGtWUCpEMJ9CXsxWam9CXwADNvwVZ6l2c052bm9CXUJDT1wkNhVzLcRnbvZ2LcFTMXlFcoNDW1gnMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2LcRHelR3LcJzLctmch1mclRXY39jM4cTOwEjM1EDOykDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)