设为首页 加入收藏

TOP

读取HeidiSQL 配置文件中的密码(一)
2017-10-09 16:55:17 】 浏览:8787
Tags:读取 HeidiSQL 配置 文件 密码

读取HeidiSQL 配置文件中的密码
2017-1-21 5:42:01 codegay

HeidiSQL是一款开源的SQL管理工具,用管理MYSQL,MSSQL 等数据库,
很多管理工具都会把密码存在本地,HeidiSQL也是的,但是只是经过非常简单的编码,所以我经过简单的分析后就知道了解密的方法。
连HeidiSQL源码都不用读...

我使用的是版本是HeidiSQL_9.4_Portable,配置会存在软件目录下的portable_settings.txt中,
HeidiSQL安装版会配置信息存在以下注册表中:

HKEY_CURRENT_USER\Software\HeidiSQL\

密码会保存在:
HKEY_CURRENT_USER\Software\HeidiSQL\Servers这个节点下面。

HeidiSQL portable版运行后也会建立注册表信息,退出软件会删除,配置信息最终会保存到portable_settings.txt中:
HKEY_CURRENT_USER\Software\HeidiSQL Portable [一串随机数]

类似这样:HKEY_CURRENT_USER\Software\HeidiSQL Portable 9532

打开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 之类这样的,然后查ASCII码表和配置文件中的密码串对比,

终于发现了算出密码的规则,以密码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(decod
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇We Chall-Training: ASCII—Write.. 下一篇Python3基础 函数的参数是可变参..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目