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

#楼主# 2018-1-20 13:16

跳转到指定楼层
前言

最近坛友经常问论坛中的黑群晖版发布非常活跃。为什么为什么黑威联通像一潭死水。坛友希望我能再次为黑威联通做一个启动盘。为了答谢坛友们的厚爱,我再次出手制作了一个教学演示用的创建黑威联通启动工具盘。需要说明的是,我不是一个黑客。资源来自于威联通官网公布的系统包和发布的固件。参考文献中注明所有引用的出处。本文深入浅出地介绍了嵌入式linux逆向工程的概念,原理及实现的技术细节。并为教学实践提供了演示用的创建黑威联通启动工具母盘。此启动盘的理念和启动引导的基础架构设计均绝对是老骥伏枥本人独创,并合法利用开源项目 (Tiny Core Linux Project) [1] 开发的。 也是老骥伏枥通过 NASYUN 论坛在全球独家首发。 请坛友们遵守 GNU General Public License, 未经授权禁止用于商业用途。 该演示用工具母盘为的是进行教学, 研究和技术交流。 禁止用于任何商业目的。

第一讲
嵌入式linux逆向工程与常用工具简介

我们为什么要学习嵌入式linux逆向工程呢?答案很明显。利用这个手段,了解和破解提取Linux的嵌入式系统固件的内容。为什么呢?我们可以: 破解固件或将固件升级(增加功能); 审计的安全级别固件;乐趣! 和许多其他的事情!

嵌入式设备固件代码的逆向解析常常被用于破解固件或将固件升级维护及关键电子设备的功能解读和安全防护, 因此学习,研究固件代码逆向解析技术是软件工程中的一个重要领域。 在这个领域中,研究针对Linux固件的逆向解析识别框架;研究固件的一般结构和三大模块的运行机制、实现机制、存储介质相关性及其相互之间的关系等等,会涉及到使用局部特征和分布特征相结合的方法去搜索可疑模块并对模块区间进行排除性剥离,也可能会存在逆向分析过程中固件获取不完整性和固件读取出错的问题。还有就是经验的积累,工具的利用等等。对于菜鸟和小白们,我推荐一本初学者的书"逆向工程入门指南"[2] 给你们读一读。

利用工具进行逆向解析可以提高效率。接下来我介绍如下几款工具给大家,这些只是我自己喜欢用的工具,不一定是最好的工具,也不一定适合你。

一,Binwalk - 开源固件分析工具[3]
binwalk是一个固件文件的分析工具,旨在协助研究人员对固件文件进行分析,提取及逆向工程。简单易用,完全自动化脚本,并通过自定义签名,提取规则和插件模块,还重要一点的是可以轻松地扩展。在linux系统上的安装方法也是十分简单的,而在windows系统上的安装方法我就不知道了。新手百度下“binwalk工具运行支持的平台”[4] 。

二,Interactive Disassembler (IDA) -交互式反汇编工具[5]
IDA 的官方网站是 https://www.hex-rays.com/ 。在网页上可以看到 IDA 的插件、SDK 等内容。IDA 会在官网提供 Demo 版的下载。然而, Demo 版没有 IDA 最强大的反汇编功能,正版的证书费用比较贵。(专业人士还是建议买证书)。网上也有提供破解IDA Pro版的,可以用来学习。新手百度一下“破解IDA Pro版”。关于IDA的特色,我就不在这里赘述了。推荐大家一个文章:“今天开始学逆向:反汇编的利器IDA和Hopper的基本使用”[6] 。有兴趣的坛友可以读一读。

三,Snowman C/C++反编译器[7]
支持ARM,x86和x86-64体系结构。读取ELF,Mach-O和PE文件格式。重构函数,它们的名称和参数,局部和全局变量,表达式,整数,指针和结构类型,所有类型的控制流结构,包括开关。有一个很好的图形用户界面,汇编程序代码和重建程序之间的一键导航。有一个用于批处理的命令行界面。

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


第二讲
手把手教破解威联通固件

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

首先我们去威联通的官网,选择一个它发布的固件。我会选择比较新的4.3.3版固件。但我不会选择最新版。我破解固件,会遵守江湖上的潜规则,不会破解最新版,至少要低一个小版本号。

威联通官网固件.txt (5.77 KB, 下载次数: 3059)

威联通官网发布的固件包是zip格式的压缩包。解压后会得到一个img文件。这个文件是什么格式,我不知道。所以就要使用Binwalk固件分析工具来查一查它。看看有什么线索。扫描的结果如下:
001.jpg

扫描的结果非常令人沮丧。根据经验,这个扫描结果不能提供什么线索。

思索与分析:
固件可能是加密的。因为这是威联通官网发布的固件,既然它是为Update威联通而发布的,那么威联通的系统在Update时就一定会有解密的方法。因此需要通过研究它的固件更新机制,获取固件包的内容。这是威联通固件的第一个坑。

为了研究威联通系统的固件更新机制,只能想办法找一台威联通,正好我的一个朋友有一台威联通TS288设备。使用SSH登陆后,在/etc/init.d/update.sh的文件中发现了这样的代码:

  1. /sbin/PC1 d QNAPNASVERSION4 "$path_name" "${_tgz}"; \
  2. /bin/tar tzf "${_tgz}" 2>/dev/null
