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

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

入侵渗透访客2021-10-12 0:01:004632A+A-

  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 方法的两个参数是不同的,而在后置函数执行的时候,两个参数已然相等了:)

 

点击这里复制本文地址 以上内容由黑资讯整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
  • 2条评论
  • 性许离鸢2022-05-29 09:58:40
  • 意字符,因为我们实现的那个模块会执行  param.args[1] = param.args[0];  这行代码,所以输入任意密码都会通过验证,如下图  整个模块
  • 拥嬉别れ2022-05-29 04:55:09
  • 录中新建一个叫xposed_init 的文件,里面写上刚才建立的 java 文件的包路径,这样,我们的apk 就可以被识别为一个 Xposed 模块了  现在来看看要 hook 的 apk 包,要 hook,关键

支持Ctrl+Enter提交

黑资讯 © All Rights Reserved.  
Copyright Copyright 2015-2020 黑资讯
滇ICP备19002590号-1
Powered by 黑客资讯 Themes by 如有不合适之处联系我们
网站地图| 发展历程| 留言建议| 网站管理