欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

如何破解SSS扫描工具

程序员文章站 2022-07-07 22:33:08
最近实在是忙得不亦乐乎,一边埋头整理开学要上交的网络安全研究课题,一边在网上清理恶意网站。我的爱机也跟着我连轴转,没有多少休息的时间(还好我的机器是双Xeon的服务器,哈哈)。一天突然要用到S...

最近实在是忙得不亦乐乎,一边埋头整理开学要上交的网络安全研究课题,一边在网上清理恶意网站。我的爱机也跟着我连轴转,没有多少休息的时间(还好我的机器是双Xeon的服务器,哈哈)。一天突然要用到SSS,立刻到黑白网络上Down了一个下来。结果一注册傻眼了,这个SSS 竟然用上了网络认证,注册机生成的注册文件根本没法通过认证。忽然想起了05年《黑客在线》上有一个文章介绍SSS,翻来看看。这不看还好,看完了我差点没从6楼跳下去。杂志上面写着:“面对SSS无法破解的问题,小编采用虚拟机恢复大法……”我真的绝望了,看来N多的高人已经对这个SSS束手无策,我还能做什么呢?难道就只能这样了吗? 
不过,我就是不信邪,非得要把这个SSS破掉不可。爆破?不太可能。其它的方法呢?我又不会(检讨一下,当年破解没学好)。干脆顺水推舟,由着SSS来算了。 

灵巧的破解 

首先,咱们还是老方法,用注册机生成一个注册文件。这个注册文件不是万能的,但是没有它是万万不能的。填写注册信息,按Generate就OK了。 
好了,我们先不管它,让它一边凉快去(蝴蝶:不管它你生成它做什么?欠扁……),不是这个意思,等一会才能用到它啦。 
在下一步之前,必须说一个东西:host文件。这个文件大家不会不知道吧?它的功能就是替代DNS进行域名解析,以便达到快速访问的目的,而且它在查询中的优先权要比网络上的任何DNS服务器都高。所以,只要改host文件,就可以“绑架”域名了。有很多朋友的机器,就算输入了正确的网址,也会上一些恶意网站,多半是这个文件被修改了的原因。需要注意,这个文件没有后缀名,位于%windir%system32driversetc下(Windows 2000/XP/2003系统),我们用记事本把这个文件打开,在里面加入这么一行: 
127.0.0.1 www.safety-lab.com 
这个www.safety-lab.com是SSS的官方站点,我们这么做就是为了欺骗SSS,让它连接到自己的机器上。因为经过我的Sniffer抓包发现,SSS在认证注册的时候,向http://www.safety-lab.com/update/db/keys.php提交了用户数据,并且在验证失败的时候,服务器端返回了一个1。有经验的朋友一眼就能看出来,SSS应该就是靠这个返回值来判断用户是否合法。也就是说,只要让这个值变成0,我们就可以成功注册了。 
有人会问了,你怎么知道返回0,就是注册成功呢?不可能是别的数字吗?其实这个我也是猜一半,用社会工程学推导一半。其实,有时玩黑客并不一定只需要技术,还需要那么一点点的运气。 
我们先来架设一个Web服务器,既然大家都是Windows用户,就用IIS好了(以下配置IIS的过程是在2003系统下实现的,2000/XP可能有所不同,请参考相关资料)。进入站点的属性—〉主目录—〉配置—〉映射,为.dat,.pl和.php三种后缀的文件添加映射。可执行文件框里,你的.asp文件是怎么设置的,不动就行。 
这样做的目的是让这三种后缀名的文件,在IIS中都可以被当作ASP文件执行。其实,用别的语言实现也可以的,不过笔者只会ASP,没办法。设置好映射,我们来做几个文件,“忽悠忽悠”SSS。 
最要紧的就是先注册了,否则什么功能也不能用。我们来分析一下这个keys.php的代码(其实是asp语言,这个keys.php在IIS中是被当成asp执行的): 
[以下代码在keys.php中] 
<% 
Dim crc,name,founder ‘定义几个变量 
founderr=true ’为了防止程序出错,把控制错误的变量设为true 
if request("crc")<>"" and request("name")<>"" then 
founderr=false 
end if 

if founderr=false then 
response.write "<html><body>0" ’如果有输入,就返回一个值 
response.end 
end if 

if founderr=true then 
response.write "<html><body>1" ’处理意外情况,防止SSS收不到返回值而挂掉。 
response.end 
end if 
%> 
这段代码很简单,只接受SSS发送上来的CRC和NAME两个变量,并返回一个值。大家可能看出来了,这个返回值<html>和<body>标签并没有结束,其实这不需要结束。因为我分过析Sniffer抓到的完整的数据包,发现就是这样的。也许是Safety-Lab故意做的一个陷阱吧,管他呢,能注册就OK。 
我们的host文件不是已经改好了吗?那就把以上的代码保存成keys.php,放到你的IIS根目录下的/update/db/下(如果你的IIS根目录在E:inetpubwwwroot,就放在E:inetpubwwwrootupdatedb)。然后我们打开SSS,导入注册文件,点击Done,看看,这不就完事了? 