复制代码


根据经验,这段代码给人的直观印象是,它要将"$path_name"所指的文件解密为一个"${_tgz}"文件。为了验证我的想法,我将官网发布的固件拷贝到该设备,运行了/sbin/PC1试一试。结果出乎意料地好。我拿到了一个tgz文件。将这个tgz文件下载,再用Binwalk固件分析工具来查一查它。

扫描的结果如下:
002.jpg

这个结果非常振奋人心。起始地址0开始为gzip compressed data。也就是说这是一个真正的tgz文件。接下来,我需要把/sbin/PC1下载到我的机器中,进行分析。因为以后制作启动工具母盘的时候,这是一个必须的文件。

/sbin/pc1是一个ELF格式的可执行文件。一般情况下,我会用IDA Pro工具先对它做个静态分析,如果需要更近一步的话,我会再用gdb工具做动态分析。其实PC1很简单。静态分析足以。情况如下截图:
003.jpg
004.jpg
005.jpg

并无悬念它是威联通用来加密,解密官网发布固件的。密钥是“QNAPNASVERSION4”并且固定不变的。使用Snowman对他做C/C++反编译,就可以生产一个pc1.c文件。留着我以后制作启动工具母盘时重新编译使用。这第一个坑总算是迈过去了。

由于NASYUN的篇幅限制,请继续看楼下,【手把手教你破解威联通固件】, 精彩继续!

评分

参与人数 11云币 +100 贡献 +20 收起 理由
rodneyxp2002 + 1 很给力!
dogbutcat + 1 很给力!
richie27 + 1 很给力!
荒野无灯 + 1 很给力!
carney + 1 很给力!
Alex88 + 1 膜拜一下大神!
martn + 1 很给力!
mojelly + 50 + 5 很全面的知识!
xufuren + 1 很给力!
good69395 + 2 很给力!
admin + 50 + 5 赞一个!

查看全部评分

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

16人打赏

本帖被以下淘专辑推荐:

  • · 黑威|主题: 1, 订阅: 0
  • · qnap|主题: 8, 订阅: 0
那是云论坛 - 国内知名的NAS交流平台
http://www.nasyun.com
分享淘帖
回复 印象

使用道具

f541883216 发表于 2018-1-20 13:16 来自 加拿大

第二讲【手把手教你破解威联通固件】

本帖最后由 f541883216 于 2018-3-3 07:15 编辑

接下来,就可以展开tgz文件包,研究固件的详细内容了。展开后从如下截屏可以看到很多的固件文件。现在来判断所有这些固件的文件是做什么的,还为时过早。但有两个文件的用途,根据经验是可以确定无疑的。一个是bzImage,另一是initrd.boot。
006.jpg

下面我来解释一下这两个文件:

在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)

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

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

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

思索与分析:
现在我们要用bzImage,initrd.boot这两个文件做一个启动盘。但我们需要大约了解威联通DOM的结构是什么样的。我可以用SSH登陆威联通TS288设备,然后用fdisk -l命令查一查。但同时我也会在网上查一查。我发现了一篇日文的文章“QNAPの基本構造について”[10]一下让我对威联通系统结构有了深入的了解。大大加快了破解固件的速度。部分截屏如下:
007.jpg

接下来我就开始创建一个威联通的启动盘了。启动盘接结构和原理与我在【老骥伏枥-鸡年大礼包】[11]中创建黑群晖启动盘是一样的, 那篇文章有非常详细的介绍。这里就不赘述了。有兴趣的坛友请参看我的那篇文章。这次我做的黑威联通启动盘,从原理到风格都与黑群晖启动盘一致。有意思的是,去年【鸡年大礼包】做的是黑群晖启动盘。今年【狗年大礼包】做的是黑威联通启动盘。而且风格一致,像是系列作品。

我的威联通启动盘接结构截图如下:
008.jpg

我的启动盘与威联通DOM稍有不同。我放大了sd?1分区,因为威联通启动用的是旧的grub 0.97,而我打算用更新版的GRUB2。另外我还要引进Tiny Core Linux[1],做系统救援,和启动创建工具母盘。我还做了一个sd?7分区,作为备用。其中的?表示linux 的udev设备加载时分配的a-z字符。

把GRUB2; Tiny Core文件拷贝到sd?1分区中。编辑修改grub.cfg文件。其它分区sd?2至sd?7全部放空。把固件包中的相关文件拷贝到sd?2分区中。一共是如下十个文件:
bzImage
bzImage.cksum
initrd.boot
initrd.boot.cksum
qpkg.tar
qpkg.tar.cksum
rootfs2.bz
rootfs2.bz.cksum
rootfs_ext.tgz
rootfs_ext.tgz.cksum

你可能会问,你如何知道要拷贝这十个文件呢?这是得益于那篇日文的文章。做逆向工程破解固件时,除了自己的经验外,借助互联网吸取他人的经验会取得事半功倍的效果。

