From:https://blog.csdn.net/muzhengjun/article/details/46888013

Xposed框架分析:https://blog.csdn.net/zjx839524906/article/details/81046844

xposted框架 原理

Xposed框架之函数Hook学习:https://www.cnblogs.com/csnd/p/11800719.html

如何看待阿里开源的 dexposed 框架?:https://www.zhihu.com/question/31894163

Epic——ART上的Dexposed(无侵入式Hook框架):https://bbs.pediy.com/thread-222931.htm

【搬砖】无需 Root 也能使用 Xposed:https://www.52pojie.cn/thread-679501-1-1.html

 

Android中Xposed框架篇—利用Xposed框架实现拦截系统方法:http://www.520monkey.com/archives/895

 

关键字:xposed hook:https://www.baidu.com/s?wd=xposed%20hook

 

 

1. 什么是 hook

 

hook 本质就是劫持函数调用,但由于处于 linux 用户态,每个进程都有自己独立的进程空间,所以必须先注入到所要 hook 的进程空间,修改其内存中的进程代码,替换其过程表的符号地址。

Android 中一般通过 ptrace 函数附加进程,然后向远程进程注入 so 库,从而达到监控以及远程进程关键函数挂钩。

Hook 的难点在于寻找函数的入口点、替换函数,这就涉及到函数的连接与加载机制。

Android 中一般存在两种 hook:sdk hook,ndk hook。native hook 的难点在于理解 ELF 文件与学习 ELF 文件,Java 层 Hook 则需要了解虚拟机的特性与 java 上的反射使用。另外还存在全局 hook,即结合 sdk hook 和 ndk hook,xposed 就是一种典型的全局 hook 框架。

 

 

2. Xposed

 

xposed 原理

Xposed 是 Android 平台下的一个著名hook框架,其原理是通过修改替换 /system/bin/app_process 程序控制 zygote 进程,使app_process 在启动过程中加载 xposedBrider.jar 包,从而完成对 zygote 进程以及其创建的虚拟机劫持。基于 xposed 框架可以制作出许多功能强大的模块,其在功能不冲突的情况下同时运作。

 

Xposed 工程

Xposed 源码地址为:https://github.com/rovo89
Xposed 文件下载地址为:http://dl-xda.xposed.info/framework/

工程主要包括 5 部分:

  • Xposed:独立实现了一版 Xposed版的 zyogte,即生成用来替换 /system/bin/app_process 的可执行文件,该文件在系统启动时在 init.rc 中被调用,启动 Zygote 进程,init.zygote.rc 中源码如下:
service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server    class main    socket zygote stream 660 root system    onrestart write /sys/android_power/request_state wake    onrestart write /sys/power/state on    onrestart restart media    onrestart restart netd
  • XposedBridge:Xposed 框架的 Java 部分,编译输出为 XposedBridge.jar,为开发者提供接口
  • android_art:Xposed 框架的 C++ 部分,对 XposedBridge 的补充
  • XposedTools:框架编译工具,因为 Xposed 和 XposedBridge 编译依赖于 Android 源码,而且还有一些定制化的东西。
  • XposedInstaller:Xposed 插件管理和功能选择应用,界面如下图所示,其功能包括启动Xposed框架,下载和启用指定插件,或禁用插件等。

 

 

Xposed 框架

 

Xposed Framework 是一个很强大的渗透测试框架,本文中讲述如何用 Xposed Framework hook 一个Android APP中的一个方法并绕过登录验证。

 

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
For Android 5.0 or higher (Lollipop/Marshmallow), these versions don't work! Use this instead:
http://forum.xda-developers.com/showthread.php?t=3034811
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

Xposed Framework 原理简述

Xposed Framewrork 也使用了模块化的扩展模式,可以通过编写模块来满足不同的需求,比如有一个模块叫 3dot menu,可以在每一个 APP 界面中添加一个三点按钮,20MP sensor for Superior Auto 可以扩展 sony 相机,所有 Xposed Framework 能够实现的功能都是通过模块的方式实现的,这里提供了一些例子模块:example modules。