不过,单单破解,并不能满足我们的要求。如果现在你用在线升级,仍然会失败。而且还会把你刚注册上去的授权撤销。那怎么办呢?嘿嘿,接着往后看不就知道了? 

破了软件不能升级,那就跟用D版XP一个感觉——很不爽。所以,又花了点功夫,把升级的限制也解除了,虽然不是很完善,但确实可以检测升级了。 
还是老方法,用Sinffer把升级过程的包抓下来,分析一下。我们看到SSS的升级程序访问了以下面:(前面都是http://www.safety-lab.com/,省略) 
updatedbkeys.php 还是验证身份,阴险…… 
updatesssupdate.dat 这是一个数据文件(功能未知); 
updatedbgetdbaudits.pl 一个数据引导文件,用于生成更新列表。 
先拿出来分析,然后各个击破。这个keys.php刚才讲过了,我就不说了。update.dat文件好像是一个引索文件,据我的观察,它还是在变动的,但是它却是没有经过服务器的解析,可以直接下载下来,但为了保持数据最新,我们还是用动态的方法来处理吧。先看一段代码吧: 
[以下代码在update.dat中] 
<% 
On error resume next ’没别的意思,防止出错而以 
Dim sURL 

Dim Retrieval 

Function GetURL(url) 
Set Retrieval = Server.CreateObject("Microsoft.XMLHTTP")  
With Retrieval 
.Open "GET", url, False, "", "" 
.Send 
GetURL = .ResponseText 
End With 

Response.BinaryWrite retrieval.responseBody ’输出二进制到浏览器 
Set Retrieval = Nothing 
End Function 

sURL = "http://safety-lab.com/update/sss/update.dat" ’这个是要获取地址 
Response.Write GetURL(sURl) 
%> 
这是ASP编程中很经典的一个函数的应用。这个面的作用就是让IIS到另一个站点,取得一个面,然后传回客户端。假设这个存在于主机A上的面指向的是主机B上的内容,但是主机A的客户通过访问这个面,就可以在主机A上看见主机B上的东西。但是,这个和普通网中用JavaScript实现的面重定向是不同的:JavaScript是让客户端重新定向,这个是以IIS为中介的服务器的重定向。 
尤其是针对程序请求的面的时候。因为程序不会识别那些由JavaScript语言组成的重定向语句,而这样的方法则不需要客户端的支持。哦,差点忘了一个事情,如果你的机器上有类似VisNetic Firewall一类的带有IDS功能的防火墙,把它关闭,否则会出错的。我当时调试的时候,这个update.dat怎么访问都有问题,后来发现是VisNetic的过滤功能把请求给过滤了。 
再来看另外一个文件代码: 
[以下代码在getdbaudits.pl中] 
<% 
On error resume next 
Dim outformat,sURL 
outformat=request("outformat") 

Dim Retrieval 

Function GetURL(url) 
Set Retrieval = Server.CreateObject("Microsoft.XMLHTTP") 
With Retrieval 
.Open "GET", url, False, "", "" 
.Send 
GetURL = .ResponseText 
End With 
Response.BinaryWrite retrieval.responseBody ’输出二进制到浏览器 
Set Retrieval = Nothing 
End Function 

sURL = "http://safety-lab.com/update/db/getdbaudits.pl?outformat=" & outformat 
Response.Write GetURL(sURl) 
%> 

这个文件和上一个文件是大同小异,只不过多了一个对变量的处理而已。明白ASP的朋友一眼就能看出来,不太清楚的,向高人讨教一下吧。这个面请求的应该是更新列表,不过不算太大,全部返回的数据也就有8-10KB。我们很快就能看到结果。 
看见了吧?这就得到了更新列表了。我猜有很多人可能马上就要去点击那个Next按钮了吧?别着急,这里有问题需要处理。先兜个圈子,给大家说说我原来的思路,以下的过程仅仅是概念讲解,大家无需跟着操作。 
我仍然是采用了Sniffer抓包的方法,看到升级程序访问了updatedbgetaudits.pl文件,而且后面足足跟了有825个字符的变量!我不在文章里列出来了,免得占用空间(详见光盘:数据.txt)。这些变量虽然多,但是交给程序处理还是游刃有余的。于是乎,我写了一个对应的面: 
[以下代码在getaudits.pl中] 
<% 
On error resume next 
Dim outformat,sURL 
outformat=Request.ServerVariables("Query_String")