1. whale hook framework 使用示例;
2. 參考項目:VirtualHook;
3. 按照 VirtualHook 修改 VirtualApp;
4. 編寫 hook plugin;
5. 運行修改后的 VirtualApp,也就是 VirtualWhale;
6. 在 VirtualWhale內 安裝 hook plugin,安裝 宿主(第三方)應用;
7. 在 VirtualWhale內 運行 宿主(第三方)應用;
8. 結束;
按照 whale 的 README.md 文檔,操作如下:
筆者編譯的源碼,因此操作 1. 3. 即可。
操作1:
操作3:
編譯成功!
接下來測試是否能 hook 本應用內方法是否成功。
XposedHelpers.java line259 方法 findAndHookMethod 的方法描述中,作者給出了使用示例,故試用代碼如下:
運行成功!
2. 第三方宿主(被hook的app)app為 DesignPatternApp。hook目的:讓該應用中的 TextView 顯示 hook 后的賦值。
3. hook 插件代碼編寫。
參照 VirtualHook:基於VirtualApp的Java代碼hook工具 ,注意需要遵守 whale hook框架公開出來的API規則,而不是YAHFA。編寫完成后,生成 apk,並將其 push 到設備SD卡中:
$ adb push hook_design_pattern_app.apk /sdcard
4. VirtualApp修改
參考 VirtualHook:基於VirtualApp的Java代碼hook工具 ,將文中的 YAHFA 更換為 whale 。主要代碼為 WhaleHookMain.java,作用是 加載 hook plugin 中的 hook 代碼,實現 hook 第三方app 。
5. 運行:
1)啟動 VirtualWhale,點擊“添加App”,選擇“外置存儲”,選擇“HookDesignPatternApp”,點擊“安裝”;
2)再次點擊“添加App”,選擇“克隆APP”,選擇“DesignPatternApp”,點擊“安裝”;
3)在應用管理主界面可以看到已安裝的應用列表。點擊“DesignPatternApp”,打開該App,點擊“TEST”按鈕,即可確認是否被正確 hook。
點擊 TEST 按鈕,執行 initView(String content) 函數。該函數也是我們需要 hook 的函數:hook 其參數 content 的值。
運行結果如下:
a. DesignPatternApp 原運行結果:
b. hook 后的結果:
6. 基於VirtualApp結合whale hook框架實現hook第三方應用成功!
7. 修改后的源碼鏈接:VirtualWhale