发新话题
打印

[讨论]自定义加密算法的破解

[讨论]自定义加密算法的破解

议题提交:yezhan
原始连接:邪恶八进制信息安全团队技术论坛  http://www.eviloctal.com


最近拿到一个主机的webshell,有一个比较好的cms系统,于是想下载下来学习学习。sql 的数据库。

在登陆里有一个加密密码函数:

  function key_password(pass_word)
   dim new_password,i,password_len,temp_str,temp_len
   new_password = 1
   pass_word = trim(pass_word)
    password_len = len(pass_word)
    if password_len > 6 then
      temp_len = int(password_len/6)
      i = 1
      do while  i<=password_len
       new_password = new_password + asc(mid(pass_word,i,1))
        i = i+temp_len
      loop
    else
    for i=1 to len(pass_word)
      new_password = new_password + asc(mid(pass_word,i,1))
    next
    end if
    key_password=cstr(new_password * len(pass_word))
  end function


这个是登陆的验证段
pass_word = trim(request.form("pass_word"))
pass_word = key_password(pass_word)

不知道该怎么解密这个函数 key_password [s:51]
觉得你够三八吗? 觉得你有资格和我挑吗? 那就到八里街XX洗头店找 老板娘单挑吧 活着回来的找我 http://Www.OkHtm.Com ---------------------------------------------------------- 不要看俺了,俺只是来学习的 学习你们的三八精神的.

TOP

?
不是很懂楼主的意思
解密函数不是很完整吗?

TOP

[s:42]  [s:42] 这个是加密函数~


现在我直接进主机了...
觉得你够三八吗? 觉得你有资格和我挑吗? 那就到八里街XX洗头店找 老板娘单挑吧 活着回来的找我 http://Www.OkHtm.Com ---------------------------------------------------------- 不要看俺了,俺只是来学习的 学习你们的三八精神的.

TOP

算法太烂, 很容易制造冲突 (多个明文有同一个密文)
假如有密文 "1230" (原明文是11111)

通过最后第2行可以发现这是个整数转换的 这个整数是 new_password 和 原密码长度的积. 我们找一个简单的长度, 比如 5, 因为new_password 初始化值是1 , 则我们减去 1*长度, 再除以长度, 1230 - (1*5)=245

然后再来推导245的来由, 看 "if password_len > 6 then" 这个条件和下面的循环 " i = i+temp_len
", 就知道如果密码长度超过6, 则每个长度和6的商的位置才是关键位, 才会被处理. 我要制造的冲突的长度是5则每个位都会被处理

算法实际上就是把每个字符的ASCII编码加在了一起, 那么只要找到5个字符的ASCII编码加在一起是246就可以了

用 245÷5=49 对应的 字符是 &#39;1&#39; , 所以明文就是 "11111"
保持!保持脑袋时刻灵活!

TOP

懂了

谢谢记忆碎片

牛百牛百的

:)
觉得你够三八吗? 觉得你有资格和我挑吗? 那就到八里街XX洗头店找 老板娘单挑吧 活着回来的找我 http://Www.OkHtm.Com ---------------------------------------------------------- 不要看俺了,俺只是来学习的 学习你们的三八精神的.

TOP

补充一点.
对于>6位的密码
此算法是取每隔N位的数值相加再加上初始值1
N=长度/6
也就是如果在7~11位之间.
就是取前6位.
如果在12~17位.
每隔1位取一个.
如果在18~23位
每隔2位取一个.

加上记忆前面分析的
我们只要简单的算出关键位上的等效字符
然后非关键位上面的随便填就是了
为了简单.我们在非关键位上也可以填充与等效字符一样的字符
比如原来明文是12131612
与之等效的字符就是11111111
连入侵者都敢说自己在做网络安全。关键大家是真正为安全作过什么?

TOP

经过进一步考虑.
最终密文的冲突字符的计算.可以与原长度根本无关
我们只要保证密文除以某一个任意数值结果是处在一个ASC范围之内就可以了
如果再精确一点把它控制在65~93之内就可以了.
连入侵者都敢说自己在做网络安全。关键大家是真正为安全作过什么?

TOP

碰撞字符的计算方法
R=密文
L=长度
A=ASC表中字符的数值范围
得出公式
(R-(1*N))/N=A
变化得到
R=(A+1)N
由于N是整数
我们只要匹配A,也就是ACSII表中的可用字符的数值
让R/(A+1)结果是整数
就得出了可以与原来密码长度等效的长度N
同时得出了与原来密码字符等效的字符A
我们只要重复输入N个A就可以了

如果匹配不到整数N
则选择一个N的小数位最小的一个
使用 (1+N的小数位)*A 的公式
计算出X
X=(1+N的小数位)*A
密码就是重复N-1个A最后一位是X
就OK了.
连入侵者都敢说自己在做网络安全。关键大家是真正为安全作过什么?

TOP

have  known .....



thanks to 代码罐头
觉得你够三八吗? 觉得你有资格和我挑吗? 那就到八里街XX洗头店找 老板娘单挑吧 活着回来的找我 http://Www.OkHtm.Com ---------------------------------------------------------- 不要看俺了,俺只是来学习的 学习你们的三八精神的.

TOP

发新话题