|
第七讲 关于USB启动盘位的补丁
华芸的ADM系统的硬件的绑定是非常严格的。对数据盘的盘位,启动盘的盘位都有严格的硬编码规定。我在分析破解的时候,发现了libnasman.so.0.0动态库中有一个非常有用的Dump_Nas-Info()函数。我猜想华芸的技术人员也会使用它来调试固件与硬件的对应关系。但使用这个函数的工具华芸的ADM系统并没有发布提供给用户使用。其实用户也没有这个需要,但我们破解它的系统,这个工具就非常重要了。于是我编写了一个调用该函数的工具,用于查看系统的硬件配置问题。例如:我要配置一台蜗牛矿渣机黑华芸AS7112R,使用这个工具就可用得到如下信息:
===Dump_Nas_Info=== Nas property: (total [180] bytes) Model Name: [AS7112R], PCH: [7], Series: [71],SubModel: [1], Chassis: [1], Reversion: [1], Bus: [0x190] FW ver: [4.0.5.RRS1], Ability: [0x706], HP:[1], S3: [1], KLS: [1], LCM: [0], MA: [1], OTB: [0], WW: [0] Host ID: [52-54-00-7E-45-F1], Serial No:[AX1108014IC1234], Max: [50/41] Lan [1], Netif [3], Order: eth0, Usb Order [6]: 0x110/210, 0x120/220, 0x160/240, 0x150/230,0x180/260, 0x170/250, Sata Order [12]: 27, 49, 50, 2,26, 48, 51, 3, 25, 24, 1, 0, ESata Order [0]: M.2 Order [2]: 253/d, 255/c,
其中的PCH: [7]表示我在第五讲中的index=7。
其中的 Usb Order [6] 表示USB启动盘的盘位必须在给定的六种位置,否则不予接受。
例如我的蜗牛矿渣机的USB硬件接口列表如下:
[6118.042255] usb1-2.3: new high-speed USB device number 7 using xhci_hcd (A款机箱左前USB口) [6601.307307] usb1-2.2: new high-speed USB device number 9 using xhci_hcd (A款机箱右前USB口) [6706.240317] usb1-4: new high-speed USB device number 10 using xhci_hcd (A款机箱左后上方) [6925.795334] usb1-1: new high-speed USB device number 11 using xhci_hcd (A款机箱左后下方,支持usb3.0) [7101.987358] usb1-2.1: new high-speed USB device number 12 using xhci_hcd (A款机箱右后上方) [7277.858371] usb1-3: new high-speed USB device number 13 using xhci_hcd (A款机箱右后下方)
翻译成华芸的编码就是:0x123, 0x122, 0x140,0x110,0x121,0x130 只有一个接口能够对上。因此USB启动盘必须在该盘位才能正常启动。就是支持usb3.0的那个USB端口。
另外,数据盘的盘位也必须在规定的位置才能有效。还好蜗牛矿渣机中有2号盘位和3号盘都可用。但它对应的是华芸AS7112R的4号盘位和8号盘位。因此插在蜗牛矿渣机的数据盘反映在华芸AS7112R系统中只能是4号盘位和8号盘位。但如果把硬盘插在蜗牛矿渣机的4号和5号盘位,就会出现找不到硬盘的问题了。虽然蜗牛矿渣机可用插四块数据盘,但只有两块是可用位置。如果四块数据盘都想用怎么办呢?那就只能再次对libnasman.so.0.0动态库进行补充修改。改造成由Dump_Nas_Info查出来的盘位信息才行。
那么这些信息在哪里呢?当然都在第五讲中反汇编的伪码的:v3 = (signed int (__fastcall **)(int *,__int64))&unk_A1258;(IDA)或者iVar2 = (**(code **)(p_Var5 + 8))(&local_388);(Ghidra) 这段跳转表调用的子程序中。这里我就不细说了。留给有兴趣的读者自行分析研究。
但我还是要详细讲解一下如何去掉对USB启动盘位的限制。以使破解版的启动盘为更为灵活。
这个限制在libnasman.so.0.0动态库的Probe_Usb_Disk_Path()函数中。其相关部分的伪码如下:
if ( strstr(v14, "/host") && strstr(v15,"/block/sd") && sscanf(v15,"/usb%*[0-9]/%d-%d/%*[0-9]-%*[0-9].%d", &v21, &v22, &v23)> 1 && v23 + 16 * v22 + (v21<< 8) == v18 ) => v21;v22;v23三个参数组合的USB端口地址一定要对应输入参数v18的值才行。 { break; }
因此我要去掉这段检查。当然修改不能在伪码中进行,必须修改反汇编的代码。其实就是一个条件跳转指令的改造。截图如下:
改造后再生成伪码看一看:
if ( strstr(v14,"/host") && strstr(v15,"/block/sd") && sscanf(v15,"/usb%*[0-9]/%d-%d/%*[0-9]-%*[0-9].%d", &v20, &v21, &v22)> 1 ) { break; }
可以看到,限制已经被去掉了。这个补丁当然是可有可无的。但这样的破解使用起来会更加灵活好用。还有就是华芸ADM系统的这个版本,必须使用USB启动盘。如果再对这个函数更进一步的改造,可以让它不限制在USB盘,而是任何硬盘都可以启动。再看伪码:
v14 = strstr(buf, "/usb"); => 如果取消对USB的检查限制, v15 = v14; if ( v14 ) => 消对这个if语句就可以了。 { if ( strstr(v14, "/host") && strstr(v15,"/block/sd") && sscanf(v15,"/usb%*[0-9]/%d-%d/%*[0-9]-%*[0-9].%d", &v20, &v21, &v22)> 1 ) { break; } }
这个改造也不难。取消上述的红色部分即可。具体修改反汇编的代码做法就不再赘述了。
第八讲 体验工具盘使用与实践范例
为了便于大家学习掌握嵌入式linux逆向工程知识,【兔年大礼包】将为大家提供一个测试华芸ADM系统破解的工具盘。此次的工具盘以vmdk格式提供。该盘中不包含任何原厂的固件代码。读者需要自行去华芸的官网下载相应的固件。该盘的设计理念,系统结构,所包含的程序代码均为老骥伏枥本人独家原创已及合法使用开源的TinyCore系统。全部是拥有自主知识产权的本人作品。请坛友们遵守 GNU General Public License, 未经授权禁止用于商业用途。 该演示用工具盘仅仅为的是进行教学, 研究和技术交流。 禁止用于任何商业目的。
我要说明的是这次为大家提供的测试华芸ADM系统破解的工具盘。并不是上述讲解的X64_G3_4.0.5.RRS1.img版本的手工破解过程的测试盘。而是另一个华芸系列AS-304T的启动盘。
这个启动盘经过部分坛友们的测试,证明可以在虚拟机和蜗牛矿渣机B款上安装成功。作为体验华芸ADM系统破解的逆向工程,哪个系列的版本并不重要,主要是让大家体验一下破解的逆向工程。这个版本也是当前华芸发布的最新版。因为上述介绍的是华芸全系列的破解,体验盘则是仅仅给出了一个系列的破解而已。发布全系列破解的启动盘,对该产品的影响比较大,所有只发布了一个系列让小白和菜鸟们体验一下。如果读者有兴趣做华芸全系列的破解,可以按照本文的详细论述,自行研究,学习逆向工程破解技术。在此老骥伏枥要郑重声明:撰写本文的目的是为了探索,研究,学习嵌入式linux逆向工程技术。禁止利用本文提供的技术和使用本教程从事任何非法商业牟利性活动。
第九讲 华芸ADM系统数据盘结构分析
安装完成华芸NAS后,华芸ADM系统数据盘结构是什么样子的呢?让我们来看看它的结构。
华芸NAS的数据盘全部是gpt格式的四个分区配置。
/dev/sda1:是Linux文件系统"ext4"的分区,尺寸是255M。在这个分区中会复制启动盘第二分区的全部内容。作为ADM系统的一个备份。每一个数据盘上都会有这样一个备份。
/dev/sda2: 是Linux的"linux_raid_member"分区,尺寸是2G。这个分区会组装成/dev/md0,文件系统为"ext4"。启动后,它将挂载为/volume0,里面的内容是解压后的builtin.tgz。实际上就是全部的ADM的根文件系统。第一讲中我们就提到过builtin.tgz这个固件的文件。但没有仔细分析它的内容。
/dev/sda3: 也是Linux的"linux_raid_member"分区,尺寸是2G。这个分区会组装成/dev/md126做为"swap"分区使用。
/dev/sda4: 也是Linux的"linux_raid_member"分区,尺寸是硬盘的所有剩余部分。这个分区会组装成/dev/md1,文件系统可以选择为"ext4"或"btrfs"。启动后会挂载为/volume1,如果选择Single设置数据盘,多个数据盘时,还会挂载为/volume2…3…等等。用户的数据全部都会放在这个分区中。如果NAS系统崩溃了,需要恢复自己的数据时,只有处理这个分区的数据就可以了。
华芸NAS的数据盘的结构设计的非常简洁。因此,管理起来也就非常容易。不会占用很多的系统资源。所以数据处理的速度会比较快。
最后请看楼下【结束语】,精彩继续!
|