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

#楼主# 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
分享淘帖
回复 印象

使用道具

f541883216 发表于 2025-1-7 02:59 来自 加拿大
第四节
破解的思路之一“阻断激活状态的检测”的实施

解密了万由的php文件之后,我就可以直接分析它的激活授权的方法和过程了。先讲一讲最简单的破解办法。阻断激活状态的检测。

直接上干货。在/unas/wmi/目录下有一个unasutils.php文件。解密后有这样一段内容如下:

function isActivated()
{
    require_once('/unas/sbin/product.php');
    return (gettype(PRODUCT_LICENSE)=="string" && PRODUCT_LICENSE != "")
        || (gettype(NAS_LICENSE)=="string" && NAS_LICENSE != "");
}

看到了吧,直接修改为如下内容,就可以实现阻断激活状态的检测。

function isActivated()
{
    return true;//阻断激活状态的检测
}

大家可以对比一下改造前后的程序,就明白了。

但是这样的激活状态检测可能不止存在于这一段程序中,所以我还要再找一找。看看其它程序中和有没有这样的激活状态检测。

在/unas/wmi/core目录下还有一个wy2license.php文件。解密后这个文件中也有这样一段相同的内容如下:

static public function isActivated()
{
    return (gettype(PRODUCT_LICENSE)=="string" && PRODUCT_LICENSE != "")
        || (gettype(NAS_LICENSE)=="string" && NAS_LICENSE != "");
}

当然也要修改为如下内容:

static public function isActivated()
{
    return true;//阻断激活状态的检测
}

破解的思路之一的方法其实是相当简单粗暴的。当然是可达到破解的目的。但这并不是最佳的逆向工程方法。

做完上述的破解后,有兴趣的读者可以自行试试这个破解。以达到学习,研究的目的。

认真分析解读/unas/wmi/core目录下的wy2license.php文件后,我认为这个文件其实是万由激活码算法的比较核心的文件。我会在破解的思路之二的的实施中继续深入讲解有关激活码算法的内容。

第五节
破解的思路之二“自授权激活”的实施

要实现自授权激活首先是要有一个正常的激活码,但我们现在没有这样的一个激活码。因此,我们首先要通过对激活码的算法做破解才行。

认真分析解读wy2license.php文件。我对万由激活码算法的初步理解如下:

万由U-NAS 5.X系统激活码由30个字母数字组合构成。其中不包括“-”,该激活码的第一个字母和最后一个字母是校验位。去掉校验位后,剩下28个字符为激活码的数据项部分。但是为了数据项的加密处理,万由又使用这剩下的28个字符中的前两位,做为“单表加密”(英語:monoalphabetic cipher)的种子。这样实际上万由激活码的数据体只有26 bytes 的字长了。

万由U-NAS 5.X系统的替换表是这个样子滴。
const CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
const CRYPT = '50RW7SL6J2QXCKHZDGOY3TBEI9P81AMVNF4U';
const RADIX = 36; // strlen(CHARS);
它是由10个数字字符和26个英文大写字母字符构成。运算时以36为模。

在讲解26 位字长万由激活码的数据体的结构之前,我要简单为大家介绍一下有关的密码学知识。

凯撒密码[2](英语:Caesar cipher),或称凯撒加密、凯撒变换、变换加密,是一种最简单且最广为人知的加密技术。在公元前 1 世纪由朱利叶斯·凯撒提出。直到19世纪为止,一直被欧洲被外交官广泛使用。凯撒密码是一种替换加密技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以罗马共和时期凯撒的名字命名的,据称当年凯撒曾用此方法与其将军们进行联系。

凯撒密码通常被作为其他更复杂的加密方法中的一个步骤,例如维吉尼亚密码。凯撒密码还在现代的ROT13系统中被应用。但是和所有的利用字母表进行替换的加密技术一样,凯撒密码非常容易被破解,而且在实际应用中也无法保证通信安全。

凯撒密码仅仅是替换式密码[3]的一种特例,替换式密码又名取代加密法,是密码学中按规律将文字加密的一种方式。替换式密码中可以用不同字母数为一单元,例如每一个或两个字母为一单元,然后再作加密。密文接收者解密时需用原加密方式解码才可取得原文本。由于拼音文字中字的组成为有限的字母,以英语为例只有26个字母,组成可能的单元数较少,因此使用替换式密码相对较为容易,而且亦可使用简单机械进行加密;相反,非拼音文字如中文则因单元数非常大难以使用一般加密方式,必需建立密码本,然后逐字替换。更何况某些非拼音文字中字字皆由不同大小的字根来组字,较难转换,因此使用替换式密码的示例比较少。

对于相关的密码学的补充知识就暂时介绍到这里。接着让我们继续讲万由激活码的数据体的结构。这些信息是通过对wy2license.php文件的分析解读得到的。

数据体中的前3位字节为:许可证批号(1~46656)
数据体中的第4,5位字节为:许可证序号(1~1296)
数据体中的第6,7,8位字节为:硬件机型批号(1~46656)
数据体中的第9位字节为:许可证版本(0-测试, 1-评估, 2-CE, 3-PRO, 4-Ent)
数据体中的第10位字节为:许可证适用于UNAS的版本号
数据体中的第11-26位字节为:许可证扩展数据(16个字符,限英数)

具体的激活码算法请读者自行参考wy2license.php文件和前面介绍的密码学知识来学习研究。这里就不赘述了。

根据我对激活码算法的破解,我为大家创建了如下的激活码,每种两个:

0-测试 (Beta 公测版,有日期限制,到期后必须升级才能使用)
Z58H4-07NJM-RQYHU-UV8TV-FFD5T-6MO65
7UYAK-DYXE2-G94AH-HQL5Q-CCVZ5-B2FBT

1-评估 (Evaluation 评估版)
LLDUY-B9GAZ-EVS5T-TGK6G-YYRB6-AD7AO
6HWH4-07NJM-RQ3Z5-5N1BN-44G0B-JVYJ6

2-CE (CE 版,功能上有限制)
SULD5-WL4QN-7CEOW-WUV9U-00379-X4BX1
0N192-CZ6YS-KTN8C-CJ74J-QQAK4-36V3A

3-PRO (PRO 版,功能上没有限制)
HE537-6QRH5-JD1EJ-J75M7-LL92M-DW8DE
86JPQ-KDJ3L-HB4AH-HQL5Q-CCVZ5-B2FB8

4-Ent (Ent 版,使用不同的源码,只能安装定制的软件包)
Q56CN-URML1-5JTD0-0FAEF-UUORE-2N32N
9ERLP-ANI5B-MRZQV-V8EG8-AACNG-WPHWR

好了,现在我们已经有了破解的激活码,接下来就要分析激活过程了。这段代码在/unas/desktop/includes目录中的activate.php文件中。我将有关代码截取下来,以便分析解读。

