要点

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

基于 VirtualApp 结合 whale hook框架实现hook第三方应用的更多相关文章

  1. Android Hook框架adbi的分析(3)---编译和inline Hook实践

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/75200800 一.序言 在前面的博客中,已经分析过了Android Hook框架a ...

  2. [转载] Android.Hook框架xposed开发篇

    本文转载自: http://www.52pojie.cn/thread-396793-1-1.html 原帖:http://drops.wooyun.org/tips/7488 作者:瘦蛟舞 官方教程 ...

  3. 【转】Android Hook框架Xposed详解

    1 Introduction 1.1  概述 Xposed 是 GitHUB 上 rovo89 大大设计的一个针对 Android 平台的动态劫持项目,通过替换 /system/bin/app_pro ...

  4. Android Hook框架adbi源码浅析(一)

    adbi(The Android Dynamic Binary Instrumentation Toolkit)是一个Android平台通用hook框架,基于动态库注入与inline hook技术实现 ...

  5. Android Hook框架Xposed详解

    1 Introduction 1.1  概述 Xposed 是 GitHUB 上 rovo89 大大设计的一个针对 Android 平台的动态劫持项目,通过替换 /system/bin/app_pro ...

  6. Android Hook框架adbi的分析(2)--- inline Hook的实现

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/74452308 一. Android Hook框架adbi源码中inline Hoo ...

  7. Android Hook框架adbi的分析(1)---注入工具hijack

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/74055505 一.Android Hook框架adbi的基本介绍 adbi是And ...

  8. Android平台dalvik模式下java Hook框架ddi的分析(2)--dex文件的注入和调用

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/77942585 前面的博客<Android平台dalvik模式下java Ho ...

  9. Android平台dalvik模式下java Hook框架ddi的分析(1)

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/75710411 一.前 言 在前面的博客中已经学习了作者crmulliner编写的, ...

随机推荐

  1. ASCII 、UTF-8、Unicode编码

    1.各种编码的由来 1.1.计算机编码的由来 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.所以只能是用一些数字来表示文本,这就是编码的由来.最早的计算机在设计时采用8个比 ...

  2. POJ 1252 Euro Efficiency ( 完全背包变形 && 物品重量为负 )

    题意 : 给出 6 枚硬币的面值,然后要求求出对于 1~100 要用所给硬币凑出这 100 个面值且要求所用的硬币数都是最少的,问你最后使用硬币的平均个数以及对于单个面值所用硬币的最大数. 分析 :  ...

  3. codevs 1098 均分纸牌 2002年NOIP全国联赛提高组 x

     时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold   题目描述 Description 有 N 堆纸牌,编号分别为 1,2,…, N.每堆上有若干张,但纸牌总数必 ...

  4. (21)UML类图学习及使用

    UML类图的学习和使用 1.参考博客http://www.uml.org.cn/oobject/201211231.asp

  5. sed的一些应用

    1. sed 使用变量进行替换,注意使用参数 r 时,需要放在参数 i 的前面 下面这个例子是用2.txt中的版本号替换docker-compose.yml中的版本号,其中变量UPGRADE_NAME ...

  6. 模拟赛DAY1 T2腐草为萤

    2.腐草为萤(dzy.cpp/c) [题目背景] 纤弱的淤泥中妖冶颓废在季夏第三月最幼嫩的新叶连凋零都不屑何必生离死别——银临<腐草为萤> [问题描述] 扶苏给了你一棵树,这棵树上长满了幼 ...

  7. mysql 无法存储表情字符 java.sql.SQLException: Incorrect string value: '\xF0\x9F\x90\xBE",...' for column 'XXXX' at row 1

    1.变更字段类型 ALTER TABLE api_log MODIFY COLUMN remark longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_uni ...

  8. Celery定时任务|计划任务

    适用场景几点几分执行特定的任务 定时任务 配置这个无需多说了和上篇文章一样 任务函数 硬菜来了 添加任务时候的写法 第一种: from celery_task.order_task import or ...

  9. Linux_DHCP&DHCP Relay

    目录 目录 DHCP DHCP Relay Setup DHCPServer Setup ClientPort DHCPDHCPRelay Setup DHCPRelay service DHCP D ...

  10. 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_06 Set集合_2_哈希值

    没有重写就是十进制的整数,重写了想返回多少就是多少. 创建Person类,没有写继承关系,默认会继承Object类 打开Object这个类 找到HashCode这个方法.就这一行代码.甚至都没有方法体 ...