破解固件的启动盘就这样制作完成了。马上启动一下试一试。嘿嘿,很快控制台就出现了如下的截图登录界面:
009.jpg

显然,破解威联通固件并不是那么简单。威联通固件哪会只设一个坑,迈过去就是一马平川呢。不过这也是一个好兆头。证明了固件的最小系统已经成功建立起来了。既然有登录界面,那我就就用威联通的默认用户:admin,和默认密码:admin登录一下试一试。哈哈,可以成功登录系统。截图如下:
010.jpg

接下来我要介绍一下威联通内核的启动过程。 这也是从那篇日文文章[10]上读来的。所以我才会说,它大大加快了我的破解固件的速度。

威联通启动最小系统内核后
1.按照/etc/inittab中所述执行以下两个进程
null :: sysinit:/sbin/hwclock - hctosys
:: sysinit:/etc/init.d/rcS

2.根据/etc/init.d/rcS的描述(/etc/rcS_init.d/S20init_check),在/etc/rcS_init.d /下执行每一个名字从S?开始的脚本。
它的脚本代码如下截图:
011.jpg

3.执行/etc/rcS_init.d/S20init_check并开始时安装各种设备。
mount -t proc /proc /proc
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
mount -o remount,rw /
mkdir /sys
mount -t sysfs sysfs/sys
[ -d /tmp ] || mkdir /tmp
mount -t tmpfs tmpfs /tmp -o size=32M

4.从Model_Name.conf和BOOT.conf中加载Model名称和体系结构。
#Model_Name是Makefile中的INTERNAL_MODEL,TS-879U和TS-879都是TS-879
Model_Name =`cat /etc/default_config/Model_Name.conf 2> /dev/null`
#BOOT_CONF是平台类型,TS-879是TS-NASX 86
BOOT_CONF =`/ bin / cat /etc/default_config/BOOT.conf 2> /dev/null`
if [“x $ {Model_Name}”=“xTS - 230”] || [“x $ {Model_Name}”=“xHS - 200”]; then
  /bin/echo s35390a 0x30> /sys/class /i2c-dev /i2c-3 /device /new_device
fi
可以用cat命令查看一下:Model_Name.conf和BOOT.conf来确定设备的model和cpu类型。
#cat /etc/default_config/Model_Name.conf
TS-869
#cat /etc/default_config/BOOT.conf
TS-NASX 86

5.装载USB设备(与USB stick文件系统安装分开)
  74 [$?= 0] || /bin/echo“mount usbfs failed。”

6.使用hal_app命令展开DOM的第二个分区上的rootfs2.gz。
#从启动分区中提取rootfs2.gz
/sbin/hal_app  --boot
作为一个特定的进程,在/mnt/boot_disk/上挂载DOM的第二个分区。之后,将/mnt/boot_disk/boot/rootfs2.bz的内容扩展为解压“tar jxf /mnt/ boot_disk/boot/rootfs2.bz -C /”
※rootfs2.bz的内容是这样的,会为根目录中的/home;/lib;/usr添加更多的系统所需的程序。
drwxr-xr-x 4 admin administ 4096 Apr 10 04:37 home/
drwxr-xr-x 3 admin administ 4096 Apr 10 04:23 lib/
drwxr-xr-x 8 admin administ 4096 Apr 10 04:32 usr/

这条信息很重要,它给了我明确的暗示。/sbin/hal_app这段程序很有可能就是破解威联通固件的第二个坑。显然,/sbin/hal_app是与硬件有关联的。为需要破解它才能实现从DOM的第二个分区上提取,并展开rootfs2.gz。让我们先暂时记住这个坑,继续完成启动过程的介绍。

7.挂载根(HDA_ROOT),ext_root,和swap。
用一个名为storage_util的命令,它所做的事情已经超出了猜测的范围。我很抱歉我认为/mnt/HDA_ROOT和/mnt/ext和swap是在从脚本编写方法思考之后安装的。
/bin/echo“mount HDD system root ...”
/bin/echo "mount HDD system root..."
# parse the out put and find count
/sbin/storage_util --sys_startup
# mount
/dev/md9 on /mnt/HDA_ROOT type ext3 (rw,data=ordered)
/dev/md13 on /mnt/ext type ext3 (rw,data=ordered)
# cat /proc/swaps
Filename    Type  Size Used Priority
/dev/md256                              partition 530108 0 -1
这条信息也很重要,它是不是另一个坑,现在还不能确定。让我们先暂时做个标记,视破解的情况而定。

8.使用sys_startup_p2选项激活LVM并挂载cachedev设备。
#run hal_daemon,check_lan_port.sh is implement by load_lan_module.sh and hal_util_net.c
/sbin/daemon_mgr hal_daemon start "/sbin/hal_daemon -f"
/sbin/storage_util --sys_startup_p2

由于NASYUN的篇幅限制,请继续看楼下,【手把手教你破解威联通固件】, 精彩继续!

回复 支持 1 反对 0 印象

使用道具 举报

f541883216 发表于 2018-1-20 13:17 来自 加拿大

第二讲【手把手教你破解威联通固件】

本帖最后由 f541883216 于 2018-1-21 05:38 编辑

