当前位置: 首页 > news >正文

10.安卓逆向2-frida hook技术-frida基本使用-frida指令(用于hook)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

内容参考于:图灵Python学院

工具下载:

链接:https://pan.baidu.com/s/1bb8NhJc9eTuLzQr39lF55Q?pwd=zy89

提取码:zy89

复制这段内容后打开百度网盘手机App,操作更方便哦

上一个内容:9.安卓逆向2-frida hook技术-frida基本使用-frida-ps指令

frida的hook主要是学习下图红框的参数,也并不需要全部学习,常用的就那几个

-U

使用usb线连接

frida -U

-f

指令app包名

-p

使用app的pid

-l

加载 hook脚本

-o

把脚本输出的信息保存到文件中

frida两种操作模式

cli命令行,javascript脚本注入进程

rpc,Python进行javascript脚本注入

frida两种操作app的方式

spwan模式,不管app运不运行它都会重启,然后注入,它的注入比较早,就是可以拦截app启动时执行的代码

attach模式,给一个正在运行的app进行注入,也就是说只有app运行了它才能进行注入,它比较晚,app启动时的代码没办法拦截(运行之后才注入怎么可能拦截启动时的代码)

到底是用spwan模式还是attach模式,-f指定包名 使用spwan模式,加了-f就会使用spwan模式,加-F使用attach模式

frida脚本都是使用JavaScript语言编写,它有个固定格式

Java.perform(function () {});

首先启动一下手机里的 frida-server

attach模式注入脚本 frida -UF -l .\FridaHook初体验.js

Java.perform(function () {// 获取当前应用的上下文var currentApplication = Java.use('android.app.ActivityThread').currentApplication();var context = currentApplication.getApplicationContext();// 获取包名var packageName = context.getPackageName();// 输出包名console.log("当前应用的包名是: " + packageName);send(packageName)
});

直接写exit然后按回车键(Enter键)退出hook

使用Python启动脚本

核心是通过 frida.get_usb_device()获取frida功能

然后使用device.get_process("com.xxx.frodo").pid 获取app进程id

然后写JavaScript的hook脚本

js_cpde = '''
Java.perform(function () {// 获取当前应用的上下文var currentApplication = Java.use('android.app.ActivityThread').currentApplication();var context = currentApplication.getApplicationContext();// 获取包名var packageName = context.getPackageName();// 输出包名console.log("当前应用的包名是: " + packageName);
});
'''

然后使用 session.create_script(js_cpde) 加载脚本

然后使用 script.load() 把脚本注入到app中并执行脚本

spwan模式

指令 frida -Uf com.XXX.frodo -l .\FridaHook初体验.js

执行了上面的指令后会卡主,然后输入 %resume让app继续运行

Python使用spwan模式,,主要修改了下图红框的两行代码

# -*- coding: utf-8 -*-
import frida
import sysdef on_message(message, data):print("message", message)print("data", data)# 通过Spawn模式启动一个新的应用程序进程,并在该进程中加载Frida脚本
device = frida.get_usb_device()pid = device.spawn(["com.trs.xxxx.xxx"])
# 恢复应用程序的执行
device.resume(pid)session = device.attach(pid)js_cpde = '''
Java.perform(function () {// 获取当前应用的上下文var currentApplication = Java.use('android.app.ActivityThread').currentApplication();var context = currentApplication.getApplicationContext();// 获取包名var packageName = context.getPackageName();// 输出包名console.log("当前应用的包名是: " + packageName);send(packageName)
});
'''script = session.create_script(js_cpde)
# 设置监听
script.on("message", on_message)
script.load()
# 阻塞主线程,以保持脚本运行
sys.stdin.read()

还有如下图红框

使用 script.on("message", on_message)设置监听message消息,然后通过 send(packageName)的send函数触发on_message函数,这样就可以在Python代码中获取JavaScript里的数据

frida远程模式,一般不使用,它有点麻烦

首先使用把刚刚启动的frida-server按CTRL+C进行退出,然后使用 ./frida-server-14.2.18-android-arm64 -l 0.0.0.0:8881指定frida-server的端口为8881启动

然后使用 adb forward tcp:8881 tcp:8881 指令映射端口(或者理解为开启端口)

然后这时的客户端指令,不是-U使用-H了,别的没变化

Python使用frida的远程模式

# -*- coding: utf-8 -*-import frida, sysjsCode = """
Java.perform(function () {// 获取当前应用的上下文var currentApplication = Java.use('android.app.ActivityThread').currentApplication();var context = currentApplication.getApplicationContext();// 获取包名var packageName = context.getPackageName();// 输出包名console.log("当前应用的包名是: " + packageName);
});
"""def message(message, data):if message['type'] == 'send':print(f"[*] {message['payload']}")else:print(message)# 远程连接服务端
device = frida.get_device_manager().add_remote_device('127.0.0.1:8881')
# 附着到已运行的应用
process = device.attach('com.trs.xxx.newsclient')
script = process.create_script(jsCode)
script.on("message",message)
script.load()

img

相关文章:

  • DeepSeek API流式输出与多轮对话示例
  • DFS入门刷题
  • OD 算法题 B卷【模拟消息队列】
  • Arm处理器调试采用jlink硬件调试器的命令使用大全
  • 人工智能在智能供应链中的创新应用与未来趋势
  • 2024年ESWA SCI1区TOP,自适应学习灰狼算法ALGWO+无线传感器网络覆盖优化,深度解析+性能实测
  • 开源版 PyMOL 如何绘制 Galidesivir 分子结构 ?
  • 项目:贪吃蛇实现
  • 流媒体协议分析:流媒体传输的基石
  • Jinja2 模板继承机制
  • Mybatis ORM SpringORM
  • 【代码坏味道】膨胀类 Bloaters
  • Go语言的context
  • 《高等数学》(同济大学·第7版) 第一节《映射与函数》超详细解析
  • 【算法】递归与分治策略
  • Cesium快速入门到精通系列教程一
  • 【Linux】进程地址空间揭秘(初步认识)
  • 【计算机网络】 ARP协议和DNS协议
  • 计算机网络物理层基础练习
  • 【CC协议】知识共享许可协议(Creative Commons Licenses)体系解析
  • 英语网站排名/网络营销模式包括哪些
  • 个人做理财网站/成都纯手工seo
  • 图片存放网站做链接/技能培训有哪些
  • 网站建设企业策划书/品牌营销策略包括哪些内容
  • 网站日常维护/广州市口碑seo推广
  • 网站开发是做什么的/关键词排名优化