Loading...

今天在使用一个数据库时一是半会想不起来数据库的密码了,后来想起来在客户端工具heidisql上有保存过密码,下面讲解如何获取heidisql保存的密码。

HeidiSQL是一款开源的SQL管理工具,用于管理MYSQL,MSSQL 等数据库,很多管理工具都会把密码存在本地,HeidiSQL也是如此,但是只是经过非常简单的编码,解密的过程如下。

使用的是版本是HeidiSQL_11.0_64_Portable,配置会存在软件目录下的portable_settings.txt中,如果是安装的版的话,HeidiSQL安装版会配置信息存在以下注册表中:

```

HKEY_CURRENT_USER\Software\HeidiSQL\

```

密码会保存在以下节点下面。

```

HKEY_CURRENT_USER\Software\HeidiSQL\Servers

```

打开portable_settings.txt可以看到配置文件中有以下这样的ip 密码之类这样的信息

HeidiSQL配置文件节选:

```

Servers\192.168.1.1\SessionCreated12020-04-23 09:11:48

Servers\192.168.1.1\Host1192.168.1.1

Servers\192.168.1.1\WindowsAuth30

Servers\192.168.1.1\CleartextPluginEnabled30

Servers\192.168.1.1\User1root

Servers\192.168.1.1\Password16A6A6A9

Servers\192.168.1.1\LoginPrompt30

Servers\192.168.1.1\Port13306

Servers\192.168.1.1\NetType30

Servers\192.168.1.1\Compressed30

Servers\192.168.1.1\LocalTimeZone30

Servers\192.168.1.1\QueryTimeout330

Servers\192.168.1.1\KeepAlive320

Servers\192.168.1.1\FullTableStatus31

Servers\192.168.1.1\Databases1

Servers\192.168.1.1\Library1libmysql-6.1.dll

Servers\192.168.1.1\Comment1

Servers\192.168.1.1\StartupScriptFilename1

Servers\192.168.1.1\TreeBackground3536870911

Servers\192.168.1.1\SSHtunnelHost1

Servers\192.168.1.1\SSHtunnelHostPort322

Servers\192.168.1.1\SSHtunnelUser1

Servers\192.168.1.1\SSHtunnelPassword11

Servers\192.168.1.1\SSHtunnelTimeout34

Servers\192.168.1.1\SSHtunnelPrivateKey1

Servers\192.168.1.1\SSHtunnelPort33307

Servers\192.168.1.1\SSL_Active30

Servers\192.168.1.1\SSL_Key1

Servers\192.168.1.1\SSL_Cert1

Servers\192.168.1.1\SSL_CA1

Servers\192.168.1.1\SSL_Cipher1

Servers\192.168.1.1\ServerVersionFull15.7.29 - MySQL Community Server (GPL)

Servers\192.168.1.1\ConnectCount37

Servers\192.168.1.1\ServerVersion350729

Servers\192.168.1.1\LastConnect12020-05-09 11:32:06

```

通过反复把密码填为a r 1 aaa aaaa rrrr 之类,终于发现了算出密码的规则,以密码aaa为例子,在配置文件可以得到`6A6A6A9` 6A转为10进制得到106 减最后一位的9得到97,刚好可以对应ASCII码上的字母a,有3个6A,所以还可以还原得到aaa。

也就是说前面的都是ASCII码,最后一位是偏移量,ASCII减偏移量就是对应的密码字符。

以下是在ipython中解码的演示

```cpp

int("6A",16)

Out[1]: 106

106 - 9

Out[2]: 97

chr(97)

Out[3]: 'a'

```

以下是一个读取HeidiSQL 配置文件中的密码的python3代码:

```python

# -*- coding: utf-8 -*-

"""

2020-5-09 13:32:54 AnAn

"""

import re

settings = r"C:\Program Files\HeidiSQL_11.0_64_Portable\portable_settings.txt"

with open(settings,encoding="utf8") as f:

lines = [r.strip() for r in f.readlines() if "\\Password

passwords = [re.split("\",r)[-1] for r in lines]

def heidipass(code):

ascii = code[:-1]

d = int(code [-1])

decode = lambda x:chr(int(x,16) - d)

password = ''.join(map(decode,re.findall("\w{2}",ascii)))

return password

for r in passwords:

print(heidipass(r))

```

HeidiSQL官方网站: [http://www.heidisql.com/](http://www.heidisql.com/)

ASCII码对照表 [http://tool.oschina.net/commons?type=4](http://tool.oschina.net/commons?type=4)

最后修改:2020 年 05 月 09 日 01 : 42 PM

© 允许规范转载

赞赏

如果觉得我的文章对你有用,请随意赞赏

×Close

赞赏作者

扫一扫支付

png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAABS2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzggNzkuMTU5ODI0LCAyMDE2LzA5LzE0LTAxOjA5OjAxICAgICAgICAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+IEmuOgAAAA1JREFUCJljePfx038ACXMD0ZVlJAYAAAAASUVORK5CYII=

png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAABS2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzggNzkuMTU5ODI0LCAyMDE2LzA5LzE0LTAxOjA5OjAxICAgICAgICAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+IEmuOgAAAA1JREFUCJljePfx038ACXMD0ZVlJAYAAAAASUVORK5CYII=

支付宝支付

微信支付

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