假期了啊,可以搞一点事情出来了啊,比如说我一直都有的IDC梦。前段时间在Unrealservers上实战了一下Proxmox,说到这里先吐槽一下这家,黑五买的机子拖了整整一个月才最终开通,CPU给的还稍微高了一点,说明对方也是好不容易才把垃圾捡全了,要不是他家客服至少还有存在感,怕不是早就PP争议走起来了。12.5刀/月,5IP的堪萨斯应该是传家宝了,折腾Proxmox好歹也开出了KVM小鸡,安装上了Debian8,想起自己到处找系统模板也是一把辛酸泪。

扯远了,拉回来,今天翻博客的时候又翻到了SolusVM开心版的帖子,于是就萌生了试一试的想法。正好前段时间liyuan写了一个波兰KVM鸡鸡复鸡鸡的教程,nazwa的机子我刚好也有一台,所以照搬应该就可以了,他的教程里唯一缺的就是开心版怎么来的,我今天搜了一圈,正好找到了一篇文章,记录一下准备稍后尝试。

PS:原作者已经删了文章,我是从谷歌快照里翻出来了原文。

这是整个学习笔记的第一部分,如何获得SolusVM开心版

以下全文转载并稍作修改。

参考链接:

SolusVM 伪站源码发放

KasuganoSora悠穹烟雨博客

关于SolusVM的破解

记一次solusvm的破解

自建 SolusVM 伪授权 host

(一)具有操作性的SolusVM伪站搭建教程

这是本人修改过的 SolusVM 伪站源代码,在原基础上修改 key 类型为 RS 企业授权。

slbs_verify_license.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
require "clean.php";
if(isset($_POST["nodes"]) && isset($_POST["licensekey"]) && isset($_POST["domain"]) && isset($_POST["ip"]) && isset($_POST["dir"])){
$returnarray = array( "hash" => '',
"hash2" => '',
"status" => 'Active',
"productid" => 22,
"checkDate" => date("Y-M-D"),
"companyname" => "SakuraMC 专用 SolusVM 授权验证破解",
"email" => "kasuganosora@tcotp.cn",
"nextduedate" => (date("Y") + 100) . "-06-04",
"validip" => "233.233.233.233",
"configoptions" => "Slaves=23332|Mini Slaves=23333|Micro Slaves=23333"
);
$data = $Crack->LicenseEncode($returnarray);
echo($data);
//DEBUG
//file_put_contents("test.txt", json_encode($_POST));
}else{
echo("No input");
}

所需用到的 clean.php 在这:

clean.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?php
$Crack = new Crack();
class Crack {
private $_s_C_OOO_o01 = "ypO%_Y/y0#rY@KFi==@65%swYskCaCTk-52#*StP6HCsrwP!tB";
private $_s_C_OOO_o02 = "MM=co=_prb+;XyuHkHfNtyWy/y@/FzcofZ9HqjQ9?XxSb96a.d";
private $_s_C_OOO_o03 = "31m*R*Z!zmnDjdqovF8Wyq1-LZUAFohEKqn652kM.FGykJF7LT";
private $_s_C_OOO_o04 = "UF*zssdx8E9Q7+tzZ%*Y#j2=/FFZOekUr1BXB6OANpO1-ivAOm";
private $_s_C_OOO_o05 = 30;
private $_s_C_OOO_o06 = "+";
private $_s_C_OOO_o07 = 30;
private $_s_C_OOO_o08 = "(";
private $_s_C_OOO_o09 = "=============================== START KEY DATA =================================\n";
private $_s_C_OOO_o10 = "\n================================ END KEY DATA ==================================";
public function LicenseEncode($result) {
$resulttraw = serialize($result);
$resulttraw = base64_encode($resulttraw);
$md5Hash = md5($resulttraw . $result['checkDate'] . $this->_s_C_OOO_o04);
$data = $md5Hash.$resulttraw;
$md5Hash = md5(strrev($data) . $this->_s_C_OOO_o03);
$data = $md5Hash.strrev($data);
$data = $this->LicenseEncodePart($data, $this->_s_C_OOO_o01);
$data = strrev($data);
$data = gzdeflate($data);
$data = convert_uuencode($data);
$data = strrev($data);
$data = $this->LicenseEncodePart($data, $this->_s_C_OOO_o02);
$data = strtoupper($data);
$data = wordwrap($data, 18, "+", true);
$data = wordwrap($data, 348, "(", true);
$data = wordwrap($data, 80, "\n", true);
$data = $this->_s_C_OOO_o09 . $data;
$data = $data . $this->_s_C_OOO_o10;
return $data;
}

private function LicenseEncodePart($string, $key) {
$key = sha1($key);
$strLen = strlen($string);
$keyLen = strlen($key);
$i = 0;
while($i < $strLen) {
$ordStr = ord(substr($string, $i, 1));
if($j == $keyLen) {
$j = 0;
}
$ordKey = ord(substr($key, $j, 1));
$j++;
$hash .= strrev(base_convert(dechex($ordStr + $ordKey), 16, 36));
$i += 1;
}
return $hash;
}
}

