python执行frida脚本
建议先写frida的js脚本,通过 -l 的形式先跑一遍,确定能跑通,没有问题,再改成python形式的。
python加载js的形式,不好定位代码哪里有问题。
两种模式
frida启动app有两种方式,attach和spawn
- attach 无需重新启动app,可以直接附加上去
- spawn 重新启动app,app从头加载so等文件
通常我们使用attach,但是遇到app做了限制的,比如app设置了多进程,就需要使用spawn。
也可以先用objection先hook住,在通过attach(pid)的方式绕过多进程限制,
attach
device = frida.get_usb_device()
session = device.attach("app的包名") # 可以传入pid (int格式)
spawn
spawn可能出错,根据我的经验,先检查加载的js有没有问题,可以frida -U -f xxx -l xx.js 看一下能否跑成功。
如果js没问题,多启动几次python脚本就会成功。
如果持续不成功,可以重启frida-server。
device = frida.get_usb_device()
pid = device.spawn("app的包名")
device.resume(pid)
time.sleep(1)
session = device.attach(pid)
如果还不行,用下面的代码
device = frida.get_usb_device()
pid = device.spawn("app的包名")
session = device.attach(pid)
python 调用frida-rpc
JavaScript当中的写法
rpc.exports = {
encryptdata: function (body01){
return encryptData(body01)
},
add:function (test1,test2){
return test1 + test2
}
}
python当中调用rpc
script.exports_sync.add(1, 2)
script.exports_sync.encrypt("{}")
python 调用frida js 的大致框架
process = None
session = None
script = None
if __name__ == '__main__':
device = frida.get_usb_device()
pid = device.spawn("app的名字")
device.resume(pid)
time.sleep(1)
session = device.attach(pid)
with open("./frida_rpc.js", 'r', encoding='utf-8') as file:
js_code = file.read()
script = session.create_script(js_code)
print('[*] Running ')
script.load()
time.sleep(3)
result = script.exports_sync.add(1, 2)
print(result)
frida-server启动脚本
使用 frida-server 后台运行,每次出现问题杀掉重启很麻烦,于是在语言模型的帮助下,写了一个脚本,觉得挺好用的,分享出来
start.sh
使用:
修改 PROCESS_NAME ,修改成frida-server的名字
#!/system/bin/sh
# 定义进程名称
PROCESS_NAME="hluda-server-arm64"
# 检查进程是否存在
pgrep -f $PROCESS_NAME > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "$PROCESS_NAME process is running, attempting to stop it."
# 获取进程ID
PID=$(pgrep -f $PROCESS_NAME)
# 尝试正常终止进程
kill $PID
sleep 5 # 等待5秒以确保进程被终止
# 检查进程是否仍然存在
pgrep -f $PROCESS_NAME > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "$PROCESS_NAME process is still running, attempting to kill forcefully."
# 强制终止进程
kill -9 $PID
fi
fi
# 启动hluda-server-arm64进程
echo "Starting $PROCESS_NAME process."
./$PROCESS_NAME &
echo "$PROCESS_NAME process started."
adb push start.sh /data/local/tmp
windows cmd
chcp 65001
adb shell
su
cd /data/local/tmp
chmod +x start.sh
./start.sh
参考链接
Python网络爬虫逆向之frida rpc转发案例(x物)
https://mp.weixin.qq.com/s/QfbePCOxLuL3nl9Dgy4bRA
原文始发于微信公众号(进击的HACK):python执行frida脚本
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论