日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Xposed框架实战

發布時間:2025/3/21 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Xposed框架实战 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 環境
      • 夜神(Android5.1)
      • XposedInstaller(這里我用的是夜神軟件商店下載的)
        • 下載后直接點擊version進行install
      • 插件(i春秋教程教導)
    • 過程
      • 導入(注意這里不是libs,而是新建的lib)lib文件XposedBridgeApi-54.jar(把implemention改為provided模式,也就是不參與編譯到最終文件中)
        • 原來:
        • 更改:
      • AndroidManifest.xml文件編寫
      • 入口類編寫
      • 回調函數編寫
      • 設置啟動入口
      • 安裝激活插件,重啟即看到插件效果
    • 實戰
      • times類
      • hook掉times類中的test函數,讓它不再調用
    • hook前(無這行代碼param.setResult(null);)
    • hook后(有這行代碼param.setResult(null);)
    • classLoader

環境

夜神(Android5.1)

XposedInstaller(這里我用的是夜神軟件商店下載的)


點擊立即安裝就行,切記:不要再去稀奇古怪找一些其它版本的,那樣沒辦法激活的(即使有,也得費半天勁),自帶的直接雙擊式安裝

下載后直接點擊version進行install


然后就會顯示已激活

插件(i春秋教程教導)

過程

導入(注意這里不是libs,而是新建的lib)lib文件XposedBridgeApi-54.jar(把implemention改為provided模式,也就是不參與編譯到最終文件中)

原來:

更改:

AndroidManifest.xml文件編寫

<meta-data android:name="xposedmodule" android:value="true"/><meta-data android:name="xposeddescription" android:value="模塊說明"/><meta-data android:name="xposedminversion" android:value="54"/>

<meta-data android:name="xposedmodule" android:value="true"/>

true的話,xposed嘗試去加載apk作為插件的一部分

<meta-data android:name="xposeddescription" android:value="模塊說明"/>

<meta-data android:name="xposedminversion" android:value="54"/>


或者在assets目錄下的version文件里

入口類編寫

package com.example.xposed; import android.app.Application; import de.robv.android.xposed.IXposedHookLoadPackage; import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.callbacks.XC_LoadPackage;import static de.robv.android.xposed.XposedHelpers.findAndHookMethod;public class XposedEntry implements IXposedHookLoadPackage {@Overridepublic void handleLoadPackage(XC_LoadPackage.LoadPackageParam Param) throws Throwable {findAndHookMethod("com.example.xposed.times",Param.classLoader,"test", Application.class,new myget_times());} }class myget_times extends XC_MethodHook{protected void beforeHookedMethod(MethodHookParam param) throws Throwable {param.setResult(null);}protected void afterHookedMethod(MethodHookParam param) throws Throwable {}}

創建一個類繼承IXposedHookLoadPackage,然后把接口函數handleLoadPackage進行相應的重寫

findAndHookMethod("com.example.xposed.times",Param.classLoader,"test", Application.class,new myget_times());

hook函數的思路是先找到類,然后再近一步找到函數, findAndHookMethod的第一個參數是函數所在的類名(包名+類名),第二個參數Param.classLoader類裝載器,第三個參數是函數名,第四個參數是函數所需要的參數(參數類型+class),第五個參數是回調函數(還需近一步實現)

回調函數編寫

class myget_times extends XC_MethodHook{protected void beforeHookedMethod(MethodHookParam param) throws Throwable {param.setResult(null);}protected void afterHookedMethod(MethodHookParam param) throws Throwable {}}

創建一個類,繼承XC_MethodHook,然后對beforeHookedMethod(函數調用前操作,舉例 :直接讓它別調這個函數)和afterHookedMethod(函數調用后操作,舉例:直接把返回值(返回值在param中)更改再進行返回)

設置啟動入口

創建assests文件,在文件夾中,新建xposed_init文件,寫入入口類的信息


安裝激活插件,重啟即看到插件效果

可以看到,xp是在程序啟動的時候同時加載的,因此它的鉤子函數是區分進程的。如果有想對特定進程下鉤的話可以很方便使用xposed。而掛鉤函數方面可能沒有Cydia那樣容易寫,不過有一個優點是,對于程序的類和參數,可以通過名字來進行下構。比如說,對于String類,類名是java.lang.String,那么傳遞的參數可以使“java.lang.String”,與傳遞String.class效果是一樣的

xp的Hook分為函數執行前,和執行后兩個位置,可以分別進行參數修改和結果修改。如果不想進行調用的話,可以在執行前使用setResult(NULL)參數

實戰

times類

package com.example.xposed; import android.app.Application; import android.widget.Toast;import static android.widget.Toast.LENGTH_LONG;public class times {public void test(Application a){Toast.makeText(a, "點擊成功",LENGTH_LONG).show();}}

hook掉times類中的test函數,讓它不再調用

package com.example.xposed;import android.app.Application; import de.robv.android.xposed.IXposedHookLoadPackage; import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.callbacks.XC_LoadPackage;import static de.robv.android.xposed.XposedHelpers.findAndHookMethod;public class XposedEntry implements IXposedHookLoadPackage {@Overridepublic void handleLoadPackage(XC_LoadPackage.LoadPackageParam Param) throws Throwable {findAndHookMethod("com.example.xposed.times",Param.classLoader,"test", Application.class,new myget_times());} }class myget_times extends XC_MethodHook{protected void beforeHookedMethod(MethodHookParam param) throws Throwable {param.setResult(null);}protected void afterHookedMethod(MethodHookParam param) throws Throwable {}

hook前(無這行代碼param.setResult(null);)


hook后(有這行代碼param.setResult(null);)

classLoader

與java上的類似,就是一個類裝載器,與java不同的是,classLoader所加載的就是dex文件本身,所以通過程序的classLoader,可以取得程序的classLoader,可以取得程序的dex中所定義的所有類以及成員函數。同理,如果一個程序有多個dex,那么則會對應著多個classLoader,特別是使用動態加載的dex,則需要傳遞想要的classLoader才可以進行數據獲取,這點請注意。

總結

以上是生活随笔為你收集整理的Xposed框架实战的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。