持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第32天,点击查看活动详情
[toc]
简介
先吐槽下,某国产数据库,做的也太low了吧,照着开源的抄,抄到连客户端都可以用别人的,虽然你的代码看不到,但我看到代码报错的地方只差一两行,你这两行怕是添加了个作者和修改日期吧。。。
如何辨别一个数据库是pgsql还是kingbase,普通方法是使用官方的库,进行连接,but,这样的问题是如果需要识别很多很多的库,那么这个软件就得引用很多很多的库,要不软件体积不可控,要不软件依赖一大堆,非常恶心。那么最简单的方法就来了,直接建立裸tcp进行通讯
分析报文
先用data_grip进行分别连接pgsql、kingbase
这两个数据库,从软件上看,输入错误用户名密码时候(只是检测,本来也不知道用户名密码)显示的可以说是一毛一样了。。。
换jdbc连接试试,用pgsql的方法可以一毛一样的连上kingbase...
此时此刻,脸都不要了表情包again//////
行吧,下载kingbase的官方客户端
行,pgsql的密码可以验证通过,最后提示版本不对,,,行,看来是一直到输密码,都是一毛一样的流程,也许可能大概,所谓的版本不对,就是改了个版本号吧(因为网上可以搜到不少的使用pgsql连接kingbase的文章)
抓包分析吧
滴滴答答,简单描述下双方都干了啥
开始开始,over 你需要加密,over 这句我也看不懂,over 同,over 同,over 你错了,over
直到最后一句,看到了不一样的地方,某错,就是哪个falut L335,这个L猜测是行的意思,某一行报错,方便数据库开发人员排错
实施
很好,那么从报文分析得到的这些内容,可以直接建立tcp发送,里面太细节的加密内容不用管,直接发,实测,经过最后一次收到的报错信息,可以区分出pgsql和kingbase的区别,中共大概进行四次交互,直接发送报文,之前的几次交互只需要判断收到的消息长度即可,最后一次进行判断这个很细节的地方进行区分
问题
报错的行,说不定哪个版本就会改了,很有可能。。。 pgsql的开源版本改的可能性还大点,说不定哈,kingbase很久都不会动。。。