支持正版,请购买官方 key,反正也不贵。

请勿将此伪站源码用于非法用途,转载请注明本文章地址。

评论区找到的食用方法:

复制下来,新建个文本改名 slbs_verify_license.php

接着下载文章底部的那个 clean.php,解压后和 slbs_verify_license.php 放在一起

然后在你的网站根目录依次新建文件夹 /clients/modules/servers/licensing/ 一层一层嵌套

最后把那两个 php 文件丢进 licensing 文件夹,然后修改系统 hosts,加入以下内容

clean.php host
1
2
3
4
5
6
7
8
9
127.0.0.1 licensing1.soluslabs.net
127.0.0.1 licensing2.soluslabs.net
127.0.0.1 licensing3.soluslabs.net
127.0.0.1 licensing4.soluslabs.net
127.0.0.1 licensing5.soluslabs.net
127.0.0.1 licensing6.soluslabs.net
127.0.0.1 licensing7.soluslabs.net
127.0.0.1 www.soluslabs.net
127.0.0.1 soluslabs.net

保存就可以了。


以上是我要准备实战的主要方法,因为完整的给出了自建SolusVM伪站host的全部东西

(二)hostloc上关于SolusVM的破解原理

后面的东西基本都是基于这个改出来的

solusvm我没用过,我不知道程序层的验证是不是和网页层一样,不过应该是一样的。

solusvm的授权部分在system下面的clean.php里面。

这个文件包括两个函数,一个LicenseDecode,一个LicenseDecodePart。

那么自然,逆向他的算法即可。

因为怕dmca,我就不放解密了~

我放加密233333

clean.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?php
$lgo = new LicenseSys();
class LicenseSys
{
private $_s_C_OOO_o01 = "ypO%_Y/y0#rY@KFi==@65%swYskCaCTk-52#*StP6HCsrwP!tB";
private $_s_C_OOO_o02 = "MM=co=_prb+;XyuHkHfNtyWy/y@/FzcofZ9HqjQ9?XxSb96a.d";
private $_s_C_OOO_o03 = "31m*R*Z!zmnDjdqovF8Wyq1-LZUAFohEKqn652kM.FGykJF7LT";
private $_s_C_OOO_o04 = "UF*zssdx8E9Q7+tzZ%*Y#j2=/FFZOekUr1BXB6OANpO1-ivAOm";
private $_s_C_OOO_o05 = 30;
private $_s_C_OOO_o06 = "+";
private $_s_C_OOO_o07 = 30;
private $_s_C_OOO_o08 = "(";
private $_s_C_OOO_o09 = "=============================== START KEY DATA =================================\n";
private $_s_C_OOO_o10 = "\n================================ END KEY DATA ==================================";
public function LicenseEncode($result)
{
$resulttraw = serialize($result);
$resulttraw = base64_encode($resulttraw);
$md5Hash = md5($resulttraw . $result['checkDate'] . $this->_s_C_OOO_o04);
$data = $md5Hash . $resulttraw;
$md5Hash = md5(strrev($data) . $this->_s_C_OOO_o03);
$data = $md5Hash . strrev($data);
$data = $this->LicenseEncodePart($data, $this->_s_C_OOO_o01);
$data = strrev($data);
$data = gzdeflate($data);
$data = convert_uuencode($data);
$data = strrev($data);
$data = $this->LicenseEncodePart($data, $this->_s_C_OOO_o02);
$data = strtoupper($data);
$data = wordwrap($data, 18, "+", true);
$data = wordwrap($data, 348, "(", true);
$data = wordwrap($data, 80, "\n", true);
$data = $this->_s_C_OOO_o09 . $data;
$data = $data . $this->_s_C_OOO_o10;
return $data;
}
private function LicenseEncodePart($string, $key)
{
$key = sha1($key);
$strLen = strlen($string);
$keyLen = strlen($key);
$i = 0;
while ($i < $strLen) {
$ordStr = ord(substr($string, $i, 1));
if ($j == $keyLen) {
$j = 0;
}
$ordKey = ord(substr($key, $j, 1));
$j++;
$hash .= strrev(base_convert(dechex($ordStr + $ordKey), 16, 36));
$i += 1;
}
return $hash;
}
}

