Jacky's blog
首页
  • 学习笔记

    • web
    • android
    • iOS
    • vue
  • 分类
  • 标签
  • 归档
收藏
  • tool
  • algo
  • python
  • java
  • server
  • growth
  • frida
  • blog
  • SP
  • more
GitHub (opens new window)

Jack Yang

编程; 随笔
首页
  • 学习笔记

    • web
    • android
    • iOS
    • vue
  • 分类
  • 标签
  • 归档
收藏
  • tool
  • algo
  • python
  • java
  • server
  • growth
  • frida
  • blog
  • SP
  • more
GitHub (opens new window)
  • shell

  • tool

  • 网络

  • algo

  • compute_base

  • blog

  • growth

  • java

  • C&C++

  • ai

  • secure

    • 逆向
    • android手机root
    • frida
      • env
      • magisk
      • frida
      • Gadget
      • stalker
      • Tutorials
        • Founctions
        • Message
        • IOS
        • Android
      • Tools
        • frida cli
        • frida-ps
        • frida-trace
        • frida-ls-devices
        • frida-kill
        • gum-graft
        • objection
      • 最佳实践
      • APM
      • other
        • 根据特征搜索类
        • 破解方法论
      • 破解思想
      • 使用 frida 抓包
      • link
    • frida-trace
    • objection
    • magisk
    • 大马程序
    • smali调试抖音app
  • cms

  • english

  • 生活

  • 金融学

  • more

  • other
  • secure
Jacky
2023-05-26
目录

frida

# env

要进行 frida 的研究, 你需要准备一台可以 root 的手机. 这里有一些链接可以帮助到你. 这里主要介绍使用 magisk 获取 root 权限

Pixel 4 XL 刷入 Magisk、Root (opens new window)、How to root a pixel device? (opens new window)

  1. prepare compute
    1. download image from google, https://developers.google.com/android/images?hl=zh-cn (opens new window)
    2. install magisk from https://github.com/topjohnwu/Magisk/releases (opens new window)
  2. Preparing the phone
    1. enable USB debugging
  3. Unlocking the bootloader
  4. flash Magisk

# magisk

  • link

# frida

Frida: Dynamic instrumentation toolkit for developers, reverse-engineers, and security researchers. 个人非常喜欢 frida 平台, 不仅是因为功能的强大, 还提供了实时交互工具 objection

# Gadget

Frida Gadget 是 Frida 框架的一个组件, 它用于在目标应用程序中注入 Frida 运行时, 从而实现对应用程序的动态分析和修改

Frida 是一个功能强大的动态代码注入和调试工具, 可以用于在运行时修改和监视应用程序的行为。它支持多种操作系统和架构, 并提供了丰富的 API, 使得开发人员能够在应用程序运行时进行代码注入、函数挂钩、数据修改等操作

Frida Gadget 是 Frida 框架的一部分, 它是一个特殊的库, 被注入到目标应用程序中。注入 Frida Gadget 后, Frida 可以与目标应用程序交互, 监视和修改其运行时行为。Frida Gadget 允许开发人员在应用程序的上下文中执行 JavaScript 代码, 从而实现各种功能, 如函数跟踪、API 调用监视、数据修改等

使用 Frida Gadget, 开发人员可以进行以下操作:

  • 动态函数跟踪: 可以跟踪目标应用程序中的函数调用, 并获取参数、返回值等信息, 用于分析应用程序的执行流程和内部逻辑
  • API 调用监视: 可以监视目标应用程序对特定 API 的调用, 包括系统级 API 和应用程序特定的 API, 用于分析应用程序的行为和检测潜在的安全问题
  • 数据修改和重定向: 可以在运行时修改目标应用程序的内存数据, 包括修改变量的值、修改函数的实现等, 用于实现应用程序的动态修改和调试
  • 密码破解和漏洞分析: 可以通过 Frida Gadget 对目标应用程序进行动态分析, 帮助发现潜在的安全漏洞和进行密码破解

总之, Frida Gadget 是 Frida 框架中的一个关键组件, 它为开发人员提供了强大的动态分析和修改目标应用程序的能力, 帮助他们进行应用程序的逆向工程、安全分析和调试等任务

# stalker

Frida Stalker 是 Frida 框架的一个特性, 它提供了一种高级的动态分析技术, 用于跟踪目标应用程序的执行流程

Stalker 基于 Frida 框架的动态代码注入能力, 通过在目标应用程序中注入代码, 并在运行时跟踪其指令的执行, 从而实现对应用程序的静态和动态分析。Stalker 的主要目标是捕获和分析目标应用程序的控制流, 包括函数调用、基本块的执行顺序、分支跳转等

