Loading... <div class="tip share">请注意,本文编写于 1657 天前,最后修改于 1657 天前,其中某些信息可能已经过时。</div> 今天在使用一个数据库时一是半会想不起来数据库的密码了,后来想起来在客户端工具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\SessionCreated<|||>1<|||>2020-04-23 09:11:48 Servers\192.168.1.1\Host<|||>1<|||>192.168.1.1 Servers\192.168.1.1\WindowsAuth<|||>3<|||>0 Servers\192.168.1.1\CleartextPluginEnabled<|||>3<|||>0 Servers\192.168.1.1\User<|||>1<|||>root Servers\192.168.1.1\Password<|||>1<|||>6A6A6A9 Servers\192.168.1.1\LoginPrompt<|||>3<|||>0 Servers\192.168.1.1\Port<|||>1<|||>3306 Servers\192.168.1.1\NetType<|||>3<|||>0 Servers\192.168.1.1\Compressed<|||>3<|||>0 Servers\192.168.1.1\LocalTimeZone<|||>3<|||>0 Servers\192.168.1.1\QueryTimeout<|||>3<|||>30 Servers\192.168.1.1\KeepAlive<|||>3<|||>20 Servers\192.168.1.1\FullTableStatus<|||>3<|||>1 Servers\192.168.1.1\Databases<|||>1<|||> Servers\192.168.1.1\Library<|||>1<|||>libmysql-6.1.dll Servers\192.168.1.1\Comment<|||>1<|||> Servers\192.168.1.1\StartupScriptFilename<|||>1<|||> Servers\192.168.1.1\TreeBackground<|||>3<|||>536870911 Servers\192.168.1.1\SSHtunnelHost<|||>1<|||> Servers\192.168.1.1\SSHtunnelHostPort<|||>3<|||>22 Servers\192.168.1.1\SSHtunnelUser<|||>1<|||> Servers\192.168.1.1\SSHtunnelPassword<|||>1<|||>1 Servers\192.168.1.1\SSHtunnelTimeout<|||>3<|||>4 Servers\192.168.1.1\SSHtunnelPrivateKey<|||>1<|||> Servers\192.168.1.1\SSHtunnelPort<|||>3<|||>3307 Servers\192.168.1.1\SSL_Active<|||>3<|||>0 Servers\192.168.1.1\SSL_Key<|||>1<|||> Servers\192.168.1.1\SSL_Cert<|||>1<|||> Servers\192.168.1.1\SSL_CA<|||>1<|||> Servers\192.168.1.1\SSL_Cipher<|||>1<|||> Servers\192.168.1.1\ServerVersionFull<|||>1<|||>5.7.29 - MySQL Community Server (GPL) Servers\192.168.1.1\ConnectCount<|||>3<|||>7 Servers\192.168.1.1\ServerVersion<|||>3<|||>50729 Servers\192.168.1.1\LastConnect<|||>1<|||>2020-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<" in r] 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 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