• 重打包实现frida持久化 笔记


    修改Dex
    Using Frida on Android without root
    修改so
    [翻译]在未root的设备上使用frida

    2个方法本质都是通过重打包让app自己加载frida-gadget.so
    但感觉没有谁家app会让人轻易重打包吧。。。, 好多app可以轻易重打包 )

    apktool d org.telegram.messenger_4.8.4-12207.apk -rs
    
    (-r,--no-res             Do not decode resources.
     -s,--no-src             Do not decode sources.)
    
    • 1
    • 2
    • 3
    • 4
    import lief
    
    libnative = lief.parse("/Users/wiliam/temp/org.telegram.messenger_4.8.4-12207/lib/arm64-v8a/libtmessages.28.so")
    libnative.add_library("libgadget.so") # Injection!
    libnative.write("/Users/wiliam/temp/org.telegram.messenger_4.8.4-12207/lib/arm64-v8a/libtmessages.28.so")
    
    • 1
    • 2
    • 3
    • 4
    • 5

    执行前后对比:

    mac
    readelf.py -d org.telegram.messenger_4.8.4-12207/lib/arm64-v8a/libtmessages.28.so | grep NEEDED
    
    linux有readelf
    readelf -d ./libtmessages.28.so|grep NEEDED
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述
    到官网下载frida-gadget并重命名为libgadget.so
    在这里插入图片描述
    准备libgadget.config.so文件

    {
      "interaction": {
        "type": "script",
        "path": "/data/local/tmp/myscript.js",
        "on_change": "reload"
      }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    一起放到arm64-v8a下
    在这里插入图片描述
    重打包并签名,安装

    apktool b org.telegram.messenger_4.8.4-12207 -o my_new.apk
    java -jar /Applications/uber-apk-signer-1.2.1.jar  --apks my_new.apk
    adb install my_new-aligned-debugSigned.apk
    
    • 1
    • 2
    • 3

    准备myscript.js文件

    'use strict';
    
    console.log("Waiting for Java..");
    
    while(!Java.available) {
      console.log("Not available...");
    }
    
    Java.perform(function () {
    
      var Log = Java.use("android.util.Log");
      Log.v("frida-lief", "I'm in the process!");
    
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    adb push到/data/local/tmp下

    adb push myscript.js /data/local/tmp
    
    • 1

    在这里插入图片描述
    打开app出现日志,成功

    Pixel Android8.1.0可以,Miui Android 11不行,不知道是不是路径不一致导致的。。

    Pixel Android8.1.0上app路径是:
    /data/app/org.telegram.messenger-3JOqehiK7XDEJ2TIc2DOVg==/lib

    Miui上app的路径是
    /data/app/~~88RoweeJkg1m32k1maESDw==/org.telegram.messenger-04jmp3aH5ri-GneXwPrZiw==/lib

    ······················································································

    libfrida-agent.so和frida-gadget.so的作用有什么不同?

    libfrida-agent.so 和 frida-gadget.so 都是 Frida
    的核心组件,它们在功能上有一定的重叠,但主要区别在于它们的使用场景和工作方式。

    libfrida-agent.so:

    libfrida-agent.so 是 Frida 代理库,它负责在目标进程中执行实际的代码插桩和挂钩操作。当你使用 Frida 工具(如
    frida-trace、frida CLI)附加到一个进程时,Frida 会将 libfrida-agent.so
    注入到目标进程中。注入完成后,代理库会与 Frida 工具通信,接收并执行工具发送的脚本代码。这种工作方式需要一个外部的 Frida
    工具作为控制端,与目标进程进行通信。

    frida-gadget.so:

    frida-gadget.so 是一种独立的 Frida 组件,它可以直接嵌入到目标程序中,而无需外部工具进行注入。Gadget
    的主要应用场景是对那些无法使用常规 Frida 工具附加的程序进行调试,例如:需要越狱/Root 权限的设备、受保护的进程等。Gadget
    通常以共享库(.so 文件)的形式存在,可以通过静态或动态链接的方式集成到目标程序中。集成后,Gadget
    会在目标程序启动时自动加载并执行预先配置的脚本,而无需外部工具的干预。此外,Gadget 也可以通过网络或其他方式与外部工具通信,实现类似于
    libfrida-agent.so 的远程控制功能。

    总结一下,libfrida-agent.so 和 frida-gadget.so 的主要区别在于:

    libfrida-agent.so 需要通过 Frida 工具注入到目标进程中,而 frida-gadget.so
    可以直接嵌入到目标程序中。 libfrida-agent.so 的工作方式依赖于外部的 Frida 工具作为控制端,而
    frida-gadget.so 可以在目标程序启动时自动执行预配置的脚本,也可以选择与外部工具通信。
    具体使用哪种组件取决于目标程序的特点和调试需求。通常情况下,libfrida-agent.so 更适用于临时的、动态的调试任务,而
    frida-gadget.so 更适用于持久的、嵌入式的调试场景。

    frida的原理:

    Frida 需要将其代理库(libfrida-agent.so)注入到目标进程中。在 Android 上,Frida 通常使ptrace系统调用或利用其他底层技术(如 Gum)实现代码注入。注入完成后,Frida 可以在目标进程内运行 JavaScript脚本,从而实现对目标进程的各种操作。

  • 相关阅读:
    时间序列预测 | Python实现Attention-Transformer时间序列预测(TSAT model)
    Java8将List集合转换为数组【通过流(Stream)方式】
    Leetcode T49: 字母异位词分组
    升级 MacOS 系统后,playCover 内游戏打不开了如何解决
    Linux运行环境搭建系列-Flink安装
    LevelSequence源码分析
    pytorch,torchvision与python版本对应关系及安装命令
    函数防抖与节流
    连接数据库时遇到的bug1号
    Map和Set的区别
  • 原文地址:https://blog.csdn.net/qq_43572758/article/details/127960298