Android Hook
1. adb
控制手机
-
启动adb
>> adb start-server
-
关闭adb
>> adb kill-server
-
查看电脑上连接的设备
>> adb devices # 安卓设备需要开启USB调试,如果模拟器会直接显示
-
-
查看模拟器CPU
>> adb -s 45Z5NNMJ99999999 shell getprop ro.product.cpu.abi arm64-v8a
-
登录设备
>> adb -s 45Z5NNMJ99999999 shell >> adb shell # 如果只进入了一个设备
2. frida
-
PC端frida
>> pip install frida==14.2.18 # 版本稍微第一点 >> pip install frida-tools=9.2.5
-
设备端frida-server
-
下载frida server 版本与PC端frida版本一致,以及设备CPU来选择
-
解压出可执行文件:frida-server-14.2.18-android-arm64.xz
-
文件上传到设备2个方式:
-
上传共享文件夹
-
adb上传
>> adb push /Users/miaokela/Downloads/frida-server-14.2.18-android-arm64 /sdcard
/sdcard目录去哪里找?
在设备终端中: >> adb shell >> su - # 切换至root用户 >> ls # 可以看到sdcard目录
-
-
将 frida-server-14.2.18-android-arm64移动到/data/local/tmp
>> mv frida-server-14.2.18-android-arm64 /data/local/tmp >> cd /data/local/tmp >> chmod 777 frida-server-14.2.18-android-arm64 # 授予可执行权限
-
3. Hook示例
-
设备端启动 frida-server
>> ./frida-server-14.2.18-android-arm64
-
PC端
-
端口转发(新的终端)
>> adb forward tcp:27042 tcp:27042 >> adb forward tcp:27043 tcp:27043
-
编写Python和Javascript代码进行Hook
# 枚举手机上的所有进程 & 前台进程 import frida # 获取设备信息 rdev = frida.get_remote_device() print(rdev) # 枚举所有的进程 processes = rdev.enumerate_processes() for process in processes: print(process) # 获取在前台运行的APP front_app = rdev.get_frontmost_application() print(front_app)
import frida import sys # 连接手机设备 rdev = frida.get_remote_device() # Hook手机上的那个APP(app的包名字) # 注意事项:在运行这个代码之前,一定要先在手机上启动app session = rdev.attach("com.che168.autotradercloud") # 车智赢+ scr = """ Java.perform(function () { // 包.类 var AHAPIHelper = Java.use("com.autohome.ahkit.AHAPIHelper"); var SecurityUtil = Java.use("com.autohome.ahkit.utils.SecurityUtil"); // Hook,替换 AHAPIHelper.appendPublicParam.implementation = function(context,map){ console.log(123); // 执行原来的方法 this.appendPublicParam(context,map); console.log(666); } // Hook SecurityUtil.encodeMD5.implementation = function(str){ console.log("md5加密前,明文=",str); var res = this.encodeMD5(str); console.log("md5加密后,密文=",res); return res; } }); """ script = session.create_script(scr) def on_message(message, data): print(message, data) script.on("message", on_message) script.load() sys.stdin.read()
-
记录自己的学习历程!