function activateUNAS($unassn){
        $unas_license= trim($unassn);
        $machines =  getunasmacs();
        $serverconfig = GetActivateServerUrl();
        $server = ( $serverconfig == false) ? constant("ACTIVATE_SERVER_URL") : $serverconfig;

        $data = json_encode(array(
                "cmd" => "license_activate2",
                "params" => array(
                        "license" => $unas_license,
                        "nicmacs" => getunasmacs()
                )
        ));

        $activate_request = curl_init();
        curl_setopt($activate_request, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($activate_request, CURLOPT_TIMEOUT, 500);

        // Used for test.
         curl_setopt($activate_request, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($activate_request, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($activate_request, CURLOPT_URL, $server);
        curl_setopt($activate_request, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Content-Length:' . strlen($data)));
        curl_setopt($activate_request, CURLOPT_POSTFIELDS, $data);

        $info = curl_exec($activate_request);
        curl_close($activate_request);

        if ($info === false){
                return ACTIVATE_NETWORK_FAILURE;
        }else{
                $activate_success_data = json_decode($info, true);
                if ($activate_success_data["err"] !== 0){
                        return ACTIVATE_FAILURE;
                }else{
                        $product_php = base64_decode($activate_success_data["results"]["product_php"]);

            exec("/usr/bin/sudo chown www-data:www-data " . ACTIVATE_FILE);
            exec("/usr/bin/sudo chmod 644 " . ACTIVATE_FILE);
             file_put_contents(ACTIVATE_FILE, $product_php);

            $SNAP_CMD="sudo /unas/sbin/snapshot.sh";
                        exec($SNAP_CMD);
                        return ACTIVATE_SUCCESS;
                }
        }
}

在这段代码中的如下代码解读:

$serverconfig = GetActivateServerUrl();
$server = ( $serverconfig == false) ? constant("ACTIVATE_SERVER_URL") : $serverconfig;

该代码是为了获取万由在线激活授权服务的URL。它有两个来源,其中之一是由/unas/etc/desktop目录中的sconfig.json文件定义的。如果没有该定义,则使用硬编码的URL: https://activate-amalthea-pro.u-nas.cn/ksi/做为在线激活授权服务器。

然后通过http协议POST请求激活授权,它传递的json数据由如下的代码来生成:

$data = json_encode(array(
        "cmd" => "license_activate2",
        "params" => array(
                "license" => $unas_license,
                "nicmacs" => getunasmacs()
        )
));

我使用网络抓包工具截获的POST请求激活授权的json数据是这个样子滴。

{"cmd":"license_activate2","params":{"license":"HE537-6QRH5-JD1EJ-J75M7-LL92M-DW8DE","nicmacs":["08: 00: 27: D8: 5C: D6"]}}

让我来解释一下它的意义,它请求使用授权服务器URL中的license_activate2操作对参数为许可证":"HE537-6QRH5-JD1EJ-J75M7-LL92M-DW8DE"和网卡的MAC地址为"08: 00: 27: D8: 5C: D6"这样的一个请求进行激活授权。至于服务器是否给与授权,那就要看服务器一侧是否认可这个请求了。

如果服务器予以认可,从对activate.php文件的分析中可以看到如下代码:

$product_php = base64_decode($activate_success_data["results"]["product_php"]);

让我再来解释一下它的意义,从服务器返回的授权数据一定是base64_encode的数据,需要做base64_decode才能使用。从代码的变量名称可以猜测到,这段数据与product.php文件密切相关。

使用网络抓包工具截获的授权返回json数据是这个样子滴。

{"err":0,"results":{"product_php":"Nzk1ODEzNTg2NDljZjcxZTY1OAAAAAAAAAAAAAAAAADtpULLeH6tjJUI8VaHVMsHr9GiPADJJGFh74k\/Uwvt4K6YrFDJ26OdhylTkcQSqUF5uYnPBlypsJi9g0dFlLC6Q5A7S1G67ZpNg1BwJmyCZl6GEPdDmsY\/yE4dI5\/onwavgxwWwz9lWKD7JlJXcgmIKhcd8iLhut1ZB8kOB73Lyr2rHh1XTyxn\/SON0xpFa\/beDyqmDh42opadUNZdyW7P0PFDJ5fhRG1R4EgIv6jzgbph0gUBucWDszo76gQoXA1bV7G5siCPUbx7NvA3O48Vyr7g0V9YLv0kr4WdRpbHAryNM4mbXYupZn+fJGkbtU6IRGJVfEVpdSuu0SIfgO0YvLhTd2GdohPHkdUox4XScJePIBMzqsXOflr7ga31U1MGaj+ajNklMs0Gs3qojowVhPwxvF80gzSHtXAPlwdnt\/hqlt8j+Lo\/gSghIy5s+Qpf3BbCuEn2OCznCOuT8hGaHWBIkPiB2jBAjpsGCaaV+m7mbMinhgkpcqIwI6jvIKdXR4KItiuHqBw+zFAGHmEGKeG3gRXcuyDN9P5cstz7sFfzOxnamlVLfd+6yOxl\/cBcX6gytscd\/nKFaYH3Ns6mwqFpabXmzh8mSCrLsSakT0gY0wuUpmfq\/aGL8JJx7CILalcb\/77oisGPg1mSbselxX0\/YMksfMpeEVMxl482QsAC+9gMmQIzw0OVcxkVC8QKbmbknbKFv2tvNFkEhELulVEaTniAckAHvQG\/FTS0h58TNiKivLGUIr9gDkEqYhvGhtSeFWdui9VjoOYb9Q0mSKc2gJYqi+QtZvM9K5sFNZkTN\/l3OrZ3uW5bEpbII7kKf6iJuxPF2VfGTQVlBsmE7mcaNpovw30jPgt8HXRxSStm6uV2TY+UHXWZFpmu\/U8="}}

数据中"err": 0表示成功激活,并返回使用base64_encode编码的"product_php"数据。当然万由也已经对它实施了加密处理。处理的方法仍然是通过php_screw_plus加密。使用的是在/unas/sbin/目录中的unas-encrypt程序。这些数据将会保存到位于/unas/sbin/目录中的product.php文件中。

好了到现在为止,我们已经了解了整个万由在线激活授权过程。当然就可以开始实施破解的思路之二的“自授权激活”了。

我的具体的实施方法是:
1.        利用/unas/etc/desktop目录中的sconfig.json文件,将在线激活授服务器重定向到localhost本机的web服务来实现自授权。它的内容如下:
{ "UConfig":"http://localhost/etc/desktop/license_activate2.php" }
2.        编写一段license_activate2.php程序用来解析http协议的激活请求数据,并生成返回授权数据。我写的这段程序比较长,就不在文章中发源代码了。但读者可以在安装我的自授权破解补丁包后,自行分析,学习和研究。
3.        为了方便大家使用,我为大家制作了一个破解补丁安装包: self-acvtive-unas_5.1.2_amd64.deb。这是一个标准的Linux系统的dpkg 包。

第六节
万由U-NAS 5.1.2自授权激活的实践

根据上一节的讲解,我为大家制作了一个破解补丁安装包。这一节讲讲如何使用这个补丁包。下面给出它的百度网盘的提取地址。

游客,如果您要查看本帖隐藏内容请回复
我创建的这个自授权的激活补丁包。目前已在万由的UNAS 5.1.2系统反复测试过。为了方便大家使用。我为大家制作的是一个Linux标准的deb安装包: self-acvtive-unas_5.1.2_amd64.deb

当你使用万由的UNAS 5.1.2系统的ISO安装盘创建启动盘后。开始用浏览器连接UNAS 5.1.2系统时,就会提示你请输入激活码。请参见第一节中的截图。

这是因为如果你使用非万由的硬件,就会提示你需要激活码进行在线激活才能开始使用系统。如果你安装了我的破解补丁包: self-acvtive-unas_5.1.2_amd64.deb,就可以使用任何的合法激活码来激活系统。不论是万由提供的激活码,还是我破解激活码算法提供的激活码。也不论是联网或断网状态,都是可以激活系统的。但先决条件是你要先安装我的破解补丁包。

在第二节中我已经讲解了如何开放root账户使用sshd服务的方法。

你需要上传我的破解补丁包。可以使用windows的pscp.exe命令。也可以使用Linux系统的scp命令。当然也可以使用其它工具,例如WinSCP图形界面工具。

必须使用root账户上传和安装破解补丁包。还要知道当前万由NAS机器的IP是什么。启动万由U-NAS系统后,控制台会提示你当前NAS机器的IP地址。

上传self-acvtive-unas_5.1.2_amd64.deb破解补丁包到/root/目录。你可以使用如下命令:
# scp self-acvtive-unas_5.1.2_amd64.deb root@YourIP:/root/

也可以使用WinSCP图形界面工具,请看截图:
008.jpg

如果要查看破解补丁包的信息,你可以使用命令: dpkg -I self-acvtive-unas_5.1.2_amd64.deb
如果要查看破解补丁包的内容,你可以使用命令: dpkg -c self-acvtive-unas_5.1.2_amd64.deb

安装破解补丁包请使用如下命令:
# dpkg -i self-acvtive-unas_5.1.2_amd64.deb。

这时你就可以回到浏览器,输入激活码进行激活了。就是这么简单啊。请看截图:
009.jpg

点击“激活”按钮,稍后片刻,万由系统就激活了。请看截图:
010.jpg

登录后查看系统信息的截图:
011.jpg

012.jpg

我在这里预祝大家通过这个万由U-NAS系统的破解范例,对于学习,研究逆向工程有更进一步的提高。

最近,万由推出了U-NAS_Kepler_6.10.0系统,我的这个万由U-NAS 5.1.2自授权激活补丁包目前不能用于万由U-NAS 6.10.0的系统。原因当然是不言自明了。万由U-NAS 6.10.0系统对激活码这一部分的处理做了一些加强反破解的提升。

我想大多数的坛友们对万由U-NAS 6.0激活方法逆向工程肯定是更期待,更有兴趣吧。那么,就请看下一章吧,精彩继续。

由于NASYUN的篇幅限制,请看楼下,第二章 【万由U-NAS 6.10激活方法逆向工程】,精彩继续!
回复 支持 反对 印象

使用道具 举报

f541883216 发表于 2025-1-7 02:59 来自 加拿大
第二章
万由U-NAS 6.10激活方法逆向工程

固件资源是:U-NAS_Kepler_6.10.0.20240726-2100.iso这个版本。我是从朋友处获得的。据朋友讲,他是从“淘宝”购买的。请读者自行想办法相互交流取得该文件。以便学习,研究共同提高。
在万由的内测群中还看到,有些其它的版本在陆续放出。但我的文章是基于U-NAS_Kepler_6.10.0这个版本写的。我认为其它版本应该是大同小异吧。

第一节
万由U-NAS 6.10的安装与破解

在获得U-NAS_Kepler_6.10.0.20240726-2100.iso 这个版本的安装盘后,我还是和 U-NAS 5.0一样用VirtualBox虚拟机来做万由U-NAS 6.10的安装破解。
万由U-NAS 6.10这个版本自称对激活码这一部分的处理做了一些加强反破解的提升,但它毕竟属于万由U-NAS的系列产品。它的内核也升级到了 Debian 5.10.221-1 (2024-07-14) x86_64 GNU/Linux。
在虚拟机的安装方法与U-NAS 5.0并无区别,我就不在这里赘述了。具体的操作步骤和截图,读者可以参考第一章“万由U-NAS 5.0激活方法逆向工程”第一节的内容。

有关破解的思路也没有变,依然是与U-NAS 5.0 破解相同的两种思路。这里也赘述了。

本文的重点将放在万由U-NAS 6.10 与U-NAS 5.0 的不同之处上做详细的分析和讲解。并最终给大家一个与U-NAS 5.0 相似的万由6.10.0系统激活破解补丁包。让大家可以学习,研究逆向工程。做为教学范例体验激活万由的U-NAS  6.10.0系统。

万由U-NAS 6.10 的Web服务依然使用apache2。万由U-NAS 6.10的Web服务的根目录位置也依然是: "/unas"。查找方法请参见第一章,第二节的内容。万由U-NAS 6.10的Web服务管理界面主要也是用php程序写的。而且也对php程序做了screw_plus加密处理。请参见第一章,第三节的内容。

不同之处是万由U-NAS 6.10 的php版本升级到了:php 7.4 版。screw_plus加密扩展库的位置为:/usr/lib/php/20190902/php_screw.so 库中隐藏的密码也变了。还是老办法,直接使用如下命令objdump -s -j .rodata php_screw.so来查看密码。

$ objdump -s -j .rodata php_screw.so
php_screw.so:     file format elf64-x86-64
Contents of section .rodata:
5000 656e6162 6c656400 7068705f 73637265  enabled.php_scre
5010 775f706c 75732073 7570706f 72740030  w_plus support.0
5020 2e313100 7068705f 73637265 775f706c  .11.php_screw_pl
5030 75732076 65727369 6f6e0025 30327800  us version.%02x.
5040 41434345 53532044 454e4945 44002e70  ACCESS DENIED..p
5050 68617200 70686172 3a2f2f00 73686f77  har.phar://.show
5060 5f736f75 72636500 68696768 6c696768  _source.highligh
5070 745f6669 6c650072 62007068 705f7363  t_file.rb.php_sc
5080 7265775f 706c7573 00312e35 2e300041  rew_plus.1.5.0.A
5090 50493230 31393039 30322c4e 54530000  PI20190902,NTS..
50a0 4b336a30 3864306f 6f645733 705a4b78  K3j08d0oodW3pZKx
50b0 6a773561 36374579 6f646961 69454657  jw5a67EyodiaiEFW
50c0 33543233 6a69394b 4b653232 00000000  3T23ji9KKe22....
50d0 00002000                            .. .            
万由U-NAS 6.10 的php密码是: "K3j08d0oodW3pZKxjw5a67EyodiaiEFW3T23ji9KKe22"。

另外,它的激活码处理php代码中 $wylic = new WYLicense(); 这个class object是来自 extension=/unas/lib/nascore/libncphpext.so这个二进制扩展库了。而不是使用php程序的脚本代码了。

作者点评之一:万由U-NAS 6.10系统的设计者可能认为,引进二进制扩展库代码比php加密脚本代码更难破解吧。其实这是一个他们设计思想的误区。对于有经验的逆向工程专业人员来说,这根本就不是什么障碍。破解php加密脚本代码与破解二进制扩展库代码相比并没有质的差别。

另外,万由U-NAS 6.10系统还增加了如下这些驻机agent deamon服务:
/unas/sbin/ncagent --cfg /unas/etc/ncagent/config.json
/unas/sbin/ncserver --cfg /unas/etc/ncserver/config.json
/unas/sbin/agentaccount --cfg /unas/etc/useraccount/config.json
/unas/sbin/agentlvm --cfg /unas/etc/lvm/config.json
/unas/sbin/agentraid --cfg /unas/etc/raid/config.json
/unas/sbin/appmanager --cfg /unas/etc/appmanager/config.json
/unas/sbin/systemupgrade --cfg /unas/etc/systemupgrade/config.json

万由U-NAS 6.10的php脚本代码会通过socket与这些驻机agent deamon服务交互操作实现一些功能。当然这其中就包括激活码的授权处理。所以我的万由U-NAS 5.1.2自授权激活补丁包就不能用于万由U-NAS 6.10.0的系统了。但是我仍然可以通过逆向工程的方法再为万由U-NAS 6.10做一个自授权激活补丁包啊。这对我来说就是小菜一碟嘛。

第二节
万由U-NAS 6.10破解的思路之一“阻断激活状态的检测”的实施

对于万由U-NAS 6.10系统,我们依然可以通过阻断激活状态的检测实施破解。但与万由U-NAS 5.1.2的php破解代码就有些不同了。

直接上干货。也是在/unas/wmi/目录下的这个unasutils.php文件。解密后的代码有这样一段内容如下:

function isActivated()
{
    $request = [
        "cmd" => "wylicense_info",
    ];
    return UnasLpcRequest('.ls.nascore.agent.', $request, $retObject)
        && $retObject->err == ERR_SUCCEED;
}

这段代码与万由U-NAS 5.1.2的php代码就非常不同了。它通过socket向ncserver这个驻机的agent deamon服务发出一个请求,要求得到当前系统的激活状态信息。那么如何阻这样的断激活状态的检测呢?我就把它直接修改为如下内容,就可以实现阻断激活状态的检测了。

function isActivated()
{
    $respond->err = ERR_SUCCEED;
    return true;
}

除了这个文件之外,也还有另一个文件/unas/wmi/cmds目录中的unas_activated.php文件。解密后的代码有这样一段内容如下:
function unas_activated()
{
    // 引入全局变量,此处不要修改
    global $request;
    global $respond;
    {
        require_once(dirname(__FILE__) . "/../common/upgrade_common.php");
        $request->cmd = "wylicense_info";
        // TODO: 请在此处添加真实业务逻辑代码
        if ( UnasLpcRequest('.ls.nascore.agent.', $request, $retObject) )
        {
            $respond = $retObject;
        }else
        {
            $respond->err = ERR_REQUEST_FAILED;
        }
    }
    return true;
}

可以看到,这段代码也用相同的方法检测系统的激活状态。当然也要修改代码做阻断处理如下:

function unas_activated()
{
    // 引入全局变量,此处不要修改
    global $request;
    global $respond;
    $respond->err = ERR_SUCCEED;
    return true;
}

破解的思路之一的方法与万由U-NAS 5.1.2是一样的也是简单粗暴的。当然是可达到破解的目的。但这也不是最佳的逆向工程方法。

做完上述的破解后,有兴趣的读者可以自行试试这个破解。以达到学习,研究的目的。

作者点评之二:万由U-NAS 6.10系统看似加强了激活码的反破解难度,还增加了驻机的agent deamon服务来做激活状态的检测。其实根本没有这个必要,破解的难度也没有增加啊。暴力破解直接可以绕过这些agent deamon。反而是,这些驻机的agent deamon平白无故地提高了系统的开销,影响系统的效率不说,还有可能出现更多的bug,开发的时候调试难度也增加,系统的稳定性会大打折扣。这是不是有点得不偿失呢?请读者们自行评论吧。

第三节
万由U-NAS 6.10破解的思路之二“自授权激活”的实施

万由U-NAS 6.X系统激活码由25个字母数字组合构成。比U-NAS 5.X短了5给字符。但算法并没有质的改变。只是将数据体中的许可证扩展数据从16个字符减少为11个字符了。可能是暂时决定没有必要保留这么多的扩展数据吧。据说也有人拿到的测试版本给的是30个字母数系统激活码。总之,现在比较混乱。但笔者猜想区别就是许可证扩展数据的差异吧。

算法程序也从加密的php脚本代码中移除了,把它放到了/unas/lib/nascore目录的libnccore.so动态链接库中去了。这个动态库是依赖Qt5开源项目开发的。它的二进制代码反汇编可以直接生成非常易读的伪代码。逆向工程分析起来也非常容易。

根据我对万由U-NAS 6.X系统激活码算法的破解,我为大家创建了如下的万由U-NAS 6.X激活码:

LJ61A-V4B8J-ZEF6I-QE0DN-KVH4R
PGBMV-F5IAQ-G9U2P-C9WO4-ZFD5N
7EWKH-DY6CA-5JO12-VJB0G-4DUYB
PRSBE-91DTR-2G80O-7GVQP-69J1C
G9YQX-KD72P-FSZ9L-1SY4H-VKNDK
BZVF4-5W8NK-31RCA-Z1LT0-O5YWM
BO6F4-5W8NK-31RCA-Z1LT0-O5YW2
LXS1A-V4B8J-ZEF6I-QE0DN-KVH4W
GIPQX-KD72P-FSZ9L-1SY4H-VKNDY
7SQTB-I8Z30-JDP5G-WDM29-LI68U

这些激活码都是我分析解析了算法后为大家创建的。在万由U-NAS 6.X系统的激活码数据库中应该是没有的。当然也许碰巧与万由激活码数据库中的巧合对应上了。这种可能性也是有的。

有关激活码的细节,请参考第一章,第五节的内容。这里就不赘述了。

还是直接上干货,让我们来看看动态库libnccore.so中WYLicense::activate() 函数的反汇编伪代码片段。

    v138 = QString::fromAscii_helper((QString *)"http://reg.u-nas.com/license/", (_BYTE *)&off_18 + 5, v62);
    v63 = curlHttpPost(&v134, v107, &v133, &v119);
    QString::~QString(v107);
    if ( v63 )
    {
      v138 = QString::fromAscii_helper((QString *)"err", (_BYTE *)&dword_0 + 3, v64);
      v65 = QJsonObject::contains(&v134, v107);
      QString::~QString(v107);
      if ( v65 )
      {
        v136 = (volatile signed __int32 *)QString::fromAscii_helper((QString *)"err", (_BYTE *)&dword_0 + 3, v66);
        QJsonObject::value(v107, &v134, &v136);
        v67 = toInt(v107);
        QJsonValue::~QJsonValue(v107);
        QString::~QString(&v136);
        if ( !v67 )
        {
          QString::fromAscii_helper((QString *)"results", &byte_7, v68);
          QJsonObject::value(v107, &v134, &v136);
          QJsonValue::toObject(&v135, v107);
          QJsonValue::~QJsonValue(v107);
          QString::~QString(&v136);
          v136 = (volatile signed __int32 *)QString::fromAscii_helper((QString *)"content", &byte_7, v69);
          QJsonObject::value(v107, &v135, &v136);
          QJsonValue::toString(&v120, v107);
          QJsonValue::~QJsonValue(v107);
          QString::~QString(&v136);
          QString::toUtf8_helper(v107, (const QString *)&v120);
          QByteArray:: fromBase64(&v121, v107);
          QByteArray:: ~QByteArray(v107);
          FS2Aes::FS2Aes((FS2Aes *)&v136);
          QByteArray:: QByteArray(v107, "Wanyou#UNAS7(2007-2024),1909+1910Room/535-CaoyangRdShanghaiChina", -1);
          FS2Aes::setKey((FS2Aes *)&v136, v107);
          QByteArray:: ~QByteArray(v107);
          FS2Aes::decrypt(&v122, &v136, &v121);
          v70 = (signed __int64)&v122;
          QJsonDocument::fromJson(&v123, &v122, &v124);

从反汇编伪代码片段中可以看到:

授权服务器URL地址:http://reg.u-nas.com/license/
使用http协议的post请求函数curlHttpPost。
返回的json数据检查"err",如果成功则获取"content"的数据。
对content"的数据做QByteArray::fromBase64解码。
使用"Wanyou#UNAS7(2007-2024),1909+1910Room/535-CaoyangRdShanghaiChina"这个密钥处理加密的返回数据。

看到了吧,破解的难度增加了吗?显然是没有吗。反而是更加精炼易读了。

当然还要一些其它的相关反汇编伪代码了。我就不在文章中逐一贴出片段了。有兴趣的读者可以自行分析研究。我这里只把分析的结果告诉大家。

万由U-NAS 6.X系统的激活数据存储与两个文件有关。它们都在/unas/etc/system目录中。这两个文件是:license.cert 和system.cert。这两个文件都是加密的。而且还使用了不同的密码。加密算法为:aes-256-ecb。而万由U-NAS 5.X系统的激活数据是存储在加密的位于/unas/sbin/目录中的product.php文件中。当然内容是不同的。但二者没有本质上的区别。

这里有必要先为大家介绍一些有关的密码学的补充知识。

AES(Advanced Encryption Standard)是一种对称加密算法[4],它是目前广泛使用的加密算法之一。AES算法是由美国国家标准与技术研究院(NIST)于2001年发布的,它取代了原先的DES(Data Encryption Standard)算法,成为新的标准。AES是一种对称加密算法,意味着加密和解密使用相同的密钥。这就要求密钥的安全性非常重要,因为任何拥有密钥的人都能进行加密和解密操作。其密钥长度,包括128位、192位和256位。不同长度的密钥提供了不同级别的安全性,通常更长的密钥长度意味着更高的安全性。
该算法支持多种工作模式,其中两种常见的模式是CBC(Cipher Block Chaining)和ECB(Electronic Codebook)。

1.CBC 模式(Cipher Block Chaining):
*工作原理:
CBC模式对每个明文块进行加密前,先与前一个密文块进行异或操作。首个块使用一个初始化向量(IV)与明文异或。这种链式反馈机制使得每个密文块的加密都依赖于前一个块的密文,从而增加了安全性。
* 特点:
带有初始化向量,对同样的明文块加密得到的密文块会随着其前面的明文块的不同而不同。
适用于加密长度超过一个块的数据。
* 优点和缺点:
优点:提供更高的安全性,适用于加密大块的数据。
缺点:由于加密是依赖于前一个块的密文,所以无法进行并行加密处理。

2.ECB 模式(Electronic Codebook):
*工作原理:
ECB模式将明文分割成块,每个块独立加密,然后再组合成密文。相同的明文块将始终加密为相同的密文块。
*特点:
不需要初始化向量,同样的明文会得到同样的密文。
适用于加密独立的数据块,但对于相同的块,ECB模式下的输出相同。
*优点和缺点:
优点:简单,易于实现。
缺点:相同的明文块生成相同的密文块,可能导致安全性问题。不适用于加密大块的数据。

在选择模式时,需要根据具体的应用场景和需求权衡安全性和性能。一般来说,CBC模式是更安全的选择,而ECB模式可能更容易实现和理解。万由U-NAS 6.X系统使用的是ECB模式和256位密钥长度。称为:aes-256-ecb。

接下来让我们先使用OpenSSL这个工具看看这两个文件license.cert和system.cert的内容吧。当然license.cert是需要激活以后才产生的。

输入如下命令可以查看license.cert的内容:

root@UNAS96N1J7CCS:~# openssl enc -d -aes-256-ecb -in license.cert -K "57616E796F7524554E41533728323030372D32303234292C313930392B313931"
{"activated":1,"date":"2024-11-04","expirydate":"2029-10-09","expirydays":1800,"feature":{"device":{},"expirydate":"2029-10-09","expirydays":1800,"license":"BZVF4-5W8NK-31RCA-Z1LT0-O5YWM","model":"","osinfo":{"activatables":[],"build":"2024.07.26-2100","date":"2024-07-26","description":"","edition":"U-NAS 6.10.0 Kepler Build 2024.07.26-2100","licenses":[],"major":6,"product":"U-NAS","serialnos":[],"spec":"","time":1722498765,"variety":20,"version":"6.10.0","virtualmachine":false,"vmachine":false},"signets":{},"trial":1,"variety":20,"ver":3,"wwns":["00E04C68009C","5254001B1159"]},"machine":{},"official":false,"time":"2024-11-04 11:19:12","timestamp":1730747952,"trial":1,"variety":20}

作者点评之三:Openssl工具的参数-K 是对称密钥。它就放在动态库libnccore.so中。但不知为什么它是64字节的。解密license.cert的密钥是:"Wanyou$UNAS7(2007-2024),1909+1910Room/535-CaoyangRdShanghaiChina"。但实际上aes-256-ecb 模式只需要这个字符串的前32个字符的ASCII码的 HEX而已。万由这样做是想迷惑逆向工程的专业人员吗?还是动态库libnccore.so的开发人员与php代码的开发人员缺乏很好的相互沟通呢?总之,这应该是动态库libnccore.so的bug吧。有经验的逆向工程的专业人员一眼就能看出破绽的。就算把密钥隐藏在动态库中,有经验的逆向工程的专业人员提取密钥也不费吹灰之力。

输入如下命令可以查看system.cert的内容:

root@UNAS96N1J7CCS:~# openssl enc -d -aes-256-ecb -in system.cert -K "57616E796F7523554E41533728323030372D32303234292C313930392B313931"
{"activatables":[],"description":"","edition":"Kepler","licenses":[],"major":6,"product":"U-NAS","serialnos":[],"time":1722498765,"variety":20,"vmachine":false}

解密system.cert的密钥是:"Wanyou#UNAS7(2007-2024),1909+1910Room/535-CaoyangRdShanghaiChina"。只有一个字符的差别。可别小看这一个字符的差别,AES算法是非常安全的。失之毫厘差之千里啊,一个字符的差别就会造成无法解密成功的。

在system.cert文件中有个json参数定义:"vmachine": false。笔者分析认为是这个参数限制了万由U-NAS不可以在虚拟机上激活。有兴趣的读者可以修正这个参数为"vmachine":true试试。我没有做这个实验,我在后面的章节还会专门介绍其它的在虚拟机上激活的办法。

在system.cert文件中还有个json参数定义:"activatables":[]。笔者已经把这个参数的数组(array)修正为空。让万由U-NAS可以接受任意的合法激活码。如果把这个参数改为"activatables": [ "BZVF4-5W8NK-31RCA-Z1LT0-O5YWM" ],那么该系统就只是使用这个激活码了。其它的激活码都会被视为许可证不可用。这个参数是一个数组,你也可以在这里指定一组激活码。例如:"activatables": ["BZVF4-5W8NK-31RCA-Z1LT0-O5YWM","LJ61A-V4B8J-ZEF6I-QE0DN-KVH4R"," PGBMV-F5IAQ-G9U2P-C9WO4-ZFD5N"]。

接下来让我们继续使用网络抓包工具截获的POST请求激活授权的json交互数据。为实现“自授权激活”的编成做好准备工作。

激活请求包的json数据是这个样子滴。

{"cmd": "license_activate","params": {"license": " BZVF45W8NK31RCAZ1LT0O5YWM ","osinfo": {"activatables": [],"build": "2024.07.26-2100","date": "2024-07-26","description": "","edition": "U-NAS 6.10.0 Kepler Build 2024.07.26-2100","licenses": [],"major": 6,"product":"U-NAS","serialnos": [],"spec": "","time":1722498765,"variety": 20,"version": "6.10.0","virtualmachine": false,"vmachine": false},"signets": {},"vm": 0,"wwns": ["00E04C68009C","5254001B1159"]}}

这个请求包显然比万由U-NAS 5.X的激活请求包向授权服务器传送了更多的关于U-NAS 6.X的请求信息。授权服务器将会根据这些信息,决定是否给与激活。但对于我要做的“自授权激活”而言,这些数据就无关紧要了。

那么授权激活返回包的json数据是什么样子呢?它是这个样子滴。

{"err":0,"results":{"content":"nH98CygcVLPPgcfejHOlW6MV82poKrmZdK20XPUt+Ypo\/I3sElWiSmkGvLSJqtN5GjqfiDxeoLjZBd1qBd4+VnH1EOPsFU9f5fzkFtkxmlG838lJ1x\/8vEeFLpEnL3HvQ1AJABp\/N4q\/epdsIFu5zcRrtNLk8s0o7cM8H5EKkxjY10VHLKGgMtnUPcn5HbAlmq4Xtrdybz8QrUiTPelkmqsmkkPjYPkDu\/lZK9ltDi1RETLF\/DJxmEKIhiPsWzvp0HkQsJQABBbi3hjsEooeOj3rTVBcLMRjlYlMm+M4NMooPz15IAGZ4NIZRN\/wCk9N99Tm1snreCN28hiEZJVhJIcEkX0MZRc5Gbwjz9uqrOg\/yF08u5pmUKyPOD8QqP2XMmGRlDX0PpTLMtIof1Lnk\/7vrlLR1RRMJgf7yIXnLi7xMPxqjMU\/oJ1wIFwWMlqtoBZet5EkB90TFqTeAEi3ELcipp08e3kw8mVOQLeO83qr8tU+HlIC8x5tUNbBsnZliCfuhzaij7MEwC2FxurfBHBp54dPYJBCFezbM5pIXvOLazDOzUP\/+gULhaQuFE77nD7uzI9lNmMcOofssBUvUcnCQxqHHhRARZE\/zQOvdq3LcnLB+PRKhW6TTUOXNlmoniUXY88YnQsR+qQH55QOltEotbg2FWaawYulvCRii78rWIn5y7H4eK\/VbaI7Fr1GYl2g0bDqRJ\/+mbajgJUJlNDJZ4+jn0tWjBrxo67odl3+a8NGowWkfFIlgdogfJC9\/lXRiye2CMZOJZPvv+ZDqWbO2+mcuj0m\/hYm4PQw4z9eWR0czu3sho9NYEynA5THgQbYHCznFV61xQBkq9I21EkhEoRqeXCgCtFW0hbD0TYPItAm3MPC+IIGNS0sjmMtY43TltqzwF1CH35tBfHfOI4ktNjs\/XuTZdIAWRPKbQLT63uTlcwdfV0Rct8BXcAz0d0ydnCxGXNdN8uEdk\/+FxgP9FEv0y+Au+88GKMq0r8E3S2v71LnxB0SqB+ZfMr++ezeNAgjs+uPTaa9Lj0nG01dvABRr\/LDBQBUQ\/GOZVZ1iyPlPC7QQVxEYjpPOHfg3FJVkcMF+WxpKnR5N2KC5s+mGE9QZeul5K8KIltB3jqSU+1ZjIpvOvKRX2dXLx17tFKDHX5Ea2hpPcQxT8aJvgdN0zvDwwECFdewDp\/4Ni\/H1snjAm2ostJ1HpS33ktNJ9l5E9Ib05m5eumtx\/yMTDExDgs9w9HlV5iI5iX81Wh1lEQLk0dwLTpkxS7Hxqsn2H0mNIesbH4rfWJB54aK1ng5g5O78+NQnQnePf1RfAQ="}}

这个授权激活返回包中的json参数:"err":0表示授权激活成功。"results"=>"content"中的数据是based64编码的加密数据。根据前面对动态库libnccore.so中WYLicense::activate() 函数的反汇编伪代码的分析结果。我们需要先对"content"的数据做based64解码,然后再使用"Wanyou#UNAS7(2007-2024),1909+1910Room/535-CaoyangRdShanghaiChina"这个密钥处理加密的返回数据。其实密钥只用了"Wanyou#UNAS7(2007-2024),1909+191"这一部分而已。请参见前面的作者点评之三。解密后的json数据是这个样子滴。
{
    "already": 0,
    "batch": 11,
    "crtstamp": "2024-10-26 17:52:41.053+08",
    "crttime": "",
    "dispense": "20241101销售",
    "dispensetime": "2024-11-01 14:05:47.665+08",
    "endstamp": "2049-12-31 23:59:59+08",
    "expirydate": "2025-11-22",
    "expirydays": 361.82300925925927,
    "firstactivate": "2024-11-25 04:14:52.097+08",
    "frequency": 4,
    "index": 36,
    "ip": "103.151.173.91",
    "iplocation": "[内网IP]XXXXXX",
    "lastactivate": "2024-08-25 04:14:52.097+08",
    "license": "BZVF4-5W8NK-31RCA-Z1LT0-O5YWM ",
    "licno": 10044,
    "oprtime": "",
    "osinfo": {
        "activatables": [],
        "build": "2024.10.26-2100",
        "date": "2024-10-26",
        "description": "",
        "edition": "U-NAS 6.10.0 Kepler Build 2024.07.26-2100",
        "licenses": [],
        "major": 6,
        "product": "U-NAS",
        "serialnos": [],
        "spec": "",
        "time": 1722498765,
        "variety": 20,
        "version": "6.10.0",
        "virtualmachine": false,
        "vmachine": false
    },
    "prdid": "",
    "prdmajor": 0,
    "prdversion": "",
    "remark": "",
    "signets": { },
    "sn": "",
    "startstamp": "2024-03-01 00:00:00+08",
    "state": 0,
    "tstgrade": 0,
    "variety": 20,
    "ver": 3,
    "wwns": [
        "00E04C68009C","5254001B1159"
}

作者点评之四:这个激活授权返回包的json数据中有一个"ip": "103.151.173.91"地址。我以为是我的代理VPN公网ip地址。于是我查了一下我的代理VPN。因为代理是动态ip我并不担心有ip泄露的问题。但是我发现这个ip并非来自我的代理VPN网段,这就让我比较奇怪了。于是我做了一下IP LOOPUP发现这个ip定位在韩国的首尔。这个IP既不是我的,也不是万由授权服务器reg.u-nas.com (47.75.190.145)的。有点不理解为什么会有这个ip在激活授权返回包之中。不过对于我编写自授权服务的程序而言也无关紧要,我可以硬编码复制它。只是不理解,也无法猜想这个ip为什么会出现的这里而已。

有了上述的分析准备,我们已经了解了万由U-NAS 6.X的在线激活授权过程。我们就可以开始实施破解的思路之二的“自授权激活”了。

具体的实施方法是:
1.修改动态库libnccore.so中授权服务器URL的地址,把它重定向为:http://localhost/wmi/lic.php。
2.编写一段lic.php程序用来解析http协议的激活请求数据,并生成返回授权数据。我写的这段程序是不加密的,有些地方是hardcode硬编码。读者可以在安装我的自授权破解补丁包后,自行分析解读,学习和研究,也可以随意改动调整。正如我前面提到过的,目前万由U-NAS6.X的测试版比较混乱,所以我给读者们留下了一个可以二次开发调整的空间,以适应测试版的变化。
3.为了方便大家使用,我为大家制作了一个破解补丁安装包:self-acvtive-unas_6.1.17_amd64.deb。这是一个标准的Linux系统的dpkg 包。

由于NASYUN的篇幅限制,请看楼下,第四节 【万由U-NAS 6.10.0自授权激活的实践】,精彩继续!
回复 支持 反对 印象

使用道具 举报

f541883216 发表于 2025-1-7 02:59 来自 加拿大
第四节
万由U-NAS 6.10.0自授权激活的实践

根据上一节的讲解,我为大家制作了一个破解补丁安装包。这一节讲讲如何使用这个补丁包。下面给出它的百度网盘的提取地址。
游客,如果您要查看本帖隐藏内容请回复
我创建的这个自授权的激活补丁包。目前已在我万由的U-NAS 6.10.0系统反复测试过。但是,据说万由U-NAS 6.10.0系统在“淘宝”购买时会在system.cert文件中放入定制的激活码,来限制大家相互交流固件资源U-NAS_Kepler_6.10.0.20240726-2100.iso文件。我在为大家制作破解补丁安装包的时候,已经考虑到了这个问题。并对system.cert文件中的json参数做了修正。因为我只有一个U-NAS_Kepler_6.10.0.20240726-2100.iso文件做测试。如果读者测试中发现我的破解补丁包有问题,可以告诉我,我们共同调试和修正。

当你使用万由的U-NAS 6.10.0系统的ISO安装盘创建启动盘后。开始用浏览器连接万由U-NAS 6.10.0系统时,就会提示你请输入激活码。请参见截图。
013.jpg

这是因为如果你使用非万由的硬件,就会提示你需要激活码进行在线激活才能开始使用系统。如果你安装了我的破解补丁包:self-acvtive-unas_6.1.17_amd64.deb,就可以使用任何的合法激活码来激活系统。不论是万由提供的激活码,还是我破解激活码算法提供的激活码,都是可以激活系统的。但先决条件是你要先安装我的破解补丁包。

与万由U-NAS 5.X相同,在第一章,第二节中我已经讲解了如何开放root账户使用sshd服务的方法。

你需要上传我的破解补丁包。可以使用windows的pscp.exe命令。也可以使用Linux系统的scp命令。当然也可以使用其它工具,例如WinSCP图形界面工具。

必须使用root账户上传和安装破解补丁包。还要知道当前万由NAS机器的IP是什么。启动万由U-NAS系统后,控制台会提示你当前NAS机器的IP地址。

上传self-acvtive-unas_6.1.17_amd64.deb破解补丁包到/root/目录。你可以使用如下命令:
# scp self-acvtive-unas_6.1.17_amd64.deb root@YourIP:/root/

如果要查看破解补丁包的信息,你可以使用命令: dpkg -I self-acvtive-unas_6.1.17_amd64.deb
如果要查看破解补丁包的内容,你可以使用命令: dpkg -c self-acvtive-unas_6.1.17_amd64.deb

安装破解补丁包请使用如下命令:
# dpkg -i self-acvtive-unas_6.1.17_amd64.deb。

这时就可以回到浏览器,输入激活码进行激活了。就是这么简单啊。请看截图:
014.jpg

点击“激活”按钮,稍后片刻,万由U-NAS 6.10.0系统就激活了。登陆后可以查看系统信息。请看截图:
015.jpg

第五节
万由U-NAS 6.10.0不能在虚拟机上激活的问题

因为我是使用VirtualBox虚拟机来做万由U-NAS 6.10系统的安装破解激活的。自然也遇到了坛友们所说的,万由U-NAS 6.10系统不能激活的问题。在浏览器页面上得到了出错信息:{"err":9873,"errmsg":"无法激活虚拟设备"}。

我在分析了万由U-NAS 6.10系统的激活过程后,发现在system.cert文件中有个json参数定义:"vmachine":false。笔者分析认为是这个参数限制了万由U-NAS不可以在虚拟机上激活。有兴趣的读者可以修正这个参数为"vmachine":true试试。我没有做这个实验。

我还发现,万由U-NAS 6.10系统是用dmidecode这个linux的程序通过读取'smbios'的信息来检测虚拟机的。这就好办了,因为现在的任何虚拟机都支持用户自定义'smbios'的信息。

以我这次用的VirtualBox虚拟机为例,为了避免万由U-NAS 6.10系统检测为虚拟机,我会使用用户自定义'smbios'的信息的办法解决这个问题。具体命令如下:

"C:\Program Files\Oracle\VirtualBox\VBoxManage" setextradata "U-NAS" "VBoxInternal/Devices/pcbios/0/Config/DmiBIOSVendor" "Hewlett-Packard"
"C:\Program Files\Oracle\VirtualBox\VBoxManage" setextradata "U-NAS" "VBoxInternal/Devices/pcbios/0/Config/DmiSystemVendor" "Hewlett-Packard"
"C:\Program Files\Oracle\VirtualBox\VBoxManage" setextradata "U-NAS" "VBoxInternal/Devices/pcbios/0/Config/DmiBoardSerial" "EC752JJ20240F2AB"
"C:\Program Files\Oracle\VirtualBox\VBoxManage" setextradata "U-NAS" "VBoxInternal/Devices/pcbios/0/Config/DmiSystemSerial" "EC752JJ20240F2AB"

一般情况下我都是使用Linux系统下的KVM虚拟机做各种破解的。对于KVM虚拟机,用户自定义'smbios'的信息就更为简单了。只需要使用命令:virsh edit [虚拟机名称]编辑一下虚拟机的xml文件即可。例如,让虚拟机的'smbios'的信息使用host主机的smbios信息。
  <os>
    <type arch='x86_64' machine='pc-i440fx-bionic'>hvm</type>
<smbios mode='host'/>
  </os>

这样当万由U-NAS系统使用dmidecode读取'smbios'的信息时,获得的信息就是宿主机的实体机信息了。
对于使用VM ware虚拟机的的读者,可以使用文本编辑器修改[虚拟机名称]. VMX文件。在该文件的末尾添加如下的三行:

SMBIOS.reflectHost = "TRUE"
SMBIOS.noOEMStrings = "TRUE"
smbios.addHostVendor = "TRUE"

让万由U-NAS系统使用dmidecode读取'smbios'的信息时,获得的信息就是宿主机的实体机信息了。
对于使用ESXi VM虚拟机的读者,可以录到Web管理界面,关闭 VM,右键单击该虚拟机,然后选择“编辑设置”。选择了“VM 选项”选项tab并展开“高级”。在“配置参数”右侧,单击了“编辑配置”和“添加配置参数”。然后输入:

smbios.addHostVendor TRUE
SMBIOS.reflectHost TRUE
SMBIOS.noOEMstrings TRUE

与直接编辑VMX文件不同的是这里不需要输入等号和双引号。也可以通过 SSH 进入 ESXi 主机并直接将以下行添加到 VMX 文件更方便。

第六节
万由U-NAS 6.10.0网卡及MAC地址的绑定问题

万由U-NAS 6.10.0系统激活后,如果更换了UNAS6.10的网卡,启动后网卡就不能被认可了。这是为什么呢?然我们来仔细分析原因,然后找出解决的办法。

首先,要查看网卡的名称,使用命令:ip link show

root@UNAS96N1J7CCS:~# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 52:54:00:1b:11:59 brd ff:ff:ff:ff:ff:ff
    altname enp0s4
3: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether 00:e0:4c:68:00:9c brd ff:ff:ff:ff:ff:ff
    altname enp0s3

我们看到,现在的网卡名称是ens3和ens4。这与正常激活后万由U-NAS 6.10.0系统的网卡名称ueth1和ueth2是完全不同的。这就是启动后网卡就不能被认可的原因。
这里有必要先为大家介绍一些有关的Linux网卡设备命名的补充知识。

最初的简单方案。早在 90 年代,eth0、eth1 等都是由内核直接分配的。
为什么放弃它呢?至少在理论上,如果模块探测以不同的顺序完成,eth0 和 eth1 可能会在连续启动时交换位置。随着启动过程变得不那么线性,接口变得更加可热插拔,这变得更加令人担忧。

如何恢复它呢?如果您消除所有其他名称分配机制,那么您将只剩下这个选择了。
禁用整个当前接口命名方案的简单方法(您可能想要尝试进行一次性测试)是使用内核参数 net.ifnames=0 进行启动,可以在启动时在交互式 grub 会话中设置,也可以通过编辑 /etc/default/grub 并运行 update-grub 使其持久化。或者,您可以使用 /etc/systemd/network/ 中的自定义版本覆盖 /lib/systemd/network/99-default.link,或者类似地覆盖 /lib/udev/rules.d/80-net-setup-link.rules,或者使用 /dev/null 符号链接而不是自定义版本来屏蔽后者,或者……似乎有很多方法可以做到这一点,因此请确保您没有以多种方式做到这一点,否则当您尝试撤消它时,它会在几年后让您陷入困境。请读者自行参阅有关文章,了解覆盖 systemd 配置的标准方法。哦,请小心 initrd 偏差。

如果您仍然有一个有效的旧版 70-persistent-net.rules 文件,net.ifnames=0 标志不会停用该文件,因此您需要查看下面的说明以暂时禁用该文件。通过屏蔽足够多的 systemd 也可能做到这一点。

为什么要放弃上述选择呢?

它仍然有微妙的竞争条件,需要 /etc 位于可写文件系统上,并且存在虚拟化问题,因此它不再受上游支持。计划(在大多数文档中仍然是理所当然的)是 Debian 10“buster”不支持它,但手工制作的 .rules 文件应该继续工作。在 Debian 11“bullseye”中,这不再起作用(虽然细节不清楚;udev 仍然接受 .rules 文件,并声称它们可以重命名接口,那么有什么变化?)

现在如何坚持使用它

如果您有一个有效的“遗留”/etc/udev/rules.d/70-persistent-net.rules 文件并希望坚持使用它,您可以安全地通过 Debian 9“stretch”和 Debian 10“buster”升级。这些版本上的 udev 仍然尊重该文件(如果存在)(并将接受新创建的文件)。但是,请记住,您需要自己维护它,并准备好切换到 Debian 11“bullseye”的不同方案,因为它缺乏这种遗留支持。

如何放手并继续前进

如果您目前正在运行比 Debian 8“jessie”更新的版本,并使用遗留的 70-persistent-net.rules 文件,但已决定切换到新方案,您只需禁用 .rules 文件(然后在重新启动之前更新 initrd)即可;请参阅 udev README.Debian.gz 和下面的更详细指南。

使用 .LINK 文件的自定义方案

前面详述的方案是一些标准默认值,但还有一种覆盖默认值的规范方法:您可以使用 .link 文件设置命名策略以满足您的需求。因此,例如,如果您有两台 PC,每台都只有一张无线网卡,但一台将其称为 wlp0s1,另一台将其称为 wlp1s0,您可以安排它们都使用名称 wifi0 来简化共享防火墙配置。有关详细信息,请参阅 systemd.link(5)。

以下是上述示例的相对面向未来的“手动”版本:

#/etc/systemd/network/10-persistent-net.link
[Match]
MACAddress=01:23:45:67:89:ab
[Link]
Name=lan0
注意:根据 systemd.link(5),您不应使用内核可能用于其他接口的名称(例如“eth0”)。

如果您不相信新策略在重启后会起作用,而是想一步一步地执行:
运行 udev control --reload(或 /etc/init.d/udev force-reload,或 service udev force-reload)
对于热插拔网卡,断开并重新连接它们(或卸载/重新加载驱动程序;如果您的 SSH 会话不通过此网卡...)
对于非热插拔网卡,运行 udevadm trigger,然后检查日志(即使您的 .link 文件被拒绝为无意义文件,您的 SSH 连接仍然应该正常),然后重新启动网络。
还可以通过覆盖 /lib/systemd/network/99-default.link 来重新组织命名策略,例如坚持所有网络接口都仅通过 MAC 地址命名。

以上的补充预备知识就暂时介绍到此。万由U-NAS 6.10.0系统就是使用 .LINK 文件的自定义方案来实现网卡设备命名。

在它的/lib/systemd/network目录下,存在10-ueth1.link,可能还会有10-ueth2.link等等文件来做网卡设备命名。取决于你的机器有多少网卡。
该文件的内容非常简单,就是根据MAC地址为绑定的网卡命名。例如:

root@UNAS96N1J7CCS:/lib/systemd/network# cat 10-ueth1.link
[Match]
MACAddress=00:e0:4c:68:00:9c
[Link]
Name=ueth1

如果你更换了网卡,你可以手工编辑修改该文件的MAC地址就能解决启动后网卡就不能被认可的问题了。
回复 支持 1 反对 0 印象

使用道具 举报

f541883216 发表于 2025-1-7 03:00 来自 加拿大
结束语

很高兴能与大家分享此次的成果。本教程中分两章详细讲解了万由U-NAS 5.X 和U-NAS 6.X激活方法逆向工程中的各种细节技术详情。

此次的【蛇年大礼包】是针对万由U-NAS系统激活授权破解的逆向工程教学。详细讲解了如何通过逆向工程的手段来破解激活授权。并对虚拟机激活以及网卡MAC地址绑定和网卡命名做了必要的补充知识介绍。还介绍了一些有关密码学的补充知识。供读者学习,研究,提高技术。

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

参考文献:

此文绝对是本人【原创】作品。如果你对本文的观点有不同意见,可以回帖喷我。

一些补充: 由于万由一直在改变激活码和激活方法。蛇年大礼包的 U-NAS 6.10.0版本的补丁包对于U-NAS 6.8.1版本并不适用。
但为了让大家学习逆向工程,我特意为U-NAS_Pro-6_8_1-Build-2023.10.20-1400.iso安装盘提供了一个U-NAS_Pro-6_8_1简单暴力激活方法。

unas6.8简单暴力激活方法.rar (1.35 KB, 下载次数: 63)
回复 支持 1 反对 0 印象

使用道具 举报

menstry 发表于 2025-1-8 11:12 来自 中国河北廊坊
确实是难得好帖啊,顶先
回复 支持 反对 印象

使用道具 举报

jssk 发表于 2025-1-8 12:30 来自 中国山东烟台
感谢老子的教程,又让我们增长了知识和见识
回复 支持 反对 印象

使用道具 举报

wmnas 发表于 2025-1-8 12:41 来自 中国辽宁沈阳
万由U-NAS激活授权的逆向工程,感谢分享
回复 支持 反对 印象

使用道具 举报

tbc0309 发表于 2025-1-8 12:51 来自 中国天津
前排支持。。。老骥伏枥YYDS
回复 支持 1 反对 0 印象

使用道具 举报

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

使用道具 举报

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

本版积分规则

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