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
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 框架。
Xposed 是 Android 平台下的一个著名hook框架,其原理是通过修改替换 /system/bin/app_process 程序控制 zygote 进程,使app_process 在启动过程中加载 xposedBrider.jar 包,从而完成对 zygote 进程以及其创建的虚拟机劫持。基于 xposed 框架可以制作出许多功能强大的模块,其在功能不冲突的情况下同时运作。
Xposed 源码地址为:https://github.com/rovo89
Xposed 文件下载地址为:http://dl-xda.xposed.info/framework/
工程主要包括 5 部分:
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
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
环境要求
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:
其中 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 方法)。
实现模块还要完成下面几个步骤
下图是模块的核心代码,上述各项都已经具备
这里的包名是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
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 函数没有参数 )
去优酷广告
From( hook解密算法 ):https://www.bilibili.com/video/BV1UE411A7rW?p=75
"人人直播" 登录协议分析:https://www.cnblogs.com/LuLuLuHao