使用渗透测试框架Xposed Framework hook调试Android APP


发布人:admin分类:网络安全浏览量:50发布时间:2017-12-12

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

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 <xposed-installer-you-just-downloaded>.apk

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

Modules 下面是一些可用的模块

实现一个模块

一个 Xposed 模块就是一个 Android app,不需要实现 Activity,本例中的 module 叫com.bypass.validation, 下面是这个实例的 AndroidManifest.xml 文件,注意其中定义了三项 meta-data:

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

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.bypass.validation"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk android:minSdkVersion="15" android:targetSdkVersion="15" />
    <application android:allowBackup="true" android:icon="@drawable/ic_launcher"    android:label="@string/app_name" android:theme="@style/AppTheme" >
    <meta-data 
        android:name="xposedmodule" 
        android:value="true"/>
    <meta-data
        android:name="xposeddescription"
        android:value="Hooking Module for Bypassing Validation" />
    <meta-data
        android:name="xposedminversion"
        android:value="30" />

</application>

</manifest>

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

然后在 src 目录下面建立一个 java 文件,就叫 bypass.java 吧,并在 assets 目录中新建一个叫xposed_init 的文件,里面写上刚才建立的 java 文件的包路径,这样,我们的apk 就可以被识别为一个 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


被黑站点统计 - 文章版权1、本主题所有言论和图片纯属会员个人意见,与本文章立场无关
2、本站所有主题由该文章作者发表,该文章作者与被黑站点统计享有文章相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该文章作者和被黑站点统计的同意
4、文章作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、被黑站点统计管理员有权不事先通知发贴者而删除本文

免责声明

本站主要通过网络搜集国内被黑网站信息,统计分析数据,为部署安全型网络提供强有力的依据.本站所有工作人员均不参与黑站,挂马或赢利性行为,所有数据均为网民提供,提交者不一定是黑站人,所有提交采取不记名,先提交先审核的方式,如有任何疑问请及时与我们联系.

admin  的文章


微信公众号

微信公众号


Copyright © 2012-2022被黑网站统计系统All Rights Reserved
页面总访问量:21460850(PV) 页面执行时间:101.706(MS)
  • xml
  • 网站地图