Android hook工具Frida安装与使用

Android hook工具主要有Xposed、Substrate和Frida,Xposed用于hook java层,Substrate用于hook Native层,Frida既能用户hook java层,又能用于hook Native层。这三款工具中Frida配置环境简单,兼容性好,用户逆向破解非常方便。
本文中配置环境为:
PC端:win10
Android端:基于arm64
python:2.7

Frida安装

Frida安装分为两部分,PC端安装客户端和Android端安装服务器。
客户端安装:直接执行pip install frida,发现安装进度非常慢,于是选择https://pypi.org/project/frida/#files网址进行源码下载,选择frida-12.6.8.tar.gz进行下载。下载后解压,在当前路径下打开命令行,执行python setup.py install进行安装。
在这里插入图片描述
执行pip install frida-tools,安装frida-tools。
在这里插入图片描述
执行frida-ps,验证是否安装成功。如下图所示,则表明frida客户端安装成功。
在这里插入图片描述
服务端安装:frida服务端版本应与客户端一致,因此需要先在PC中输入frida --version查看frida版本,然后在https://github.com/frida/frida/releases中下载对应的服务端版本,本文环境应下载frida-server-12.6.8-android-arm64.xz,下载之后解压,并将frida-server-12.6.8-android-arm64传到Android端,命令为:adb push frida-server-12.6.8-android-arm64 /data/local/tmp/frida-server,如下图:
在这里插入图片描述
如果使用的是模拟器,那么对应的应该下载frida-server-12.6.8-android-x86或64位的,如果安装错误的版本,在执行frida-server时会提示报错,报错信息为sh: ./frida-server: not executable: 64-bit ELF file。
下一步就是执行frida-server,普通用户没有权限,需要su切换到root用户,然后到/data/local/tmp/路径下,对frida-server进行提权操作,执行chmod 777 frida-server,再执行./frida-server运行服务端frida。
确认是否安装成功,在PC端执行frida-ps -U,如果出现Android的进程,则代表安装成功。
在这里插入图片描述

利用Frida hook绕过登录检测

在某些情况下,修改Android应用程序的行为是可取的,比如禁用指纹验证等应用程序的某些敏感功能,或者不允许在root上运行,或者希望绕过登录或禁用SSL证书来拦截流量,本例使用frida绕过App的登录检测。绕过登录的步骤如下:

启动服务端frida

上一节已经详细描述了frida环境配置,配置成功后在Android端开启frida,在/data/local/tmp/路径下执行./frida-server。

安装APK

安装目标App Sieve,Sieve是一个MWR实验室构建的漏洞密码存储程序,用于逆向研究。下载地址:https://github.com/as0ler/Android-Examples/blob/master/sieve.apk

反编译APK确定登录验证函数

接下来需要反编译APK找到登录验证函数,将apk后缀改为zip后解压缩,得到class.dex文件,使用dex2jar工具对其反编译为jar文件:d2j-dex2jar.bat classes.dex,将classes-dex2jar.jar拖到jd-gui打开。在MainLoginActivity.class类下面找到checkKeyResult登录函数,查看其登录处理逻辑,即判断布尔值参数是否为真,如果为真则返回登录成功,否则登录失败。
在这里插入图片描述

编写hook代码

frida支持多种语言,python、c、.net和swift,本文使用python。

import frida, sys

def on_message(message, data):
    if message['type'] == 'send':
        print("[*] {0}".format(message['payload']))
    else:
        print(message)

jscode = """
Java.perform(function () {
    //Obtain referrence of the Activity currently running
    var MainActivity = Java.use('com.mwr.example.sieve.MainLoginActivity');
	//Obtain reference of the function whcih needs to be called
    MainActivity.checkKeyResult.implementation = function (b) {
        send('checkKeyResult');
	//Calling the function and passing the boolean parameter as true
        this.checkKeyResult(true);
		
        console.log('Done:');
    };
});   //需要通过frida执行的js代码
"""

process = frida.get_usb_device().attach('com.mwr.example.sieve')  
script = process.create_script(jscode)  //用于attach到目标进程
script.on('message', on_message)
script.load()
sys.stdin.read()

接下来打开App,执行上面python代码,然后输入空密码,点击Sign in,进入Enter your pin页面,而不进行hook时输入空密码登录,会提示密码错误,可见绕过了登录。
直接空密码登录:
在这里插入图片描述
hook后空密码登录:
在这里插入图片描述

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值