使用 Frida Stalker, 开发人员可以进行以下操作:

  • 函数调用跟踪: Stalker 可以跟踪目标应用程序中的函数调用, 记录函数的入口、返回地址和参数, 以及函数的执行时间和频率。这对于分析应用程序的执行路径、理解函数之间的调用关系和参数传递非常有帮助
  • 基本块跟踪: Stalker 可以跟踪目标应用程序中的基本块(一组连续的指令), 记录基本块的执行顺序和频率, 以及基本块之间的跳转关系。这有助于分析应用程序的控制流, 包括条件分支、循环和函数调用
  • 动态分析和调试: Stalker 可以在运行时对目标应用程序进行动态分析和调试, 例如捕获函数调用的参数和返回值、监视特定的 API 调用、跟踪内存访问等。这使得开发人员能够深入了解应用程序的行为, 快速定位问题和漏洞, 并进行动态修改和调试
  • 逆向工程: Stalker 可以用于逆向工程任务, 如反编译、恢复数据结构和算法等。通过跟踪目标应用程序的执行流程, 开发人员可以还原出应用程序的逻辑和算法, 帮助理解其内部工作原理

总之, Frida Stalker 是 Frida 框架中的一个重要功能, 它提供了强大的动态分析能力, 帮助开发人员深入理解和分析目标应用程序的执行流程, 从而实现应用程序的逆向工程、安全分析和调试等任务

# Tutorials

# Founctions

解释官方示例的 Injecting Strings and Calling a Function (opens new window) 的一段 snippet code

import frida
import sys

session = frida.attach("hi")
script = session.create_script("""
const st = Memory.allocUtf8String("TESTMEPLZ!");
const f = new NativeFunction(ptr("%s"), 'int', ['pointer']);
    // In NativeFunction param 2 is the return value type,
    // and param 3 is an array of input types
f(st);
""" % int(sys.argv[1], 16))
def on_message(message, data):
    print(message)
script.on('message', on_message)
script.load()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

这段代码使用 Frida 进行动态插桩, 目标应用程序是名为 "hi" 的进程

首先, 你导入了 frida 和 sys 模块。然后, 使用 frida.attach 方法附加到目标应用程序 "hi", 创建了一个 Frida 会话(session)

接下来, 你使用 session.create_script 创建了一个脚本对象, 并将 JavaScript 代码作为参数传递给它。这个 JavaScript 代码块使用了 Frida 的 Memory.allocUtf8String 方法来分配一个 UTF-8 字符串的内存, 并将其赋值给变量 st。然后, 使用 NativeFunction 创建了一个函数对象 f, 该函数对象会调用一个地址为 %s 的函数, 返回值类型为整数, 参数类型为指针

ptr("%s") 是一个占位符, 将在代码中的字符串中被实际的地址值替换。 int(sys.argv[1], 16) 用于获取命令行参数并将其解析为十六进制的整数值

然后, 你定义了一个 on_message 函数作为消息处理程序, 用于处理来自 Frida 脚本的消息

接下来, 使用 script.on('message', on_message) 注册了消息处理程序。当 Frida 脚本收到消息时, on_message 函数将被调用

然后, 调用 script.load() 加载 Frida 脚本, 使其开始在目标应用程序中执行

最后, 通过 print(message) 将收到的消息打印出来, 以便你查看和处理

请确保在运行此代码之前, 已经正确配置 Frida 环境, 并且目标应用程序 "hi" 已经运行并可附加。你还需要根据你的具体需求定义 on_message 函数, 并根据代码中的占位符 %s 提供实际的地址值

运行脚本后, 当 Frida 脚本收到消息时, on_message 函数会将消息打印出来, 供你查看和处理

# Message

提示

这块内容主要包含了如下内容, 更多详情可见文档 (opens new window)

  • Sending messages from a target process
  • Receiving messages in a target process
  • Blocking receives in the target process: 监听目标进程调用方法参数, 通过 python 客户端修改调用参数示例

一、Sending messages from a target process

import frida
import sys

session = frida.attach("hello")
script = session.create_script("send(1337);")
def on_message(message, data):
    print(message)
script.on('message', on_message)
script.load()
sys.stdin.read()
1
2
3
4
5
6
7
8
9
10

首先使用 frida.attach 方法连接到目标应用程序 "hello"。然后, 你创建了一个脚本对象, 并使用 session.create_script 方法创建了一个脚本, 该脚本调用了 send(1337) 函数

接下来, 你定义了一个 on_message 函数, 用于处理从脚本收到的消息, 并打印出来。然后, 你将 on_message 函数注册到脚本的 'message' 事件上, 以便在脚本接收到消息时被调用

最后, 你使用 script.load() 方法加载脚本, 并使用 sys.stdin.read() 使程序等待用户输入。这样做是为了保持脚本的运行, 直到手动终止程序

