Remote Desktop Manager 密码存储解密
源自数证杯 2025 个人赛 PC 分析。
刚开始没发现仿真可以直接点开看密码,直接去互联网机搜索解密算法了,搜到算法了但是没有密码,就很急。
密码解密算法
有一篇分析解密算法的文章: https://www.anquanke.com/post/id/264191
GitHub 也找到了代码: https://github.com/CaledoniaProject/Remote-Desktop-Manager-decrypter
解密算法是 3DES-ECB,解密密钥直接按连接类型硬编码。SSH 的密码是{D6037472-976A-4EAB-8135-DE779F4EDF29},RDP 的密码是{9E6D0FD3-AD2B-4fe1-BBAC-F520BF2F1AE1}。
然而案例里的连接类型是 ARD,ARD 实际使用的是 VNC,只能从软件里找硬编码的密钥了。
默认设置中存储连接配置使用数据源 SQLite,数据库文件路径:
%LocalAppData%\Devolutions\RemoteDesktopManager\Connections.db
读取 Connections 表中题目要求的连接,类型是 VNC,显然网上找的密钥不能用。
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
| <?xml version="1.0"?> <Connection> <DocumentationExternalType>Default</DocumentationExternalType> <ConnectionType>AppleRemoteDesktop</ConnectionType> <CreatedBy>DESKTOP-ROUF72C\Saki</CreatedBy> <CreationDateTime>2025-10-08T07:04:28</CreationDateTime> <ID>7336edaa-df71-4cdc-9229-51d866c515e6</ID> <KeyboardHook>OnTheLocalComputer</KeyboardHook> <Name>Linux</Name> <OpenEmbedded>true</OpenEmbedded> <MetaInformation> <PasswordHistory> <PasswordHistory> <LoggedModifiedBy>DESKTOP-ROUF72C\Saki</LoggedModifiedBy> <ModifiedBy>DESKTOP-ROUF72C\Saki</ModifiedBy> <ModifiedDateTime>2025-10-08T07:04:28</ModifiedDateTime> <SafePassword>0xPEcc0gC7U=</SafePassword> </PasswordHistory> </PasswordHistory> </MetaInformation> <VNC> <AuthentificationType>Ard</AuthentificationType> <Host>192.168.114.51</Host> <MsSafePassword>GfK3y3OCjag=</MsSafePassword> <MsUser>root</MsUser> </VNC> </Connection>
|
那么就要逆向找密钥了,先搜索已知的两个密钥,定位密钥硬编码的位置。
RDP 密钥:
1 2 3
| public class RDPConnection : BaseConnection { private static string Key() => "{9E6D0FD3-AD2B-4fe1-BBAC-F520BF2F1AE1}"; }
|
SSH 密钥:
1 2 3
| public class TerminalConnection : BaseConnection { private static string Key() => "{D6037472-976A-4EAB-8135-DE779F4EDF29}"; }
|
搜索所有继承 BaseConnection 类的连接类,找到所有算法的硬编码密钥。VNC 的密钥如下:
1 2 3
| public class VNCConnection : BaseConnection { private static string Key() => "{FBF6C5D3-9E59-49ff-A87A-D09300CA11D5}"; }
|
还有近一百种其他类型连接的加密密钥,都列在下面了。
远程连接需要一个秦始皇
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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325
| public class ActiveDirectoryConsoleConnection : BaseConnection { private static string Key() => "{BB1254C5-C00A-4F59-9B73-CF61D546E295}"; }
public class AddOnConnection : BaseConnection, IComparer<KeyFieldValue> { private static string Key() => "jjkdsflkjdf45g65ewrirendu3rewv"; }
public class AIConnection : BaseConnection { private static string Key() => "{BF3009AE-3CB2-4944-92D4-57FFCC87CA32}"; }
public class AlternateConnection : BaseConnection { private static string Key() => "{BB1C6CE8-06AD-442F-A558-20BC56D34A2C}"; }
public class AppleRemoteManagementConnection : BaseConnection { private static string Key() => "{0BEA6D3F-53BD-40C4-8910-D9F6334ABC2A}"; }
public class AwsConnection : BaseConnection { private static string Key() => "{795FEA2F-50E2-493F-BA88-653C294D1F53}"; }
public class AwsIamConnection : BaseConnection { private static string Key() => "{B7C46E20-8059-4695-B026-843AC7CD3125}"; }
public class AzureBastionConnection : BaseConnection { private static string Key() => "{C0535CEF-0A21-42DF-A62E-A8BA64275589}"; }
public class AzurePIMConnection : BaseConnection { private static string Key() => "{9FADE345-A2E0-4C31-A953-4D66E040783D}"; }
public class AzureStorageConnection : BaseConnection { private static string Key() => "{21200EF3-C1F6-4FE6-85EE-7C70C3145F71}"; }
public class BaseConnectionOverride { private static string Key() => "{FE89D686-CC25-48d2-BE44-88EB9B7BBB87}"; }
public class BoxNetConnection : BaseConnection { private static string Key() => "{A539B767-FFAF-462F-8F90-89CE2DD1094B}"; }
public class CloudBerryRemoteAssistantConnection : BaseConnection { private static string Key() => "{C0A7BA20-82B2-4105-B87C-827D5E9F5632}"; }
public class CmdConnection : BaseConnection { private static string Key() => "{77D9BF28-3740-4fdd-8CE3-398BCB0C57D2}"; }
public class ConnectionEvents : BaseConnection { private static string Key() => "{EECA861B-1442-4a4f-9B34-AB0DF8C4284B}"; }
public class ConnectionMetaInformation : BaseConnection { private static string Key() => "{359F98FA-A3C3-4D76-9F00-8749F26B1D6A}"; }
public class ConnectionOTP : BaseConnection { private static string ObfuscationKey() => "{C4F13FCA-E839-42EC-9F1C-0B2865EAE460}"; }
public class CredentialsConnection : BaseConnection { private static string Key() => "{BE136E76-C36B-4499-A834-D2892526847B}"; }
public class CyberArkDashboardConnection : BaseConnection { private static string Key() => "{DD2FCB11-C32D-462A-9C0E-1192C0D082D2}"; }
public class CyberArkPrivilegeCloudConnection : BaseConnection { private static string Key() => "{D65526DA-74CE-4422-921E-56DD733F05D6}"; }
public class CyberArkPSMConnection : BaseConnection { private static string Key() => "{8071AC7E-5FC3-4257-BD0B-904D5056C6DE}"; }
public class DamewareConnection : BaseConnection { private static string Key() => "{5B06EB99-25F9-462c-860B-58DF12DF0742}"; }
public class DataEntryConnection : BaseConnection, IWebConnection { private static string Key() => "{F97C5192-D36A-4fdd-8D95-7B8F153BC150}"; }
public class DataReportConnection : BaseConnection { private static string Key() => "{D7088559-81FA-4374-8B3C-A2C7D085DF1C}"; }
public class DCVConnection : BaseConnection { private static string Key() => "{7FAC56D0-201C-452E-9EEE-F37B4C4DF609}"; }
public class DellRemoteAccessControllerConnection : BaseConnection { private static string Key() => "{8483E6B0-3CC5-4B7E-A34C-36B2D25B71FE}"; }
public class DevolutionsGatewayConnection : BaseConnection { private static string Key() => "{9ABC0DFC-5721-4E7F-9201-0CCAEE737B2A}"; }
public class DevolutionsGatewayTunnelConnection : BaseConnection { private static string Key() => "{8410726a-dd4e-11ed-b5ea-0242ac120002}"; }
public class DocumentConnection : BaseConnection { private static string Key() => "{E8CB427E-9725-4796-91AF-3BFB492AF3D3}"; }
public class DropBoxConnection : BaseConnection { private static string Key() => "{5FC98897-92ED-481c-82AE-4C73145823C8}"; }
public class FileExplorerConnection : BaseConnection { private static string Key() => "{8F94A5F4-9753-462d-8D30-F9FAF9939BFD}"; }
public class FtpConnection : BaseConnection { private static string Key() => "{EBDBC0BD-F7CB-4cf1-9CF5-266909C480BC}"; }
public class GoogleCloudConnection : BaseConnection { private static string Key() => "{53DF1AD8-8AC7-4503-9796-900D59977277}"; }
public class GoogleDriveConnection : BaseConnection { private static string Key() => "{53DF1AD8-8AC7-4503-9796-900D59977277}"; }
public class GoogleWorkspaceConnection : BaseConnection { private static string Key() => "{E87D94B2-1564-4E3A-9fA8-CC37C1D2D97A}"; }
public class GoToAssistConnection : BaseConnection { private static string Key() => "{9858CF89-D8B7-4F28-81B4-E7BE43E10A2D}"; }
public class GroupConnection : BaseConnection { private static string Key() => "{DEC5891B-0E61-4995-81FE-8F9F1AF000BF}"; }
public class HostConnection : BaseConnection { private static string Key() => "{5B32F3B8-ABDC-4EA0-80BA-93D2657D2EC2}"; }
public class HPIntegratedLightsOutConnection : BaseConnection { private static string Key() => "{B826E796-F042-42D3-B069-F5C970DCCB15}"; }
public class HyperVConnection : BaseConnection { private static string Key() => "{25D598A2-7CFC-4f27-9149-02B884DD5E6C}"; }
public class IntelConnection : BaseConnection { private static string Key() => "{CAF388EA-0982-40ED-9F19-D500F181F6D6}"; }
public class InventoryReportConnection : BaseConnection { private static string Key() => "{C07A1A38-9705-4DD9-A2B1-EE3367B7A632}"; }
public class ITermConnection : BaseConnection { private static string Key() => "{CE3338B5-A1FA-496D-9098-BC4E54B1C3AE}"; }
public class JumpDesktopConnection : BaseConnection { private static string Key() => "{77341895-E3D1-499A-94AF-1E15216732FE}"; }
public class MsSQLServerConsoleConnection : BaseConnection { private static string Key() => "{5266949E-177B-4506-AD5E-1EB51ABB5111}"; }
public class PamConnection : BaseConnection { private static string Key() => "{c79983d4-d1d8-4fa4-a969-f0d4ac910261}"; }
public class PamProviderConnection : BaseConnection { private static string Key() => "{c79983d4-d1d8-4fa4-a969-f0d4ac910261}"; }
public class PamScriptConfiguration : BaseConnection { private static string Key() => "{c79983d4-d1d8-4fa4-a969-f0d4ac910261}"; }
public class PowerShellConnection : BaseConnection { private static string Key() => "{3DFEB8E0-B8C4-46B3-BD47-C73FED094619}"; }
public class ProxmoxConnection : BaseConnection { private static string Key() => "{98BEAEEE-5055-48C0-B91F-9F36FA5F6E84}"; }
public class ProxyTunnelConnection : BaseConnection { private static string Key() => "{0BC86374-56EF-4608-AF8D-BD92DC62B63C}"; }
public class PuttyConnection : BaseConnection { private static string Key() => "{9E6D0FD3-AD2B-4fE1-BBAD-F520BF2F1AE1}"; }
public class RadminConnection : BaseConnection { private static string Key() => "{31843699-3F29-488A-9844-D53DF42C5720}"; }
public class RDGatewayConnection : BaseConnection { private static string Key() => "{47CF6C51-E5F8-433B-A4F1-2ED408B19AE9}"; }
public class RDPConnection : BaseConnection { private static string Key() => "{9E6D0FD3-AD2B-4fe1-BBAC-F520BF2F1AE1}"; }
public class ReportToolConnection : BaseConnection { private static string Key() => "{C455DD5E-77FC-4715-A8C9-38F0FDA4C715}"; }
public class RootConnection : BaseConnection { private static string Key() => "{6382B30C-FBAB-49D0-AC47-96831E384676}"; }
public class RunAsConnection : BaseConnection { private static string Key() => "{4709B280-588F-4004-BBD6-E303C57B2FB6}"; }
public class S3Connection : BaseConnection {
private static string Key() => "{5FC98897-92ED-481c-82AE-4C73145823C8}"; }
public class SalesforceCloudConnection : BaseConnection { private static string Key() => "{9001A972-E1CD-4D5E-999E-0A3E7E236129}"; }
public class ScpConnection : BaseConnection { private static string Key() => "{D55AAA6D-B38B-4A6C-95FC-BBF9BD84385B}"; }
public class ScriptConnection : BaseConnection { private static string Key() => "{5F1E8D54-3539-4084-A6BE-8AF4D8D70721}"; }
public class ShortcutConnection : BaseConnection { private static string Key() => "{CF48D698-54C3-4F7E-90DA-8AAEFFD9C32C}"; }
public class SkyDriveConnection : BaseConnection { private static string Key() => "{0C129621-A698-4ED4-AAD8-2C122C545C5A}"; }
public class SMBConnection : BaseConnection { private static string Key() => "{BF3009AE-3CB2-4944-92D4-57FFCC87CA32}"; }
public class SNMPReportConnection : BaseConnection { private static string Key() => "{151B7571-CA52-4B03-B036-218D21605EF4}"; }
public class SplashtopDashboardConnection : BaseConnection { public static string Key() => "{587CCFAA-07B9-41DF-9A7C-1C3EDCA8DF80}"; }
public class SyncConnection : BaseConnection { private static string Key() => "{D1678DBD-23A7-43BC-B5CD-B928286C7F99}"; }
public class TeamViewerConnection : BaseConnection { private static string Key() => "jjkdsflkjdf45g65ewrirendu3rewv"; }
public class TerminalConnection : BaseConnection { private static string Key() => "{D6037472-976A-4EAB-8135-DE779F4EDF29}"; }
public class TerminalServerConnection : BaseConnection { private static string Key() => "{1B86BACE-9B7D-4CB2-BDB8-4CDEE5C86D43}"; }
public class TicketingServiceNowConnection : BaseConnection { private static string Key() => "{67387B8F-2BDB-4D1A-B6B0-E75DD1F32FB2}"; }
public class ToolConnection : BaseConnection { private static string Key() => "{9B5F2E23-E0A0-4e6a-8232-9D9E1D16EF2A}"; }
public class VMRCConnection : BaseConnection { private static string Key() { return AddOnServices.ObfuscationKey() + "{CBBA08E3-9B7E-4e4d-A306-33E47BFE05C9}"; } }
public class VMWareConnection : BaseConnection { private static string Key() => "{25D598A2-7CFC-4f27-9149-02B884DD5E6C}"; }
public class VNCConnection : BaseConnection { private static string Key() => "{FBF6C5D3-9E59-49ff-A87A-D09300CA11D5}"; }
public class VPNConnection : BaseConnection { private static string Key() => "d3214f56sdhgfbnmksfjlrir234734879"; }
public class WebConnection : BaseConnection, IWebConnection { private static string Key() => "{545727BB-9372-4f05-B560-CD97D49E1BF2}"; }
public class WebDavConnection : BaseConnection { private static string Key() => "{C26AAC4C-2924-41B4-8605-03D9B7ED5643}"; }
public class XenServerConnection : BaseConnection { private static string Key() => "{C9556DA2-45FC-4B3F-A00E-09886B4AF62B}"; }
|
解密后得到密码uika
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| import hashlib import base64 from cryptography.hazmat.decrepit.ciphers import algorithms from cryptography.hazmat.primitives.ciphers import Cipher, modes from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives import padding
key_seed = "{FBF6C5D3-9E59-49ff-A87A-D09300CA11D5}" md5_hash = hashlib.md5(key_seed.encode('utf-8')).digest()
encrypted_password = "GfK3y3OCjag=" ciphertext = base64.b64decode(encrypted_password)
cipher = Cipher(algorithms.TripleDES(md5_hash), modes.ECB(), backend=default_backend()) decryptor = cipher.decryptor() decrypted_padded = decryptor.update(ciphertext) + decryptor.finalize()
unpadder = padding.PKCS7(64).unpadder() unpadded_data = unpadder.update(decrypted_padded) + unpadder.finalize()
print(unpadded_data)
|
试着解密下192.168.114.66的密码kqc/46efIr4=,结果是T0m0r1n。
PasswordHistory的SafePassword使用的密码在PasswordHistory类中。
1 2 3
| public class PasswordHistory { private static string Key() => "{AC0D3D07-88DC-460D-B47B-CD3E9023F081}"; }
|
用这个密钥解密历史密码2pG8negw2CA=,得到tomorin。
密钥存储
那么问题又来了,RDM 的官方文档里还写了一个存储在%LocalAppData%\Devolutions\RemoteDesktopManager\RemoteDesktopManager.enc的密钥是干嘛的呢。文件里LocalKeyStored中存储了 Base64 格式的密钥。
1 2 3 4
| <?xml version="1.0"?> <OptionEncryption> <LocalKeyStored>UQZti/6QhFxB99KrC8JE6h3wgTApPFaaqapAZxES32A=</LocalKeyStored> </OptionEncryption>
|
先找到密钥存储文件对应的变量。
1 2 3 4
| public abstract class ApplicationDescriptor { public string OptionEncryptionFileName => this.OptionBaseFileName + ".enc"; public string OptionSensitiveFileName => this.OptionBaseFileName + ".stv"; }
|
如果设置了对本地文件启用 DPAPI 加密,应该要先解密文件,解密后读取LocalKeyStored。
1 2 3 4 5 6 7 8
| public static class OptionManager { private static void DoLoadOptionEncryption() { if (File.Exists(FileManager.CurrentOptionEncryptionFileName)) { if (!OptionManager.optionsInternal.EnableDPAPICryptographyOnLocalFiles && !PolicyManager.Policy.ForceEnableDPAPICryptographyOnLocalFiles) { FileManager.DecryptFile(FileManager.CurrentOptionEncryptionFileName); } try { OptionManager.OptionEncryption = (OptionEncryption) SerializationManager.LoadObjectFromFile(FileManager.CurrentOptionEncryptionFileName, typeof (OptionEncryption));
|
找LocalKeyStored的调用,看着是加密stv用的。
1
| option.OptionSensitivePacked = LocalEncryptionManager.Encrypt(bytes, optionEncryption.LocalKeyStored);
|
看样子还根据设备是否启用 FIPS 模式选择加密方式。
1 2 3 4 5 6 7 8
| public static class LocalEncryptionManager { public static byte[] Encrypt(byte[] data, byte[]? key = null) { return LocalEncryptionManager.IsFIPSMode ? Managed.Encrypt(data, key, version: CipherTextVersion.V1) : Managed.Encrypt(data, key); } ... if (Registry.LocalMachine.OpenSubKey("System\\CurrentControlSet\\Control\\Lsa\\FIPSAlgorithmPolicy")?.GetValue("Enabled") is int num) ... }
|
最终调用了一个 Native 的加解密。
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
| public static class Managed { public static byte[] Encrypt(byte[] data, byte[] key, byte[] aad = null, CipherTextVersion version = CipherTextVersion.Latest) { if (data == null || data.Length == 0) return (byte[]) null; if (key == null) throw new DevolutionsCryptoException(ManagedError.InvalidParameter); long errorCode1 = Native.EncryptSizeNative((UIntPtr) (ulong) data.Length, (ushort) version); if (errorCode1 < 0L) Utils.HandleError(errorCode1); long length = aad != null ? (long) aad.Length : 0L; byte[] result = new byte[errorCode1]; long errorCode2 = Native.EncryptNative(data, (UIntPtr) (ulong) data.Length, key, (UIntPtr) (ulong) key.Length, aad, (UIntPtr) (ulong) length, result, (UIntPtr) (ulong) result.Length, (ushort) version); if (errorCode2 < 0L) Utils.HandleError(errorCode2); return result; }
public static byte[] Decrypt(byte[] data, byte[] key, byte[] aad = null, ILegacyDecryptor legacyDecryptor = null) { if (data == null || data.Length == 0) return (byte[]) null; if (key == null) throw new DevolutionsCryptoException(ManagedError.InvalidParameter); long length = aad != null ? (long) aad.Length : 0L; byte[] array = new byte[data.Length]; long num = Native.DecryptNative(data, (UIntPtr) (ulong) data.Length, key, (UIntPtr) (ulong) key.Length, aad, (UIntPtr) (ulong) length, array, (UIntPtr) (ulong) array.Length); if (num < 0L) { if (legacyDecryptor != null && Enum.IsDefined(typeof (NativeError), (object) (int) num) && (int) num == -11) return legacyDecryptor.Decrypt(data, key); Utils.HandleError(num); } Array.Resize<byte>(ref array, (int) num); return array; } }
public static class Native { private const string LibName = "DevolutionsCrypto"; }
|
看了下 Native 像是 Rust 写的,丢给 Gemini 逆,应该是根据加密数据前的标志位判断加密算法,实际用了 AES-256-GCM 或 XChaCha20-Poly1305。具体算法不逆了,直接调库。解出来好像也不是什么重要的数据,也可能因为这份样本中没存什么重要数据。
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 43 44 45 46 47 48 49 50
| import ctypes import base64
DLL_PATH = r"C:\Program Files\Devolutions\Remote Desktop Manager\runtimes\win-x64\native\DevolutionsCrypto.dll" DevolutionsCrypto = ctypes.CDLL(DLL_PATH)
DevolutionsCrypto.Decrypt.argtypes = [ ctypes.POINTER(ctypes.c_ubyte), ctypes.c_size_t, ctypes.POINTER(ctypes.c_ubyte), ctypes.c_size_t, ctypes.POINTER(ctypes.c_ubyte), ctypes.c_size_t, ctypes.POINTER(ctypes.c_ubyte), ctypes.c_size_t ] DevolutionsCrypto.Decrypt.restype = ctypes.c_long
def Decrypt(data: bytes, key: bytes, aad: bytes = b""): data_len = len(data) key_len = len(key) aad_len = len(aad) result_buffer_type = ctypes.c_ubyte * data_len result_buffer = result_buffer_type() data_ptr = (ctypes.c_ubyte * data_len).from_buffer_copy(data) key_ptr = (ctypes.c_ubyte * key_len).from_buffer_copy(key) if aad: aad_ptr = (ctypes.c_ubyte * aad_len).from_buffer_copy(aad) else: aad_ptr = ctypes.cast(None, ctypes.POINTER(ctypes.c_ubyte))
decoded_len = DevolutionsCrypto.Decrypt( data_ptr, data_len, key_ptr, key_len, aad_ptr, aad_len, result_buffer, data_len )
return bytes(result_buffer[:decoded_len])
with open(r"C:\Users\Saki\AppData\Local\Devolutions\RemoteDesktopManager\RemoteDesktopManager.stv", "rb") as f: stv_bin = f.read()
key = base64.b64decode("UQZti/6QhFxB99KrC8JE6h3wgTApPFaaqapAZxES32A=")
plaintext = Decrypt(stv_bin, key) print(plaintext.decode("utf-8"))
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <?xml version="1.0"?> <OptionSensitive> <DataSources> <SQLiteConnectionDataSource> <DBID>08cb0446-f46d-4b31-baea-71e97484918c</DBID> <DisableAutoRefresh>false</DisableAutoRefresh> <ID>ea23d670-1099-45f3-99ee-db96f7576b36</ID> <IsAccessRequestAutoRefreshSupported>true</IsAccessRequestAutoRefreshSupported> <IsDefault>true</IsDefault> <LastKnownOfflineMode>Disabled</LastKnownOfflineMode> <Name>Local Data Source</Name> <OfflineMode>Disabled</OfflineMode> <Database>C:\Users\Saki\AppData\Local\Devolutions\RemoteDesktopManager\Connections.db</Database> <RequiresPassword>false</RequiresPassword> </SQLiteConnectionDataSource> </DataSources> <OptionMigrationVersion>2022.3.12.0</OptionMigrationVersion> </OptionSensitive>
|