如果想了解更多关于 Xposed Framework 的详情,出门右转 :Xposed Framework

Zygote 是 Android 的核心,每打开一个 app,Zygote 就会 fork 一个虚拟机实例来运行 app,Xposed Framework 深入到了 Android 核心机制中,通过改造 Zygote 来实现一些很牛逼的功能。Zygote 的启动配置在 /init.rc 脚本中,由系统启动的时候开启此进程,对应的执行文件是 /system/bin/app_process,这个文件完成类库加载及一些函数调用的工作。

当系统中安装了 Xposed Framework 之后,会对 app_process 进行扩展,也就是说,Xposed Framework 会拿自己实现的 app_process 覆盖掉 Android 原生提供的 app_process 文件,当系统启动的时候,就会加载由 Xposed Framework 替换过的进程文件,并且,Xposed Framework 还定义了一个 jar 包,系统启动的时候,也会加载这个包:

/data/data/de.robv.android.xposed.installer/bin/XposedBridge.jar

 

环境要求

  • 1.Rooted Device / Emulator (已 root 的手机或者模拟器)
  • 2.Xposed Installer (Xposed 安装程序)
  • 3.Testing Android App

Xposed Framework 就是一个 apk 包,下载到后用下面的命令安装到手机上:

adb install .apk

现在安装 Xposed 比较方便,因为 Xposed 作者开发了一个 Xposed Installer App,下载后按照提示傻瓜式安装(前提是 root 手机)。其实它的安装过程是这个样子的:首先探测手机型号,然后按照手机版本下载不同的刷机包,最后把Xposed刷机包刷入手机重启就 好。刷机包下载 里面有所有版本的刷机包。

刷机包解压打开里面的 文件 构成是这个样子的:

Xposed 原理简介及其精简化:https://www.jianshu.com/p/6b4a80654d4e

META-INF/                           里面有文件配置脚本 flash-script.sh 配置各个文件安装位置。system/bin/                         替换zygote进程等文件system/framework/XposedBridge.jar   jar包位置system/lib system/lib64             一些so文件所在位置xposed.prop                         xposed版本说明文件

所以安装 Xposed 的过程就上把上面这些文件放到手机里相同文件路径下。

通过查看文件安装脚本发现:Xposed 就是修改替换了 /system/bin/app_process 文件,app_process 是 zygote 的进程文件。所以 Xposed 通过替换的 zygote 进程实现了控制手机上所有 app 进程。因为所有 app 进程都是由 Zygote fork 出来的。

Xposed 的基本原理是修改了 ART/Davilk 虚拟机,将需要 hook 的函数注册为 Native 层函数。当执行到这一函数时,虚拟机会优先执行 Native层函数,然后再去执行 Java层函数,这样完成函数的 hook。

安装好之后,打开 Xposed ,下面是截图:

Modules 下面是一些可用的模块

 

 

模块实现一个模块

 

一个 Xposed 模块就是一个 Android app,不需要实现 Activity

本例中的 module 叫 com.bypass.validation, 下面是这个实例的 AndroidManifest.xml 文件,注意其中定义了三项 meta-data:

  • 1. Module name 
  • 2. Module Description 
  • 3. Module Minimum Version
                    

其中 xposedminversion 是指 XposedBridge library 的版本,需要将 Xposed Library 复制到 lib目录 ( 注意是 lib 目录不是 libs 目录),然后将这个 jar 包添加到 Build PATH 中,jar 包可以在这里下载。

http://forum.xda-developers.com/attachment.php?attachmentid=2748878&d=1400342298

然后在 src 目录下面建立一个 java 文件,就叫 bypass.java 吧,并在 assets 目录中新建一个叫 xposed_init 的文件,里面写上刚才建立的 java 文件的包路径,这样,我们的 apk 就可以被识别为一个 Xposed 模块了

图示:

导入 xposed 相关包,函数的编写就是固定格式了。。。

