常用软件分析
远控软件日志分析
ToDesk 日志分析
ToDesk 是一款多平台远程控制软件,支持主流操作系统Windows、Linux、Mac、Android、iOS跨平台协同操作。
默认情况下todesk日志文件保存在安装目录同级目录Logs下,在4.7以前的版本中,目录下有以service为首的文件以及以client为首的文件。其中service文件表示是被别人远控的日志。client文件表示是远控别人的日志。在4.7后的版本含4.7中,目录下不再存在以client为首的文件。

在应急响应过程中不可避免的要分析操作系统日志、数据库日志、应用系统日志,近期在应急过程中需要对远程工具todesk进行分析,现将todesk日志分析结果同步给大家,希望能给大家一些帮助。
todesk、向日葵、anydesk目前都是大家日常办公使用的远程软件,在方便大家办公的同时也方便了攻击者,攻击者可以直接利用todesk类的远程软件直接操作目标主机,绕过防护软件的策略。
向日葵日志分析
向日葵远程控制软件是一款拥有多年远控技术经验的远程控制软件,可远程控制手机,远程桌面连接,远程开机,远程管理等,并深入各行各业提供企业远程办公、企业IT运维、技术支持等企业远程解决方案。
控制端日志分析

上图分别是本机控制端日志和被控端日志文件目录结构。首先对本机控制端日志(以sunlogin_service.+时间命名)文件进行分析:
首先是当前主机的IP信息、MAC地址、操作系统信息等。

其次登录成功:

本机控制端日志中也存在一些网络连接行为,如443端口,多为向日葵的一些网站域名解析地址。在本机控制端日志中我并没有发现什么有价值的信息,如果你有更多的发现,也可私信我。
被控端日志分析
与控制端日志相比,被控端日志比较丰富,首先是目录结构,如下:

可以重点关注以sunlogin_service.+时间命名的文件、history文件。首先看history文件,记录了被远程连接的时间以及连接方式(识别码),在日常分析过程中,定位时间节点较为关键。

接下来是以sunlogin_service.+时间命名的文件,同样也是获取本地的IP、MAC、主机名等信息:

直接在原始日志中日志匹配“remote ip”,可以看到控制端的主机出口IP地址。

端口为4118的IP地址则为向日葵相关域名的解析地址,可忽略。如果不放心,可以使用情报平台的IP解析域名功能进行确认。

TeamViewer 日志分析
控制端日志分析
1. 路径
获取有效的日志文件首先要找到正确的路径,即名为”TeamViewer15_Logfile.log”的文本文档。
如果不在默认路径中,可以通过桌面的TeamViewer图标,【右键】点击图标,选择【打开文件所在位置】,然后找到名为”TeamViewer15_Logfile.log”的文本文档,如图1所示。

2. 确定有效时间
通过查看文件的”创建时间”可以判断日志是否被修改过,因为文件被编辑后”修改日期”也会随之变化。【右键】点击文件,选择【属性】,即可查看”创建时间”(目的是查看日志是否被嫌疑人编辑过)。

3. 通过 IP 或者关键词找到特征点
“主控端”日志文件:


被控端日志分析

