宿主机准备工作
sudo mkdir /frida-home/;
sudo chown z.z /frida-home
cd /frida-home/
git clone git@gitcode.net:fridaz/frida.git
cd frida; git submodule update --init --checkout --recursive --depth 1
#git status:zmaster(基于官方frida 16.0.7)
sudo mkdir /pubx/
sudo chown z.z /pubx
cd /pubx/
git clone git@gitcode.net:pubx/git-replace.git
cp -rv ~/.ssh /frida-home/ #宿主机中的 私钥 ~/.ssh/* 是被 gitcode信任的
cd /frida-home/
wget https://mirrors.bfsu.edu.cn/anaconda/miniconda/Miniconda3-py310_22.11.1-1-Linux-x86_64.sh
build using ubuntu:22.04 on docker
0.拉取docker镜像
#基本上各个docker镜像不好用,这里在宿主机中搭建 claash for linux, 搭建claash for linux参考
su - root
proxyychainss4 docker pull ubuntu:22.04
exit #退出su - root
- docker 启动
sudo docker pull ubuntu:22.04 #网络卡慢的话 ,参照上方
sudo docker run -itd -v /frida-home/:/frida-home -v /pubx/:/pubx/ ubuntu:22.04
sudo docker exec -it 9bc6bcec7bb9 bash
#docker run时若指定名字 如下:
sudo docker run --name xxxx -itd -v /frida-home/:/frida-home -v /pubx/:/pubx/ ubuntu:22.04
- ubuntu清华源
参考: ubuntu清华源
注意不要用https,否则会出现ca证书不信任问题
sed -i "s@http://.*archive.ubuntu.com@http://mirrors.tuna.tsinghua.edu.cn@g" /etc/apt/sources.list
sed -i "s@http://.*security.ubuntu.com@http://mirrors.tuna.tsinghua.edu.cn@g" /etc/apt/sources.list
准备
进docker执行:
### in docker bash:
export PS1="\[\`if [[ \$? = "0" ]]; then echo '\e[32m\h\e[0m'; else echo '\e[31m\h\e[0m' ; fi\`:\$PWD\n\$ "
apt install git -y
#替换git命令, 以将:
# 1. clone的很慢的github仓库地址替换为预置国内仓库地址、
# 2. clone后若发现子模块.gitmodules , 则替换.gitmodules中的github仓库地址为预置的国内仓库地址
cd /pubx/git-replace; sh -x install.sh ; cd -
ssh-keygen #一路回车, 只为了生成正确权限的的~/.ssh目录
cp -rv /frida-home/.ssh/* ~/.ssh #从宿主机 复制 gitcode信任的 私钥
sh /frida-home/Miniconda3-py39_22.11.1-1-Linux-x86_64.sh #install to /miniconda3/
source /miniconda3/bin/activate
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip install meson ninja
#yum install gcc gcc-c++ #原fedora的
apt show gcc g++
apt install gcc g++
gcc --version #gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0
g++ --version #g++ (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0
apt install pkg-config
#由于这里使得 frida-gum默认编译gumjs,因此需要安装nodejs环境
#[安装nodejs环境](https://blog.csdn.net/hfcaoguilin/article/details/124598084)
apt install curl
#curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash
curl https://gitcode.net/pubx/nvm/-/raw/master/install.sh | bash
echo """export NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node/
export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node/""" >> ~/.bashrc
source ~/.bashrc
#再用nvm安装nodejs
nvm ls-remote
nvm install v18.13.0
nvm use v18.13.0
which node #/root/.nvm/versions/node/v14.17.1/bin/node
which npm #/root/.nvm/versions/node/v14.17.1/bin/npm
npm config -g set registry https://registry.npm.taobao.org
##nodejs环境安装完毕
npm install typescript -g
build frida
进docker执行:
cd /frida-home/frida/
make #列出目标
make core-linux-x86_64-thin
make tools-linux-x86_64-thin
pip install colorama prompt_toolkit pygments
#./build/frida-linux-x86_64/bin/frida
./build/frida_thin-linux-x86_64/bin/frida /usr/bin/ls
#Failed to attach: process with pid 35853 either refused to load frida-agent, or terminated during injection
ls -lh zHook.log.json #zHook日志已生成,但估计gum运行报错了,所以上一行frida没有启动成功。待排查
#-rw-r--r-- 1 root root 278K Jan 27 11:15 zHook.log.json
真机ubuntu 22.10(kinetic)下, frida-gum 在ninja install后的 pkg-config search path举例
#真机ubuntu 22.10(kinetic)下, frida-gum 在ninja install后的 pkg-config search path举例
echo 'export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/x86_64-linux-gnu/' >> ~/.bashrc
source ~/.bashrc
其他
安装 miniconda3时报错 如下 ,可忽略,不影响miniconda3使用
sh /frida-home/Miniconda3-py39_22.11.1-1-Linux-x86_64.sh #install to /miniconda3/
#报错如下: ,以下报错可忽略,不影响miniconda3使用 (此报错是由于sh 没有 [[, 而[[实际是bash的。所以上述sh改为bash,即不会有此报错)
"""/frida-home/Miniconda3-py39_22.11.1-1-Linux-x86_64.sh: 438: [[: not found
Installing * environment...
/frida-home/Miniconda3-py39_22.11.1-1-Linux-x86_64.sh: 444: [[: not found
CondaFileIOError: '/miniconda3/pkgs/envs/*/env.txt'. [Errno 2] No such file or directory: '/miniconda3/pkgs/envs/*/env.txt'
"""
可将编译环境保存为 docker镜像
- 办法1: 可提交为本地image
sudo docker run -it -v /frida-home:/frida-home ubuntu:22.04 bash
#容器bash中执行: ....miniconda3, meson, ninja, gcc, .... 等安装(见以下编译过程)
#可以在这之后 将容器a982d01d2752保存为镜像:
sudo docker commit a982d01d2752 ubuntu_22.04_frida_build_env
#下次再从镜像 创建容器:
sudo docker run -it -v /frida-home:/frida-home ubuntu_22.04_frida_build_env bash
#容器的中已经有以上安装过的部件了,无需再次安装了
- 办法2: 可保存为本地文件(方便带走) (貌似不知道如何指定新名字, load之后如何启动貌似也不太清楚)
sudo docker run -it -v /frida-home:/frida-home ubuntu:22.04 bash
#容器bash中执行: ....miniconda3, meson, ninja, gcc, .... 等安装(见以下编译过程)
#可以在这之后 将容器a982d01d2752保存为镜像:
sudo docker save --output ubuntu_22.04_frida_build_env.tar a982d01d2752
#下次再从镜像 创建容器:
sudo docker load --input ubuntu_22.04_frida_build_env.tar
#容器的中已经有以上安装过的部件了,无需再次安装了