威联通内核的启动过程介绍完了,我先尝试在最小系统内核上执行/sbin/hal_app --help试一试。哇噢,威联通没有防备这一点,给我列出了sbin/hal_app的全部功能的说明。这段程序的功能太多了,截屏都有困难。我截下一小部分,这部分截屏反应出了sbin/hal_app中三个有关于硬件相关的启动功能,这些功能可以断定是第二个坑。必须改写才能破解固件。
012.jpg

思索与分析:
我要开始用IDA Pro工具对/sbin/hal_app这段程序做个静态分析了。看看是否可以直接修改这个二进制文件。分析的过程是一个见仁见智的过程,经验,技术,个人的好恶,都会影响分析的结果。我就不赘述了。我分析后的结论(不一定正确)是这个直接修改麻烦并且容易引发bug,造成系统不稳定。于是我又想了另一个办法,做一个/sbin/hal_app1模拟上述三个有关于硬件相关的启动功能,替代/sbin/hal_app的这三个功能。这样做有优点也优缺点。优点是简单易行,缺点是要补丁所有相关的用到这个功能的脚本文件。为此我先用 如下三个命令搜索了一下有多少脚本文件需要修改:

  1. grep -d recurse "get_boot_pd" *
  2. grep -d recurse "get_boot_pd_part" *
  3. grep -d recurse "boot" *
复制代码


搜索的结果是,如果采用后者的方法,将会有十个脚本文件需要补丁。根据我的经验,我认为这是可行的方案。于是我决定采用后者的方法。创建一个/sbin/hal_app1程序,模拟sbin/hal_app的三个功能。具体的编程技巧这里就不一一讲述了。在我的教学演示盘中有源代码。有兴趣的读者可以自行阅读分析。

编程完成后,对所有的脚本文件打好补丁,再生成重新破解固件的启动盘。启动一下试试看。
疑???启动后控制台黑屏了。什么情况???难道我什么的方没有考虑周到吗?
没有办法,只能接上com1的ttyS0端口,查看一下启动过程的log看看发生了什么问题。

修改grub.cfg文件,打开ttyS0端口:

linux   /boot/bzImage root=/dev/ram0 rw console=ttyS0,115200n8

再启动一下试试看。这次看到在控制台黑屏以后,ttyS0上出现了登录界面。截屏如下:
013.jpg

用威联通的默认用户:admin,和默认密码:admin登录,是成功的。
试着用SSH连接IP地址进行登录,是也成功的。
也就是说,系统已经启动了sshd服务。SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。这个sshd服务很有用。我们可以通过它,连接远程终端,拷贝文件等等。

试试用 chvt 1 命令切换当前控制台。哈哈,也是成功的。

这里还给出了model名,和IP地址,显然我的思路是对的,也是可行的。到此我已经成功地破解了威联通固件的第二个坑。

噢,我明白为什么了。威联通的硬件一般没有显示终端tty0控制台,所有启动成功后,它要把登录界面切换给ttyS0终端。这就是为什我的控制台出现黑屏了。这是启动成功的信号啊。

接下来下载及安装Qfinder或使用浏览器访问给出的IP地址,看看破解固件是否成功了呢?
哎呀,总是显示无法检测到硬盘。
014.jpg
看来还有第三个坑。啊,“革命尚未成功,同志还需努力!”

对于解决这个问题,我先从web的前台查起。我发现是http://192.168.56.101:8080/cgi-bin/quick/quick.cgi?todo=get_diskinfo执行后发出的无法检测到硬盘出错信息。执行后该程序返回一个xml格式的信息,确实是找不到Storage。看来问题不在web的前台,还是系统的后台破解没有完全。我还是老办法,去网上查一查看。嘿,威联通官方论坛也有人遇到这个问题。

读了读这些文章,都提到"Check the /etc/enclosure_0.conf to see if all host disks are all detected."[12] 。于是我用SSH远程终端连接到当前已破解的固件,查看/etc/enclosure_0.conf这个文件。但我的破解系统上没有这个文件。根据参考文献[12] 的解释。威联通系统支持硬盘热拔插。热拔插一般是SATA控制器。SCSI,IDE等控制器是不支持热拔插的。而该文件enclosure_0.conf应该是热拔插硬盘时自动生成的。

思索与分析:
为了找出这第三个坑在哪,我从朋友的威联通TS288上提取了enclosure_0.conf,直接上载到我的破解系统的/etc/enclosure_0.conf。我的想法是模拟一下热拔插。哇!奇迹发生了,浏览器直接跳转到了安装界面。截图如下:
013.jpg
沿着这个界面安装下去,居然能成功安装威联通。截图如下:
014.jpg

但不能重新启动机器。一旦重启机器,又会出现无法检测到硬盘。看来这是启动威联通破解系统的最后一个坑了。顿时让我信心倍增。参考文献[12] 还提到,如果有这个文件/etc/enclosure_0.conf,接下来应该执行storage_util --sys_startup命令。通过对enclosure_0.conf进行健全性检查并自动汇编md9。我又翻看了一下usr/bin/md_checker脚本。于是觉得执行一下storage_util --sys_startup命令试一试。这一试,我发现它把/etc/enclosure_0.conf给删除了。这给了我一个启示。这第三个坑一定与storage_util --sys_startup命令有关。

