Frida 编译(去特征)
- 编译最新版server
- 编译往期版server
- 更改特征
- 使用定制库 hluwa
- 本文引用:
本文环境: kali-linux-xfce
编译最新版server
第一步: 下载frida
git clone --recurse-submodules https://github.com/frida/frida
--recurse-submodules 同时下载子项目
关于 --recurse-submodules
详情:点击前往
第二步: 指定NDK目录
- 查看当前frida 版本对于NDK的依赖:
vim ~/frida/releng/setup-env.sh
// 24 就是NDK android-ndk-r24
ndk下载网址:https://developer.android.com/ndk/downloads?hl=zh-cn
- 设置NDK
export ANDROID_NDK_ROOT='~/android-ndk-r24'
// 你下载NDK 的目录
- 安装nodejs
- 通过脚本安装nvm
- 通过nvm 安装nodejs
安装nvm
cat <<"EOF" | bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
export PATH=$PATH:$HOME/.nvm/nvm.sh
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
nvm --help
EOF
安装nodejs
nvm install node
第三步: 编译frida (按需求选择)
cd frida // frida 根目录下执行
make core-android-arm // 编译arm版本
make core-android-arm64 // 编译arm64版本
make core-android-x86 // 编译x86 版本
make core-android-x86_64 // 编译x86_64版本
完成后 会在build/frida-android-arm/bin/
下
编译往期版server
第一步: 下载frida
git clone --recurse-submodules https://github.com/frida/frida.git
cd frida
git checkout 15.2.2 # 切换版本
# 当checkout的时候,仅frida这个仓库回滚到15.2.2,其中的submodule 依然是最新的,要让所有submodule也是15.2.2时的版本才行:
git submodule update --recursive # 或 git submodule update --init --recursive
第二步: 设置NDK (同上, 略)
第三步: 编译 (同上, 略)
更改特征
server.vala 文件,修改 DEFAULT_DIRECTORY
修改前:
private const string DEFAULT_DIRECTORY = "re.frida.server";
修改后:
private const string DEFAULT_DIRECTORY = "mytest";
linux-host-session.vala 文件, 修改 HAVE_EMBEDDED_ASSETS 块内容:
#if HAVE_EMBEDDED_ASSETS
var blob32 = Frida.Data.Agent.get_frida_agent_32_so_blob ();
var blob64 = Frida.Data.Agent.get_frida_agent_64_so_blob ();
var emulated_arm = Frida.Data.Agent.get_frida_agent_arm_so_blob ();
var emulated_arm64 = Frida.Data.Agent.get_frida_agent_arm64_so_blob ();
agent = new AgentDescriptor (PathTemplate ("frida-agent-<arch>.so"),
new Bytes.static (blob32.data),
new Bytes.static (blob64.data),
new AgentResource[] {
new AgentResource ("frida-agent-arm.so", new Bytes.static (emulated_arm.data), tempdir),
new AgentResource ("frida-agent-arm64.so", new Bytes.static (emulated_arm64.data), tempdir),
},
AgentMode.INSTANCED,
tempdir);
#endif
修改 frida-agent-<arch>.so 为 test-<arch>.so
修改 frida-agent-arm.so 和 frida-agent-arm64.so 为 test-arm.so 和 test-arm64.so
system.vala文件 , 修改get_system_tmp 函数:
原代码:
private extern static string get_system_tmp ();
修改后:
private static string get_system_tmp (){
return "/data/mytest/";
}
注意:修改后 extern static 变为 static
运行并查看注入情况:
ps -A |grep com.xunmeng
cat /proc/21584/maps |grep /data/mytest
使用定制库 hluwa
第一步: 下载hluwa代码:
在frida跟目录下,clone hluwa代码
cd frdia
git clone https://github.com/hluwa/Patchs.git
由于hluwa目前的版本只适配到了frida 15.0.4版本,所以需要将frida代码切换到15.0.4分支
git checkout 15.0.4
git submodule update --recursive
进入frida-core目录,执行合并命令:
git am ../../Patchs/strongR-frida/frida-core/*.patch
合并完成,回到frida目录,需要修改 build/frida_version.h 文件(如果没有则需要手动添加) , 将内容改为:
应用:strongR-frida: io_re_frida_server
#ifndef __FRIDA_VERSION_H__
#define __FRIDA_VERSION_H__
#define FRIDA_VERSION "15.0.4"
#define FRIDA_MAJOR_VERSION 15
#define FRIDA_MINOR_VERSION 0
#define FRIDA_MICRO_VERSION 4
#define FRIDA_NANO_VERSION 0
#endif
第二步: 安装依赖库 lief库
python3 -m pip install lief
第三步: 使用make编译(同上, 略)
注意:【编译问题】 如果遇到找不到Node
Oops. It appears Node.js is not installed.
We need it for processing JavaScript code at build-time.
Check PATH or set NODE to the absolute path of your Node.js binary.
重新使用命令 nvm install node
运行hluwa的定制frida_server,观察注入情况,可以发现注入的so文件已经全都是随机数:
blueline:/ # cat /proc/11203/maps|grep /data/local/tmp
922e5000-93107000 r-xp 00000000 fd:02 31011 /data/local/tmp/d3809a7c-7320-4a91-bb7a-d6cfc498aeb6/0555f0b7-52ea-4396-a454-fd500ed48249-32.so
93107000-9315f000 r--p 00e21000 fd:02 31011 /data/local/tmp/d3809a7c-7320-4a91-bb7a-d6cfc498aeb6/0555f0b7-52ea-4396-a454-fd500ed48249-32.so
9315f000-9316d000 rw-p 00e79000 fd:02 31011 /data/local/tmp/d3809a7c-7320-4a91-bb7a-d6cfc498aeb6/0555f0b7-52ea-4396-a454-fd500ed48249-32.so
941b0000-941b1000 r--p 00ecb000 fd:02 31011 /data/local/tmp/d3809a7c-7320-4a91-bb7a-d6cfc498aeb6/0555f0b7-52ea-4396-a454-fd500ed48249-32.so
本文引用:
- https://bbs.kanxue.com/thread-269889.htm
- https://juejin.cn/post/7189081333790933053