失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Frida 安卓逆向破解辅助Hook

Frida 安卓逆向破解辅助Hook

时间:2024-03-12 20:29:05

相关推荐

Frida 安卓逆向破解辅助Hook

用到的工具

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


安装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/

// 连接adbadb 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

测试是否启动成功

打开一个新的命令行 当前这个不要关掉输入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上的所有appapplications = 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 syssys.stdin.read()

import fridaimport 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 按钮 并修改

如果觉得《Frida 安卓逆向破解辅助Hook》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。