hook系列——Xposed框架入門(一)
說到hook技術,顧名思義就能形象解釋了它的作用。
常用的hook技術框架莫過於substrace cydia,frida還有就是這個Xposed了。
先說一下Xposed原理吧
Android 有一個Zygote(受精卵)這個東西,大家應該不陌生,它本質是一個應用層的程式。每個應用程式由它fork()出。其最初的名字是app_process,通過直接呼叫pctrl把名字給改成了”zygote”。程式碼位於frameworks/base/cmds/app_process/app_main.cpp。
Xposed框架是一款可以在不修改APK的情況下影響程式執行(修改系統)的框架服務;
2.通過替換/system/bin/app_process程式控制zygote程序,使app_process在啟動過程中載入XposedBridge.jar這個jar包,從而完成對Zygote程序及其建立的Dalvik虛擬機器的劫持;
MainActivity程式碼如下:<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/tv" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:id="@+id/bt" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="我來改變IMEI"/> </LinearLayout>
public class MainActivity extends AppCompatActivity { private Button button; private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView= (TextView) findViewById(R.id.tv); button = (Button) findViewById(R.id.bt); textView.setText(MyImei()); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { textView.setText(MyImei()); } }); } public String MyImei() { return "真正IMei"; } }
想要達到的效果是,文字原本顯示的是 真正IMei 這個幾個字,當外掛運行了,會修改這個方法,點選按鈕,文字字會被修改 接下來,開始寫我們的外掛
1.新建一個Android 工程,匯入jar包,這裡著重提醒,大多數部落格都是錯誤的引入方式,導致會報錯
正確的引入方式:
在app下新建一個資料夾並複製jar到資料夾下,在build.gradle下寫上,Sync now一下即可。
2.在AndroidManifest.xml下的application結點下配置meta-data,如圖:
3.寫一個類去實現 IXposedHookLoadPackage 介面,並重寫handleLoadPackage方法
public class Main implements IXposedHookLoadPackage{
String className = "com.xptest.myimei.MainActivity";
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
Class clazz = loadPackageParam.classLoader.loadClass(className);
/**
* 第一個引數是目標類
* 第二個引數是目標方法
* 第三個是回撥,可用這個替換目標方法,還有個帶兩個方法的回撥,before,after那個
*/
XposedHelpers.findAndHookMethod(clazz, "MyImei", new XC_MethodReplacement() {
@Override
protected Object replaceHookedMethod(MethodHookParam methodHookParam) throws Throwable {
return "Hook Imei";
}
});
}
}
這個方法是在一個app包被載入的時候執行,執行的特別早,甚至在Application.onCreate()方法之前。可以在這裡設定特定的hook鉤子。引數物件包含app的一些資訊。這裡簡單列印一些資訊。
4.指定模組的執行入口
新建一個asset資原始檔,新建一個文字檔案,並命名xposed_init(必須)
內容寫入口類的全包名
5.安裝一開始編寫應用,開啟是這個樣子
點選按鈕,也不會發生改變
6.開始編譯並安裝外掛
7.安裝完成後,會提示
8.點選開啟,選擇模組,會看到剛才安裝的外掛
9.點選勾選,然後回到框架頁面重啟即可
此時,安裝並開啟我們編寫的應用
一進入頁面就發現文字已經被修改了,點選按鈕也不會出現之前的”真正IMei“字樣,說明我們已經hook成功
本人個人原創,如有雷同,純屬巧合,或者與本人聯絡,做改動。請轉載或者CV組合標明出處,謝謝!(如有疑問或錯誤歡迎指出,本人QQ:752231513)