身份验证的工作原理
这里的Oracle版本为11.2
如果没办法捕获本机数据包请看我的博客
1.连接到Listener之后,身份验证的过程就开始了,真正核心的部分,它是同故宫客户机想服务器发送自己的用户名来完成的。
2.在前面截获的包中,用户名是system,服务器取出这个用户名并检查是否是一个有效的用户。如果不是,服务器则向客户及发送一个登陆被拒绝的错误。如果用户名确实存在,则服务器从数据库中提取该用户密码的散列值。利用这个散列值生成一个密码。
3.具体生成过程为:服务器调用orageneric库中的slddt()。实际上这个函数是用来重新获得时间的。将分钟,小时,秒结合起来形成一个用来加密的8个字节的文本。加密中要使用的密钥的前4个字节代表发呢中和小时与用户的16进制密码的散列值的最后四个字节进行异或。密钥的后四个字节是由毫秒和秒与用户16进制密码散列值的前4个字节的异或组成。通过调用oracommon中的kzsrenc(),可以使用该密钥对文本进行加密。通过使用函数Incgks()与kzsrenc()基本上完成了DES密钥的生成,随后它利用函数Incecb()输出ecb模式下的DES密文,就是密码,再利用用户的散列值对密码进行加密,结果就是AUTH_SE