navicat保存的数据库密码忘了也能恢复

数据库多了,真的难免忘记密码,这不,本地虚拟机环境(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                  |
+--------------------------------------------------+

...
...

...
...

评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注