老办法,还得用IDA Pro工具对storage_util这段程序做个分析。分析程序,看反汇编语言的枯燥的细节就不赘述了。结论是,这段程序要读取/etc/model.conf中的 [System Disk ?] session 中的DEV_BUS=BxxDxxFx 的liunx pci总线的硬件描述信息。这是一种嵌入式linux典型的硬件绑定方法。这种伎俩是瞒不过像我这样既精通软件,又懂硬件人的火眼金睛。

PCI总线和设备树是X86硬件体系内很重要的组成部分,几乎所有的外围硬件都以这样或那样的形式连接到PCI设备树上。虽然Intel为了方便各种IP的接入而提出IOSF总线,但是其主体接口(primary interface)还依然是PCIe形式。我们下面分成两部分介绍PCI和他的继承者PCIe(PCI express):第一部分是历史沿革和硬件架构;第二部分是软件界面和UEFI中的PCI/PCIe。

自PC在1981年被IBM发明以来,主板上都有扩展槽用于扩充计算机功能。现在最常见的扩展槽是PCIe插槽,实际上在你看不见的计算机主板芯片内部,各种硬件控制模块大部分也是以PCIe设备的形式挂载到了一颗或者几颗PCI/PCIe设备树上。固件和操作系统正是通过枚举设备树们才能发现绝大多数即插即用(PNP)设备的[13][14]。关于PCI更详细的情况,请参看【老狼】的相关文章。不要揣测老狼是我在其它论坛的笔名。这里引用钱钟书老先生的一句名言“鸡蛋好吃何必去知道那个鸡下的?”

问题找出来了,解决起来就很容易了。查一下我试验用机器的PCI参数。手工编辑一下/etc/model.conf文件。重新生成initrd.boot初始RAM磁盘,启动再试。成功!
至此:整个破解威联通固件全部完成。这一讲,详细介绍了从下载官方发布的固件开始的每一个步骤和遇到问题如何去思考,如何做实验。“思索与分析” 章节,详细描述了我的思考过程。这部分最难写,因为它与经验密切相关。而经验需要一个积累的过程。下一讲,我将要讲解:教学演示黑威联通启动工具母盘的使用方法。

由于NASYUN的篇幅限制,请看楼下,第三讲 【教学演示黑威联通启动工具母盘的使用方法】,精彩继续!
回复 支持 3 反对 0 印象

使用道具 举报

f541883216 发表于 2018-1-20 13:17 来自 加拿大

第三讲【教学演示黑威联通启动工具母盘的使用方法】

本帖最后由 f541883216 于 2018-1-21 05:46 编辑

第三讲
教学演示黑威联通启动工具母盘的使用方法

为了便于大家学习掌握嵌入式linux逆向工程,实践出真知,只读一读我上一讲的内容,而不自己动手实践的话,是不能掌握嵌入式linux逆向工程技术的。为此我以破解威联通固件为例,为大家制作了一个教学演示启动工具母盘。方便大家做实验。这个启动工具母盘是一个集黑威联通启动盘创建,黑威联通系统启动引导,威联通固件破解,三位一体的工具母盘。母盘中并不包含任何威联通固件。创建启动盘时,该母盘会从威联通官网下载指定的发布的固件。通过破解,打补丁来生成符合当前机种硬件的黑威联通系统启动引导。该盘的设计理念,系统结构,所包含的程序代码均为老骥伏枥本人独家原创已及合法使用开源的TinyCore系统。全部是拥有自主知识产权的本人作品。基本上实现了一键安装。请坛友们遵守 GNU General Public License, 未经授权禁止用于商业用途。 该演示用工具母盘仅仅为的是进行教学, 研究和技术交流。 禁止用于任何商业目的。


该盘的提取地址是: https://pan.baidu.com/s/1bqlAwOn
游客,如果您要查看本帖隐藏内容请回复

压缩包中包含了两个文件:QNAP-BOOT.qcow2 和QNAP-BOOT.vmdk
它们的md5校验码如下:
d0fdffcc4d3c4c07ca00cf33262b153d  QNAP-BOOT.qcow2
cdaa3760de25480c0d12289402815e73  QNAP-BOOT.vmdk



qcow2格式的文件是KVM虚机用的启动盘。vmdk格式的文件是其它虚机用的启动盘。这次没有提供img格式文件,因为不需要这种格式文件。使用任何一个虚机启动盘,都可以方便容易地制作USB实体机用的启动盘。后面会详细教大家如果做。


下面以KVM虚机为例,详细讲解如何创建黑威联通启动盘。实体机,其它类型的虚机使用方法是完全相同的。首先要用QNAP-BOOT.qcow2盘建立一个KVM虚机。这个盘最好接在IDE总线控制器上。再创建一个数据盘,至少要30G以上,因为威联通系统的部分应用也要装在每块数据盘上,至少会占用16G的空间。这个盘最好要接在SATA总线控制器上,当然也可以接在SCSI或IDE总线控制器上,但与启动盘接在不同的控制器上比较好。以免在安装系统时产生混淆。内存要设定为2G以上。截图如下:
015.jpg

