最近發現apk防護意識越來越強,大部分apk不是加固就是加密重度混淆處理,有守就有攻,這樣技術才能不斷提高
一.hook原理
使用加固之後的應用的classloader會被換成其加固應用本身的,所以只需要在hook的時候把classloader換成殼的就可以了。
二.具體操作和分析
被加固的應用是可以反編譯的,反編譯之後dex裏面只有很少的幾個類,比較重要的就是殼入口這個類,可以在這個類裏面的裏面去獲取context參數,然後就可以通過context獲得到殼的類加載器,之後只需要用這個類加載器來hook就可以成功的hook到加固的app。
這個加固想必大家都知道什麼加固,按照對應的突破點進行hook,代碼如下:
XposedHelpers.findAndHookMethod("com.tencent.StubShell.TxAppEntry", loadPackageParam.classLoader,
"attachBaseContext", Context.class, new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
//獲取到Context對象,通過這個對象來獲取classloader
Context context = (Context) param.args[0];
//獲取classloader,之後hook加固後的就使用這個classloader
ClassLoader classLoader =context.getClassLoader();
//下面就是強classloader修改成殼的classloader就可以成功的hook了
XposedHelpers.findAndHookMethod("xxx.xxx.xxx.xxx", classLoader, "xxx", String.class, String.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
super.beforeHookedMethod(param);
LogUtils.log( "key: " + (String) param.args[0]);
LogUtils.log( "value: " + (String) param.args[1]);
param.setResult((String) param.args[1]);
}
});
}
}
}
記着加載原理,萬變不離其宗(分享是種美德,交流使人進步!!!)