frida adb连接安卓模拟器或真机hook参数加密详细过程

app逆向时,参数与函数的确定很关键,找到可疑的函数,不确定是否由该函数生成,该怎么解决?hook就应允而生了,首先是要求本地电脑和安卓模拟器(网易mumu模拟器支持多系统,该模拟器作为主流)或真机的连接,无论是网易mumu模拟器还是真机都要取得超级权限(root),用两者的区别在于是否java函数中调用c,java函数中调用c就用真机 。
adb连接安卓模拟器或真机hook参数加密详细过程(frida)
一、终端安装frida第三方包
pip install frida==14.2.18pip install frida-tools==9.2.5
二、adb连接安卓模拟器与真机的详细过程
【fridaadb连接安卓模拟器或真机hook参数加密详细过程】>>>adb kill-server?>>>adb start-server模拟机的连接/真机自动连接>>>adb connect 127.0.0.1:7555>>>adb devicesList of devices attachedemulator-5554device1a9f22350107device?电脑上的apk安装>>>adb -s emulator-5554install F:xxx/xxx/xxx/x.apkcpu架构>>>adb -s bmus5t7dvkofmvgu shell getprop ro.product.cpu.abiarm64-v8a表示模拟器CPU是arm -> 64位?>>>adb -s 1a9f22350107 shell getprop ro.product.cpu.abix86_64表示模拟器CPU是x86 -> 64位>>>adb -s 1a9f22350107 shell getprop ro.product.cpu.abiarmeabi-v7a表示模拟器CPU是arm -> 32位?>>>adb -s 1a9f22350107 shell# 登录设备>>>adb -s emulator-5554 shell# 登录设备>>>adb shell一个设备cezanne:/ $ su -相当于root最高权限?本地电脑文件迁移到设备上移动文件>>>adb push D:\xxxx\xxxxxx\xxxxxxx /sdcard/
三、安装frida
下载:
安装:- 【电脑】解压- 【电脑】文件上传到设备adb push C:\2345Downloads\... /sdcard- 【手机】将frida-server..文件移动到手机的 /data/local/tmp 目录>>>adb shell>>>su ->>>cd sdcard>>>ls>>>mv frida-server-14.2.18-android-x86_64/data/local/tmp- 【进入】>>>cd /data/local/tmp- 【授权】授予可执行的权限>>>chmod 777 frida-server-14.2.18-android-x86_64# chmod 777 frida-server-14.2.18-android-arm64
四、 启动和Hook
>>>adb shell>>>su ->>>cd /data/local/tmp/>>>./frida-server-14.2.18-android-x86_64
端口的转发

frida  adb连接安卓模拟器或真机hook参数加密详细过程

文章插图
>>>adb forward tcp:27042 tcp:27042>>>adb forward tcp:27043 tcp:27043
查看包名
# 枚举手机上的所有进程 & 前台进程import frida# 获取设备信息rdev = frida.get_remote_device()print(rdev)# 枚举所有的进程processes = rdev.enumerate_processes()for process in processes:print(process)# 获取在前台运行的APPfront_app = rdev.get_frontmost_application()print(front_app)
搜索url或关键词
找到可疑之处查看包、类、方法名
import fridaimport sys# 连接手机设备rdev = frida.get_remote_device()# Hook手机上的那个APP(app的包名字)# 注意事项:在运行这个代码之前,一定要先在手机上启动appsession = rdev.attach("app的包名字")scr = """Java.perform(function () {// 包.类var AHAPIHelper = Java.use("包.类");// Hook,替换implementation实现 类.方法名.implementation = function(context,map){console.log(123);// 执行原来的方法this.方法名(context,map);// 执行原来的方法(如果有返回值)// var x =this.方法名(context,map);// retrun x;console.log(666);}});""" // 读取脚本script = session.create_script(scr)// 回调函数def on_message(message, data):print(message, data)script.on("message", on_message)// 加载script.load()// 等待sys.stdin.read()