数据库多了,真的难免忘记密码,这不,本地虚拟机环境(winserver2008R2)中安装的SQLServer2008就忘了。
因为一般本地测试环境密码都很简单,无非就是123456,或者干脆没有,可能是SQL server2008当时不能设置这些弱密码了,稍微多休息了几天就给忘了,试了好几次实在想不起来了,就想着如何能找到这个密码呢?
当然直接服务器上重置这个密码是最简单不过了,可我就是好奇到底设置的一个什么密码?所以就有了接下来的一些操作。
目标对象就是navicat了,因为经常是通过它来连接访问的,并且重点是保存过密码,而且navicat提供导出连接的功能,觉得也太轻松了吧。
用编辑器打开connections.ncx文件,找到了password字段,可惜是加密过的。
有加密就会有解密,大神还是挺多的,这个python小程序真的挺有意思,一下子能全部拿下navicat保存过的密码,而且开源的,可以研究下。
https://github.com/HyperSine/how-does-navicat-encrypt-password
前段时间准备好好学学python的,可是落下了(后面必须还要捡起来,到时候再好好分析这源码),不过之前环境都配置好了,拿来直接用就可以。
使用过程中有几点问题
- Windows环境下最好用cmd,powershell好像不行,直接一闪而过,没研究什么原因。
- python目录下有三个文件:NavicatCipher.py、NcxReader.py、ShowNavicat.py
- 前两个文件都是要加参数的,所以直接用第三个ShowNavicat.py最方便,也不用navicat导出文件了,直接所有保存过的密码都出来了。
- 使用cmd切换到python目录,使用.\ShowNavicat.py或者直接ShowNavicat.py回车就可以
- 在ShowNavicat.py文件上右键使用IDLE编辑,然后直接按F5运行也可以。
好了,下回学python了再深入摸索吧。这个解密还是挺酷的。
1、NavicatCipher.py
Usage:
NavicatCrypto.py <enc|dec> [-ncx] <plaintext|ciphertext>
<enc|dec> "enc" for encryption, "dec" for decryption.
This parameter must be specified.
[-ncx] Indicate that plaintext/ciphertext is
prepared for/exported from NCX file.
This parameter is optional.
<plaintext|ciphertext> Plaintext string or ciphertext string.
NOTICE: Ciphertext string must be a hex string.
This parameter must be specified.
Example:
$ ./NavicatCipher.py enc "This is a test"
0EA71F51DD37BFB60CCBA219BE3A
$ ./NavicatCipher.py dec 0EA71F51DD37BFB60CCBA219BE3A
This is a test
$ ./NavicatCipher.py enc -ncx "This is a test"
B75D320B6211468D63EB3B67C9E85933
$ ./NavicatCipher.py dec -ncx B75D320B6211468D63EB3B67C9E85933
This is a test
$ python3
Python 3.6.7 (default, Oct 22 2018, 11:32:17)
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from NavicatCipher import *
>>> cipher = Navicat12Crypto()
>>> cipher.EncryptString('This is a test')
'0EA71F51DD37BFB60CCBA219BE3A'
>>> cipher.DecryptString('0EA71F51DD37BFB60CCBA219BE3A')
'This is a test'
>>> cipher.EncryptStringForNCX('This is a test')
'B75D320B6211468D63EB3B67C9E85933'
>>> cipher.DecryptStringForNCX('B75D320B6211468D63EB3B67C9E85933')
'This is a test'
2、NcxReader.py
Show database servers' information inside *.ncx file.
Usage:
NcxReader.py <Path to ncx file>
Example:
$ ./NcxReader ~/connectioms.ncx
-----------------xxxxxxxxxxxx--------------------
Connection Type = MYSQL
Host = localhost
Port = 3306
UserName = root
Password = 12345678
------------------yyyyyyyyyy---------------------
Connection Type = MYSQL
Host = example.com
Port = 3306
UserName = server
Password = 0000000000
...
...
...
3、ShowNavicat.py
Just run it in Windows. It will list all Navicat configurations inside Windows Registry.
Example:
>ShowNavicat.py
+--------------------------------------------------+
| MySQL Server |
+--------------------------------------------------+
Host: example.com
Port: 3306
Username: server
Password: 0000000000
...
...
+--------------------------------------------------+
| MariaDB Server |
+--------------------------------------------------+
...
...
+--------------------------------------------------+
| MongoDB Server |
+--------------------------------------------------+
...
...
...
...
发表回复