我试图找出客户端应用程序用来返回会话密钥的算法。
当我启动连接时,服务器首先发送一个唯一的会话密钥。然后,客户端将使用加密或散列密码进行响应,并将用户名与服务器一起发送。
客户端和服务器之间的网络跟踪示例:(用户名:serv1ce /密码:test12)
从服务器收到的应用程序<< 52 d7 1c 3f 9f 2c 05 c9(一次会话密钥)
应用程序发送到服务器>> 11 83 2d 7d ff 0c 51 8c 53 45 52 56 31 43 45 20
“53 45 52 56 31 43 45 20”部分是明文中的用户名,即字节值(serv1ce)。
有没有人知道如何使用密码'test12'和64bit(8bytes)会话密钥“52 d7 1c 3f 9f 2c 05 c9”创建字节“11 83 2d 7d ff 0c 51 8c”?
答案 0 :(得分:1)
如果他们使用加密安全散列,那么原则上从输入和输出中你不应该发现它。
实际上它们返回8个字节,即64位,这表明它们正在使用MD5的某些变体。如果他们遵循典型的做法,他们可能会以某种方式创建一个字符串,其中包括用户名,密码,会话密钥和秘密哈希的某种组合,然后对其进行哈希处理。 (请注意,我说的是典型的练习,而不是最佳练习。最好的做法是使用缓慢的东西来计算这个目的,例如bcrypt。)如果你弄清楚魔法组合,你就有了答案。
你有两个不错的方法。最简单的是强力搜索。如果您搜索md5 gpu cracking
,可以找到许多工具,可以将MD5计算卸载到视频卡中。这些非常适合强力搜索,并且可以让您快速尝试上述主题的惊人数量的变化。 (这种攻击的可行性就是为什么人们应该使用bcrypt这种东西。)
另一个是你有申请。有各种方法可以跟踪应用程序内部实际发生的事情,因为它正在进行计算。成功搞清楚,你会得到答案。