【python脚本】怎么解密navicat的密码(附代码)

news/2025/1/23 23:49:23/文章来源:https://www.cnblogs.com/o-O-oO/p/18688799

1. 平台检查

import platformif platform.system().lower() != 'windows':print('Please run this script in Windows.')exit(-1)

此部分借助platform.system()函数来判断当前操作系统是否为Windows。若不是,就输出提示信息并终止程序。

2. 导入必要的库

import sys, winreg
from Crypto.Hash import SHA1
from Crypto.Cipher import AES, Blowfish
from Crypto.Util import strxor

sys:用于和Python解释器交互,像退出程序这类操作。

winreg:用来操作Windows注册表。

Crypto库:用于加密和解密操作,包含SHA1哈希算法、AES和Blowfish加密算法,以及strxor异或操作工具。

3. 定义Navicat11Crypto类

class Navicat11Crypto:def __init__(self, Key=b'3DC5CA39'):self._Key = SHA1.new(Key).digest()self._Cipher = Blowfish.new(self._Key, Blowfish.MODE_ECB)self._IV = self._Cipher.encrypt(b'\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF')def EncryptString(self, s: str):# 加密字符串的方法passdef DecryptString(self, s: str):# 解密字符串的方法pass

__init__方法:初始化加密器,运用SHA1算法对密钥进行哈希处理,接着用Blowfish算法的ECB模式创建加密器,同时生成初始化向量(IV)。

EncryptString方法:把输入的字符串加密成十六进制的大写字符串。

DecryptString方法:将十六进制字符串解密为ASCII字符串。

4. 初始化加密器并定义服务器类型和注册表路径

NavicatCipher = Navicat11Crypto()
ServersTypes = {'MySQL Server': 'Software\\PremiumSoft\\Navicat\\Servers','MariaDB Server': 'Software\\PremiumSoft\\NavicatMARIADB\\Servers','MongoDB Server': 'Software\\PremiumSoft\\NavicatMONGODB\\Servers','MSSQL Server': 'Software\\PremiumSoft\\NavicatMSSQL\\Servers','OracleSQL Server': 'Software\\PremiumSoft\\NavicatOra\\Servers','PostgreSQL Server': 'Software\\PremiumSoft\\NavicatPG\\Servers',# 'SQLite Server' : 'Software\\PremiumSoft\\NavicatSQLite\\Servers'
}

NavicatCipher:初始化Navicat11Crypto类的实例。

ServersTypes:一个字典,记录不同数据库服务器类型及其对应的注册表路径。

5. 遍历服务器类型并提取信息

for ServersTypeName, ServersRegistryPath in ServersTypes.items():# 打印服务器类型信息try:ServersRegistryKey = winreg.OpenKey(winreg.HKEY_CURRENT_USER, ServersRegistryPath)except OSError:print('')print('No servers is found.')print('')continuei = 0try:while True:# 枚举服务器并提取信息passexcept OSError:if i == 0:print('No servers is found.')print('')continuewinreg.CloseKey(ServersRegistryKey)

外层for循环:对每种服务器类型进行遍历。

尝试打开对应的注册表键,若失败则表明未找到该类型的服务器,接着继续下一个类型的遍历。

内层while循环:枚举该类型下的所有服务器,提取服务器的主机名、端口、用户名、密码等信息,并且对加密的密码进行解密后显示出来。

若发生OSError异常,说明已枚举完所有服务器,若没有找到任何服务器则输出提示信息。

6. 提取服务器信息并显示

ServerName = winreg.EnumKey(ServersRegistryKey, i)
ServerRegistryKey = winreg.OpenKey(ServersRegistryKey, ServerName)try:ServerHost = winreg.QueryValueEx(ServerRegistryKey, 'Host')[0]ServerPort = winreg.QueryValueEx(ServerRegistryKey, 'Port')[0]if ServersTypeName == 'OracleSQL Server':ServerInitialDb = winreg.QueryValueEx(ServerRegistryKey, 'InitialDatabase')[0]else:ServerInitialDb = NoneServerUsername = winreg.QueryValueEx(ServerRegistryKey, 'Username')[0]ServerPassword = winreg.QueryValueEx(ServerRegistryKey, 'Pwd')[0]if len(ServerPassword) != 0:ServerPassword = NavicatCipher.DecryptString(ServerPassword)ServerUseSsh = winreg.QueryValueEx(ServerRegistryKey, 'UseSSH')[0]if ServerUseSsh != 0:ServerSshHost = winreg.QueryValueEx(ServerRegistryKey, 'SSH_Host')[0]ServerSshPort = winreg.QueryValueEx(ServerRegistryKey, 'SSH_Port')[0]ServerSshUsername = winreg.QueryValueEx(ServerRegistryKey, 'SSH_Username')[0]ServerSshPassword = winreg.QueryValueEx(ServerRegistryKey, 'SSH_Password')[0]if len(ServerSshPassword) != 0:ServerSshPassword = NavicatCipher.DecryptString(ServerSshPassword)else:ServerSshHost = NoneServerSshPort = NoneServerSshUsername = NoneServerSshPassword = Noneprint(ServerName.center(50, '-'))print('%-18s' % 'Host:', ServerHost)print('%-18s' % 'Port:', ServerPort)if ServerInitialDb != None:print('%-18s' % 'InitialDatabase:', ServerInitialDb)print('%-18s' % 'Username:', ServerUsername)print('%-18s' % 'Password:', ServerPassword)if ServerUseSsh:print('%-18s' % 'SSH Host:', ServerSshHost)print('%-18s' % 'SSH Port:', ServerSshPort)print('%-18s' % 'SSH Username:', ServerSshUsername)print('%-18s' % 'SSH Password:', ServerSshPassword)
except:print('[-] Failed to get info about server "%s". Server info may be corrupted.' % ServerName,file=sys.stderr)winreg.CloseKey(ServerRegistryKey)