# IOS

# Android

内容 链接 (opens new window)

frida-server

  • frida-server --help 帮助
  • frida-server --version check the version of the Frida server on the device or emulator.
  • lsof | grep frida | grep LISTEN 查看 frida 当前监听的端口, 下面的数据说明当前监听的端口为 27042 frida-server-port

二、升级 frida-server

  1. 首先升级 magisk-frida 到指定版本
  2. 下载指定的 frida-server 并 push 到 /data/local/tmp/ 目录
  3. 重启。通过 magisk 加载最新的 frida-server

# Tools

# frida cli

usage: frida [options] target

  • frida -h
  • frida -U -l <script.js> -f <process_name> 将 Frida 附加到目标进程
  • frida -D <device ID> -l <script.js> <process_name> 以 attach 模式加载 script, 此种情况下会打印出 js 的错误。 (而直接使用)
  • frida -D <device ID> -l <script.js> -f <process_name> 以 spawn 模式加载 script
options:
  • -f: spawn file

# frida-ps

This is a command-line tool for listing processes, which is very useful when interacting with a remote system.

  • frida-ps -U Connect Frida to an iPad over USB and list running processes
  • frida-ps -Ua List running applications
  • frida-ps -Uai List installed applications
  • frida-ps -D <DEVICE ID> Connect Frida to the specific device

# frida-trace

jump

# frida-ls-devices

This is a command-line tool for killing processes.

You can acquire PIDs from frida-ps tool.

# frida-kill

  • frida-kill -D <DEVICE-ID> <PID>

# gum-graft

The gum-graft tool is used for patching binaries ahead of time to allow Interceptor to instrument them in environments where runtime code modifications are prohibited. For now this only means Apple mobile OSes when strict code-signing policies are at play – i.e. on jailed systems when running an app without a debugger having been attached. In such cases, override the Gadget code_signing option and set it to required. link (opens new window)

# objection

jump

# 最佳实践

This section is meant to contain best practices and pitfalls commonly encountered when using Frida. see: https://frida.re/docs/best-practices/ (opens new window)

一、修改参数。绑定到调用对象上, 防止对象被 GC

This way you can read arguments in onEnter and access them later in onLeave.

onEnter(args) {
  const buf = Memory.allocUtf8String('mystring');
  this.buf = buf;
  args[0] = buf;
}
1
2
3
4
5

二、函数调用后仍然使用的对象

const myStringBuf = Memory.allocUtf8String('mystring');

Interceptor.attach(f, {
    onEnter(args) {
        args[0] = myStringBuf;
    },
});
1
2
3
4
5
6
7

三、Reuse arguments

Interceptor.attach(f, {
    onEnter(args) {
        if (!args[0].readUtf8String(4).includes('MZ')) {
            console.log(hexdump(args[0]));
        }
    },
});
1
2
3
4
5
6
7

In the above example the first argument is obtained from the args array twice, and this is paying the cost of querying frida-gum for this information twice. To avoid wasting precious CPU cycles when needing the same argument multiple times, it is best to store this information using a local variable:

Interceptor.attach(f, {
    onEnter(args) {
        const firstArg = args[0];
        if (!firstArg.readUtf8String(4).includes('MZ')) {
            console.log(hexdump(firstArg));
        }
    },
});
1
2
3
4
5
6
7
8

# APM

使用 frida 分析 android 的卡顿技巧

使用 Frida 来分析 Android 应用的卡顿问题是一种高效的技巧, 可以帮助你快速定位卡顿的原因。以下是一些使用 Frida 分析 Android 卡顿问题的技巧:

  • Hook 主线程消息循环: 使用 Frida 在主线程消息循环中插入代码, 例如在 Looper.loop() 函数处进行 Hook。这样你可以跟踪主线程的消息处理, 并检测是否有耗时的任务导致卡顿

  • Hook 动画相关方法: 如果应用中使用了动画, 可以尝试 Hook 与动画相关的方法, 例如 ViewPropertyAnimator 或 ObjectAnimator 相关的方法, 以检测动画的性能问题

  • 检测 IO 操作: Hook 文件读写和网络请求相关的方法, 以便检测是否有阻塞 IO 操作导致卡顿

  • 检测耗时计算: Hook 应用中的复杂计算或者大量数据处理的方法, 以便找出可能导致卡顿的耗时操作

  • TraceCompat API: 在关键方法中插入 TraceCompat 的 beginSection 和 endSection, 可以使用 Perfetto 或者 Systrace 来分析应用的执行流程和耗时

  • 监听消息队列: 通过 Hook MessageQueue.enqueueMessage() 方法, 可以监视消息队列中的消息处理情况, 从而找出消息处理时间过长的情况

  • 监控线程状态: 使用 Frida 监控线程状态, 例如检测线程是否处于等待状态或者死锁状态

  • 统计方法耗时: 使用 Frida 统计方法的执行时间, 并记录下方法的调用栈, 从而找到耗时操作的位置