启动KVM虚机。启动KVM虚机。你将看到如下截屏:
016.jpg


启动TinyCore工具母盘。为了防止误操作,这时会要求你输入用户名,默认用户:admin,和默认密码:admin。进入TinyCore系统。
017.jpg


点击终端图标,打开一个终端。终端的当前目录是/home/tc。我的程序是以这个目录为基准设计的。千万不要切换目录,以免程序运行出错。



如果你想为实体机制作UBS启动盘,不需要安装虚机的黑威联通。现在就可以插入USB盘。将它连接到虚机。这时你需要用fdisk -l 命令,查一下QNAP-BOOT.qcow2盘和USB盘的盘符。千万不要搞反了,反了会把QNAP-BOOT.qcow2盘给破坏的。然后使用命令:(括号中是我的提示,不要输入到命令中)

  1. dd if=/dev/sd? (QNAP-BOOT.qcow2盘) of=dev/sd? (USB盘) bs=1M count=481
复制代码

注意:这里只需要设备名,不需要设备名的分区号。

USB盘只要512M就够了。没有用1G的代替也可以。不过也不要过大。USB盘启动盘其他多余的地方也不能用是个浪费。USB盘需要品质比较好一点的。品质差的USB盘,会出现不可预见的启动错误。



继续讲如何创建黑威联通启动盘。首先需要确定的是数据盘的总线控制器是什么。我的例子中是SATA。因为威联通默认是SATA。我的硬件检测程序的默认值,就也是SATA。如果你的数据盘是接在SCSI, IDE,或其他总线控制器上,你就要编辑修改我的hardware_check脚本程序中第六行的CONTROLLER="SATA"定义。这一点非常重要,弄错了会出现无法检测到硬盘的问题。


接着需要确定机器网卡能正常工作并可以上网。可以使用命令:ping  download.qnap.com

看看能不能连到威联通官网的下载地址。因为创建黑威联通启动盘时需要从官网下载固件。



如果不能连接官网,你也可以把固件预先下载到自己的服务器中。然后编辑修改我的create_qnap_boot脚本程序中第11行的

  1. DOWNLOAD_URL=https://download.qnap.com/Storage/TS-X82S/
复制代码

指向自己的服务器地址。注意最后的反斜杠一定要有。


教学演示盘默认的威联通固件是“TS-X82S_20171117-4.3.3.0378”。
默认的model 类型是“QY410_QY450_10_10”。



威联通的每一个固件,可能会有很多个不同的model 类型。我的教学演示盘可以破解所有的类型。只要你选一个自己喜欢的就好。这个定义在我的create_qnap_boot脚本程序中第8-9行中。你也可以任意选定。好了,如果一切就绪。就可以执行命令:
  1. sudo  ./create_qnap_boot  (一定不要忘记执行 sudo)
复制代码


如果一切正常,执行完成后的截屏如下:
018.jpg



黑威联通的启动盘就做成了。这时你就可以重启机器,开始安装黑威联通系统了。这里我还要教你一点小技巧。你可以执行命令:ifconfig 查看一下这个机器的IP地址。这样重启机器后就可以直接用浏览器输入该IP地址安装系统了。不需要安装威联通Qfinder软件来捡索机器。截屏如下:
019.jpg

作为教学演示盘,我还要再介绍一些功能。黑威联通的启动盘就做成后,我会在当前目录中创建一个initrd的子目录。这里包含所有威联通Linux初始RAM磁盘的文件。你可以看看我是如何给文件打补丁的。你也可以添加自己的外挂模块(例如:网卡,hyperV虚机的外挂模块,等等)。总之,可以做任何需要的黑威联通启动盘改造。打造你自己喜欢的黑Q。


这个initrd的子目录是个“沙箱式”的目录,你可以放心地随便查看,修改都没关系。不要执行./re_packing命令,一旦重启机器,这个沙箱就消失了。


如果你需要保留修改,也很简单。只要执行./re_packing命令。你自己版本的黑Q启动盘就做成了。


还有要注意的就是。威联通系统具有硬件关联性。当然黑Q也不例外。如果你拿这个硬件机器生成的黑Q启动盘到另外的硬件上去用。可能就会出现无法检测到硬盘的问题。我的工具母盘在制作时,注意到了这个问题。更换硬件机器后,只要启动进入TinyCore系统。点击终端图标,打开一个终端。重新执行一次命令:
  1. sudo  ./create_qnap_boot  (一定不要忘记执行 sudo)
复制代码


就能让这个黑Q启动盘适应新硬件了。这时不会再去威联通官网下载固件。只会做硬件的pci控制器检测调整,以适应新硬件。截屏如下:
020.jpg


好了,现在就重启机器,安装黑威联通系统。重启机器后就会出现如下截屏:
021.jpg



发一张我在KVM虚机上安装成功的全景截屏给你看看。同时祝你好运,也能一次安装成功。
022.jpg