VPN软件分析
VPN/代理软件取证的核心目标:找到 VPN 服务器地址(IP/域名)、账号凭据、连接时间线。通用检查点先过一遍,再按具体软件深挖。
通用取证点
- 安装目录与配置:
C:\Program Files\、%AppData%\、%ProgramData%\下按软件名找配置文件 - 虚拟网卡:设备管理器 /
ipconfig /all看 TAP-Windows、Wintun、TUN 适配器——装了虚拟网卡基本说明用过 VPN - 系统代理设置(代理类软件):
HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings的ProxyEnable、ProxyServer(如127.0.0.1:7890) - 事件日志:
Microsoft-Windows-RasClient/Operational:Windows 自带 VPN 的连接/断开记录- 网卡创建、服务安装(Event 7045)时间可定位 VPN 首次使用时间
- 进程与服务列表:正在运行的 OpenVPN、EasyConnect 等服务进程
OpenVPN
- 配置文件
*.ovpn:内含remote <服务器> <端口>、CA/客户端证书、有的直接内嵌私钥 - 位置:
C:\Program Files\OpenVPN\config\、%USERPROFILE%\OpenVPN\config\ - 日志:
log目录下的连接日志,含连接时间与对端 IP - 注册表:
HKLM\SOFTWARE\OpenVPN记录安装路径与配置目录
WireGuard
- 配置文件
*.conf(C:\Program Files\WireGuard\Data\Configurations\):[Interface]含本机私钥,[Peer]含对端公钥、Endpoint(服务器 IP:端口)、AllowedIPs - 注册表:
HKLM\SOFTWARE\WireGuard - WireGuard 本身不写连接日志,时间线靠事件日志与配置文件修改时间
代理类(Clash / v2rayN / Shadowsocks 等)
比赛和内网取证中高频,本质是本地代理 + 境外/跳板节点:
- Clash 系:
config.yaml(~/.config/clash/或软件目录)——proxies段列出全部节点的服务器、端口、密码/UUID、协议(ss/vmess/trojan);proxy-providers里的订阅 URL 可拉取完整节点列表 - v2rayN:
guiConfigs\guiNConfig.json保存节点与本地端口(默认 10808) - SSR:
gui-config.json,明文存服务器地址、端口、密码、加密方式 - 本地监听端口特征:Clash 7890、v2rayN 10808、SSR 1080——在
netstat记录或内存取证中见到即高度可疑 - 日志目录记录访问过的域名/IP,可直接还原通过代理访问过哪些目标
企业 VPN
- 深信服 EasyConnect:安装目录与
%AppData%\Sangfor\下有配置与日志;登录日志含账号、接入 IP、时间 - Cisco AnyConnect:
%ProgramData%\Cisco\Cisco AnyConnect Secure Mobility Client\下preferences.xml记录默认网关地址;完整日志用 DART 工具收集 - Windows 自带 VPN:连接配置在
%AppData%\Microsoft\Network\Connections\Pbk\rasphone.pbk(含服务器地址、认证方式),连接记录看 RasClient 事件日志
分析思路
- 从配置/注册表提取服务器 IP/域名 → 反查归属(机房/IDC/境外),判断是商业 VPN、自建跳板还是违规外联
- 用日志 + 事件日志 + 配置文件 MAC 时间拼连接时间线(首次安装、每次连接起止)
- 代理类软件重点看访问日志,判断流量去向;企业 VPN 重点核对接入账号与源 IP
密码保护软件
这类软件把凭据集中存放或用主密码统一保护,取证目标是:拿到存密码的数据文件/注册表 → 离线爆破主密码或直接解密还原。分两类——专门的密码管理器,和内置”记住密码”功能的软件。
通用思路
按成本从低到高选择路径:
- 活机直接导出:软件处于已解锁/已登录状态,直接跑导出工具(HackBrowserData、SharpXDecrypt)或 dump 进程内存拿主密钥,不用破任何密码
- 弱加密直接还原:固定密钥/混淆存储的(Navicat、VNC、FinalShell),公开脚本秒解,不要浪费时间去爆破
- 找辅助解锁材料:KeePass 的 keyfile、BitLocker 的恢复密钥、微软账户云备份——找到就跳过爆破
- 提取 hash 离线爆破:
*2john提取 → hashcat/john 选对应模式 → 字典 + 规则 + 掩码 - 爆破时字典优先用目标机器上已还原的其他密码(Xshell/Navicat/浏览器)做密码画像,复用率很高
密码管理器
1Password
以 1Password 8(2022 起改为 Electron + 账户制)为分界,新旧两代的存储形态和破解路径完全不同。
老版(1Password 4–7):本地保险库文件
保险库是磁盘上的独立目录,可整个拷走离线处理:
- 1Password 4 及更早:
.agilekeychain - 1Password 6/7 本地保险库:
.opvault破解步骤(有现成公开工具链):
# 1. 提取 hash(john jumbo 自带这两个脚本)
agilekeychain2john vault.agilekeychain > 1p.hash
opvault2john vault.opvault > 1p.hash
# 2. 爆破
hashcat -m 6600 -a 0 1p.hash wordlist.txt # agilekeychain
hashcat -m 8200 -a 0 1p.hash wordlist.txt # opvault / cloudkeychain- 老版只认主密码一个因素,提到 hash 就是纯离线爆破问题
也可以用 Passware Kit / Elcomsoft 直接导入保险库,省去提 hash 步骤
- 将
profile,js提取出来 - 爆破
新版(1Password 8+):无独立保险库文件
- 不再有本地保险库目录;数据以账户为中心存云端,本地只有
%LocalAppData%\1Password\下的加密 SQLite 缓存 - 解锁强制要求主密码 + Secret Key(128 位账户密钥)双重因素,缺一不可
- 没有公开的 2john/hashcat 提取器,旧工具链到此为止
可行路径:
- 商用工具:Passware Kit / Elcomsoft 对新版本地缓存的支持以官网版本说明为准,这是目前最现实的爆破途径
- 软件已解锁时 dump
1Password.exe(Electron 进程)内存,提取会话密钥直接解本地缓存 - 先找 Secret Key:它常以
1Password Emergency KitPDF 形式被用户打印/存文档目录,或存在于已登录的其他设备——拿到 Secret Key 后主密码爆破才有意义
KeePass / KeePassXC
比赛高频,数据库即一切:
- 数据库文件
.kdbx,常见位置:文档、桌面、同步盘(Dropbox/OneDrive)
破解步骤:
# 1. 提取 hash(keyfile 参与解锁时用 -k 指定,否则提取的 hash 解不开)
keepass2john db.kdbx > keepass.hash
keepass2john -k db.key db.kdbx > keepass.hash
# 2. 爆破(模式 13400 同时覆盖 KeePass 1/2)
hashcat -m 13400 -a 0 keepass.hash wordlist.txt
john --format=KeePass --wordlist=wordlist.txt keepass.hash免爆破路径(优先试):
- keyfile:找
.key/.keyx文件(XML 格式,常在数据库同目录或 U 盘),拿到后配合任意主密码尝试或直接作为解锁凭证 - 内存残留:KeePass 2.x(< 2.54)存在 CVE-2023-32784,主密码以明文形态残留在进程内存/pagefile/休眠文件中,用
keepass-password-dumper对 dump 文件跑一遍即可还原除首字符外的完整密码:python keepass_password_dumper.py keepass.DMP - 注意 KeePass 支持组合解锁:主密码 + 密钥文件 + Windows 用户账户,缺一个都解不开——先确认解锁组合再决定爆破对象
- KDF 用 Argon2 且迭代拉高时爆破极慢,此时 keyfile 和内存是突破口
Bitwarden
- 桌面端本地缓存:
%AppData%\Bitwarden\data.json,内含 AES 加密的完整 vault 副本 - KDF 参数(PBKDF2-SHA256 迭代次数 / Argon2id 参数)明文写在 data.json 里,先读出来评估爆破成本
- john/hashcat 无官方格式,用社区
bitwarden2john脚本把 data.json 转成可爆破格式,或直接交给 Passware/Elcomsoft - 活机上 CLI 已解锁时
bw export --format json直接导出全量
LastPass
- 数据主要在浏览器扩展存储(
Local Extension Settings\<扩展ID>\下的 leveldb)和%AppData%本地缓存 - hashcat 有现成模式
-m 6800(LastPass / LastPass sniffed) - PBKDF2 迭代次数随数据存储,低迭代(<100k)的旧账户爆破成本低
- 2022 年 LastPass 泄露事件后大量公开 writeup,爆破流程可直接参考
浏览器内置密码管理器
数据位置(Chrome/Edge 同构,Edge 把路径换成 Microsoft\Edge):
- 密码库:
%LocalAppData%\Google\Chrome\User Data\Default\Login Data(SQLite,logins表) - 密钥:
User Data\Local State里os_crypt.encrypted_key,AES-256-GCM 主密钥本身由 DPAPI 加密
活机导出(最省事):以目标用户身份运行其一即可全量导出密码/Cookie/历史:
HackBrowserData(跨平台,直接出明文表格)SharpChrome logins/ mimikatzdpapi::chrome
离线解密链(拿到整个 User Data 目录时):
- 解 DPAPI masterkey:需要用户 SID + 登录密码(或域备份密钥)
mimikatz dpapi::masterkey /in:"Protect\<SID>\<GUID>" /sid:<SID> /password:<登录密码> - 用 masterkey 解
Local State中的encrypted_key(DPAPI blob)→ 得到 AES-256-GCM 密钥 - 用该密钥逐个解密
Login Data中password_value(v10前缀,AES-GCM)- impacket
dpapi.py/ pypykatz 可把 1~2 步串起来自动化
- impacket
Chrome 127+ 的坑:启用 App-Bound Encryption(密文 v20 前缀),密钥改由 SYSTEM 权限的 ABE 服务加密且校验调用方路径,离线解密基本失效——只能活机提权到 SYSTEM 后借助公开 PoC 或 HackBrowserData 新版导出。
内置密码保存模块的软件
这类软件把密码”加密”存本地,但很多用的是固定密钥或弱混淆,等于白给——一律先找公开解密脚本,不要爆破。
Xshell / Xftp
应急和比赛都高频,拿到运维机的 Xshell 等于拿到整个服务器列表:
- 会话文件:
文档\NetSarang Computer\<版本号>\Xshell\Sessions\*.xsh,内含主机、端口、用户名、加密后的密码
解密步骤(未设主密码):
- 拿目标用户 SID:注册表
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList或wmic useraccount where name='xxx' get sid - 活机上目标用户上下文直接跑
SharpXDecrypt,自动遍历会话目录还原全部明文 - 离线场景:SID +
*.xsh文件交给 SharpXDecrypt / XshellDecryptor 离线模式(加密密钥由 SID + 用户名派生,不需要登录密码)
- 设了主密码(Master Password)则必须先破主密码,无现成 hashcat 模式,优先活机导出
FinalShell
- 连接配置在安装目录下
conn文件夹的 json 中,密码 DES 加密且密钥硬编码在程序 jar 里 - GitHub 搜 FinalShell 密码解密(FinalShellDecrypt 等公开脚本),粘贴密文直接还原
- 等于明文存储,搜到配置 = 拿到全部 SSH 凭据
Navicat
- 数据库连接密码存注册表:
HKCU\Software\PremiumSoft\Navicat\Servers\<连接名>的Pwd值
解密步骤:
:: 1. 导出注册表(离线取证则直接加载 NTUSER.DAT hive 读同路径)
reg export "HKCU\Software\PremiumSoft\Navicat\Servers" navicat.reg- 用公开脚本解密(GitHub:
how-does-navicat-encrypt-password的 NavicatCrypto):- Navicat ≤ 11:Blowfish,固定 key
libcckeylibcckey、IVlibcciv libcciv - Navicat 12+:key/IV 改由
SHA-1("3DC5CA39")派生,同样固定
- Navicat ≤ 11:Blowfish,固定 key
- 解密结果是明文数据库密码,连带拿到内网数据库地址/端口/账号
VNC 系(TightVNC / RealVNC / UltraVNC)
- 密码以 DES 混淆存放,密钥全网固定
e84ad660c4721ae0
解密步骤:
:: TightVNC
reg query "HKLM\SOFTWARE\TightVNC\Server" /v Password
:: UltraVNC 读安装目录 ultravnc.ini 的 passwd= 字段- 拿到的 8 字节 hex 交给 vncpwd / vncdec / Cain,或任意搜”VNC 密码在线解密”,秒出明文
- 注意 VNC 密码最长 8 字符(DES 块长限制),超长的会被截断
Bandizip
Bandizip 内部也包含一个保存密码的模块(密码管理器),有的时候需要注意一下:
- 密码管理器内容随配置保存在注册表
HKCU\Software\Bandisoft\Bandizip,保护强度低,存在公开还原方法 - 还原出的压缩包密码可用来开加密压缩包,或作为字典投喂其他爆破(用户有复用密码习惯)
速查表
| 软件 | 数据位置 | 破解方式 | hashcat 模式 |
|---|---|---|---|
| 1Password 4–7 | .agilekeychain / .opvault 保险库目录 | agilekeychain2john / opvault2john 提取后爆破 | -m 6600 / -m 8200 |
| 1Password 8+ | %LocalAppData%\1Password\ 加密缓存 | 无公开提取器;Passware/Elcomsoft、内存 dump、先找 Emergency Kit 拿 Secret Key | 无 |
| KeePass | *.kdbx | keepass2john 提取;优先找 keyfile、内存 dump(CVE-2023-32784) | -m 13400 |
| Bitwarden | %AppData%\Bitwarden\data.json | 社区 bitwarden2john / Passware;KDF 参数在文件内 | 无官方模式 |
| LastPass | 扩展存储 / %AppData% | 提取后爆破 | -m 6800 |
| Chrome/Edge | Login Data + Local State | 活机 HackBrowserData;离线 DPAPI 链;v20 只能活机 | — |
| Xshell | 文档\NetSarang Computer\...\Sessions\*.xsh | SharpXDecrypt(SID 派生密钥,无主密码直接还原) | — |
| FinalShell | 安装目录 conn\*.json | DES 硬编码密钥,公开脚本还原 | — |
| Navicat | HKCU\Software\PremiumSoft\Navicat\Servers | Blowfish 固定密钥,NavicatCrypto 直接解密 | — |
| VNC | 注册表 / ultravnc.ini | 固定 DES 密钥 e84ad660c4721ae0,vncpwd 秒解 | — |
| Bandizip | HKCU\Software\Bandisoft\Bandizip | 弱保护可还原,产物投喂字典 | — |
关联
- 加密压缩包本身的爆破(zip2john/rar2john/7z2john 与已知明文攻击)见 ZIP常见隐写与攻击手法
- 磁盘级加密的密钥恢复(BitLocker/VeraCrypt)见 磁盘管理与加密