讀取HeidiSQL 配置文件中的密碼 2017 1 21 5:42:01 codegay HeidiSQL是一款開源的SQL管理工具,用管理MYSQL,MSSQL 等資料庫, 很多管理工具都會把密碼存在本地,HeidiSQL也是的,但是只是經過非常簡單的編碼,所以我經過簡單的分析後就知道瞭解密的方 ...
讀取HeidiSQL 配置文件中的密碼
2017-1-21 5:42:01 codegay
HeidiSQL是一款開源的SQL管理工具,用管理MYSQL,MSSQL 等資料庫,
很多管理工具都會把密碼存在本地,HeidiSQL也是的,但是只是經過非常簡單的編碼,所以我經過簡單的分析後就知道瞭解密的方法。
連HeidiSQL源碼都不用讀...
我使用的是版本是HeidiSQL_9.4_Portable,配置會存在軟體目錄下的portable_settings.txt中,
如果是安裝的版的話,配置文件應該是會存在系統的用戶目錄下。
打開portable_settings.txt可以看到配置文件中有以下這樣的ip 密碼之類這樣的信息
HeidiSQL配置文件節選:
Servers\Unnamed-2\SessionCreated<|||>1<|||>2017-01-20 13:32:21
Servers\Unnamed-2\Host<|||>1<|||>127.0.0.1
Servers\Unnamed-2\WindowsAuth<|||>3<|||>0
Servers\Unnamed-2\User<|||>1<|||>root
Servers\Unnamed-2\Password<|||>1<|||>6A6A6A9
Servers\Unnamed-2\LoginPrompt<|||>3<|||>0
Servers\Unnamed-2\Port<|||>1<|||>3306
Servers\Unnamed-2\NetType<|||>3<|||>0
Servers\Unnamed-2\Compressed<|||>3<|||>0
Servers\Unnamed-2\LocalTimeZone<|||>3<|||>0
Servers\Unnamed-2\QueryTimeout<|||>3<|||>0
Servers\Unnamed-2\KeepAlive<|||>3<|||>0
Servers\Unnamed-2\FullTableStatus<|||>3<|||>1
Servers\Unnamed-2\Databases<|||>1<|||>
Servers\Unnamed-2\Comment<|||>1<|||>
Servers\Unnamed-2\StartupScriptFilename<|||>1<|||>
Servers\Unnamed-2\SSHtunnelHost<|||>1<|||>
Servers\Unnamed-2\SSHtunnelHostPort<|||>3<|||>0
Servers\Unnamed-2\SSHtunnelUser<|||>1<|||>
Servers\Unnamed-2\SSHtunnelPassword<|||>1<|||>1
Servers\Unnamed-2\SSHtunnelTimeout<|||>3<|||>4
Servers\Unnamed-2\SSHtunnelPrivateKey<|||>1<|||>
Servers\Unnamed-2\SSHtunnelPort<|||>3<|||>3307
Servers\Unnamed-2\SSL_Active<|||>3<|||>0
Servers\Unnamed-2\SSL_Key<|||>1<|||>
Servers\Unnamed-2\SSL_Cert<|||>1<|||>
Servers\Unnamed-2\SSL_CA<|||>1<|||>
Servers\Unnamed-2\SSL_Cipher<|||>1<|||>
當時分析的過程當中,我嘗試去看HeidiSQL的源碼中對密碼編碼解碼的部分,稍微在GITHUB上搜索了一下,
不過沒有定位到對應的代碼段。哈哈,太水了。
我通過反覆把密碼填為a r 1 aaa aaaa rrrr 之類這樣的
終於發現了算出密碼的規則,以密碼aaa為例子,
在配置文件可以得到6A6A6A9
6A轉為10進位得到106 減最後一位的9得到97,剛好可以對應ASCII碼上的字母a,有3個6A,所以還可以還原得到aaa
也就是說前面的都是ASCII碼,最後一位是偏移量,ASCII減偏移量就是對應的密碼字元。
以下是在ipython中解碼的演示
int("6A",16)
Out[1]: 106
106 - 9
Out[2]: 97
chr(97)
Out[3]: 'a'
以下是一個讀取HeidiSQL 配置文件中的密碼的python3代碼:
# -*- coding: utf-8 -*-
"""
2017-1-21 3:42:54 codegay
"""
import re
settings = r"D:\臨安初雨\Soft\HeidiSQL_9.4_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/
ASCII碼對照表 http://tool.oschina.net/commons?type=4 (沒有16進位,差評)
2017-1-22 3:30:25 補充: 這個鏈接有其他用戶帖出了各種語言版本的代碼 https://gist.github.com/jpatters/4553139