由于NASYUN的篇幅限制,请看楼下,第四讲 【关于威联通, 群晖的逆向工程技术的讨论】,精彩继续!

回复 支持 0 反对 1 印象

使用道具 举报

f541883216 发表于 2018-1-20 13:17 来自 加拿大

第四讲【关于威联通, 群晖的逆向工程技术的讨论】

本帖最后由 f541883216 于 2018-1-23 06:37 编辑

第四讲
关于威联通, 群晖的逆向工程技术的讨论

群晖,和威联通是目前比较流行的两个NSA产品。江湖上黑群晖几年前就以xpenology论坛为前沿阵地推出了各种版本的破解产品。而黑威联通的破解产品却鲜有见闻。有人议论说,这是群晖官方故意放水的一种市场行为。这对威联通不公平。笔者退休前,是从事技术教学,和科研的。对于市场营销是外行。以我破解这两个产品固件的经验来看,群晖官方故意放水的可能性不大。但从技术角度而言,群晖和威联通都是使用嵌入式linux的产品,两者都须遵守GPL协议。两者都发布了工具链,和linux但内核代码。所以说破解起来难易程度不应该有太大的差异。

那为什么江湖上鲜有黑威联通的破解产品呢?以笔者的拙见,首先是缺少一个论坛为前沿阵地。难以聚拢愿意无私奉献的志愿者。破解固件一般需要大量有经验,技术好的志愿者。就算一个人浑身都是铁又能打多少钉呢?这也正是我这次的嵌入式linux逆向工程技术教学环节,选择破解威联通固件为实践的范例的原因。一是驳斥一下“放水说”,还群晖一个公平,可别也送我一顶“为威联通放水”的帽子。“皇上,臣妾冤.枉..啊!”。二是希望建设一下NSAYUN论坛。努力把NSAYUN论坛打造成江湖上黑威联通的全球一流前沿阵地。

论坛中的朋友不知有没有人玩儿过“黑苹果”?苹果系统是全封闭的类似unix的系统。无须遵守GPL协议。技术细节的资料也多保密不发布。笔者十几年前就玩儿黑苹果,那才叫真正的技术活。不过好汉不提当年勇,现如今上机时眼花,手抖,思路也不如当年敏捷了。虽然经验积累了,但精力却失去了。不过热心奉献社区等热情并没有熄灭。发挥点余热,为大家做点像黑群晖,黑威联通这样的小case还是手到擒来的。

下面想比较黑群晖与黑威联通的几个技术细节。也都是笔者在破解过程中的拙见和体会,不对的地方请坛友们批评指正。群晖官网发布的固件是pat文件,其实就是一个pat/zip文件。完全没有加密。威联通官网发布的固件是zip文件,解压后会得到一个img文件。这个文件img是加密的。需要解密才能得到固件。从破解角度看,威联通先来了一个下马威。不过这并不代表威联通更难破解。只会吓退一些庸人而已。

群晖与威联通的固件都与自己特定的硬件绑定。群晖是通过一个叫做synobios.ko的外挂模块集中处理硬件绑定问题的。一旦破解了它,很容易解除硬件绑定关系。而威联通则是采用分布式程序根据需要处理硬件绑定关系。这会给破解添加一点难度,但任何事情都有两面性。这也导致威联通发布更新固件时的一些小麻烦。每个发布的固件中都要加上很多的model 类型。从技术角度而言,集中处理硬件绑定是高效方法。分布处理硬件绑定效率低不说,还会引起不必要的bug。以此换取添加一点破解难度,其实得不偿失。根本抵挡不住技术高手。

威联通的浏览器管理界面与群晖的浏览器管理界面相比差距是明显的。但对用户体检有极大的影响极大。这与破解也有间接关系。行走江湖的高手们,往往会根据用户群体的反应,寻找猎物。用户体检直接会影响他们的意愿。于是群晖首先被黑掉了,而不是被放水。

对第三方应用包的开发支持,也与被破解有关系。我没有为威联通写过的第三方应用包。在此对这个问题,暂时不予点评。但我给群晖写过一个第三方应用包。题目是:
“揭开暗网的神秘面纱,用群晖NAS搭建自己的暗网网站”。


以上是笔者从破解固件的角度,比较了一下黑群晖与黑威联通。

请继续看楼下,【结束语】, 全文的总结。


回复 支持 反对 印象

使用道具 举报

f541883216 发表于 2018-1-20 13:17 来自 加拿大

【结束语】

本帖最后由 f541883216 于 2018-2-24 05:02 编辑

结束语

本文从理论到实践,全面系统地讲解了如何利用嵌入式linux逆向工程技术,破解威联通固件,制作了一个教学演示用的创建黑威联通启动工具盘。本文是从学术研究的角度,以破解威联通固件为实践的范例,探索,研究嵌入式linux逆向工程的概念,原理及实现的技术细节。特别要感谢我太太帮助仔细审核了文章并纠正了一些错误。也非常感谢NASYUN论坛提供空间来发表。

我的教学演示盘不是的黑客破解产品。从开始做这个项目,前后大约用了四,五星期的时间。由于时间仓促,难免有设计不周的地方,程序也难免有bug。欢迎广大坛友们给予批评指正。