现在来看看要 hook 的 apk 包,要 hook,关键是要知道 hook 的点,即要明确要 hook 的函数名,实际使用中可以用 jeb 等反编译工具得到需要 hook 的函数名,我们这里就直接看样例 app 的源码吧:

从源码中可以看到,MainActivity 的验证逻辑很简单,只要用户输入的密码和定义的 password 相等,就可通过验证(checkLogin 方法)。

 

实现模块还要完成下面几个步骤

  • 1.实现 IXposedHookLoadPackage接口
  • 2.指定要 hook 的包名(这里是com.attify.vuln)
  • 3.判断当前加载的包是否是指定的包(在接口方法中判断
  • 4.指定要 hook 的方法名
  • 5.实现beforeHookedMethod方法和afterHookedMethod方法(hook的具体功能)

下图是模块的核心代码,上述各项都已经具备

这里的包名是com.attify.vuln,

if(lpparam.packageName.equals("com.attify.vuln"))

上面这一行代码指定了只有当 com.attify.vuln 这个包加载的时候,才会触发一系列的 hook 行为,当这行为触发的时候,de.robv.android.xposed.XposedHelpers 类的 findAndHookMethod 方法就会被调用,并在适当的时候执行前置方法(beforeHookedMethod)和后置方法(afterHookedMethod),这里绕过验证方法只需要让传递到 checkLogin 方法的两个参数相等即可,so easy。当 checkLogin 方法被调用前调用我们实现的模块,并执行前置函数,就可以使得传递给 checkLogin 函数的两个参数相等。

 

最后环节

把我们实现的模块安装到设备上,如下图:

勾选我们刚才安装的模块,并重启系统,等系统重启之后,打开样例 app,在输入密码的地方输入任意字符,因为我们实现的那个模块会执行

param.args[1] = param.args[0];

这行代码,所以输入任意密码都会通过验证,如下图

整个模块执行过程的 log 信息可以在 Xposed log 中查看到,如下图

由日志可以看到,hook 的关键代码 (前置函数) 执行前,checkLogin 方法的两个参数是不同的,而在后置函数执行的时候,两个参数已然相等了:)

[参考来源 attify,译/实习编辑 吴知,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)]shi

 

 

示例 2

 

Form:https://www.bilibili.com/video/BV1UE411A7rW?p=73

https://www.52pojie.cn/thread-232658-1-1.html

Android入门破解题目(EX05_01_.apk、Crackme02.apk、CrackMe-F1F2.apk)
        https://blog.csdn.net/m0_38071863/article/details/102931100

第一个Android crackme:https://www.cnblogs.com/flycat-2016/p/5521979.html

示例破解程序

工程目录:

示例 hook 代码:

hook 后,无论输入什么,都可以注册成功,因为hook 修改了返回值,使返回值一直是 true

 

hook 系统函数(拦截系统函数),篡改 IMEI 号:( getDeviceId 函数没有参数 )

 

去优酷广告

 

 

 

示例 3:( Hook 人人直播.apk )

 

From( hook解密算法 ):https://www.bilibili.com/video/BV1UE411A7rW?p=75

"人人直播" 登录协议分析:https://www.cnblogs.com/LuLuLuHao

 

 

 

 

更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. Android(安卓)图片文件夹区别
  6. android 2.3 & 4.2 Audio静音过程分析
  7. Android解析自定义xml文件--Pull解析xml文件,测试demo(方案三)
  8. [转] This Android(安卓)SDK requires Android(安卓)Developer T
  9. Android(安卓)SdCard 新建文件夹并在文件夹中读、写文件

随机推荐

  1. 全家桶!阿里P8大佬熬夜15天,把所有Android
  2. Tensorflow在手机端的部署——官网Androi
  3. 【Android(安卓)FFMPEG 开发】Android(安
  4. Android数据存取之Databases
  5. manifest文件
  6. Android贝塞尔曲线————波浪效果(大波
  7. 我所理解的Android模块化(四)——常见问题
  8. 回望十年Android
  9. Android(安卓)ImageView 图片等比缩放问
  10. Android(安卓)UI Action Bar之ActionBarS