源码怎么编译固件-2020 Android源码编译手册及FART脱壳器微软全设备镜像发布

简介 && 前言

作为冰鳄的好朋友,经常有人问我FART脱壳器的图片。 明天,它就在这里!

我已经制作了上述版本的所有 FART 脱壳器图像。 百度网盘地址和密码在我的github:,你可以帮我测试一下,我会更新较新的设备。 如果你省砖、开箱有任何疑问,请联系我进行解释和研究。

如果还有人不知道FART是什么,这里有一个小科普。 FART是ART环境下基于自动调用的手动拆包方案。 FART的创新主要体现在两个方面:

详细的介绍和源码下载地址其实在Dalu的github上:

FART脱壳是通过改变ART类库源码来实现的,所以我们需要重新编译ART,这就涉及到AOSP源码编译。 很多人问我如何编译AOSP源代码。 虽然我按照官网的手册,一路实现了,而你还是不太了解,而且还是会出错,所以这里我也给大家介绍一下最新的AOSP源码编译方法。 你可以尝试一下,非常简单,不会出错

最后,让我们考虑到当前笔记本电脑的光驱非常小这一事实。 本文介绍的过程全部在SSD联通硬盘上完成。 型号是海康威视的T200N,普通SATA3,拷贝速度一般是三四百。 其实这个速度已经足够了。 如果是NVMe SSD连接硬盘的话,速度肯定会更快。 右图是我的编译环境,用SSD联通硬盘编译。

2020年AOSP源码编译手册

话不多说,让我们开始工作吧。

选择编译目标:Android 10选择虚拟机编译

选择KaliLinux操作系统

下载后使用certutil-hashfileyourfilename.extSHA256命令检查包是否损坏:

然后解压到SSD联通硬盘。 在VMware中,直接选择“文件”→“打开”,选择文件夹中的vmx文件,即可直接打开(导出)虚拟机。

由于虚拟机默认的C盘空间80G以上肯定不够用,所以我们将其扩展至450G:

如果CPU有2核2线程是没有问题的,但是需要更多的显存。 我一般给的是12G,也就是12*1024=12288。 超过12G会报outofmemory错误。

当您第一次启动它时,系统会询问您是“移动”还是“复制”。 事实上,这没有什么区别。 我还是按照默认选择。 默认帐号为root,密码为toor源码怎么编译固件,即可登录系统。 Ctrl+Alt+t 是创建新终端的快捷键。 这是最常用的快捷键。

选择北大园初始套餐

# cd Desktop
# mkdir COMPILE
# mount /dev/sda3/ /root/COMPILE

到这里已经完成一大半了。

复制完成后,必须删除VMware拖拽副本的缓存,否则将很难安装任何软件包,并且会占满系统空间。

# rm -rf /root/.cache/vmware/drag_and_drop/*

# tar xvf aosp-latest.tar

# rm aosp-latest.tar

预期的编译环境

# apt update
# git config --global user.email "you@example.com"
# git config --global user.name "Your Name"
# apt install bison tree
# dpkg --add-architecture i386
# apt update
# apt install libc6:i386 libncurses5:i386 libstdc++6:i386
# apt install libxml2-utils

# apt install openjdk-8-jdk

# curl https://storage.googleapis.com/git-repo-downloads/repo > /usr/bin/repo
# chmod a+x /usr/bin/repo

# apt install htop

# wget http://ftp.us.debian.org/debian/pool/main/j/jnettop/jnettop_0.13.0-1+b3_amd64.deb
# dpkg -i jnettop_0.13.0-1+b3_amd64.deb

# apt install tmux

# cd /root/Desktop/COMPILE/aosp/
# repo sync -j8

-j8是启用8个线程同时下载

此步骤将需要很长时间,大约需要下载十GB,具体取决于您的网速;

您可以使用jnettop检查网络速度。 如果您陷入假死状态,请使用 ctrl-c 终止进程并重新同步。

环境都准备好了。 让我们对计算机进行快照,然后编译不同版本的 AOSP。 一切都从这里开始。

开始编译

# mount /dev/sda3 /root/Desktop/COMPILE/

# cd /root/Desktop/COMPILE/aosp/
# mkdir WORKING_DIRECTORY
# cd WORKING_DIRECTORY
# repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-10.0.0_r2
# repo sync --current-branch

在init步骤中,需要输入ay。

查看 Android 版本的网站是 AOSP – Codenames, Tags, and Build Numbers。 你需要科学上网,但页面语言调整为英文。

# rm -rf /root/Desktop/COMPILE/aosp/.repo

# cd /root/Desktop/COMPILE/aosp/
# source build/envsetup.sh

# lunch

建造类型使用

用户

访问受限;适合生产

用户调试

类似于用户,但具有 root 访问权限和调试能力;首选进行调试

英语

使用附加调试工具进行开发配置

最后救砖的手机是pixel,而且是用来调试的,需要root,所以我选择了16。

# make -j8

编译开始后,CPU权限会快速提升到100%,系统开始执行各种计划。

当比率读数开始出现时,基本就进入“手动工作”阶段了,不会再有错误了,除非显存不够,会报outofmemory错误,给虚拟机添加显存即可,12G基本可以满足需求。

