• 那是云首页
  • 快捷导航
  • 更多
    设为首页收藏本站
  • |

#楼主# 2023-1-4 02:40

跳转到指定楼层
【老骥伏枥-兔年大礼包】华芸NAS嵌入式Linux逆向工程

前言

在【牛年大礼包】讲解了威联通NAS系统的动态破解之后,坛友们希望我再写一篇关于华芸NAS系统破解的文章。因此在兔年来临之际,作为又一个嵌入式Linux逆向工程的教学范例。我将再次讲解如何利用逆向工程技术,破解华芸NAS系统的细节并介绍华芸实施反破解的手段。希望大家能更好地学习,研究逆向工程的技术。从中学到有益的东西。

需要强调的是,我不是一个黑客。文章中提到的固件资源均来自于华芸官网公布的系统包和发布的固件。在参考文献中注明了所有引用的出处。本文将深入浅出地介绍如何对原始固件进行分析,提取破解所需的ADM系统固件;破解华芸ADM系统的步骤;以及制作启动工具盘等等。此【兔年大礼包】启动工具盘的理念和启动引导的基础架构设计均绝对是老骥伏枥本人独创,并合法利用开源项目 (Tiny Core Linux Project) [3] 开发的。 也是老骥伏枥通过 NASYUN 论坛在全球独家首发。此工具盘为的是进行教学, 研究和技术交流。 禁止用于任何商业目的。

第一讲
华芸官方发布的ADM系统固件初步解析


关于嵌入式Linux逆向工程的常用工具我在“【老骥伏枥-狗年大礼包】嵌入式Linux逆向工程,手把手教你作黑威联通”[1]一文中已经介绍过了。在这里就不赘述了。有兴趣的读者可以参考那篇文章。当时主要介绍了IDA -交互式反汇编工具,但它不是免费的。

近年来又有一款名为Ghidra免费开源逆向工程工具更受欢迎[2]。它是由美国国家安全局 (NSA) 开发的免费开源逆向工程工具。它的一些可执行文件于 2019 年 3 月在 RSA 会议上发布; 一个月后,这些资源在 GitHub 上发布。 许多安全研究人员将 Ghidra 视为 IDA Pro 的竞争对手。 该软件是用 Java 编写的,使用于 GUI 的 Swing 框架。 反编译器组件是用 C++ 编写的。 Ghidra 插件可以用 Java 或 Python 开发(通过 Jython 提供)。Ghidra 的存在最初是在 2017 年 3 月通过维基解密向公众披露的, 但该软件本身在两年后解密并正式发布之前仍然不可用。2019 年 6 月,随着 Ghidra 软件套件的开源发布,Coreboot 开始使用 Ghidra 对固件特定问题进行逆向工程。自 Ghidra 版本10.0 起,Ghidra 才可用作调试器。 Ghidra 的调试器支持通过 WinDbg 调试用户模式 Windows 程序,以及通过 GDB 调试 Linux 程序。更详细的有关Ghidra的介绍超出了本文的范围,有兴趣的读者,可以自行到网上搜索,查阅更详细的资料。

作为教学实践的示范,下面我将一步一步地讲述从下载官方发布的固件开始,以及如何完成固件代码逆向解析。遇到需要补充嵌入式Linux系统结构和相关知识时,会再做详细说明。力求通过本次的教学实践示范,让大家详细了解华芸ADM系统。但我们的目的是教学,研究,不是黑客。禁止利用本教学示范,从事任何商业目的。

首先我们去华芸的官网,选择一个它发布的固件。这次我们选择华芸2022年3月发布的最新版X64_G3_4.0.5.RRS1.img固件。

它的下载地址是:
https://downloadgb.asustor.com/download/adm/X64_G3_4.0.5.RRS1.img

在我写这篇文章的时候,华芸的官网在2022年5月5日又升级了它的固件版本:
https://downloadgb.asustor.com/download/adm/X64_G3_4.0.5.RT42.img

所以我又测试了一下,我的破解方法对上述的两个版本都是适用的。

华芸目前的最新版本是:
Version: ADM 4.0.6.RCR1
Release Date: 2022-12-27
https://downloadgb.asustor.com/download/adm/X64_G3_4.0.6.RCR1.img
我没有测试破解方法对这个版本的适用性,有兴趣的读者可以自行测试。

拿到固件后,首先就要分析华芸官网发布的固件包的格式。通常我会使用binwalk固件分析工具来查一查它,看看有什么线索。

