万由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);
从反汇编伪代码片段中可以看到:
使用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自授权激活的实践】,精彩继续!