標籤:
使用Xposed Installer來實現Android hook,文章參考官方教程,有修改。
1、安裝Xposed Installer架構apk到手機,手機必須root;
2、代碼編寫;
在manifest檔案中聲明:
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <meta-data android:name="xposedmodule" android:value="true" /> <meta-data android:name="xposeddescription" android:value="Easy example which changes the color of all app" /> <meta-data android:name="xposedminversion" android:value="30" /></application>
添加xposed庫檔案到libs目下;建立Main.java類,代碼如下:
public class Main implements IXposedHookLoadPackage,IXposedHookZygoteInit{ @Override public void initZygote(StartupParam startupParam) throws Throwable { hookResColor(); } void hookResColor(){ XposedHelpers.findAndHookMethod(Resources.class, "getColor", Integer.TYPE, new XC_MethodReplacement() { @Override protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { Object color = XposedBridge.invokeOriginalMethod(param.method, param.thisObject, param.args); if (color instanceof Integer) { Integer new_name = (Integer) color; return new_name & ~0x0000ff00 | 0x00ff0000; } return null ; } }); } @Override public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable { hookClock(lpparam); } void hookClock(LoadPackageParam lpparam){ if (!lpparam.packageName.equals("com.android.systemui")) return; XposedHelpers.findAndHookMethod( "com.android.systemui.statusbar.policy.Clock", lpparam.classLoader, "updateClock", new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { System.out.println("replaceHookedMethod---updateClock"); XposedBridge.log("replaceHookedMethod---updateClock-->>"); TextView tv = (TextView) param.thisObject; String text = tv.getText().toString(); tv.setText(text + " :)-->"); tv.setTextColor(Color.RED); } }); }
添加名稱為xposed_init的檔案到assets目錄下,檔案內容為“com.app.xposed.example.Main”,就是上面Main類的完整包名。
右鍵工程選擇properties,在Java Build Path裡去掉勾選的選項(這裡有點坑,必須去掉勾選,不然運行之後沒效果,不知道是不是和開發環境有關),
運行工程,效果如下:
這麼看來Xposed也和Cydia Substrate一樣,需要依賴於Java反射,如果做了代碼混淆或者加密之後,此架構還有用嗎?
使用Xposed Installer實現Android Hook