基於 VirtualApp 結合 whale hook框架實現hook第三方應用


要點

1. whale hook framework 使用示例;

2. 參考項目:VirtualHook;

3. 按照 VirtualHook 修改 VirtualApp;

4. 編寫 hook plugin;

5. 運行修改后的 VirtualApp,也就是 VirtualWhale;

6. 在 VirtualWhale內 安裝 hook plugin,安裝 宿主(第三方)應用;

7. 在 VirtualWhale內 運行 宿主(第三方)應用;

8. 結束;

 
實現過程梳理
       非root情況下 hook 第三方 apk 需要的技術點:
               1. hook framework;
               2. apk 反編譯、脫殼、分析;
               3. 非 root 情況下則需要一個能知曉 apk 運行期間所有狀態的環境,因此有了 虛擬多開應用 VirtualApp;
 
 
       針對以上三點技術選型:
               1. whale 是 VirtualApp 作者 lody 新開發的 hook 框架,基本實現了全平台(Android/iOS/Linux/MacOS)hook。從適應性穩定性代碼易讀性角度,選擇了該 hook 框架;
               2. 先從自己編寫的 apk 開始,簡化問題;
               3. 實現了 Dalvik 和 ART hook並能在非 root 狀況下穩定運行的虛擬多開開源應用,也就 VirtualApp 了,因此選擇 VirtualApp。
 
目標:在 VirtualApp內實現對 DesignPatternApp 的 hook
 
 
1. whale hook framework 使用示例;

   按照 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM