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

#楼主# 2025-1-7 02:59

跳转到指定楼层
前言

万由的U-NAS系统虽然名不见经传,但在国内它也是有些年历史的老NAS品牌了。以前我也曾经写过一篇关于安装万由U-NAS系统初体验的文章。那时的系统是U-NAS 3.0.7(U-NAS_3.0.7_X86-64_ZH_DVD_Build_1807121.iso)。该系统并没有加密,也不需要激活授权,可以自由安装使用。现在万由的官网提供 U-NAS 4.0.6(U-NAS_4.0.6_X86-64_ZH_DVD_build202003062.iso)的系统,该系统也没有加密,也不需要激活授权。最近这几年万由又推出了U-NAS 5.1.2 的系统,但是官网并没有发布,而是在QQ群号:817910211 万由U-NAS内测群里发布了(U-NAS_PRO_5.1.2_ZH_2022.03.28-1600.iso)这个版本。有需要的朋友们可以尽快加入该群去获取文件。最近又成立了万由U-NAS 6的内测群,据说万由已经发布了U-NAS 6.10.0的内测版(U-NAS_Kepler_6.10.0.20240726-2100.iso)但好像需要到“淘宝”上去购买内测版。这种内测的怪操作,实在有点不可思议?

万由的U-NAS系统从U-NAS 5.0 开始,包括最新的U-NAS 6.0系统都是在安装后需要激活授权才能使用的。也就是说不可以自由安装使用了。这让大家感觉到非常不快。应广大坛友们的要求,我今年的蛇年大礼包将会对U-NAS 5.0U-NAS 6.0的两个系统做激活授权方法的逆向工程教学。作为又一个嵌入式Linux逆向工程的教学范例。供大家学习,研究和技术交流。因为U-NAS 5.0和U-NAS 6.0系统区别很大,我将分成两个不同的章节来探讨。

需要强调的是,我不是一个黑客。文章中提到的固件资源请读者自己想办法获取。我的文章是进行教学, 研究和技术交流。 禁止用于任何商业目的。

第一章
万由U-NAS 5.0激活授权的逆向工程

固件资源的来源是:QQ群号:817910211 万由U-NAS内测群里发布的  
U-NAS_PRO_5.1.2_ZH_2022.03.28-1600.iso  这个版本。请读者加入该群获取该文件。

第一节
万由U-NAS5.0还能在虚拟机上安装吗?

以前的U-NAS 3.0和U-NAS 4.0的系统我都是在虚拟机上安装测试的。这次在获得U-NAS_PRO_5.1.2_ZH_2022.03.28-1600.iso  这个版本的安装盘后,据说要用这个ISO文件生成一个USB盘启动盘才能安装。于是我就想先试着在虚拟机上安装,直接使用ISO文件比用USB盘启动盘更为方便,为什么不按照这个思路试试呢?所以我决定不做USB盘启动盘,直接用ISO文件来在虚拟机上安装测试。

具体的安装步骤就不在这里赘述了。一般情况下我都是使用Linux系统下的KVM虚拟机进行安装测试的。考虑到大多数坛友们喜欢使用Windows系统的虚拟机,这次我特意使用Oracle 公司的 VirtualBox虚拟机来做万由U-NAS 5.0的安装测试。

我选用的网卡是Intel PRO/1000 MT Desktop (82540EM),它实际上相当于e1000网卡。如下截图是我的虚拟机配置:

001.jpg

先要将虚拟机设定为从CDROM盘启动。然后启动虚拟机,这个的安装过程很顺利,只是创建启动盘的过程比较长,只要耐心等待就好。

002.jpg

安装创建启动盘的过程完成以后,先要关闭虚拟机,重新调整设定。要把CDROM盘启动的ISO映像删除。再次设定从硬盘启动系统即可。

再次启动后就进入万由UNAS 5.1.2系统了。在虚拟机的启动过程中,可能会出现一些提示或警告信息。这些都不要理睬。直到出现如下的截屏画面,万由UNAS 5.1.2系统就启动成功了。

003.jpg

从控制台的提示信息中,我们可以看到当前IP地址。这时我们就可以使用万由提供的默认账户:root和默认密码:yutech从控制台登录系统了。

当然我们也可以使用浏览器通过IP地址连接万由UNAS 5.1.2系统,但非常不幸的是我们获得的是如下的界面:

004.jpg

要求你必须提供激活码才能使用系统。其实此时的系统已经是正常启动的NAS系统了。只是没有激活浏览器的管理界面而已。因此你就无法使用浏览器对系统进行配置管理。但是如果你是Liunx系统的专家,你依然可以使用控制台的命令对系统进行配置管理的。

到目前为止,我的结论是万由U-NAS 5.X仍然可以在虚拟机上安装使用。接下来的问题就是,如何破解激活授权的问题了。这样才可以方便大家使用。这也是本文要解决的重点问题。我将会讲解我的破解思路,也回在讲解的时候提供相关的补充知识,供大家学习参考。并在参考文献中注明所有引用文献的出处。

第二节
万由U-NAS 5.X激活授权的破解思路

破解的思路一般来讲有两种。其一就是阻断激活状态的检测,让万由的系统误认为已处于激活状态。这样做的优点是,比较简单易行。缺点是可能会缺失激活状态的必要数据,有可能影响系统运行。其二是破解激活码的算法,通过正常的激活过程对系统进行激活。例如:使用一些技术手段,通常是使用WireShark; TCPDump等等网络抓包工具;并结合静态程序算法分析。截取激活过程中万由U-NAS 系统与在线激活服务器的信息交互。然后设计一个模拟的自授权激活服务器,取代真实的授权服务。这样做的优点是,系统获得了真正的激活授权。缺点是破解过程比较复杂,需要有一定的经验和必要的相关知识。

以上是我的破解思路。接下来我会对两种思路的破解方法做详细的深入浅出讲解。让我们开始吧,看看我是如何一步一步实现破解的过程。

首先我会通过控制台用万由提供的默认账户:root和默认密码:yutech 来登录万由系统,并对系统的运行状态和配置做初步探索。

题外点评:当然这时有些读者可能提出这样的问题,如果万由不提供默认的root账户和密码怎么办?其实对于我们做逆向工程的专业人员来说,这根本就不是问题。可以通过将启动盘挂载到任何具有root权限的Linux系统上,直接修改/etc/passwd 和/etc/shadow文件来获取 root账号和密码。

登录万由U-NAS系统后的截图如下:

005.jpg

第一步:登录系统后我会在第一时间修改默认账户root的密码。这是我做逆向工程的习惯性动作。Linux系统的root账户是最高权限级别的账户。当然还是使用自己的密码比默认密码更安全,更放心对吧。修改默认密码可以使用命令:passwd然后按照提示输入两次新密码即可。

为了便于破解工作的顺利进行,我要做的第一件事儿是开放sshd的root登录权限,以便可以使用PuTTY; WinSCP等工具。具体步骤如下:

编辑修改/etc/ssh/sshd_config文件容许root登录。
去掉注释# PermitRootLogin prohibit-passwoed
把“PermitRootLogin prohibit-passwoed”改为“PermitRootLogin yes”。下面给出一个截图供参考:

006.jpg

然后存盘修改后的文件,重启服务: service sshd restart 。

第二步:查看Web服务的配置。我通常会使用如下命令:

root@U-NAS-IC61NQS35:~# netstat -tuple | grep http
tcp6   0  0 [::]:http       [::]:*      LISTEN  root   21291  1164/apache2
tcp6   0  0 [::]:https      [::]:*      LISTEN  root   21294  1164/apache2
root@U-NAS-IC61NQS35:~#

我们可以看到,万由U-NAS使用apache2提供它的Web服务。接下来我们要查看apache2的配置文件。它通常位于/etc/ apache2/ 的目录中。我查看了/etc/apache2/sites-available目录中的unasdesktop.conf这个文件。它包含了如下内容:
<VirtualHost *:80>
        ServerName U-NAS
        AddDefaultCharset UTF-8
        IncludeOptional /unas/etc/apache2/conf.d/*.conf
        # This include should always be with VirtualHost *:80.
        IncludeOptional /unas/etc/apache2/http/*.conf
</VirtualHost>

它的IncludeOptional包含了/unas/etc/apache2/http/*.conf中的配置文件。需要再继续查看。

root@U-NAS-IC61NQS35:/unas/etc/apache2/http# cat unasdesktop.conf
Include /unas/etc/apache2/apps/desktop/conf/unasdesktop-directory.conf
# This include should always be with unasdesktop.
IncludeOptional /unas/etc/apache2/apps/desktop/http/*.conf

它的IncludeOptional又包含了/unas/etc/apache2/apps/desktop/conf/unasdesktop-directory.conf配置文件。还需要再继续查看。

root@U-NAS-IC61NQS35:/unas/etc/apache2/apps/desktop/conf# cat unasdesktop-directory.conf
DocumentRoot /unas
<Directory /unas>
        Options -Indexes +FollowSymLinks +MultiViews
        AllowOverride None
        Require all granted
        RedirectMatch ^/$ /desktop/
</Directory>

<LocationMatch ^/(apps|desktop).*/languages/.*Translation>
        Header set Content-Type application/json
</LocationMatch>

好了,到此为止已经找到了我想要的东西。我找到了万由apache2的Web服务的根目录位置:DocumentRoot /unas。在这个服务的根目录又有如下设定RedirectMatch ^/$ /desktop/。所以我会试着开始着手分析/unas/desktop/目录中的Web服务程序。先用ls命令看看目录中都有些什么?

root@U-NAS-IC61NQS35:/unas/desktop# ls
admin.html  html    includes   js         login       php      test.html  upgrade.html  wallpapers
css         images  index.php  languages  logout.php  plugins  themes     upgrade.php

噢,有一个index.php文件。初步猜想万由的U-NAS 5.X 系统的Web服务管理界面是用php程序写的。再简单查看一下其它目录,我的猜想很快就得到了证实。

第三步:用file命令查看一下index.php文件的属性。
root@U-NAS-IC61NQS35:/unas/desktop# file index.php
index.php: data

咦?这个文件的属性居然是data,而不是PHP script, ASCII text。显然万由对它的php程序都进行了加密处理。不过对于我们做逆向工程的专业人员来说,破解这些东西都是小菜一碟。

作为补充知识,下一节我要先介绍一下如何处理加密的php程序的破解问题。然后再接着讲激活授权的破解。

第三节
使用php screw 或者screw plus来保护php的代码安全

我们大家都知道php程序是脚本程序,但php也支持二进制扩展。为了不让php脚本程序被开发者之外的人阅读,有人开发了一款免费的针对PHP源码进行加密的PHP的扩展。它的名称为:PHP_Screw。这里我要先介绍一下有关php_screw的发展历史和现状。让大家对php_screw是个什么软件有一个一般性的了解。见参考文献[1]。

PHP_Screw是一款由日本人“野田邦昌”开发的免费的针对PHP源码进行加密的PHP的二进制扩展库,可以自定义加密种子文件,加密后的文件效率还不会下降。当前的最终版本是2016开发的php_screw-1.5.tar.gz。目前没有更进一步的开发与更新维护。

由于他是初探PHP扩展,所以php_screw扩展的加密原理以及源码结构都非常简单。下面来简单分析一下他的php扩展库的编写和这种加密算法的实现,在解压php_screw-1.5.tar.gz后的tools目录下的screw.c可以看到其主要流程:

打开目标文件→判断是否已经加密→创建备份文件→调用zencode进行压缩→使用密码pm9screw_mycryptkey进行加密→保存结果。关注的重点是如下的两个部分,即zencode函数和加密方式。其中zencode在同目录下的zencode.c中定义,与它一起的还有zdecode函数。

007.jpg

两个函数都调用了zcodecom函数,而传入的第一个参数决定了是进行压缩还是解压。

可以说PHP_Screw是一个加密和压缩俩种功能集成在一起的加密软件。PHP_Screw使用“对称”密钥进行加解密。(与此相对的是非对称密钥,典型代表是公开密钥密码体制的RSA算法,椭圆曲率密钥密码算法。部分密钥可以公布。笔者对这个研究领域也有一定造诣。)“对称”密钥是绝对不能泄露的。另外加过密的文件还需要有一个标识Tag,以便解密程序识别。“野田邦昌”开发的版本中,他会编译创建了一个扩展库.so文件。并将密钥隐藏在该扩展库的.so文件中。

后来又有人在“野田邦昌”开发的免费版软件PHP_Screw基础上,做了一个简单的二次开发扩展名称为:screw_plus。它的确是有些进步。方便简单了一些。例如:不再需要标识Tag了。取而代之的是先将对称密钥作md5散列hash处理后,用前16个字节当作标识Tag。并采用了高强度AES-256-ECB加密。但在反破解方面没有任何新的建树。仍然是对称密钥,并且隐藏在.so的扩展库中。万由对php的加密处理就是采用了这个screw_plus的二次开发扩展。

这种设计思路,对于提供web服务的网站可能是非常有效的。但是对于用户可以拿到拥有root访问权限的万由U-NAS系统,就不那么有效了。是有可能被轻而易举地破解的。我现在已经拥有对于万由U-NAS系统的root权限。对于“老骥伏枥”这样的江湖老手来说,破解它当然不成问题了。其实老骥伏枥早已解甲归田,隐退江湖已久。只是有时耐不住寂寞,偶尔露峥嵘而已。

为了获取隐藏在php扩展库so文件中的密钥,就要先找到这个扩展库。实际上这是很容易的事情。我们知道php 的二进制扩展库都是通过它的配置文件*.ini引入的。那好,我们就去它的配置文件那里找找看。首先我们需要知道php.ini配置文件的位置。这不难,我们可以用如下命令来找:

root@U-NAS-4C1JVEUK:~# php -i | grep php.ini
Configuration File (php.ini) Path => /etc/php/7.3/cli
Loaded Configuration File => /etc/php/7.3/cli/php.ini

看到了吧,万由系统的php文件在 /etc/php/7.3/cli/这个目录中。在该目录的conf.d子目录里,有一个20-php_screw_plus.ini的配置文件。在它里面定义了一个扩展库:

; configuration for php screw plus module
extension=php_screw_plus.so

接下来我们可以用如下命令来找到php_screw_plus.so的位置。

root@U-NAS-IC61NQS35:/# find / -name php_screw_plus.so
./usr/lib/php/20180731/php_screw_plus.so

再接下来就是要找到隐藏在该扩展库的.so文件中的php加密的密码了。我以前曾经用hex-rays公司的反汇编的利器IDA对php_screw_plus.so扩展库的程序进行过细致的分析。也知道用C++编译后产生的 ELF文件会有一个静态数据区,它们一般都会编译到.rodata这个区域中。隐藏扩展库中的php加密的密码就是属于这类数据。因此,这次为了快捷起见,根据经验,我就直接使用如下命令objdump -s -j .rodata php_screw_plus.so来查看密码。

root@U-NAS-IC61NQS35:/# cd /usr/lib/php/20180731/ &#61671; 进入该目录
root@U-NAS-IC61NQS35:/usr/lib/php/20180731# objdump -s -j .rodata php_screw_plus.so
php_screw_plus.so:     file format elf64-x86-64

Contents of section .rodata:
5000 656e6162 6c656400 7068705f 73637265  enabled.php_scre
5010 775f706c 75732073 7570706f 72740025  w_plus support.%
5020 30327800 41434345 53532044 454e4945  02x.ACCESS DENIE
5030 44007368 6f775f73 6f757263 65006869  D.show_source.hi
5040 67686c69 6768745f 66696c65 00726200  ghlight_file.rb.
5050 7068705f 73637265 775f706c 75730031  php_screw_plus.1
5060 2e352e30 00415049 32303138 30373331  .5.0.API20180731
5070 2c4e5453 00000000 454a4b6a 646f6f64  ,NTS....EJKjdood
5080 57705a4b 786a6b77 70647373 34554577  WpZKxjkwpdss4UEw
5090 72727266 66454657 33543233 6a484e4a  rrrffEFW3T23jHNJ
50a0 48000000 00000000 00002000           H......... .

