Frida 安卓逆向破解辅助Hook

用到的工具

  1. Frida
  2. 夜神模拟器或者手机
  3. Python3.7.2
  4. Window系统

安装python

Python3.7.2 下载地址

win+R 输入cmd,在控制台中输入python,看到如下信息说明安装成功

在这里插入图片描述


安装Frida

在命令行中输入

pip install frida 
pip install frida-tools

安装完成后再命令行中输入

frida --version

在这里插入图片描述
安装成功


安装模拟器 或者使用手机(这里使用模拟器)

夜神模拟器下载地址


下载安装frida-server 并安装到模拟器或者手机上
需要使用和frida同一个版本 这里使用14.2.13
frida-server下载地址

在这里插入图片描述
有四个Android的版本:查看模拟器或者手机下载对应版本

使用夜神模拟器演示查看方法: 使用ADB 查看

打开命令行 输入夜神模拟器安装目录下的nox_adb.exe路径 shell getprop ro.product.cpu.abi
在这里插入图片描述
这里模拟器使用的是x86 选择上面下载地址中的frida-server-14.2.13-android-x86 版本

下载完成
在这里插入图片描述
改名为 frida-server

在这里插入图片描述
将这个文件复制到手机里 目录为 /data/local/tmp/

// 连接adb
adb connect 127.0.0.1 62001

命令行输入 adb push D:\frida-server /data/local/tmp/

在模拟器或者手机中文件夹可以看到
在这里插入图片描述


安装成功后在手机上启动服务

打开命令行 链接adb设置转发端口
$ D:\SoftWare\Nox\bin\nox_adb.exe forward tcp:27042 tcp:27042

shell连接手机
$ D:\SoftWare\Nox\bin\nox_adb.exe shell

输入su 切换到root用户
$ su

切换目录
$ cd /data/local/tmp

输入chmod 获取权限
$chmod 777 frida-server

启动 frida-server
$ ./frida-server

在这里插入图片描述

测试是否启动成功

  1. 打开一个新的命令行 当前这个不要关掉
  2. 输入frida-ps -R 获取启动frida-server的手机上正在运行的应用
    在这里插入图片描述
    显示这个说明安装成功

创建一个用来被自己破解的安卓应用
AndroidStudio3.5下载地址
配置好AndroidStudio环境 (包括AndroidSDK ,JDK,Gradle等 )
打开AndroidStudio创建安卓空项目
在这里插入图片描述

在布局文件上添加安卓界面
在这里插入图片描述
在MainActivity 中添加代码控制App逻辑
在这里插入图片描述
打包出APK到模拟器上安装
在这里插入图片描述
点击设置文字按钮之后中间的文字变成按钮点击了~ 说明apk成功运行

在这里插入图片描述


接下来用frida hook把一步一步这个按钮功能改了

需要一些python代码以及javascript代码

先编写python代码尝试执行frida 的功能

import frida
# 获取模拟器或者手机上已连接的设备
device = frida.get_remote_device()
print(device)

打开命令行执行python脚本

在这里插入图片描述
打印出Device的信息说明成功与手机系统通信

接下来完善脚本

import frida

# 获取模拟器或者手机上已连接的设备
device = frida.get_remote_device()
# print(device)

# 获取device上的所有app
applications = device.enumerate_applications()

for application in applications:
	print(application)

打印出手机上已安装的app则成功
在这里插入图片描述
从打印出的列表中找到刚才装的应用包名为com.example.hookapp

接下来附加到应用


import frida

# 获取模拟器或者手机上已连接的设备
device = frida.get_remote_device()
# print(device)

# 获取device上的所有app
# applications = device.enumerate_applications()

# for application in applications:
# 	print(application)

# 附加到应用
session = device.attach("com.example.hookapp")

jsScript = """
    console.log('this is javascript code')
"""
# 加载Javascript代码
script = session.create_script(jsScript)

# 执行
script.load()

执行后打印出 this is javascript code 成功
在这里插入图片描述

因为大量的hook操作需要在javascript中执行
所以将javascript代码独立出来
创建文件hook.js ,找到需要hook的函数

写下代码

// 程序入口
Java.perform(function() 
{
    // 获取类
    var clazz = Java.use("com.example.hookapp.MainActivity");
    // 获取类中所有函数
    var methods = clazz.class.getDeclaredMethods();

    console.log("have method count:"+methods.length);
    if(methods.length > 0){
        //遍历函数名
        methods.forEach(function(method){
            console.log(method);
        });
    }

});

修改python执行脚本 hook.py


import frida

# 获取模拟器或者手机上已连接的设备
device = frida.get_remote_device()
# print(device)

# 获取device上的所有app
# applications = device.enumerate_applications()

# for application in applications:
# 	print(application)

# 附加到应用
session = device.attach("com.example.hookapp")

# jsScript = """
#     console.log('this is javascript code')
# """

file = open("hook.js",mode='r',encoding='UTF-8')
scr = file.read()

# 加载Javascript代码
script = session.create_script(scr)

# 执行
script.load()

在命令行 将目录切换到python脚本目录之后执行

$ cd D:\Developer\Hook\script
$ D:
$ hook.py

在命令行中显示两个函数
在这里插入图片描述
接下来 hook ShowWord这个按钮监听的函数

匿名函数参数需要和原函数一样
Java.use(类名).方法名.implementation = function(a)
{
	return 调用一次方法()
}

修改hook.js


// 程序入口
Java.perform(function() 
{
    // 获取类
    var clazz = Java.use("com.example.hookapp.MainActivity");
    // 获取类中所有函数
    // var methods = clazz.class.getDeclaredMethods();

    // console.log("have method count:"+methods.length);
    // if(methods.length > 0){
    //     //遍历函数名
    //     methods.forEach(function(method){
    //         console.log(method);
    //     });
    // }
    clazz.ShowWord.implementation = function(a)
    {
        console.log("Hook success")

        return this.ShowWord("this is my hook method");
    }
});

修改hook.py 加上等待系统输入让程序暂停等待hook

import sys
sys.stdin.read()
import frida
import sys
# 获取模拟器或者手机上已连接的设备
device = frida.get_remote_device()
# print(device)

# 获取device上的所有app
# applications = device.enumerate_applications()

# for application in applications:
# 	print(application)

# 附加到应用
session = device.attach("com.example.hookapp")

# jsScript = """
#     console.log('this is javascript code')
# """

file = open("hook.js",mode='r',encoding='UTF-8')
scr = file.read()

# 加载Javascript代码
script = session.create_script(scr)

# 执行
script.load()
sys.stdin.read()

执行hook.py

在这里插入图片描述

成功hook 按钮 并修改

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值