惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
有赞技术团队
有赞技术团队
宝玉的分享
宝玉的分享
雷峰网
雷峰网
Hugging Face - Blog
Hugging Face - Blog
V
V2EX
大猫的无限游戏
大猫的无限游戏
博客园 - 司徒正美
D
Docker
T
The Blog of Author Tim Ferriss
罗磊的独立博客
博客园 - 叶小钗
酷 壳 – CoolShell
酷 壳 – CoolShell
Blog — PlanetScale
Blog — PlanetScale
月光博客
月光博客
J
Java Code Geeks
Jina AI
Jina AI
博客园 - 【当耐特】
C
Check Point Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
腾讯CDC
Last Week in AI
Last Week in AI
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V
Visual Studio Blog

泠泫凝的异次元空间

通过串口安装Linux | 泠泫凝的异次元空间 curl自编译 | 泠泫凝的异次元空间 Minecraft 认证服务器代理 | 泠泫凝的异次元空间 飞塔分流配置实战 | 泠泫凝的异次元空间 Windows 安全启动证书检查 | 泠泫凝的异次元空间 Lxn-OneDriveCLI | 泠泫凝的异次元空间 华三交换机配置 ERPS 环网 | 泠泫凝的异次元空间 PVE 配置 VLAN 感知 | 泠泫凝的异次元空间 MT7922 无线网卡安装 | 泠泫凝的异次元空间 无显示输出 Linux 主机配置桌面显示 | 泠泫凝的异次元空间 Wireguard 部署 SOP 手册(自用) | 泠泫凝的异次元空间 Zabbix 7.4 通过钉钉发送告警提醒 | 泠泫凝的异次元空间 Debian with xfce 通过 VNC 共享屏幕 华三S6860 IRF堆叠 | 泠泫凝的异次元空间 iPad 应用侧载 | 泠泫凝的异次元空间 Smart DNS 分区解析 | 泠泫凝的异次元空间 建立 NFS 服务器并挂载到客户端 | 泠泫凝的异次元空间 将 Android 以 MTP 方式连接至 Debian PVE 虚拟机迁移至 vCenter | 泠泫凝的异次元空间 vCenter 虚拟机迁移至 PVE | 泠泫凝的异次元空间 PVE迁移时提示密钥验证失败 | 泠泫凝的异次元空间 修改Windows设备设置区域 | 泠泫凝的异次元空间 PVE 超融合下电与上电流程 | 泠泫凝的异次元空间 记一次Zabbix异常处理 | 泠泫凝的异次元空间 苹果设备保存SHSH2 | 泠泫凝的异次元空间 PVE超融合部署 | 泠泫凝的异次元空间 树莓派启用zram | 泠泫凝的异次元空间 在 Hyper-V 上安装 EVE-NG | 泠泫凝的异次元空间 Zabbix 部署与 Windows 硬件信息收集 | 泠泫凝的异次元空间 在WSL2中安装CUDA支持 | 泠泫凝的异次元空间
恢复 SecureCRT 7.x 保存的密码 | 泠泫凝的异次元空间
Lxn's Area · 2025-09-27 · via 泠泫凝的异次元空间

在 SecureCRT 中保存的终端密码是不可以直接被查看的,本文提供了一个Python脚本用于解密该密码。仅对 SecureCRT 7.x 版本有效,8.x版本目前好像是没有有效方案。

经过查找发现获取SecureCRT明文密码中提供了一种解密的方法,但仅限Python2,我又嫌麻烦没重装Python,于是重写了脚本使其能够在Python3下运行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
from Crypto.Cipher import Blowfish
import argparse
import re

def decrypt(password_hex: str) -> str:
key1 = bytes.fromhex('5F B0 45 A2 94 17 D9 16 C6 C6 A2 FF 06 41 82 B7')
key2 = bytes.fromhex('24 A6 3D DE 5B D3 B3 82 9C 7E 06 F4 08 16 AA 07')
iv = b'\x00' * 8

c1 = Blowfish.new(key1, Blowfish.MODE_CBC, iv)
c2 = Blowfish.new(key2, Blowfish.MODE_CBC, iv)

raw = bytes.fromhex(password_hex)

padded = c1.decrypt(c2.decrypt(raw)[4:-4])

p = b''
while not padded.startswith(b'\x00\x00'):
p += padded[:2]
padded = padded[2:]

return p.decode('utf-16')

REGEX_HOSTNAME = re.compile(r'S:"Hostname"=([^\r\n]*)')
REGEX_PASWORD = re.compile(r'S:"Password"=u([0-9a-f]+)')
REGEX_PORT = re.compile(r'D:"\[SSH2\] Port"=([0-9a-f]{8})')
REGEX_USERNAME = re.compile(r'S:"Username"=([^\r\n]*)')

def hostname(x): return REGEX_HOSTNAME.search(x).group(1) if REGEX_HOSTNAME.search(x) else '???'
def password(x): return decrypt(REGEX_PASWORD.search(x).group(1)) if REGEX_PASWORD.search(x) else '???'
def port(x): return '-p %d ' % int(REGEX_PORT.search(x).group(1), 16) if REGEX_PORT.search(x) else ''
def username(x): return REGEX_USERNAME.search(x).group(1) + '@' if REGEX_USERNAME.search(x) else ''

parser = argparse.ArgumentParser(description='Decrypt SSHv2 passwords in VanDyke SecureCRT session files')
parser.add_argument('files', type=argparse.FileType('r', encoding='utf-8', errors='ignore'), nargs='+',
help='session file(s)')
args = parser.parse_args()

for f in args.files:
c = f.read().replace('\x00', '')
print(f.name)
print("ssh %s%s%s # %s" % (port(c), username(c), hostname(c), password(c)))

依赖要求不变:

1
pip install pycryptodome pywin32

解密效果:

1
2
3
D:\UserData\Desktop>python recovery.py 172.16.254.253.ini
172.16.254.253.ini
ssh admin@172.16.254.253 # Pa88w0rc1

 上一篇

Windows