Hook 框架 Frida

文章目录

  • Hook 框架 Frida
    • Hook框架介绍
    • 下载和安装
    • Frida 的使用
      • 手机端启动frida服务端
      • 电脑端配置
      • 简单使用
      • python的hook方式
      • js的hook方式

Hook 框架 Frida

Hook框架介绍

Hook 框架是一种技术,用于在运行时拦截和修改应用程序的行为。
通过 Hook,你可以劫持应用程序的方法调用、修改参数、篡改返回值等,以达到对应用程序的修改、增强或调试的目的

常见hook框架:

  • Xposed Framework:Xposed 是一个功能强大的开源 Hook 框架,可以在不修改应用程序源代码的情况下,对应用程序进行各种修改。它允许你编写模块来拦截和修改应用程序的方法调用,修改应用程序的行为和逻辑。
  • Frida:Frida 是一个跨平台的动态 Hook 框架,支持安卓和其他操作系统。它提供了一个强大的 JavaScript API,可以在运行时对应用程序进行 Hook,包括方法拦截、参数修改、调用注入等。Frida 可以用于安全研究、逆向工程和应用程序调试等方面。

下载和安装

Frida 需要同时安装在手机端和电脑端。电脑端基于python 解释器环境安装,并且手机端的软件版本需要和python 模块版本保持一致

电脑端安装

# 装最新,两个模块pip install frida --upgradepip install frida-tools --upgradepip list | grep frida                                                                                                       frida                             16.4.10  # 手机端也要装这个版本frida-tools                       12.5.0

手机端安装

# 1 查看手机架构adb shell getprop ro.product.cpu.abi# arm64-v8a  
# 2 去github下载 frida-server 对应手机的版本https://github.com/frida/frida/releases下载:frida-server-16.4.10-android-arm64.xz# 3 解压后得到:frida-server-16.4.10-android-arm64
# 4 上传到手机 : /data/local/tmpadb push ./frida-server-16.4.10-android-arm64  /data/local/tmp
# 5 在cmd中进入到手机内adb shellsu   # 手机需要解rootcd /data/local/tmpls # 查看当前目录下所有文件和文件夹# 看到这个文件:frida-server-16.4.10-android-arm64
# 6 赋予这个软件执行权限--》liunxchmod +x frida-server-16.4.10-android-arm64  # 加上执行权限	

Frida 的使用

手机端启动frida服务端

# 切换到frida-server所在路径
adb shell
su
cd /data/local/tmp
./frida-server-16.4.10-android-arm64 # 卡在这里--》就是运行起来了# ctrl+c 是停止,使用过程中不要停止# 遇到如下错误:重启手机

在这里插入图片描述

电脑端配置

# 方式一:命令行执行
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")

在这里插入图片描述

简单使用

import frida
# 获取设备信息
rdev=frida.get_remote_device()
# 循环打印出目前手机上运行的进程
processes = rdev.enumerate_processes()
for process in processes:print(process)# 获取手机前台在运行的应用
front_app = rdev.get_frontmost_application()
print(front_app)
#Application(identifier="com.google.android.apps.photos", name="相册", pid=29155, parameters={}) 应用包名和应用名# 下图错误原因--》没有做端口转发,或者手机端没启动frida-server

在这里插入图片描述

python的hook方式

frida的hook 脚本的api是要用js写的,能用python写是因为我们装了个模块去进行转换,本质还是在写js

hook方式分两种

-spawn方案-在app启动的时候,就注入-解决app在一开始运行时就要hook的情况-唯品会:只要app第一次启动,会向后端发送一个请求,注册设备(自动发的)-attach方案-要hook的应用启动了,写了脚本运行--》脚本运行后注入,程序卡住-当进行某个操作--》触发hook到的函数,控制台就会有打印-针对于登录:-点击了登陆了按钮,再hook,知道hook的时机

hook车智赢的密码逆向

  1. 获取车智赢app信息

    import frida
    # 获取设备信息
    rdev=frida.get_remote_device()
    # 获取手机前台在运行的应用
    front_app = rdev.get_frontmost_application()
    print(front_app)# Application(identifier="com.che168.autotradercloud", name="车智赢+", pid=28133, parameters={})
    
  2. attach方案

