3. Android逆向-基于Frida的工具Objection

Objection安装使用

在开始熟悉Frida时,接触的示例是需要frida-server在一个root过的os环境中运行,便于读取/访问所有需要的数据或其他app。一般真机开发过程,都是一个比较纯粹的App开发,不会在一个Root过的Android设备上进行开发。这篇主要就是学习在非Root环境下hook app。

这里介绍并使用一个基于Frida开发的工具objection: 📱 objection - runtime mobile exploration (github.com)

本篇文章主要描述下objection安装及在使用过程中遇到的问题。

安装

安装Objection工具前先确认系统中安装了Python 3.4以上版本,现在较新的版本基本都比3.4高来了,也可以使用python -V指令查看版本号。另外更新pip3工具,使用命令pip install pip --upgrade进行更新。

最后使用命令pip3 install -U objection进行objection的安装。

Python的版本一定要是Python 3,而非Python 2,否则按照过程会报错。

Collecting objection
  Could not find a version that satisfies the requirement objection (from versions: )
No matching distribution found for objection

可以到Objection wiki中查看安装条件及步骤,[跳转](Installation · sensepost/objection Wiki (github.com))到官网

在Windows上直接尝试了安装最新版本的Frida及Objection,遇到了问题,安装的坑,Objection安装版本需要配合Frida版本,不能在不指定版本的情况下直接安装Frida,因为默认会安装Frida最新版本,这样在运行objection会提示错误。

Unable to connect to the frida server: need Gadget to attach on jailed Android; its default location is: C:\Users\2006017018\AppData\Local\Microsoft\Windows\INetCache\frida\gadget-android-arm64.so

可以查看 问题 中的说明。

使用

在使用过程中,可能会遇到一些不大不小的问题,下面对在Ubuntu上及Windows操作过程出现问题的整理。

Ubuntu

重打包目的是将frida-gadget.so库嵌入到apk中,并且对apk做少许修改,以便可以通过工具进行指令交互。

需要的工具:

  • aapt/aapt2 资源的编译工具,可以在 **$ANDROID_HOME/build-tools/[工具版本]/ ** 路径下找到。
  • adb 指令工具,在 $ANDROID_HOME/paltform-tools/ 路径下找到。
  • jarsigner jar包签名工具,可以在 $JAVA_HOME/bin l路径下找到。
  • Apktool apk反编译工具,需要下载Apktool,ubuntu等linux系统下,不建议直接使用package manager方式安装,建议下载使用最新版本。

可以将这些工具方法同一个目录下便于使用。

下来使用 objection patchapk 指令进行重打包工作。

$ objection patchapk  --source ../ruixi.apk

直接使用指令进行打包遇到的问题.

  1. aapt工具找不到:这个多半是没有配置aapt工具的环境变量,可以配置环境变量解决。一般开发时AS会完成对AAPT工具的使用。

  2. 提示 Failed to determine architecture. Is the device connected and authorized?:这个更容易理解,objection 需要知道apk运行的设备CPU架构,从而对应将 frida-gadget 嵌入到apk中。

  3. frida-gadget版本:需要注意的是,objection 是基于frida开发,frida更新版本快,objection 使用的frida版本不会是最新的,需要注意版本的一致。

  4. frida-gadget下载超时:在开始下载时,会有如下提示,将下载的 frida-gadget.so 放入到 home 目录的 ~/.objection/android/x86/ 的路径下。

    Using manually specified version: 14.2.14
    Remote FridaGadget version is v14.2.14, local is v0. Downloading...
    Downloading from: https://github.com/frida/frida/releases/download/14.2.14/frida-gadget-14.2.14-android-x86.so.xz
    Downloading x86 library to ~/.objection/android/x86/libfrida-gadget.so.xz...
    

    aapt
    aapt2
    apksigner 版本是build-tools 版本31内取得。

    均通过配置环境变量路径到 $ANDROID_HOME/build-tools/[版本文件夹]/ 即可。

  5. Apktool找不到。按照官网的安装步骤进行操作就可以解决。

上述5个问题基本就可以包含所有使用的工具包。

运行指令:

$ objection patchapk  -a x86 -V 14.2.14 --source ../ruixi.apk
sing manually specified version: 14.2.14
Patcher will be using Gadget version: 14.2.14
Detected apktool version as: 2.6.1
Running apktool empty-framework-dir...
Unpacking ruixi.apk
App does not have android.permission.INTERNET, attempting to patch the AndroidManifest.xml...
Injecting permission: android.permission.INTERNET
Writing new Android manifest...
Setting extractNativeLibs to true...
Target class not specified, searching for launchable activity instead...
Reading smali from: /tmp/tmph5gwopp_.apktemp/smali/com/ruixi/android/app1/ui/activity/RXMainActivity.smali
Injecting into an existing constructor
Injecting loadLibrary call at line: 138
Attempting to fix the constructors .locals count
Current locals value is 2, updating to 3:
Writing patched smali back to: /tmp/tmph5gwopp_.apktemp/smali/com/ruixi/android/app1/ui/activity/RXMainActivity.smali
Creating library path: /tmp/tmph5gwopp_.apktemp/lib/x86
Copying Frida gadget to libs path...
Rebuilding the APK with the frida-gadget loaded...
Built new APK with injected loadLibrary and frida-gadget
Performing zipalign
Zipalign completed
Signing new APK.
Signed the new APK
Copying final apk from /tmp/tmph5gwopp_.apktemp.aligned.objection.apk to ruixi-20220615-1.0.1.80.objection.apk in current directory...
Cleaning up temp files...

这样执行就成功了。之后再次安装重打包后的apk

连接测试

在重新安装后,进行连接。

  1. 非Root系统。

    $ objection  -g com.ruixi.android explore
    Using USB device `xCL`
    Agent injected and responds ok!
    
         _   _         _   _
     ___| |_|_|___ ___| |_|_|___ ___
    | . | . | | -_|  _|  _| | . |   |
    |___|___| |___|___|_| |_|___|_|_|
          |___|(object)inject(ion) v1.11.0
    
         Runtime Mobile Exploration
            by: @leonjza from @sensepost
    
    [tab] for command suggestions
    com.ruixi.android on (saio: 8.1.0) [usb] # env
    
    Name                    Path
    ----------------------  -------------------------------------------------------------
    cacheDirectory          /data/user/0/com.ruixi.android/cache
    codeCacheDirectory      /data/user/0/com.ruixi.android/code_cache
    externalCacheDirectory  /storage/emulated/0/Android/data/com.ruixi.android/cache
    filesDirectory          /data/user/0/com.ruixi.android/files
    obbDir                  /storage/emulated/0/Android/obb/com.ruixi.android
    packageCodePath         /data/app/com.ruixi.android-3KNHldf3u0HvkOOWzexSDA==/base.apk
    com.ruixi.android on (saio: 8.1.0) [usb] # 
    com.ruixi.android on (saio: 8.1.0) [usb] # 
    

    这里连接是成功的。

    注意的是,使用指令连接前,进程需要是存在的。

  2. Root系统。

    • 模拟器。运行失败 Unable to connect to the frida server: need Gadget to attach on jailed Android; its default location is: ~/.cache/frida/gadget-android-arm64.so 暂无解决办法。
    • 真机。运行失败,无解决办法。

结论:frida-gadget 方式,只适用于非Root系统。Root系统环境下,不需要将frida-gadget.so库嵌入到app中,可以直接使用objection指令操作。

Windows

  • 找不到 aapt/aapt2,将appt的目录设置到PATH环境变量。例如:D:\DevTools\android_sdk\build-tools\33.0.0-rc4

  • 提示找不到 apktool,基于[APKTOOL官网](Apktool - How to Install (ibotpeaches.github.io)) 的windowsx下的安装方式,将apktool配置到环境变量中。

    Unable to find apktool. Install it with: apt install apktool (Kali Linux) before continuing.
    

已验证方法:

windows系统下,有时候在使用objecton patchapk对目标apk进行frida-gadget.so注入时,objection进行对应版本的frida-gadget.so.xz压缩包下载时,可能会由于带宽或网络延迟导致下载失败。

解决方法:

首先注意到C:盘用户目录下的.objection下下载好so文件的目录结构及android目录下的结构。

请添加图片描述 请添加图片描述

打开文件gadget_versions,内容是下载好的CPU结构及so版本信息。

{"android_armeabi-v7a": "15.2.2"}

逆向考虑下,在还 objection 没有下载前提下,我们首先手动下载需要的frida-gadget[版本号].so.xz版本。下载到本地,减压缩并且重名为libfrida-gadget.so。

在开始patchapk,信息提示从远程下载对应版本。

No architecture specified. Determining it using `adb`...
Detected target device architecture as: armeabi-v7a
Using latest Github gadget version: 15.2.2
Remote FridaGadget version is v15.2.2, local is v0. Downloading...
Downloading from: https://github.com/frida/frida/releases/download/15.2.2/frida-gadget-15.2.2-android-arm.so.xz

现在换成手动方式。

  1. 手动下载frida-gadget-15.2.2-android-arm.so.xz,减压缩并且重命名为libfrida-gadget.so。

  2. 在.objection目录下创建文件gadget_versions文件,并编辑内容

    {"android_armeabi-v7a": "15.2.2"}
    

    json格式的key是设备CPU架构,value是版本号。

  3. 使用patchapk命令再次尝试向apk注入so库。

     objection patchapk --source .\homework_killer.apk
    No architecture specified. Determining it using `adb`...
    Detected target device architecture as: armeabi-v7a
    Using latest Github gadget version: 15.2.2
    Patcher will be using Gadget version: 15.2.2
    Detected apktool version as: 2.6.1
    Running apktool empty-framework-dir...
    I: Removing 1.apk framework file...
    Press any key to continue . . .
    Unpacking .\homework_killer.apk
    App already has android.permission.INTERNET
    Target class not specified, searching for launchable activity instead...
    Reading smali from: D:\TEMP\tmpfj1n_wzo.apktemp\smali\com/kanxue/ctf/MainActivity.smali
    Injecting into an existing constructor
    Injecting loadLibrary call at line: 14
    Attempting to fix the constructors .locals count
    Current locals value is 1, updating to 2:
    Writing patched smali back to: D:\TEMP\tmpfj1n_wzo.apktemp\smali\com/kanxue/ctf/MainActivity.smali
    Copying Frida gadget to libs path...
    Rebuilding the APK with the frida-gadget loaded...
    Built new APK with injected loadLibrary and frida-gadget
    Performing zipalign
    Zipalign completed
    Signing new APK.
    Signed the new APK
    Copying final apk from D:\TEMP\tmpfj1n_wzo.apktemp.aligned.objection.apk to .\homework_killer.objection.apk in current directory...
    Cleaning up temp files...
    

    这些提示信息,说明可以成功的。

问题

运行objection出现的问题。

  1. 无法正常连接设备,并提示。

    Unable to connect to the frida server: need Gadget to attach on jailed Android; its default location is: C:\Users\2006017018\AppData\Local\Microsoft\Windows\INetCache\frida\gadget-android-arm64.so
    

    上述提示发生时,我使用的Objection版本是1.11.0,但Frida版本是15.2.2

    这里就说明可能 设备中的 frida-server 版本与PC上安装的 版本不一致。目前Objection的最新版本是1.11.0,与之最匹配的Frida版本是14.2.14

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

VoidHope

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值