關於Xposed是什麼及原理,這裏不多說,網上一搜一大把。這裏只講乾貨。
下面講的適用於有一定Android開發經驗的開發人員。
僅用於開發學習用,嚴禁挪作他用!
注:後附demo apk安裝包。
素材準備:
1、root後的Android機一臺;
2、下載XposedInstaller.apk,安裝到root後的手機,用於作爲動態調試容器。之後開發出來的xposed hook插件要添加進這個容器後才能hook第三方應用。下載地址:鏈接:https://pan.baidu.com/s/1EAGoAbJo8nRFJZwXqsip3A 密碼:gszz
3、準備XposedBridgeApi.jar包,可以從官網下載:
[XposedBridgeApi-54官方下載地址]https://forum.xda-developers.com/attachment.php?s=5903ce1b3edb1032faba7292b21e1801&attachmentid=2748878&d=1400342298
或在下面自己寫的XposedDemo工程中的build.gradle文件中引入xposed依賴包,如下圖:
4、Android開發環境及工具。這裏使用Android studio。
創建自己的XposeDemo框架工程,步驟如下:
1、創建空項目,名叫XposedDemo
2、在build.gradle中添加核心依賴包:provided ‘de.robv.android.xposed:api:82’
3、編寫hook類,hook第三方應用的功能方法,更該請求參數、響應值等實現動態調試。前提是事先確定好第三方應用的包名——類名——方法名,例如:我的要hook的第三方應用代碼如下:
下面進入重點——編寫動態調試代碼,實現對goLogin的篡改,不管輸入pwd爲何止,使goLogin永遠返回true,從而越過第三方應用的登錄密碼校驗。
4、hook代碼類如下:
public class HookLogin implements IXposedHookLoadPackage {
private static final String PACKAGE_NAME = "com.mscf.finance";
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
Log.i(Contants.TAG, "xposeddemo--進入我的hook-----~~");
if (lpparam.packageName.equals(PACKAGE_NAME)) {
Log.i(Contants.TAG, "包名存在!");
} else {
Log.i(Contants.TAG, "com.mscf.finance--包名不存在!");
return;
}
//固定格式
findAndHookMethod(
"com.mscf.finance.activity.Aty_Login", //要hook的包名+類名
lpparam.classLoader, //classLoader固定
"goLogin", //要hook的方法名
// int.class,//方法參數 沒有就不填
new XC_MethodHook() {
@Override
//此函數在執行被hook函數前調用,用來修改入參
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
Log.i(Contants.TAG, "進入beforeHookedMethod---");
}
//方法執行後執行,改方法的返回值一定要在方法執行完畢後更改
protected void afterHookedMethod(MethodHookParam param)
throws Throwable {
Log.i(Contants.TAG, "進入afterHookedMethod---");
//修改返回值爲true,越過登錄密碼驗證
param.setResult(true);
String result = param.getResult() + "";
Log.i(Contants.TAG, "afterHood輸出結果---" + result);
}
}
);
}
}
5、配置hook啓動入口:在工程目錄的main/assets/下新建文件xposed_init 複製以下內容到文件:
com.zp.xposeddemo.HookLogin
注意該目錄即自己的包名+hook類名。
6、運行功能XposedDemo到root後的手機上,桌面多了一個名叫MyXposeDemo的應用。如此一個動態調試登錄事件的hook插件開發出來了。
7、將MyXposeDemo添加進XposedInstaller容器中。
- 打開XposedInstaller容器,先進行激活。網上搜 xposedInstaller激活教程一大把。這裏不做重點講。
- 激活後如下圖:
- 點擊左側菜單,選擇模塊,勾選我們的XposedDemo,然後重啓手機設備。
- 重啓後後,點擊被hook的第三方APP,執行登錄,輸入任何值,都提示“登錄成功”。完活!
總結:
最後回顧整個流程,其實主要就是基於Xposed依賴包開發了一個篡改登錄功能的插件。在afterHookedMethod方法中修改被hook住的方法名,篡改其返回值,實現登錄功能越過。
附上實戰體驗demo:下載鏈接:https://pan.baidu.com/s/1-fdOgNQfTSPJ8hLVIjMcRA 密碼:9fcb
切記:手機需要root後再安裝上述demo,體驗。