借助winreg.EnumKey枚举服务器名称,再打开对应的注册表键。

运用winreg.QueryValueEx提取服务器的各项信息,像主机名、端口、用户名、密码等。

若密码存在,则使用NavicatCipher.DecryptString方法进行解密。

若使用了SSH连接,则提取SSH相关信息并解密SSH密码。

最终将服务器信息打印输出,若提取信息时出错,则输出错误提示。

综上所述,这段代码的核心功能是从Windows注册表中提取Navicat数据库连接信息并解密密码,以便查看数据库连接的详细信息。
成功!

运行得到结果:

原创 90 老猫coder

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/873926.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

### 深入敏捷之道:PSM认证与高效实践的结合

深入敏捷之道:PSM认证与高效实践的结合​ 在敏捷开发的世界中,Scrum因其灵活性和高效性成为全球最受欢迎的框架之一。而PSM(Professional Scrum Master)认证则是验证敏捷实践者专业能力的重要指标,不仅能提升个人职业竞争力,还能帮助团队更高效地实现目标。 Professional…

9. SpringCloud Alibaba Sentinel 流量控制、熔断降级、系统负载,热点规则的部署设置讲解

9. SpringCloud Alibaba Sentinel 流量控制、熔断降级、系统负载,热点规则的部署设置讲解 @目录9. SpringCloud Alibaba Sentinel 流量控制、熔断降级、系统负载,热点规则的部署设置讲解1. Sentinel 是什么?2. Sentinel 控制台3. Sentinel 下载&安装&运行4. Sentine…

MySQL训练营-慢查询诊断问题

慢查询相关参数和建议配置 slow_query_log + long_query_time 日志开关,是否记慢查询日志以及超过多长时间判定为慢查询。 查看参数设置:SHOW VARIABLES LIKE slow_query_log; SHOW VARIABLES LIKE long_query_time;实践建议:set global long_query_time=1; 分析型业务,set…

并发编程 - 线程同步(一)

线程同步确保多线程环境下共享资源安全使用,避免竞争条件和数据不一致。实现方式有避免资源共享、用户模式同步、内核模式同步和混合模式同步。经过前面对线程的尝试使用,我们对线程的了解又进一步加深了。今天我们继续来深入学习线程的新知识 —— 线程同步。01、什么是线程…

API接口开发设计

写接口看似是一个很简单的事情,但是往往越简单的事情越不容易做好,让我们看看如何写好一个接口。 01. 什么是接口 接口其实是一种规范,在生活中随处可见,比如:不同厂商的水管使用统一的水管接口对接、电脑厂商和配件厂商按照统一的 USB 接口标准进行生产完成配对、应用程序…

FZU ACM寒假集训专题一

只有前四题是自己做的,都ac。 做题思路: 前三题比较简单。第四题想法是,一个一个读字母,按照asc码值分别存储个数,用轮数减个数得出还缺几个,最后加在一起。 中间因为不清楚scanf,让getchar读到换行符出错了。 学习总结: 本专题学习了时空复杂度的计算,c++语法糖,还有…

谷歌泰坦:Transformer之后的AI时代?

介绍 2017年,谷歌发布了一篇具有革命性意义的论文,题为《Attention is All You Need》(注意力是你所需要的一切)。这篇论文引发了我们今天所经历的AI革命,并引入了Transformer模型。Transformer已经成为如今几乎所有顶级大型语言模型(LLM)的核心架构。 Transformer的优势…

2025.1.23冠词

错误分析: 对于冠词知识点掌握不透彻 需掌握知识点: ‌冠词‌是英语语法中的重要概念,主要分为不定冠词(a/an)和定冠词(the),此外还有零冠词。冠词本身不能单独使用,也没有词义,主要用于帮助指明名词的含义。‌ 不定冠词(a/an) ‌用法‌:不定冠词用于单数可数名词…

2025多校冲刺省选模拟赛7

2025多校冲刺省选模拟赛7\(T1\) A. 三色卡(card) \(0pts\)如果存在一个小矩形和大矩形的大小相同,此时另外两个矩形可以任意放,贡献是容易计算的。否则至少需要一个小矩形覆盖大矩形的两个角,通过交换长、宽钦定完全覆盖行的矩形比完全覆盖列的矩形的数量多。完全覆盖行的矩…

重试机制与 CompletableFuture 拓展

重试机制与 CompletableFuture 拓展 禁止转载。 本文旨在讨论重试机制的特点和策略,分析常用重试类库的实现,讨论为 CompletableFuture 添加重试机制的方法。文章首发同名公众号,欢迎关注。 重试示例 以下是一个常见的使用异步重试的例子,当我们需要重试功能时,只需调用 r…

DL00765-光伏故障检测高分辨率无人机热红外图像细粒度含数据集4000+张

光伏发电作为清洁能源的重要组成部分,近年来得到了广泛应用。然而,随着光伏电站规模的扩大,光伏组件在运行过程中可能会出现各种故障,如热斑、遮挡、接线盒故障等。这些故障不仅会影响光伏电站的发电效率,还可能导致更严重的安全隐患。因此,准确、及时地检测并分类这些故…

VMware安装RHEL7.9

VMware安装 可以选择官网下载或者使用其他网盘资源下载。 需要注意的是,现在官网下载需要注册其账号。 下面是安装的详细步骤: 1.找到文件所在路径。双击打开之后,可能会出现环境初始化重启。重启即可。然后再次双击打开此软件。2.勾选《我接受许可协议中的条款》。3.选择安…