授权访问的位置是 /clients/modules/servers/licensing/slbs_verify_license.php

我给一个slbs_verify_license.php的范例:

slbs_verify_license.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
require "cleaned.php";
if(isset($_POST["nodes"]) && isset($_POST["licensekey"]) && isset($_POST["domain"]) && isset($_POST["ip"]) && isset($_POST["dir"])){
$returnarray = array(
"hash" => '',
"hash2" => '',
"status" => 'Active',
"productid" => 20,
"checkDate" => date("Y-M-D"),
"companyname" => "NagakaTech",
"email" => "admin@loli.ren",
"configoptions" => "Slaves=100|Mini Slaves=100|Micro Slaves=100"
);
$data = $lgo->LicenseEncode($returnarray);
echo($data);
}else{
echo("No input");
}

使用的版本是1.20.03,只测试了前台网页的license正常~

附注:

solusvm服务器(需要host掉)
1
2
3
http://www.soluslabs.com
licensing1.soluslabs.net
licensing5.soluslabs.net

(三)一个成品SolusVM 伪授权 host

我觉得搭建失败是完全有可能的,不过有dalao已经给出了可以使用的伪站host,偷就完事了。

SolusVM Enterprise (NOC)

SolusVM Enterprise (NOC)
1
2
3
4
5
6
7
8
150.95.9.225 soluslabs.com
150.95.9.225 www.soluslabs.com
150.95.9.225 licensing1.soluslabs.net
150.95.9.225 licensing2.soluslabs.net
150.95.9.225 licensing3.soluslabs.net
150.95.9.225 licensing4.soluslabs.net
150.95.9.225 licensing5.soluslabs.net
150.95.9.225 licensing6.soluslabs.net

SolusVM Enterprise (RS)

SolusVM Enterprise (RS)
1
2
3
4
5
6
7
8
150.95.9.221 soluslabs.com
150.95.9.221 www.soluslabs.com
150.95.9.221 licensing1.soluslabs.net
150.95.9.221 licensing2.soluslabs.net
150.95.9.221 licensing3.soluslabs.net
150.95.9.221 licensing4.soluslabs.net
150.95.9.221 licensing5.soluslabs.net
150.95.9.221 licensing6.soluslabs.net

过程

一开始以为是客户端文件, 以为是主控端的文件, 想自行破解, 发现主控端搜索没有这 2 个文件, 以为是新版本路径变了, 自己开了个 ovz 小鸡装了下主控拿出所有的 php 文件准备自行破解, 发现是 ioncube 加密, 然后直接放弃 (这个东西我只知道能解密, 这 2 年一直没找到办法).

第二天有人提醒这是伪站用的, 于是恍然大悟自己直接复制粘贴搭建了下, 然后修改主控端的 host 去主控端更新授权, 发现错误, 然后查看伪站访问日志发现 500 错误, 开启 debug 输出, 发现语法错误 (我的环境是 php7), 然后发现少了 class, 加上之后再去主控端更新授权, 授权可用, 搭建成功.

ドメインウェブの設定が見つかりません

如果你出现这个问题, 那么你的水平还不足以使用 SolusVM

(四)补充

SolusVM 就以为破解就完事了?

屌鸡dalao指出了另一点

就算你破解了SolusVM又怎么样呢 ?

SolusVM主控还是会偷偷的去访问 https://94.2.11.11 (OVH , SolusVM API)

去加密汇报你节点下所有状态以及授权版本状态

不要问我怎么知道的 , 开了一星期的tcpdump占了2T空间才知道没关

这个应该通过iptables就能安排了,我觉得问题不大


版权声明:

知识共享许可协议
本文由EmmCat原创,采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议(CC BY-NC-ND 4.0)进行许可,转载请保留以上声明信息,版权所有,侵权必究!
本文链接:https://emm.cat/2018/07/17/solusvm-learning-1/