请注意, 使用 Frida 进行分析需要一定的技术知识和经验, 建议在分析之前先熟悉 Frida 的基本用法和 Android 应用的工作原理。同时, 为了保证分析的准确性和可靠性, 建议在开发环境或者测试环境中进行分析, 而不是在生产环境中直接运行 Frida 脚本

# other

# 根据特征搜索类

一、背景

在生产环境获取 progurad 类名

# 破解方法论

Frida 是一个功能强大的动态分析工具, 可用于 Android 和 iOS 应用的逆向工程、漏洞分析、代码修改等方面。以下是使用 Frida 破解应用的一般思路:

  • 目标分析: 首先, 你需要确定要破解的目标应用, 并分析它的功能、运行机制以及可能存在的漏洞。这可以包括查找敏感信息、关键函数、加密/解密逻辑等
  • 环境设置: 安装 Frida 并设置好开发环境。你需要 Frida 的命令行工具以及 Python 包, 以便在 Frida 脚本中使用 Python
  • Hooking: 使用 Frida 脚本 Hook 应用中的函数。通过 Hooking, 你可以插入自己的代码到目标应用的运行流程中。这样你就可以观察、修改、替换函数的行为
  • 函数分析: 一旦成功 Hook 了目标函数, 你可以通过 Frida 提供的 API 监控函数的输入、输出参数, 甚至修改它们。这可以用于绕过验证、修改敏感数据等
  • 数据抓取: 使用 Frida 脚本获取应用中的敏感数据。例如, 你可以监控网络通信、文件读写操作, 获取加密密钥等
  • 漏洞挖掘: Frida 可用于发现应用中的漏洞, 例如不正确的验证逻辑、代码注入漏洞等。你可以 Hook 目标函数并分析其行为, 寻找可能的漏洞
  • 反编译与修改: 通过 Hooking, 你可以获得应用内存中的代码, 然后可以反编译它。这允许你修改应用的代码、跳过验证、绕过限制等
  • 安全检测: Frida 也可用于安全评估。你可以 Hook 安全敏感函数, 检测是否有未经授权的访问、数据泄露等

需要注意的是, Frida 用于破解应用涉及法律和伦理问题, 因此在使用 Frida 进行逆向工程之前, 请务必了解并遵守法律法规, 以及遵循合法的使用方式。不当的使用 Frida 可能会侵犯应用开发者的权益, 甚至可能触犯法律

# 破解思想

  • 使用 file monitor 监控文件的打开情况
  • hook 系统的方法, 找到应用混淆的代码。 frida 脚本,通过 frida $HOOKER_DRIVER -l $1 <pageage> --no-pause 漫游内存内容
  • 运行时调试 apk, 实战可见smali 调试抖音 app
  • 查看 View: 通过 magisk 的全局 debug, 使用 layout inspector (有 AS 版本要求)。查看 view 的内容

# 使用 frida 抓包 (opens new window)

  • 服务器校验客户端证书: 如果使用 charles 抓包的话, 就需要将 app 中内置的证书导入到 Charles 中去
  • SSL pinning: 客户端并不会默认信任系统根证书目录中的证书, 而是在代码里再加一层校验

# link

  • frida (opens new window)
    • javascript-api (opens new window)
  • hooker (opens new window) hooker 是一个基于 frida 实现的逆向工具包。为逆向开发人员提供统一化的脚本包管理方式、通杀脚本、自动化生成 hook 脚本、内存漫游探测 activity 和 service、frida 版 JustTrustMe。原链接 (opens new window)
    • radar4hooker (opens new window) 为 hooker 提供的 dex 增强功能库
资讯
  • 实用 FRIDA 进阶: 内存漫游、hook anywhere、抓包-安全客 (opens new window)

  • 实用 FRIDA 进阶: 脱壳、自动化、高频问题-安全客 (opens new window)

  • 原理

    • Frida 源码分析 (opens new window)
    • hook 工具 frida 原理及使用 (opens new window)
  • 逆向社区

    • CreditTone (opens new window) 这个人一直在做逆向相关的工作
  • frida 命令记录

#frida#security
上次更新: 2025/10/09, 23:53:03
android手机root
frida-trace

← android手机root frida-trace→

最近更新
01
npx 使用指南
10-12
02
cursor
09-28
03
inspect
07-20
更多文章>
Theme by Vdoing | Copyright © 2019-2025 Jacky | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式