Day03 3.2 HOOK
【一】hook框架frida
-
Hook 框架是一种技术,用于在运行时拦截和修改应用程序的行为。
-
通过 Hook,你可以劫持应用程序的方法调用、修改参数、篡改返回值等,以达到对应用程序的修改、增强或调试的目的
-
常见的有:
-
Xposed Framework
:Xposed
是一个功能强大的开源 Hook 框架,可以在不修改应用程序源代码的情况下,对应用程序进行各种修改。- 它允许你编写模块来拦截和修改应用程序的方法调用,修改应用程序的行为和逻辑。
-
Frida
:Frida
是一个跨平台的动态 Hook 框架,支持安卓和其他操作系统。- 它提供了一个强大的 JavaScript API,可以在运行时对应用程序进行 Hook,包括方法拦截、参数修改、调用注入等。
- Frida 可以用于安全研究、逆向工程和应用程序调试等方面。
【二】下载安装
注意:需要电脑端[电脑端要安装python解释器环境]和手机端同时安装,版本必须对应
【1】电脑端安装
- 指定版本安装
pip install frida==16.0.1
pip install frida-tools==12.0.1
- 安装最新版
pip install frida # 16.0.9
pip install frida-tools # 12.1.2
- 正常都可以顺利安装,若安装出现错误,下载源码包安装
必须根据 :frida版本 + Python版本 + 操作系统 来选择下载响应的egg或whl文件。
https://pypi.doubanio.com/simple/frida/
pip install frida-16.0.1-cp37-abi3-macosx_10_9_x86_64.whl
【2】手机端安装 frida-server
- 1 先查看手机架构
adb shell getprop ro.product.cpu.abi
arm64-v8a
- 2 下载
frida-server
https://github.com/frida/frida/releases
-
3 解压,上传到手机
/data/local/tmp/
目录下 -
-解压得到文件,把文件上传到手机
adb push ./今日软件/frida-server/frida-server-16.0.19-android-arm64 /data/local/tmp/
- 4 赋予可执行权限
adb shell # 进入手机命令行
su # 切换为超级用
户
cd /data/local/tmp/
chmod 755 frida-server-16.0.19-android-arm64 # 加入执行权限
ls -al # 查看权限
【三】启动并hook应用
【1】手机端启动 frida
服务端
- 切换到手机的
/data/local/tmp
目录下
adb shell
su
cd /data/local/tmp
./frida-server-16.0.19-android-arm64
报错解决
方案一:重启手机
方案二:运行adb shell setenforce 0
【2】电脑端配置
(1)配置端口转发
- 方式一:命令行中敲
adb forward tcp:27042 tcp:27042
adb forward tcp:27043 tcp:27043
- 方式二:使用python执行
import subprocess
subprocess.getoutput("adb forward tcp:27042 tcp:27042")
subprocess.getoutput("adb forward tcp:27043 tcp:27043")
(2)编写python代码,打印手机中的进程
# 枚举手机上的所有进程 & 前台进程
import frida
# 获取设备信息
rdev = frida.get_remote_device()
# 枚举所有的进程
processes = rdev.enumerate_processes()
for process in processes:
print(process)
# 获取在前台运行的APP
front_app = rdev.get_frontmost_application()
print(front_app)
(3)错误解决
# 没有配置端口转发
adb forward tcp:27042 tcp:27042
adb forward tcp:27043 tcp:27043
【四】hook 某智赢的加密算法encodeMD5
import frida
import sys
# 连接手机设备
rdev = frida.get_remote_device()
# 包名:com.che168.autotradercloud
# 车智赢+
session = rdev.attach("车智赢+")
scr = """
Java.perform(function () {
//找到类 反编译的首行+类名:com.autohome.ahkit.utils下的
var SecurityUtil = Java.use("com.autohome.ahkit.utils.SecurityUtil");
//替换类中的方法
SecurityUtil.encodeMD5.implementation = function(str){
console.log("参数:",str);
var res = this.encodeMD5(str); //调用原来的函数
console.log("返回值:",res);
return str;
}
});
"""
script = session.create_script(scr)
def on_message(message, data):
print(message, data)
script.on("message", on_message)
script.load()
sys.stdin.read()
【五】Python Hook方式
- Spawn 方式适应场景:
- Spawn 方式是在目标应用程序启动时直接注入 Frida 的 Agent 代码
需要在应用程序启动的早期阶段进行 Hook。
需要访问和修改应用程序的内部状态
例如应用程序的全局变量、静态变量等。
需要 Hook 应用程序的初始化过程
以实现对应用程序的自定义初始化逻辑。
需要在应用程序的上下文中执行代码
并与其他模块或库进行交互。
- Attach 方式适应场景:
- Attach 方式是在目标应用程序已经运行的过程中动态地连接并注入 Frida 的 Agent 代码
需要对已经运行的应用程序进行 Hook
即动态地连接到正在运行的进程。
需要在应用程序运行时拦截和修改特定的方法调用。
需要实时监视和修改应用程序的行为
例如参数修改、返回值篡改等。
需要对应用程序进行调试和分析
以查找潜在的问题和漏洞。
【1】attach方式(手动操作)
import frida
import sys
# 连接手机设备
rdev = frida.get_remote_device()
# 包名:com.che168.autotradercloud
# 车智赢+
session = rdev.attach("车智赢+")
scr = """
Java.perform(function () {
//找到类 反编译的首行+类名:com.autohome.ahkit.utils下的
var SecurityUtil = Java.use("com.autohome.ahkit.utils.SecurityUtil");
//替换类中的方法
SecurityUtil.encodeMD5.implementation = function(str){
console.log("参数:",str);
var res = this.encodeMD5(str); //调用原来的函数
console.log("返回值:",res);
return str;
}
});
"""
script = session.create_script(scr)
def on_message(message, data):
print(message, data)
script.on("message", on_message)
script.load()
sys.stdin.read()
【2】spawn方式(自动重启app,适用于在应用程序启动的早期阶段进行)
import frida
import sys
rdev = frida.get_remote_device()
pid = rdev.spawn(["com.che168.autotradercloud"])
session = rdev.attach(pid)
scr = """
Java.perform(function () {
// 包.类
var SecurityUtil = Java.use("com.autohome.ahkit.utils.SecurityUtil");
SecurityUtil.encodeMD5.implementation = function(str){
console.log("明文:",str);
var res = this.encodeMD5(str);
console.log("md5加密结果=",res);
return "305eb636-eb15-4e24-a29d-9fd60fbc91bf";
}
});
"""
script = session.create_script(scr)
def on_message(message, data):
print(message, data)
script.on("message", on_message)
script.load()
rdev.resume(pid)
sys.stdin.read()
【3】js
Hook
方式javaScript
+终端
# 代码 hook.js
Java.perform(function () {
// 包.类
var SecurityUtil = Java.use("com.autohome.ahkit.utils.SecurityUtil");
SecurityUtil.encodeMD5.implementation = function(str){
console.log("明文:",str);
var res = this.encodeMD5(str);
console.log("md5加密结果=",res);
return "305eb636-eb15-4e24-a29d-9fd60fbc91bf";
}
});
【4】attach,先启动app,然后再在终端执行
frida -UF -l hook.js
【5】spwan
,脚本自动重启APP并进行Hook
frida -U -f com.che168.autotradercloud -l hook.js
# 注意:输入q + 再点击回车则退出
标签:Day03,应用程序,HOOK,3.2,tcp,str,frida,message,SecurityUtil
From: https://www.cnblogs.com/dream-ze/p/17488018.html