zoukankan      html  css  js  c++  java
  • 基于 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

  • 相关阅读:
    java.lang.NoSuchMethodError
    asm相关内容想下载(包括 jar 包)
    Initialization of bean failed; nested exception is java.lang.NoClassDefFoundError: org/objectweb/asm/Type
    用Navicat连接mysql报错:2003-Can't connect to MySql server on '10.100.0.109'(10039)
    The type java.lang.reflect.AnnotatedElement cannot be resolved. It is indirectly referenced from required .class files
    The type java.lang.CharSequence cannot be resolved. It is indirectly referenced from required .class files
    交通测速方式
    卡口和电子警察的区别
    Myeclipse连接Mysql数据库时报错:Error while performing database login with the pro driver:unable
    在window上安装mysql
  • 原文地址:https://www.cnblogs.com/nmj1986/p/11704407.html
Copyright © 2011-2022 走看看