一立美、Xposed簡介
Xposed癣籽,簡單點說就是一款Hook框架脖苏,可以在不修改APK源碼的情況下程拭,通過自己編寫的模塊來影響程序運行的框架服務(wù),采用了插件機制棍潘,通過替換/system/bin/app_process程序控制zygote進程恃鞋,使得app_process在啟動過程中會加載XposedBridge.jar這個jar包崖媚,從而完成對Zygote進程及其創(chuàng)建的Dalvik虛擬機的劫持⌒衾耍基于Xposed框架可以制作出許多功能強大的模塊畅哑,且在功能不沖突的情況下同時運作。
強制安利--Xposed源碼解析系列安卓注入框架Xposed分析與簡單應(yīng)用
二水由、Xposed使用前準備工作
1)獲得root權(quán)限的手機
2)安裝Xposed Installer
安裝時注意事項:
1敢课、Xposed針對Android系統(tǒng)發(fā)布了不同的版本,要根據(jù)自己手機的版本下載對應(yīng)的Xposed框架绷杜,附Xposed Installer下載地址
2直秆、手機出現(xiàn)不兼容問題,那么檢查下是不是版本下錯了
3鞭盟、下載安裝框架后圾结,提示not a flashable zip file 或者unzip:crc error(也就是解壓錯誤),這個時候你可以點擊菜單欄齿诉,選擇show outdated versions(也就是顯示歷史版本),下載舊的版本嘗試筝野,如果還不行就直接下載對應(yīng)的zip文件,進入recovery也就是刷機模式粤剧,硬刷到系統(tǒng)中
點擊安裝更新歇竟,下載安裝框架
安裝成功后,是這個樣子的
安裝后會重啟手機抵恋,重啟后Xposed就生效了焕议。我用的Android5.0之上的系統(tǒng),對于4.x版本的弧关,需要下載對應(yīng)的版本就可以了
OK盅安,然后接可以寫模塊了
三、Xposed簡單使用
1世囊、創(chuàng)建Android項目
一個Xposed模塊實際上就是一個正常的apk,只不過沒有和用戶交互的界面别瞭,它僅僅包含以下meta數(shù)據(jù)和文件,并且安裝后沒有桌面應(yīng)用圖標株憾,所以創(chuàng)建一個空項目就可以了蝙寨,不需要Activity。
2嗤瞎、Android中使用Xposed
Android Studio中使用:
大家都知道,以前需要再eclipse導(dǎo)入jar包猫胁,而在Android Studio中只需要在app/build.gradle文件中添加依賴就可以使用了
當然也可以在AS中導(dǎo)入jar包箱亿,放在lib文件夾下,右鍵add as library...就可以了弃秆。
Eclipse中使用:因為我已經(jīng)不用elipse了届惋,所以這里就給出jar包的下載地址髓帽。點我下載Xposed需要的jar包
導(dǎo)入依賴成功后,就可以開始寫模塊了脑豹,首先要在AndroidManifest.xml中配置
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.test.happy.xposedt">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<!-- 應(yīng)用為模塊 -->
<meta-data
android:name="xposedmodule"
android:value="true" />
<!-- 版本信息 -->
<meta-data
android:name="xposedminversion"
android:value="82" />
<!-- 模塊描述 -->
<meta-data
android:name="xposeddescription"
android:value="Xposed Test" />
</application>
</manifest>
聲明程序入口郑藏,新建assets文件夾--->新建文件xposed_init,在該文件中瘩欺,進行如下配置必盖,包名+類名,類是實現(xiàn)了XposdMod接口子接口的類
com.test.happy.xposedt.Main
在模塊中創(chuàng)建類Main,(類名和xposed_init文件中配置的保持一致即可俱饿,可以隨意取名)歌粥。具體實現(xiàn)XposdMod接口的哪個子接口取決于,你想做的操作拍埠。
接口IXposedHookLoadPackage(一個新的app被加載時)
接口IXposedHookZygoteInit (安卓系統(tǒng)啟動時)
接口IXposedHookInitPackageResources (資源被初始化時)
這里就簡單的hook下微信的啟動頁失驶,打印下日志看看效果
public class Main implements IXposedHookLoadPackage {
@Override
public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam loadPackageParam)
throws Throwable {
if (!loadPackageParam.packageName.contains("com.tencent.mm")) {
return;
}
XposedHelpers.findAndHookMethod("com.tencent.mm.ui.LauncherUI", loadPackageParam.classLoader,
"bUn", new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
super.beforeHookedMethod(param);
Log.e("Xposed", "開始hook>>>>啟動的應(yīng)用包名" + loadPackageParam.packageName);
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
XposedBridge.log("成功hook>>>>啟動的應(yīng)用包名" + loadPackageParam.packageName);
Log.e("Xposed", "成功hook>>>>啟動的應(yīng)用包名" + loadPackageParam.packageName);
}
});
}
}
XposedBridge.log()是把寫入標準的logat中(data/data/de.robv.android.xposed.installer/log/debug.log)
至此,Xposed基本的使用就結(jié)束了
運行結(jié)果:
在模塊中選中自己寫的模塊枣购,重啟手機嬉探,連接AS,可看到日志的輸出: