android逆向之frida安装与简单使用Crackmes/Android/Level_01

0x01 在电脑上安装adb

安装adb

我们要在电脑上通过adb与手机进行交互,所以要先安装adb

1.安装 adb

windows电脑安装adb

1
2
可以通过安装android sdk
然后就是 /android sdk/platform-tools/adb.exe

Mac安装命令

1
brew cask install android-platform-tools

2.将手机通过数据线连接到电脑上

  • 要设置手机打开usb调试
  • 一般就在 手机设置-关于-开发者选项-允许usb调试 (不同手机不一样,自己找找USB调试)

3.运行adb,在终端输入如下命令,查看连接的设备

运行adb命令,查看当前连接设备

1
adb devices

image-20210825203950358

显示有device就是连接上了设备

0x02 在电脑上-安装python3

windows电脑去官网下载,自己百度安装吧

1
2
注意:高版本的frida 要配合高版本的python
我的是 pyhton 3.7.9 和 frida 15.0.15

Mac版本

1
brew install [email protected]

0x03 在电脑上安装frida-tools

这个其实是python的一个模块,自动化编写hook脚本一定要引入的。

windows与Mac 的命令一样

1
python -m pip install frida-tools

0x04 在手机上安装frida-server

  • 电脑上配置完后,手机端也需要配置

    • 现在需要下载frida-server端到手机中
1
2
下载地址:
https://github.com/frida/frida/releases

版本很多

image-20210825213116374

androids就是下面几个,对应去下载就好了

1
2
3
4
frida-server-15.0.18-android-arm.xz             ----真机32位 
frida-server-15.0.18-android-arm64.xz ----真机64位
frida-server-15.0.18-android-x86.xz ----android模拟器32位
frida-server-15.0.18-android-x86_64.xz ----android模拟器64位
  • 下载完android设备相对应的frida-server后

  • 通过adb push将frida-server发送到android设备中

    1
    2
    3
    adb push /Users/zy/Desktop/frida-server/frida-server-12.10.4-android-arm  /data/local/tmp

    adb push (本机frida-server地址)(手机要放的地址)

image-20210825213522189

  • 手机上启动frida-server

  • 这样电脑上的frida客户端才能与手机中的frida服务端才可以进行交互

  • 上述已经将frida-server放入 /data/local/tmp中

    启动adb shell 进入手机的shell中

    1
    2
    3
    4
    #查看adb连接的设备
    adb devices
    #启动adb shell 进入手机的shell中
    adb shell

    image-20210825213820963

  • 找到frida-server,给他执行权限,运行

    1
    2
    3
    4
    5
    6
    7
    8
    # 进入手机shell
    adb shell
    # 找到对应目录
    cd /data/local/tmp/
    # 给运行权限
    chmod 775 frida-server-15-arm64
    # 后台持久运行,如果运行一次就直接 ./frida-server-15-arm64
    ./frida-server-15-arm64 &

    下面是我的命令

    image-20210825214647006

0x05 frida的使用

安装完之后,就是怎么使用frida了

注意:

刚刚在手机端安装好frida-server的时候,发现frida命令有的可用有的不可用,比如frida-ps -U 可执行,而frida-ps -R 就会执行报错(Failed to enumerate processes: unable to connect to remote frida-server),原因发现需要在客户端开启端口转发才可以

1
adb forward tcp:27042 tcp:27042

命令做了端口开启,才使得问题解决

frida tools主要有这几个常用的功能

  • frida-ls-devices 查看设备信息,主要包括UDID连接方式iOS设备名称,如下所示

image-20210825215527181

  • frida-ps 查看通过USB连接的iOS设备上运行的程序
1
2
通常使用frida-ps -Ua  查看正在运行的应用
通常使用frida-ps -Uai 查看已经安装的应用程序

image-20210825215811929

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GDTyv1if-1631581506681)(https://gitee.com/godzeo/blogimg/raw/master/img/20210825220111.png\)\]

  • frida-trace
1
frida-ps -D <UDID> 通过UDID查看设备中应用程序中的pid、进程名

image-20210825220327085

  • **frida-kill ** 结束某个机子的进程
1
frida-kill -D <UDID> <pid>

0x06 通过python及JavaScript脚本自动化来hook

  • 下面就是,frida还可以通过python及JavaScript脚本来hook android设备中的应用程序
  • 这个python调用和注入脚本,基本上都是固定的,只需要修改准备hook的app的bundleId和javaScript脚本地址就好了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# author: Zeo
# python: 3.7
# datetime:2021/8/23 6:30 下午
# software: PyCharm

"""
文件说明:通过python及JavaScript脚本自动化来hook
"""
#导入frida模块
import frida, sys
#准备执行的frida javaScript脚本
script = 'Frida-Mobile-Scripts/Android/system_exit_bypass.js'
#准备hook的app的bundleId
bundle = 'owasp.mstg.uncrackable1'

#打开frida脚本,读取frida脚本
f = open(script, "r")
s = f.read()

#连接usb设备 1000表示超时
device = frida.get_usb_device(1000)
#启动指定bundleId的app
pid = device.spawn([bundle])
#附加到app
session = device.attach(pid)
#创建frida javaScript脚本
script = session.create_script(s)
#load脚本到app进程中 这样即注入成功
script.load()
#恢复app运行
device.resume(pid)
#读取打印日志
sys.stdin.read()

0x07 安装测试应用,简单使用

下载完以后通过adb 将apk安装到手机中

1
adb install UnCrackable-Level1.apk

image-20210825201232862

下载地址:

https://github.com/OWASP/owasp-mstg/tree/master/Crackmes/Android/Level\_01

WechatIMG119

一个root检测的绕过

1、反编译静态分析app

我们常用的工具有jeb、jadx等工具进行分析

这里我推荐使用jadx反编译分析。

打开软件,直接打开要反编译的APK就可以了

image-20210831101758315

2、分析app的检测android设备是否root的功能

根据提示的字符串找到这个检测函数

image-20210831101926899

root检测主要靠三个函数

1
c.a() c.b() c.c()

image-20210831102019408

基本上就是通过 环境变量 PATH检测、test-key文件、或者一下目录或者文件检测是否root

但其实不用这么麻烦,可以直接hook System.exit函数,app虽然检测到我们的设备已经root,但是不让它退出,继续运行也是一样的效果

3、编写hook js脚本

1
2
3
4
5
6
7
8
Java.perform(function () {
const System = Java.use('java.lang.System')

console.log("--> System.exit() Bypass - Script Loaded")
System.exit.implementation = function(){
console.log("System.exit() Bypassed!");
}
});

点击之后就成功绕过退出了

WechatIMG120