首页 > 编程语言 >【python脚本】怎么解密navicat的密码(附代码)

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

时间:2025-01-23 23:54:19浏览次数:1  
标签:winreg python 解密 navicat ServerRegistryKey SSH print 服务器 QueryValueEx

1. 平台检查

import platform

if 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):
        # 加密字符串的方法
        pass

    def 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('')
        continue

    i = 0
    try:
        while True:
            # 枚举服务器并提取信息
            pass
    except OSError:
        if i == 0:
            print('No servers is found.')
            print('')
        continue

    winreg.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 = None
    ServerUsername = 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 = None
        ServerSshPort = None
        ServerSshUsername = None
        ServerSshPassword = None

    print(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

标签:winreg,python,解密,navicat,ServerRegistryKey,SSH,print,服务器,QueryValueEx
From: https://www.cnblogs.com/o-O-oO/p/18688799

相关文章

  • 《CPython Internals》阅读笔记:p336-p352
    《CPythonInternals》学习第17天,p336-p352总结,总计17页。一、技术总结1.GDBGDB是GNUDbugger的缩写。(1)安装sudoaptinstallgdb(2)创建.gdbinit文件touch~/.gdbinitvim~/.gdbinit(3)配置.gdbinit文件add-auto-load-safe-path/project/cpython注......
  • 加解密算法-知识体系
    对称加密类在对称加密算法中常用的算法有:DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK等。DES(DataEncryptionStandard数据加密标准)DES(DataEncryptionStandard)数据加密标准,速度较快,适用于加密大量数据的场合。AES(AdvancedEncryptionStandard高级加密......
  • 微信聊天解密MemoTrace v2.1.1
    软件介绍MemoTrace是一款提取WX聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告的工具。软件截图软件特色解锁手机本地微信数据库解锁PC端本地微信数据库还原微信聊天界面:文本,图片,表情包导出聊天记录:sqlite数据库,HTML(文本、图片......
  • Python多继承时子类如何调用指定父类
    在Python中,多继承是一种强大的特性,允许一个类同时继承多个父类的属性和方法。然而,当多个父类中存在同名方法时,子类需要明确调用哪个父类的方法。本文将详细介绍如何在多继承情况下,子类调用指定父类的方法。一、多继承的基本概念1.1多继承的定义多继承指一个类可以继承多个父类......
  • Python · GitHub · Linux | 使用本机作为代·理服务器
    致谢同学教我这种方法;对于强制不允许访问googlegithub的服务器,貌似非常好用目录01配置HTTP代理02配置ssh代理03用服务器A做访问服务器B的跳~板~机~01配置HTTP代理假设本机的c·lash的端口是7890,则在vscode的sshconfig里,修改:Hostserver_alias......
  • Python 和 pytesseract 实现验证码识别
    验证码识别是一个常见的自动化需求,广泛应用于数据抓取、自动登录等场景。本文将介绍如何使用Python和pytesseract(一种TesseractOCR的封装库)实现英文数字验证码的自动化识别。环境准备安装TesseractOCRTesseract是一个开源的光学字符识别(OCR)引擎,可识别多种语言和字符......
  • 用Python和Pygame打造绚丽烟花效果
    用Python和Pygame打造绚丽烟花效果摘要一年一度的春节即将到来,为了渲染节日气氛,绚丽的烟花表演是必不可少的。本文介绍了一款基于Python和Pygame库实现的烟花效果程序。该程序通过模拟烟花的发射、爆炸和粒子轨迹,结合动态文本显示,营造出逼真的烟花表演效果。文章详细解析......
  • 2025最新Python安装教程,PyCharm安装授权教程【附安装包】
    Python安装1、打开Python官网下载安装包:WelcometoPython.org注意:由于官网下载速度较慢,我这边将官网下载的安装包提前打包成了压缩文件,需要的同学可以直接点击这里免下载!2、下载完成后打开安装包: 3、按照下图,先勾选最下方两个配置选项,然后选择上方的自定义安装4、这......
  • 『Python底层原理』--CPython 虚拟机
    在Python编程的世界里,我们每天都在使用python命令运行程序,但你是否曾好奇这背后究竟发生了什么?本文将初步探究CPython(Python中最流行的实现)的一些内部机制,为了更好的来理解Python语言的底层运作。1.CPython简介CPython是用**C语言**编写的Python解释器,在众多Py......
  • pycharm导入Python解释器错误解决
     1.Pycharm中显示PleaseselectavalidPythonInterpreterhttps://blog.csdn.net/hou09tian/article/details/120900335 _________________________________________________________________________________________________________________ 1、新建环境出现问题的......