根据经验,我立即分析出php的密码就应该是: EJKjdoodWpZKxjkwpdss4UEwrrrffEFW3T23jHNJH

当然你可能会问,如果没有经验怎么办?那就只能使用IDA或者ghidra这类反汇编工具自行分析了。具体的分析方法,已经超出了本文所以讲述的范围,请读者自行查阅有关书籍和文献。不过对于万由U-NAS 5.X版本,读者们就不必费功夫了。我提供的php的密码肯定是正确的啦。

为了解密万由的php文件,我自己写了一段解密程序:screw_plus_decrypt。这段程序极其简单。如果大家也想试试自己解密万由的php文件,可以到网上搜一搜。有很多这类开源的样本程序。我的目的是讲解破解过程,因此我就不提供我的解密程序了。解析出php的密码就足够了。

由于NASYUN的篇幅限制,请看楼下,第四节 【破解的思路之一“阻断激活状态的检测”的实施】,精彩继续!

最自然的一种表达方式,即是不写赞赏语,红色赞赏按钮就在那,大家懂的。
那是云论坛 - 国内知名的NAS交流平台
http://www.nasyun.com
分享淘帖
回复 印象

使用道具

nas8087 发表于 2026-4-15 14:30 来自 中国广东深圳
NAS 5.1.2系统的ISO安装盘创建启动盘后。开始用浏览器连接UNAS 5.1.2系统时,就会提示你请输入激活码。请参见第一节中的截图。

这是因为如果你使用非万由的硬件,就会提示你需要激活码进行在线激活才能开始使用系统。如果你安装了我的破解补丁包: self-acvtive-unas_5.1.2_amd64.deb,就可以使用任何的合法激活码来激活系统。不论是万由提供的激活码,还是我破解激
回复 支持 反对 印象

使用道具 举报

kumber 发表于 2026-4-3 11:20 来自 中国宁夏银川
顶顶顶顶顶顶顶顶顶顶
回复 支持 反对 印象

使用道具 举报

叶闲花 发表于 2026-3-20 15:53 来自 中国广东肇庆
非常感谢楼主的分享,太牛了 。不明觉厉!
回复 支持 反对 印象

使用道具 举报

liaoqin 发表于 2026-2-1 09:02 来自 中国湖北武汉
需要这个工具,求大佬分享一个
回复 支持 反对 印象

使用道具 举报

zgw224 发表于 2026-1-30 11:23 来自 中国浙江绍兴
谢谢高手分享,,,学习一下
回复 支持 反对 印象

使用道具 举报

braxiong 发表于 2026-1-19 10:05 来自 中国广东佛山
感谢大佬,前来膜拜学习
回复 支持 反对 印象

使用道具 举报

hnql1991 发表于 2025-9-22 17:52 来自 中国河南济源

fxl731

0
精华       

27
回帖       

229
积分

入门用户

Rank: 1

云币
    0
贡献
    0
活跃
    215
精华
    0 篇

    发消息

       
10楼
fxl731 发表于 2025-1-8 12:52 来自 中国新疆乌鲁木齐
大佬牛逼,敬佩,从以前的看起来一头雾水,到这么多年自己学习补充,现在看大佬的文章,80%都能看懂了,感谢大佬
回复 支持 反对 印象

使用道具 举报

wudizz 发表于 2025-8-26 18:46 来自 中国四川乐山
大佬厉害啊
回复 支持 反对 印象

使用道具 举报

lk120 发表于 2025-8-24 08:19 来自 中国上海
现在还能用吗??????
回复 支持 反对 印象

使用道具 举报

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

本版积分规则

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