前言
买了个游戏,给的是一键 使用SecureCRT
启动的,内置已经写好了 SSH的账号密码 一键链接就行,但是我用卖家给的 SecureCRT
没法用啊,卖家也不知道哪里来的端,不知道账号密码...... 只好自己动手把 SecureCRT
已经保存的密码解密还原成明文
过程
好简单哩,浏览器一搜 已经有前辈写好了~ https://www.cnblogs.com/NoId/p/16754669.html
源代码是使用Python2来写的,我没安装Python2 直接用Python3运行会报错,然后丢给ChatGPT优化成了可以直接使用Python3运行的代码
# -*- coding: utf-8 -*-
from Crypto.Cipher import Blowfish
import argparse
import re
import binascii
def decrypt(password):
c1 = Blowfish.new(binascii.unhexlify('5FB045A29417D916C6C6A2FF064182B7'), Blowfish.MODE_CBC, b'\x00' * 8)
c2 = Blowfish.new(binascii.unhexlify('24A63DDE5BD3B3829C7E06F40816AA07'), Blowfish.MODE_CBC, b'\x00' * 8)
padded = c1.decrypt(c2.decrypt(binascii.unhexlify(password))[4:-4])
p = ''
while padded[:2] != b'\x00\x00':
p += padded[:2].decode('utf-16') # 直接解码为 utf-16
padded = padded[2:]
return p
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):
m = REGEX_HOSTNAME.search(x)
if m:
return m.group(1)
return '???'
def password(x):
m = REGEX_PASWORD.search(x)
if m:
return decrypt(m.group(1))
return '???'
def port(x):
m = REGEX_PORT.search(x)
if m:
return '-p %d ' % (int(m.group(1), 16))
return ''
def username(x):
m = REGEX_USERNAME.search(x)
if m:
return m.group(1) + '@'
return ''
parser = argparse.ArgumentParser(description='Tool to decrypt SSHv2 passwords in VanDyke Secure CRT session files')
parser.add_argument('files', type=argparse.FileType('r', encoding='utf-8'), 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)))
from Crypto.Cipher import Blowfish
import argparse
import re
def decrypt(password) :
c1 = Blowfish.new('5F B0 45 A2 94 17 D9 16 C6 C6 A2 FF 06 41 82 B7'.replace(' ','').decode('hex'), Blowfish.MODE_CBC, '\x00'*8)
c2 = Blowfish.new('24 A6 3D DE 5B D3 B3 82 9C 7E 06 F4 08 16 AA 07'.replace(' ','').decode('hex'), Blowfish.MODE_CBC, '\x00'*8)
padded = c1.decrypt(c2.decrypt(password.decode('hex'))[4:-4])
p = ''
while padded[:2] != '\x00\x00' :
p += padded[:2]
padded = padded[2:]
return p.decode('UTF-16')
REGEX_HOSTNAME = re.compile(ur'S:"Hostname"=([^\r\n]*)')
REGEX_PASWORD = re.compile(ur'S:"Password"=u([0-9a-f]+)')
REGEX_PORT = re.compile(ur'D:"\[SSH2\] Port"=([0-9a-f]{8})')
REGEX_USERNAME = re.compile(ur'S:"Username"=([^\r\n]*)')
def hostname(x) :
m = REGEX_HOSTNAME.search(x)
if m :
return m.group(1)
return '???'
def password(x) :
m = REGEX_PASWORD.search(x)
if m :
return decrypt(m.group(1))
return '???'
def port(x) :
m = REGEX_PORT.search(x)
if m :
return '-p %d '%(int(m.group(1), 16))
return ''
def username(x) :
m = REGEX_USERNAME.search(x)
if m :
return m.group(1) + '@'
return ''
parser = argparse.ArgumentParser(description='Tool to decrypt SSHv2 passwords in VanDyke Secure CRT session files')
parser.add_argument('files', type=argparse.FileType('r'), 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))
可能第一次不能直接运行需要安装依赖
pip install pycryptodome
pip install pywin32
使用也很简单, 运行命令后 就能看到解密后的 ssh {用户名}@{IP} # {密码}
如何查看配置文件
如果你没修改过使用安装版本安装的话文件应该就是在 %APPDATA%\VanDyke\Config\
这个路径?不是很确定
如果你是使用的绿色版像我一样使用的是游戏端里面已经配置好的 SecureCRT
,应该在文件里面的 Config\Sessions
这个路径中