扫描的结果如下:
[#]$ binwalk -v X64_G3_4.0.5. RRS1.img

Scan Time:     2022-03-2719:11:11
Target File:  X64_G3_4.0.5.RRS1.img
MD5 Checksum:  1278d691a12afaa6e1f3457afba432f9
Signatures:    344
DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             Executable script, shebang:"/bin/sh"
449           0x1C1           POSIX tar archive (GNU), owner username: "s"

从扫描的结果看,这个官方的固件包并没有做任何的加密。它包含一个449字节的可执行script脚本包头,从第450个字节开始直到结束是一个普通的tar包。关于X64_G3_4.0.5.RT42.img的扫描,请读者们自行测试。其结果与X64_G3_4.0.5.RRS1.img是完全一样的。

有了这个振奋人心的扫描结果,接着就可以提取这两个部分,看看它们都内容了。我首先使用如下命令:
[#]$ head –c 449 X64_G3_4.0.5.RRS1.img > heas_script.sh

提取了这个449字节的可执行script脚本包头,查看了一下认为并无意义。就不赘述了。

接着我再使用如下命令:
[#]$ tail -c +450 X64_G3_4.0.5.RRS1.img > X64_G3_4.0.5.RRS1.tar

提取了后面的tar包。打开这个包后发现里面一共有如下的九个文件:

-rw-r--r-- 1 132273107 Mar 27 19:16builtin.tgz
-rw-r--r-- 1        87 Mar 27 19:16 builtin.tgz.cksum
-rw-r--r-- 1       100 Mar 27 19:16 builtin.tgz.md5sum
-rw-r--r-- 1   5257264 Mar 27 06:26 bzImage
-rw-r--r-- 1        80 Mar 27 06:26 bzImage.cksum
-rw-r--r-- 1        96 Mar 27 06:26 bzImage.md5sum
-rw-r--r-- 1  16030368 Mar 27 19:16 initramfs
-rw-r--r-- 1        84 Mar 27 19:16 initramfs.cksum
-rw-r--r-- 1        98 Mar 27 19:16 initramfs.md5sum

从文件名称分析,可以看出只有三个是系统文件,其它的是校验用的文件。其中有两个文件的用途,根据经验是可以确定无疑的。一个是bzImage,另一是initramfs。但现在来判断builtin.tgz这个固件的文件是做什么的,还为时过早。不过从文件的尺寸大小分析,它至少应当是永久性的根文件系统的一部分。

下面让我来解释一下bzImage和initramfs这两个文件:

在linux系统中,vmlinux(vmlinuz)是一个包含linux kernel的静态连结的执行档,档案型态可能是linux接受的执行档格式之一(ELF、COFF或a.out),vmlinuz是一种统称,有两种具体的表现形式zImage和bzImage。bzimage和zImage的区别在于本身的大小,以及加载到内存时的地址不同,zImage在0~640KB,而bzImage则在1M以上的位置。

随着 linux kernel 的成长,核心的内容日益增加超越了原本的限制大小。 bzImage (big zImage) 格式则为了克服此缺点开始发展,利用将核心切割成不连续的记忆体区块来克服大小限制。
bzImage 格式仍然是以zlib 演算法来做压缩,虽然有一些广泛的误解就是因为以bz- 为开头,而让人误以为是使用bzip2 压缩方式(bzip2 套件所带的工具程式通常是以bz- 为开头的,例如bzless, bzcat ...)。bzImage 档案是一个特殊的格式,包含了 bootsect.o + setup.o + misc.o + piggy.o 串接。 piggy.o 包含了一个 gzip 格式的 vmlinux 档案(可以参看 arch/i386/boot/下的 compressed/Makefile piggy.o)

initramfs文件是Linux的初始RAM磁盘文件。初始RAM磁盘(initramfs)是在实际根文件系统可用之前挂载到系统中的一个初始根文件系统[3]。initramfs与内核绑定在一起,并作为内核引导过程的一部分进行加载。内核然后会将这个initramfs文件作为其两阶段引导过程的一部分来加载模块,这样才能稍后使用真正的文件系统,并挂载实际的根文件系统。

initramfs中包含了实现这个目标所需要的目录和可执行程序的最小集合,例如将内核模块加载到内核中所使用的 insmod 工具。在桌面或服务器 Linux 系统中,initramfs是一个临时的文件系统。其生存周期很短,只是作为真实文件系统的一个桥梁。在没有存储设备的嵌入式系统中,initramfs则是永久的根文件系统。

有了这些文件我们就可以做个启动盘试一试了。至少可以建立一个最小系统,作为进一步破解固件的基础。

第二讲
启动盘的制作

为了继续破解,我们需要创建一个华芸的启动盘。启动盘接结构和原理与我在【老骥伏枥-鸡年大礼包】[4]
中创建黑群晖启动盘是一样的, 那篇文章有非常详细的介绍。这里就不赘述了。有兴趣的坛友请参看我的那篇文章。这次我做的华芸启动盘,从原理到风格都与以前的启动盘一致。属于破解系列作品。需要强调的是,这个版本的启动盘必须是UEFI格式的启动盘。否则会增加工作量,需要修改这个本版中对UEFI启动盘的核查。

我创建的华芸启动盘共有三个分区。其中的sd?1分区是 GRUB2引导分区。华芸的ADM系统文件放在sd?2和sd?3分区。另外我还要引进Tinycore Linux[5]做为工具母盘,暂时放在sd?3分区,当完成破解补丁后,可以完全删除Tinycore Linux工具,用第二分区的华芸的ADM系统覆盖掉Tiny Core工具,制成特定机型的华芸破解系统发布盘。其中的?表示linux 的udev设备加载时分配的a-z字符。

为了创建GRUB2引导,需要用一台linux机器。最简单实用的办法是用SystemRescueCD 开源x86_64平台的Linix操作系统[6]。SystemRescueCd是x86_64计算机平台的操作系统,但SystemRescueCD的主要目的是在系统崩溃后修复无法启动或以其他方式损坏的计算机系统。 SystemRescueCd不打算用作永久性操作系统。 它从Live CD,USB闪存驱动器或任何类型的硬盘驱动器运行。 它由FrançoisDupoux领导的团队设计,基于Gentoo Linux发行版。我很喜欢使用这个Linix工具系统。 一张CD盘,不用安装直接启动,就能立即使用。并且包含各种各样的系统救援工具。当然,你可以用任何自己熟悉的方法去创建启动盘。

启动SystemRescueCD后,我将以/dev/sda为例,介绍具体步骤。

首先要挂载/dev/sda1分区到/mnt/boot目录。执行的命令如下:
[#]$ mount /dev/sda1 /mnt/boot
然后创建GRUB2启动盘。执行的命令如下:
[#]$ grub2-install --boot-directory=/mnt/boot --efi-directory=/mnt/boot /dev/sda

创建启动盘完成后,还编辑修改grub.cfg文件。指出启动引导的细节。以下是我的启动盘的部分有关细节:
游客,如果您要查看本帖隐藏内容请回复

接着需要把固件包中的全部九个文件拷贝到sd?2分区中:

builtin.tgz
builtin.tgz.cksum
builtin.tgz.md5sum
bzImage
bzImage.cksum
bzImage.md5sum
initramfs
initramfs.cksum
initramfs.md5sum

再把tinycore Linux工具包的文件拷贝到sd?3分区中:
在这个分区中,我建立了一个tinycore目录,里面一共有三个文件:
vmlinuz64
core.gz
laojifuli.gz 前两个是tinycore的系统文件,这个laojifuli.gz是我的工具补丁。

破解固件的启动盘就这样制作完成了。马上启动一下试一试吧。

请继续看楼下,第三讲【破解华芸ADM系统的第一颗地雷】。精彩继续!

评分

参与人数 1贡献 +1 收起 理由
ganky + 1 不明jio厉

查看全部评分

最自然的一种表达方式,即是不写赞赏语,红色赞赏按钮就在那,大家懂的。

1人打赏

那是云论坛 - 国内知名的NAS交流平台
http://www.nasyun.com
分享淘帖
回复 印象

使用道具

nas8087 发表于 2026-1-24 20:15 来自 中国广东深圳
看看你名字一直以来回信
回复 支持 反对 印象

使用道具 举报

djcash 发表于 2025-6-30 15:44 来自 中国湖南长沙
谢谢大神 ,大神讲得非常详细
回复 支持 反对 印象

使用道具 举报

mingx555 发表于 2025-3-29 16:39 来自 中国北京
一段时间没来,接着来学习啦。
回复 支持 反对 印象

使用道具 举报

ganjie 发表于 2025-3-12 22:13 来自 中国广西百色
啥也不说了,感谢大神的付出!
回复 支持 反对 印象

使用道具 举报

kninja 发表于 2025-2-14 22:01 来自 中国浙江金华
兔年大礼包来的有点虎(威猛),学习大神技术
回复 支持 反对 印象

使用道具 举报

apollochx 发表于 2025-1-7 11:42 来自 中国湖北武汉
谢谢分享,下载来试试看。
回复 支持 反对 印象

使用道具 举报

xc275 发表于 2024-12-11 10:05 来自 中国河南鹤壁
谢谢大神 前排支持。。。
回复 支持 反对 印象

使用道具 举报

font 发表于 2024-11-22 23:31 来自 中国山东威海
今年也继续写代码,又是一个不眠夜
回复 支持 反对 印象

使用道具 举报

hdragon627 发表于 2024-11-7 17:51 来自 中国上海
看看学习下。。。。。
回复 支持 反对 印象

使用道具 举报

googoahead 发表于 2024-10-10 13:28 来自 中国重庆
ASUSTOR ADM 嵌入式Linux逆向工程
回复 支持 反对 印象

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回列表 搜索 官方QQ群
懒人地图| 手机版|小黑屋| 智能生活 , 上那是云 |闽ICP备2020018196号-1 |网站地图