使用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反射,如果做了代碼混淆或者加密之后,此框架還有用嗎?