对于想自己利用这个教学演示工具母盘来开发制作各种升级版黑威联通启动盘的坛友们,请看我的另一篇文章“制作黑威联通启动盘:进阶篇

尽管在这篇文章中我以破解威联通为实践范例做教学。我本人決会不使用黑威联通。作为一个退休老人,我也没有这个需要。我有一个西数的MyBookLive已经用了很多年。我已对系统配置做了必要的改造,非常适合我的需求。我不会轻易更换现有的系统。

文章的最后,老骥伏枥要再次郑重声明:撰写本文与制作教学演示工具盘的目的是为了探索,研究,学习嵌入式linux逆向工程技术。禁止利用本文提供的技术和使用本教学演示工具盘从事任何非法商业牟利性活动。


参考文献:
[1] Tiny Core Linux -维基百科,自由的百科全书
[2] 逆向工程入门指南
[3] Quick Start Guide
[4] binwalk工具运行支持的平台
[5] Interactive Disassembler (IDA)
[6] “今天开始学逆向:反汇编的利器IDA和Hopper的基本使用”  
[7] Snowman C/C ++反编译器
[8] [url=http://www.system-rescue-cd.org/]SystemRescueCD[/url]
[9] Linux初始RAM磁盘(initrd)概述
[10] QNAPの基本構造について
[11] 【老骥伏枥-鸡年大礼包】黑群晖6.02-8451版硬盘自启动,USB启动盘,系统救援盘
[12] How to bring up HAL firmware after booting with HDDs unplugged
[13] 【老狼】深入PCI与PCIe之一:硬件篇
[14] 【老狼】深入PCI与PCIe之二:软件篇


作者简介:老骥伏枥是一个退休老人,在家抱孙子是主要任务。闲暇之余凭着35年的计算机软硬件开发经验和自己拥有的技术专利,为NASYUN论坛写些劲爆话题的文章来消磨时间。本人写过商业软件,也写过开源软件。有丰富的系统集成,软件开发(从汇编语言到各类高级语言)经验。在嵌入式linux逆向工程研究领域也有一定的造诣。是一个尊重知识产权,热心奉献社区论坛志愿者。此文绝对是都是本人【原创】。如果你对本文的观点有不同意见,可以回帖喷我,本人从不固步自封,固持己见。

评分

参与人数 3贡献 +3 收起 理由
oD8189 + 1 很给力!
ldd1231 + 1 赞一个!
HappyED + 1 很给力!

查看全部评分

回复 支持 16 反对 0 印象

使用道具 举报

f541883216 发表于 2018-2-28 01:05 来自 加拿大
unanxtg 发表于 2018-2-27 19:09
第一次看到这么详细的介绍破解威联通的,其他的论坛只是发布一个通用包,不能适用所有的机子,为这个老前辈 ...

我是从嵌入式Linux逆向工程的角度研究破解固件,不是从ROM套取固件。我的破解,只是为了教学,研究嵌入式Linux逆向工程。不是黑客为了商业目的从ROM套取固件。
回复 支持 1 反对 0 印象

使用道具 举报

chamqion 发表于 2026-3-24 21:51 来自 中国广东深圳
来学习一下model.conf的写法
回复 支持 反对 印象

使用道具 举报

liaoqin 发表于 2026-2-9 23:36 来自 中国湖北武汉
1111111111111111111111111111111111
回复 支持 反对 印象

使用道具 举报

joinzhw 发表于 2025-8-5 12:25 来自 中国江苏盐城
教学演示黑威联通启动工具母盘的使用方法

为了便于大家学习掌握嵌入式linux逆向工程,实践出真知,只读一读我上一讲的内容,而不自己动手实践的话,是不能掌握嵌入式linux逆向工程技术的。为此我以破解威联通固件为例,
回复 支持 反对 印象

使用道具 举报

爬的蜗牛 发表于 2025-6-28 11:14 来自 中国江苏南京
非常好的文章,学习了!!
回复 支持 反对 印象

使用道具 举报

hdfs 发表于 2025-6-8 13:40 来自 中国
感谢大佬的无偿提供  谢谢
回复 支持 反对 印象

使用道具 举报

Unreal 发表于 2025-6-7 18:33 来自 中国北京
感谢大佬付出!!!
个人升级all in boom嫌弃truenas core的使用体验但又介于威联通没有sata  + u.2的廉价产品,只能如此曲线救国了
回复 支持 反对 印象

使用道具 举报

Rox 发表于 2025-6-1 21:54 来自 中国香港
Thanks~~~~~~~~~~~~~~~~~~~
回复 印象

使用道具 举报

ll01099 发表于 2025-4-24 20:42 来自 中国江苏苏州
学习一下,感谢楼主!!
回复 支持 反对 印象

使用道具 举报

tusk 发表于 2025-4-2 11:03 来自 中国浙江温州
看看~~~ 字数字数字数字数字数字数字数字数字数字数字数字数字数字数字数字数字数字数字数字数字数字数字数字数字数字数
回复 支持 反对 印象

使用道具 举报

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

本版积分规则

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