黑客风云——风云网络
设为首页 加入收藏 我要投稿 网站地图

您现在的位置: 黑客风云 >> 黑客文章 >> 黑客入门 >> 黑客常识 >> 正文
·完美空间提供500M免费AS04-10·企业安全之YY内网准入以04-09
·企业安全之意识与策略04-09·剑走偏锋:IIS漏洞利用04-09
·我来免费网提供100M免费04-09·1122mb.com提供20G超大免04-08
·映像劫持与反劫持技术04-07·让所有"暴力删除工具"无04-07
·入侵88red系统的详细过程04-07·Sql Injection脚本注入终04-07
·vbs+delphi 反弹后门生成04-07·飞讯网提供100MB免费PHP04-07
·突破SQL注入攻击时输入框04-04·结合内核和病毒技术的最04-04
·Real Player rmoc3260.d04-04·亿万网络今月最后为您提04-04
·php+mysql 5 sql inject04-03·Real Player rmoc3260.d04-03
·oblog文件下载漏洞04-03·免费啦提供1G-2G免费全能04-03
·完全解析网页后门和挂马04-02·一句话开3389(只测试过04-02
·萧萧免费空间网提供100M04-02·谷道免费空间网提供1G免04-01
·从本地入手解决双线路由03-31·sablog 1.6 多个跨站漏洞03-31
·富文本编辑器的跨站脚本03-31·Cookie注入是怎样产生的03-31
[推荐]海洋顶端2006+密码编码分析
      ★★★★

海洋顶端2006+密码编码分析

文章整理发布:黑客风云 文章来源:www.05112.com 更新时间:2006-4-29 9:45:12


算法不是很复杂,其主要思想是:先依次把每个字符取ascii值,得到的一串数字作为字符对待,如果位数大于16,则折半处理(把奇数位和偶数位的ascii相加整除2得到新字符串,得到的字符串位数为原来的一半),直至小等于16,然后把7、8、9分别替换为C、D、E得到最后结果。
似乎可以逆向,那就试试吧。
我们得到了密文,第一步,我们可以把密文中的C、D、E替换回去,也就是分别替换为7、8、9,然后我们得到一串数字组成的字符串。比如字符lake2编码之后是10DEC10C10150,我们替换之,得到1089710710150,由于字符的ascii在32~127,所以可以很轻松的把字符区分开:108、97、107、101、50,正好是lake2各个字符的ascii值。
千万不要以为这个算法这么简单就破解了,因为上述情况只是若干种情况里面最简单的一种而已。
字符lake2的ascii值位数是11,所以并没有经过JoinCutStr函数处理,如果明文密码是lake2lake2的话,问题就复杂得多了。
JoinCutStr函数把奇数位和偶数位的ascii相加整除2得到新字符串,但这里造成了逆向的困难。因为1234经过处理,得到的是13;1133、1134、1233、1234、1124等等经过处理,得到的仍然是13。即同一个结果对应不同的原因,多数情况下我们不知道到底哪一个才对,只好穷举。但是即使是穷举且排除那些包含不可显示字符的密码,也很难知道哪一个密码才是对的。
我们虽然不知道使用者真正的密码是多少,但是却可以利用得到的任意一个密码登陆,因为它和真正密码加密之后的值是一样的。这个有点像MD5的碰撞,只是这个算法可以根据hash比较容易的构造碰撞,而MD5则很困难。
还有一种比较麻烦的情况:明文密码包含中文。中文的ascii绝对值都很大,要逆向回去还是很麻烦的,所以我们还是构造碰撞吧。
针对最简单的那种情况我们也可以用一个vbs来反编码明文密码,以下代码即实现此功能,copy保存为vbs文件运行即可:
 
         ’海洋顶端2006+简单密文反编码  by lake2
 
         theStr = InputBox("输入加密后的字串")
         If theStr <> "" Then
                   Call InputBox("请复制已经解密的字串",,UnEncode(theStr))
         End If
         Function UnEncode(str)
                   For i = 1 To Len(str)
                            theStr1 = Mid(str, i, 1)
                            If theStr1 = "C" Then
                                     theStr1 = "7"
                            ElseIf theStr1 = "D" Then
                                     theStr1 = "8"
                            ElseIf theStr1 = "E" Then
                                     theStr1 = "9"
                            End If
                            StrPass2 = StrPass2 & theStr1
                   Next
                   StrPass3 = GetChr(StrPass2)
                   UnEncode = StrPass3
         End Function
         Function GetChr(str)
                   For i = 1 To Len(str)
                            ASCStr = Mid(str, i, 1)
                            MyStr = MyStr & ASCStr
                            If MyStr > 32 and MyStr < 127 Then
                                     StrResult = StrResult & Chr(MyStr)
                                     MyStr = ""
                            Else
                                     If i = Len(str) Then
                                     GetChr = "小虾无能,不能破解"
                                     exit function
                                     End If
                            End If
                   Next
                   GetChr = StrResult
         End Function 


 
试试效果先:
10DEC10C10150   ->   lake2
120105EC111106   ->   xiaoj (这个是某人的密码哦^_^)
 
后面两种情况,如果要编程序破解的话感觉比较困难,就不写了。要是阁下写出了程序,可得让我研究研究。
下面让我们通过构造碰撞来破解海洋顶端2006Plus的默认密码。
打开文件,得到它的编码过的密码是02200200251001,我的程序不能恢复,看来是经过JoinCutStr函数处理的。让我们大胆的还原:10 31 22 10 01 22 10 01 22 55 11 10 01 11,整合一下:103 122 100 122 100 122 55 11 100 111,这里有个ascii值11,这个字符也是可以显示的,既然是碰撞,只好将就了。我们得到我们的明文密码:gzdzdz7chr(11)do
因为chr(11)是换行符,格式原因不能显示,你可以把以下代码保存为vbs运行之,得到密码:
 
Call InputBox("海洋的默认密码碰撞",,"gzdzdz7"&chr(11)&"do")  

 
然后你用它登陆没有改过密码的海洋顶端木马,呵呵,进去了吧。下面再提供一个可以登陆但不同的密码用以证明这是碰撞:
 
Call InputBox("海洋的默认密码碰撞",,"gqdzdz7ne"&chr(11))  

最后,我们来下个结论:在得到海洋顶端2006+编码后的密码之后,就算不能恢复出明文密码,也可以利用碰撞来登陆系统。至于如何得到编码后的密码,呵呵,那就超出本文的范围了。

上一页  [1] [2] 

文章录入:cainiaowang    责任编辑:cainiaowang 
【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
VIP 专 区
Copyright @2006 黑客风云 ●业务联系:QQ 联系怪人 联系奇人 Email:给怪人发邮件 给奇人发邮件
ICP备案:冀06009886