# 刚刚hook车智赢的密码加密就是这个方案
import frida
import sys
#1  连接手机设备
rdev = frida.get_remote_device()#2 链接到这个应用: 车智赢+
session = rdev.attach("车智赢+")  # attach 使用name就行,需要手机app 前台开开app 页面# 3 重点:字符串--》》js的hook语法
scr = """
//1 外层是固定到的写法
Java.perform(function () {//2 找到类 反编译的首行+类名:com.autohome.ahkit.utils下的 配合jadx 使用var SecurityUtil = Java.use("com.autohome.ahkit.utils.SecurityUtil");//替换类中的方法SecurityUtil.encodeMD5.implementation = function(str){console.log("入参是:",str);    // 打印入参--》本来传入的密码是111111---》我们可以改成22222var res = this.encodeMD5(str); //调用原来的函数console.log("返回值:",res); // 把原来函数返回结果打印出来return str; // 返回值正常应该是:res,但是我返回了str---》抓包抓到的密码,就是明文密码}
});
"""# 4 以后下面的代码是固定的,不会动--》不用管是什么意思
script = session.create_script(scr)
def on_message(message, data):print(message, data)
script.on("message", on_message)
script.load()
sys.stdin.read()
  1. spawn方案
# 使用spawn方案演示hook密码加密
import frida
import sysrdev = frida.get_remote_device()
pid = rdev.spawn(["com.che168.autotradercloud"])  # spawn 方案 需要使用 identifier,执行程序会自动打开/重启app
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()

js的hook方式

js脚本

// 这块实际上就是python hook 里面的 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";}
});

attach方案

# 来到当前js所在目录执行--》hook正在运行的应用
frida -UF -l 4-js-hook车智赢加密.js# 按q退出

spawn方案

# 会重启app,hook 写了包名的应用
frida -U -f com.che168.autotradercloud -l 4-js-hook车智赢加密.js

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/412461.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙界面开发(八):Grid网格布局Badge角标组件

