配置编译环境
安装虚拟机
- 这里我使用
VMware安装Ubuntu-22.04.1-desktop-amd64.iso - 具体教程可以参考
https://zhuanlan.zhihu.com/p/141033713编译配置
- 需要至少16G内存
- 200G左右的硬盘
- 如果满足以上条件可以继续了
安装依赖
sudo apt-get update && sudo apt-get install git openjdk-8-jdk python git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip libncurses5配置repo
mkdir ~/binPATH=~/bin:$PATHcurl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repochmod a+x ~/bin/reposudo ln /usr/bin/python2 /usr/bin/python
下载AOSP源码
- 具体教程可以查看
https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/ - 新建源码目录
mkdir aospcd aosp
- 配置repo使用tuna的镜像源
- 修改
~/.bashrc在最后插入export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/并输入source ~/.bashrc刷新环境变量
- 修改
- 配置git
git config --global user.email "username@gmail.com"git config --global user.name "username"
- 初始化仓库
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
- 初始化并指定版本
- 在此查看版本
https://source.android.google.cn/docs/setup/about/build-numbers#source-code-tags-and-builds - 这里
Youpk修改的源码是android-7.1.2_r33,所以输入repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-7.1.2_r33 --depth 1
- 在此查看版本
- 同步源码
repo sync -j4
配置jack-admin
android 6.0~8.1需要配置- 查看是否安装jack服务
./prebuilts/sdk/tools/jack-admin list-server
- 如果命令不存在则需要安装
cd prebuilts/sdk/tools/./jack-admin install-server jack-launcher.jar jack-server-4.8.ALPHA.jar
- 修改
java.security- 编译不报错的可以不配置,具体参考
https://stackoverflow.com/questions/67363030/rebuild-android-code-with-error-ssl-error-when-connecting-to-the-jack-server-t
- 编辑
/etc/java-8-openjdk/security/java.security - 搜索
jdk.tls.disabledAlgorithms=并删除TLSv1, TLSv1.1
- 编译不报错的可以不配置,具体参考
下载Youpk源码
git clone https://github.com/Youlor/unpackercp -r -n unpacker/android-7.1.2_r33/* .
修改源码
- 这里根据
unpacker\diff目录下的diif文件修改aosp的源码 - 检查有没有修改对,不然一会编译报错还得重来
编译源码
export LC_ALL=Csource build/envsetup.shlunchmake -j32- 当看到这个就是编译完了
#### make completed successfully (29:03 (mm:ss)) ####- 编译速度取决于电脑配置,我使用的
i7-12700k大概半个小时编译完成
- 编译完会在
out/target/product/angler目录下生成镜像文件system.img:系统镜像ramdisk.img:根文件系统镜像userdata.img:用户数据镜像recovery.img:recovery镜像boot.img:启动镜像vendor.img:驱动镜像
- 使用虚拟机只需要
system.img,ramdisk.img,userdata.img这几个文件
配置虚拟机
- 首先配置好
Android SDK - 这里我是安装了
Android Studio- 打开
Android Studio后在视图里打开Device Manager - 点击
Create device创建虚拟机 - 在
Category里选择Phone然后选择Pixel下一步 - 点击标签
x86 Images选择Nougat 25 x86_64 Android 7.1.1下载- 这里可以随便选择一个,因为之后要替换镜像
- 替换镜像
- 把之前编译出来的三个镜像替换到
%ANDROID_HOME%\system-images\android-25\default\x86_64
- 把之前编译出来的三个镜像替换到
- 替换完后可以点击下一步创建虚拟机了
- 打开
脱壳
- 具体教程可以查看
https://github.com/Youlor/unpacker
adb shellecho 待脱壳的包名 >> /data/local/tmp/unpacker.config- 如果apk没有整体加固, 未避免installd调用dex2oat优化, 需要在安装之前执行这一步
- 启动应用等待10秒后查看
/data/data/包名/unpacker - pull出dump文件
adb pull /data/data/包名/unpacker
- 调用修复工具 dexfixer.jar, 两个参数, 第一个为dump文件目录(必须为有效路径), 第二个为重组后的DEX目录(不存在将会创建)
java -jar dexfixer.jar /path/to/unpacker /path/to/output