frida编译及基本魔改
北海 移动安全 214浏览 · 2025-03-04 08:48

环境准备

系统:ubuntu2024

安装node js

Bash
复制代码
https://deb.nodesource.com/setup_20.x 这是 NodeSource 提供的一个脚本地址,用于设置 Node.js 的源。setup_20.x 表示要安装Node.js版本20.x,可以根据需要更改版本号





ndk配置

ndk下载地址:https://github.com/android/ndk/wiki/Unsupported-Downloads

image.png
图片加载失败


这里编译的是16版本的frida,所以配置的是ndk25

配置环境变量

image.png




配置git全局用户信息

系统代理设置(可选)

编译时,下载toolchain和sdk可能会因为网络问题导致卡顿而编译失败,可以考虑设置系统代理

设置git代理(可选)

如果出现连接超时、无法访问,或者克隆拉取代码不完整的情况,可以考虑设置git代理



python库lief(魔改需要)

ubuntu2024自带python3.12,但是pip需要安装

如果出现error: externally-managed-environment,即“外部管理环境”错误时(最新的linux为了避免操作系统包管理器,如:pacman、yum、apt) 和 pip 等特定于 Python 的包管理工具之间的冲突。这些冲突包括 Python 级 API 不兼容和文件所有权冲突)

可以强制删除此警告,回归到熟悉的操作



整体编译

这里获取16.1.8。--recurse-submodules 选项的作用是在克隆主项目的同时,递归地克隆所有子模块,确保项目的所有依赖都被正确下载。

image.png
图片加载失败


克隆完成后会输出下载好的子模块





可以看目标平台

image.png
图片加载失败


这里选择目标架构为arm64。编译过程中会先下载toolchain和sdk。如果下载toolchain和sdk的过程中卡住或者出现error了,就可以设置前面环境准备中的系统代理

image.png
图片加载失败




image.png
图片加载失败


构建好的文件在build/frida-android-arm64/bin

image.png
图片加载失败




frida-server编译魔改



直接拉去frida的核心frida-core,再拉去魔改的frida项目florida,里面包含去特征部分的patch

image.png
图片加载失败




这部分是替换掉字符串frida:rpc

image.png
图片加载失败




frida在启动时创建的目录里面有frida-agent等关键so,这部分补丁则是修改名字以防被轻易检测

image.png
图片加载失败




这部分则是对frida-agent的特征进行隐藏

image.png
图片加载失败


这部分将当前程序名改为ggbond,后续我们也可以改成其他随机字串增加隐秘性

image.png
图片加载失败


这部分将文件名固定为 "jit-cache",使检测工具难以通过文件名特征来识别 Frida 的活动

image.png
图片加载失败




初始化并更新子模块

image.png
图片加载失败






在frida-core中创建patch目录,接着把Florida/patches下的frida-core复制到原始frida-core的patch目录中。然后通过git am命令将补丁文件应用到当前分支

image.png
图片加载失败






frida是个vala项目。vala项目先会编译成c代码,然后再对全体c代码进行编译。Meson是一个流行的构建系统,与 Vala 配合良好。在frida-core目录下,有名为configure的sh脚本,这里面会执行releng.meson_configure中的 main 函数,生成编译信息。下面同样选择arm64平台



如果过程中出现卡顿,可尝试去除git代理(git config --global --unset http.proxy git config --global --unset https.proxy)



启动编译

image.png
图片加载失败


编译成功后,可以发现build/server下会出现了frida-server

image.png






打好魔改补丁后的frida-core/src目录下会有anti-anti-frida.py,这个是对编译好的frida-server去特征的。

这里面使用lief.parse(input_file)来解析该文件。lief库是一个用于解析、修改和创建二进制文件(如 ELF、PE 等)的强大工具

这个脚本会进行一下三种操作:

1 符号名替换:将 ELF 文件中的符号名里包含fridaFRIDA的部分替换为随机生成的字符串,同时将frida_agent_main符号名替换为main

2 内存字符串替换:在.rodata节中查找特定的字符串(如FridaScriptEngine等),并将其替换为这些字符串的反转形式。

3 使用sed命令替换文件内容sed 命令会直接对文件的二进制内容进行修改。它分别将文件中的gum-js-loopgmaingdbus替换为随机生成的字符串。



image.png
图片加载失败




现在把anti-anti-frida.py和frida-server单独拎出来放到一起,然后运行python脚本即可去除frida-server中的一些特定的特征字符串

image.png
图片加载失败






参考资料

https://blog.csdn.net/Qwertyuiop2016/article/details/140681026

https://blog.csdn.net/qq_25439417/article/details/139485697

https://github.com/Ylarod/Florida/blob/main/patches/frida-core

https://www.bilibili.com/video/BV1mFsDeGEJ9/

https://tcc0lin.github.io/strongr-frida%E7%89%B9%E5%BE%81%E9%AD%94%E6%94%B9/

1 条评论
某人
表情
可输入 255
WMBa0
2025-03-10 00:57 0 回复
多发点爱看