Badge角标组件 在目标组件的外层包裹一层Badge角标组件 支持位置:右上,左,右 也可以使用绝对定位实现更灵活的角标位置。 Badge({count:1,//角标数值,角标数值为0时不展示position:BadgePosition.RightTop,//角标位置&#xff0…

换毛季猫咪化身掉毛怪,宠物浮毛如何清理?推荐用宠物空气净化器

我家现在有三只毛孩子,养宠的幸福是三倍,除毛的烦恼也是三倍。尤其还有两只是银渐层,掉毛量实在是太夸张了,衣服、地板、水杯家里到处都是。我也每天早晚都给它们梳毛,卫生也定期清理,可还是浮毛满天飞。 …

kafka集群

cd /opt/software 把kafka压缩包拉进来 并解压到/usr下 tar -xzvf /opt/software/kafka_2.12-2.7.0.tgz -C /usr/ 改名 mv /usr/kafka_2.12-2.7.0/ /usr/kafka 配置环境变量 vim /etc/profile大写G定位到最后一行 在 o 在下一行添加kefka环境变量export JAVA_HOME/usr…

店招起名“大润發”,侵犯“大润发”商标权赔偿8000元!

近日某干果店招为“大润發水果干果批发”的店铺,因侵犯“大润发”注册商标专用权,赔偿原告所属主体共计人民币8000元,有些人起店招名称喜欢傍大牌,这样很容易侵犯商标权。 有些聪明的人会想,大牌商标是繁体&#xff0c…

ssrf实现

一、SSRF (Server-side Request Forge, 服务端请求伪造) 1、概念: 它是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。正是因为它是由服务端发起的,所…

【GPT】Coze使用开放平台接口-【4】创建机器人

在前面三篇,我们分别创建了插件,插件里面添加了多个工具。接着,我们把插件添加到工作流内,成为一个开放平台API的调用节点,从而创建出一条业务流。分别是,语音伪造检测工作流,以及通话语音内容分…

【JVM】亿级流量调优(二)

亿级流量调优 指针压缩 -XX:-UseCompressedOops指针压缩技术只有64位机器才有。jdk6以后引入的技术,默认是开启的 关闭指针压缩的情况下 通过HSDB用Memory Viewer查看该对象在内存中的分配地址发现类型指针占8字节,0x3其实是数组的长度,前…

全面解析:动态住宅代理的关键优势

在大数据时代的背景下,代理IP成为了很多企业顺利开展的重要工具。代理IP地址可以分为住宅代理IP地址和数据中心代理IP地址。选择住宅代理IP的好处是可以实现真正的高匿名性,而使用数据中心代理IP可能会暴露自己使用代理的情况。 住宅代理IP是指互联网服务…

代码随想录第十天——LeetCode 150. 逆波兰表达式求值、239. 滑动窗口最大值、347.前 K 个高频元素

150. 逆波兰表达式求值 力扣题目链接(opens new window) 根据 逆波兰表示法,求表达式的值。 有效的运算符包括 , - , * , / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。 说明: 整数除法只保留整数部分。 给定逆波兰表达式总是…

夜深了,赶紧根据软件系统建模建设一个房屋租赁服务系统,坐上收租大佬宝座,走上人生巅峰

目录 案例 【题目】 【问题 1】(12 分) 【问题 2】(5 分) 【问题 3】(8 分) 【答案】 【问题 1】答案 【问题 2】答案 【问题 3】答案 相关推荐 案例 阅读以下关于软件系统建模的叙述,在答题纸上回答问题 1 至问题 3。 【题目】 某公司欲建设一个房屋租赁服务…

如何在你vs code和ide编译器使用AI

vs code举例。先看效果图 2个步骤轻松拥有 1、注册豆包AI账号:点击注册 2、在vs code中安装: 第一种方法:快速安装 第二种方法:手动安装, 第1步:安装 Visual Studio Code 后,左侧导航栏上点击扩展。 第2步…

【C/C++】C语言中的内存分布

在C语言中,内存分布主要可以分为以下几个区域: 栈(Stack):由编译器自动分配和释放,存放函数的参数值、局部变量的值等。 堆(Heap):一般由程序员分配和释放,若…

SpringBoot异常处理原理分析

springboot默认机制 错误处理的自动配置都在ErrorMvcAutoConfiguration中,两大核心机制: SpringBoot 会自适应处理错误,响应页面或JSON数据 SpringMVC的错误处理机制依然保留,MVC处理不了,才会交给boot进行处理 发生…

K 个一组翻转链表

题目 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它的值小于或等于链表的长度。 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 进阶: 你可以设计一个只…

2024年【A特种设备相关管理(A4电梯)】考试报名及A特种设备相关管理(A4电梯)考试资料

题库来源:安全生产模拟考试一点通公众号小程序 A特种设备相关管理(A4电梯)考试报名是安全生产模拟考试一点通总题库中生成的一套A特种设备相关管理(A4电梯)考试资料,安全生产模拟考试一点通上A特种设备相关…

AI模型:追求全能还是专精?

近日,OpenAI预计在秋季推出代号为“草莓”的新AI。从专注于数学问题到处理主观营销策略,"草莓"模型展现出惊人的多样性。而这种全能型 AI 是否代表了未来趋势?相比专攻于某一领域的专业型AI产品,全能型AI产品是否一定具…

全免费的数据恢复工具推荐!这几个不容错过!

不小心的数据丢失总会带来许多困扰,不过这些困扰也能通过一些全免费的数据恢复工具解决。接下来,就来给大家介绍几款好用的数据恢复工具! 第一款:福昕数据恢复 直达链接:www.pdf365.cn/foxit-restore/ 福昕数据恢复…

苹果秋季发布会前瞻:iPhone 16领衔新品盛宴

苹果定档9月9日,揭开新品神秘面纱 苹果公司近日正式宣布,将于9月9日在加州库比蒂诺的Apple Park,史蒂夫乔布斯剧院举办年度秋季新品发布会,主题为“It’s Glowtime”,预示着Siri界面将迎来一场华丽变身。此次发布会较原…

一分钟学会万用表

目录: 1、电池的安装 1)指针万用表 2)数字万用表 3)高精度表 2、表笔的分类 3、表笔安装 5、常用测量方法 1)二极管测量 2)电阻与通断测量 3)电压测量 4)电流测量 …

[C++]AVL树插入和删除操作的实现

AVL树又称为高度平衡的二叉搜索树,是1962年由两位俄罗斯数学家G.M.Adel’son-Vel’skii和E.M.Landis提出的。ALV树提高了二叉搜索树树的搜索效率。为此,就必须每向二叉搜索树插人一个新结点时调整树的结构,使得二叉搜索树保持平衡,从而尽可能降低树的高度,减少树的平均搜索长度…