另一个容易出错的阶段是编译接近完成时的链接阶段。 主要原因是各种环境和依赖关系不满足。 其实按照这个教程源码怎么编译固件,不会出现这些问题。 虽然我们都在同样的环境中,但我们会得到同样的结果。

编译成功

右图为编译完成后的画面。

编译好的系统镜像位于当前目录的out/target/product/sailfish/下,包括各种img。

FART手动脱壳机全套设备镜面制作

所谓内存式脱壳器,就是直接改变类库的具体实现源码,直接将捕获的dex对象转移到类库的显存中存储。 以下代码是FART组件之一dumpdex的核心源码:

const DexFile *dex_file = artmethod->GetDexFile();
const char *methodname =
PrettyMethod(artmethod).c_str();

//确定dex大小
const uint8_t *begin_ = dex_file->Begin();
size_t size_ = dex_file->Size();
memset(dexfilepath, 0, 2000);
int size_int_ = (int) size_;
//构造路径
memset(dexfilepath, 0, 2000);
sprintf(dexfilepath, "%s", "/sdcard/fart");
mkdir(dexfilepath, 0777);
//构造文件名
memset(dexfilepath, 0, 2000);
sprintf(dexfilepath, "/sdcard/fart/%s",
szProcName);
mkdir(dexfilepath, 0777);
//创建文件
memset(dexfilepath, 0, 2000);
sprintf(dexfilepath,
"/sdcard/fart/%s/%d_dexfile.dex",
szProcName, size_int_);
int dexfilefp = open(dexfilepath, O_RDONLY, 0666);
if (dexfilefp > 0) {
close(dexfilefp);
dexfilefp = 0;
//写入dex内容
} else {
dexfilefp =
open(dexfilepath, O_CREAT | O_RDWR,
0666);
if (dexfilefp > 0) {
write(dexfilefp, (void *) begin_,
size_);
fsync(dexfilefp);
close(dexfilefp);
}
}

以下代码是FART的第二个组件建立主动调用链然后转储方法体并写入bin文件的核心代码:

const DexFile::CodeItem * code_item =
artmethod->GetCodeItem();
if (LIKELY(code_item != nullptr)) {
int code_item_len = 0;
uint8_t *item = (uint8_t *) code_item;
//获取方法体大小
if (code_item->tries_size_ > 0) {
const uint8_t *handler_data =
(const uint8_t *) (DexFile::
GetTryItems
(*code_item,
code_item->
tries_size_));
uint8_t *tail =
codeitem_end(&handler_data);
code_item_len =
(int) (tail - item);
} else {
code_item_len =
16 +
code_item->
insns_size_in_code_units_ * 2;
}
//根据方法索引写入文件
memset(dexfilepath, 0, 2000);
int size_int = (int) dex_file->Size(); // Length of data
uint32_t method_idx =
artmethod->get_method_idx();
sprintf(dexfilepath,
"/sdcard/fart/%s/%d_%ld.bin",
szProcName, size_int, gettidv1());
int fp2 =
open(dexfilepath,
O_CREAT | O_APPEND | O_RDWR,
0666);
if (fp2 > 0) {
lseek(fp2, 0, SEEK_END);
memset(dexfilepath, 0, 2000);
int offset = (int) (item - begin_);
sprintf(dexfilepath,
"{name:%s,method_idx:%d,offset:%d,code_item_len:%d,ins:",
methodname, method_idx,
offset, code_item_len);
int contentlength = 0;
while (dexfilepath[contentlength]
!= 0)
contentlength++;
write(fp2, (void *) dexfilepath,
contentlength);
long outlen = 0;
//对方法体进行编码,防止打开是乱码,使用fart.py进行还原时,会解码
char *base64result =
base64_encode((char *) item,
(long)
code_item_len,
&outlen);
write(fp2, base64result, outlen);
write(fp2, "};", 2);
fsync(fp2);
close(fp2);
if (base64result != nullptr) {
free(base64result);
base64result = nullptr;
}
}

}

添加放屁代码

这一步非常简单。 相应地将aosp源码中的文件替换为art、frameworks、libcore目录对应路径下的文件,然后再次make -j8,通过解包功能得到aosp镜像。 它就是 FART 脱壳器。

冰鳄已经开源了6.0源代码。 自动编译aosp6.0的FART脱壳器没有问题。

做镜像省砖

去(需要科学上网)下载原设备的线刷包,注意下载对应的设备以及aosp版本对应的版本,比如我们要下载nexus5x的aosp6.0版本,如右图所示:

为什么不在手机上写这个呢? 百度一下就全了。 具体来说,在手机上进入bootloader,在笔记本上直接运行flash-all.sh。 事实上,fastboot命令必须在路径中。

有线刷机包解压后,上面会有一个系统zip包。 这个系统zip解压后,就是各个系统的img。

这时候,把原来zip包的img替换成我们编译好的各种img,就可以刷入系统了。

总结

综上所述,难点在于aosp系统的编译。 只要能编译系统,改源码放进去就很简单了,其实最难的是怎么改源码。

如果您对编译、烧写和FART解包有任何疑问,请联系我寻求解释。 后续我会进一步分享一些使用FART脱壳机的实际脱壳操作,敬请期待。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 源码编译 源码怎么编译固件-2020 Android源码编译手册及FART脱壳器微软全设备镜像发布 https://www.wkzy.net/game/184959.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务