当前位置: 首页 > news >正文

mstsc保存用户名和密码,实现自动登录远程桌面

mstsc保存用户名和密码,实现自动登录远程桌面

https://blog.csdn.net/qq_23587541/article/details/82942365

 

MSTSC参数说明

首先可以使用mstsc /?来查看关于mstsc的参数说明

 

根据上述的命令说明,我这里实现的bat文件为

mstsc C:/a.rdp /console /v: xxx.xxx.xxx.xxx:3389  

rdp文件生成方法

(下面转载出自https://www.cnblogs.com/ypyhy/p/6113358.html)

最近由于项目需要,需要做一个rdp文件上成,然后可以直接连远程桌面的功能,在度娘和谷叔搜索一番,所得甚少。闲话少说,来点干货:

看看系统给提供的是啥样的

我们要关心得是 用户名和密码,其他参数可以慢慢了解,可是这个密码是怎么加密的呢?

使用的是一个win32里面一个叫crypt32.dll的CryptProtectData方法,好了,关键的时候来咯~~~~

 
  1. [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]

  2. internal struct DATA_BLOB

  3. {

  4. public int cbData;

  5.  
  6. public IntPtr pbData;

  7. }

  8.  
  9. [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]

  10. internal struct CRYPTPROTECT_PROMPTSTRUCT

  11. {

  12. public int cbSize;

  13.  
  14. public int dwPromptFlags;

  15.  
  16. public IntPtr hwndApp;

  17.  
  18. public string szPrompt;

  19. }

  20. [DllImport("crypt32.dll", CharSet = CharSet.Unicode, SetLastError = true)]

  21. private static extern bool CryptProtectData(ref DATA_BLOB pDataIn, string szDataDescr, ref DATA_BLOB pOptionalEntropy, IntPtr pvReserved, ref CRYPTPROTECT_PROMPTSTRUCT pPromptStruct, int dwFlags, ref DATA_BLOB pDataOut);

 

引用一下win32程序为我们生成密码。复制代码

 
  1. private static string Encrypt(string password)

  2. {

  3. byte[] bytes = Encoding.Unicode.GetBytes(password);

  4. DATA_BLOB dATA_BLOB = default(DATA_BLOB);

  5. DATA_BLOB dATA_BLOB2 = default(DATA_BLOB);

  6. DATA_BLOB dATA_BLOB3 = default(DATA_BLOB);

  7. dATA_BLOB.cbData = bytes.Length;

  8. dATA_BLOB.pbData = Marshal.AllocHGlobal(bytes.Length);

  9. Marshal.Copy(bytes, 0, dATA_BLOB.pbData, bytes.Length);

  10. dATA_BLOB3.cbData = 0;

  11. dATA_BLOB3.pbData = IntPtr.Zero;

  12. dATA_BLOB2.cbData = 0;

  13. dATA_BLOB2.pbData = IntPtr.Zero;

  14. CRYPTPROTECT_PROMPTSTRUCT cRYPTPROTECT_PROMPTSTRUCT = new CRYPTPROTECT_PROMPTSTRUCT

  15. {

  16. cbSize = Marshal.SizeOf(typeof(CRYPTPROTECT_PROMPTSTRUCT)),

  17. dwPromptFlags = 0,

  18. hwndApp = IntPtr.Zero,

  19. szPrompt = null

  20. };

  21. if (CryptProtectData(ref dATA_BLOB, "psw", ref dATA_BLOB3, IntPtr.Zero, ref cRYPTPROTECT_PROMPTSTRUCT, 1, ref dATA_BLOB2))

  22. {

  23. if (IntPtr.Zero != dATA_BLOB.pbData)

  24. {

  25. Marshal.FreeHGlobal(dATA_BLOB.pbData);

  26. }

  27. if (IntPtr.Zero != dATA_BLOB3.pbData)

  28. {

  29. Marshal.FreeHGlobal(dATA_BLOB3.pbData);

  30. }

  31. byte[] array = new byte[dATA_BLOB2.cbData];

  32. Marshal.Copy(dATA_BLOB2.pbData, array, 0, dATA_BLOB2.cbData);

  33. return BitConverter.ToString(array).Replace("-", string.Empty);

  34. }

  35. return string.Empty;

  36.  
  37. }

有密码了,替换掉开始另存为的文件里的密码,我们自己的rdp文件就有咯!

附一个文件内容方法

 
  1. private static void rdpProfile(string filename, string address, string username, string password, string colordepth)

  2. {

  3. if (File.Exists(filename))

  4. {

  5. File.Delete(filename);

  6. }

  7. using (StreamWriter streamWriter = new StreamWriter(filename, true))

  8. {

  9. streamWriter.WriteLine("screen mode id:i:2");

  10. streamWriter.WriteLine("desktopwidth:i:0");

  11. streamWriter.WriteLine("desktopheight:i:0");

  12. streamWriter.WriteLine("session bpp:i:" + colordepth);

  13. streamWriter.WriteLine("winposstr:s:0,1,0,0,1234,792");

  14. streamWriter.WriteLine("compression:i:1");

  15. streamWriter.WriteLine("keyboardhook:i:2");

  16. streamWriter.WriteLine("audiocapturemode:i:0");

  17. streamWriter.WriteLine("videoplaybackmode:i:1");

  18. streamWriter.WriteLine("connection type:i:6");

  19. streamWriter.WriteLine("displayconnectionbar:i:1");

  20. streamWriter.WriteLine("disable wallpaper:i:1");

  21. streamWriter.WriteLine("allow font smoothing:i:1");

  22. streamWriter.WriteLine("allow desktop composition:i:1");

  23. streamWriter.WriteLine("disable full window drag:i:1");

  24. streamWriter.WriteLine("disable menu anims:i:1");

  25. streamWriter.WriteLine("disable themes:i:1");

  26. streamWriter.WriteLine("disable cursor setting:i:0");

  27. streamWriter.WriteLine("bitmapcachepersistenable:i:0");

  28. streamWriter.WriteLine("full address:s:" + address);

  29. streamWriter.WriteLine("audiomode:i:0");

  30. streamWriter.WriteLine("redirectprinters:i:0");

  31. streamWriter.WriteLine("redirectcomports:i:0");

  32. streamWriter.WriteLine("redirectsmartcards:i:0");

  33. streamWriter.WriteLine("redirectclipboard:i:1");

  34. streamWriter.WriteLine("redirectposdevices:i:0");

  35. streamWriter.WriteLine("redirectdirectx:i:1");

  36. streamWriter.WriteLine("drivestoredirect:s:");

  37. streamWriter.WriteLine("autoreconnection enabled:i:1");

  38. streamWriter.WriteLine("authentication level:i:2");

  39. streamWriter.WriteLine("prompt for credentials:i:0");

  40. streamWriter.WriteLine("negotiate security layer:i:1");

  41. streamWriter.WriteLine("remoteapplicationmode:i:0");

  42. streamWriter.WriteLine("alternate shell:s:");

  43. streamWriter.WriteLine("shell working directory:s:");

  44. streamWriter.WriteLine("gatewayhostname:s:");

  45. streamWriter.WriteLine("gatewayusagemethod:i:4");

  46. streamWriter.WriteLine("gatewaycredentialssource:i:4");

  47. streamWriter.WriteLine("gatewayprofileusagemethod:i:0");

  48. streamWriter.WriteLine("promptcredentialonce:i:1");

  49. streamWriter.WriteLine("use redirection server name:i:0");

  50. streamWriter.WriteLine("use multimon:i:0");

  51. if (!string.IsNullOrEmpty(username))

  52. {

  53. streamWriter.WriteLine("username:s:" + username);

  54. }

  55. if (!string.IsNullOrEmpty(password))

  56. {

  57. streamWriter.WriteLine("password 51:b:" + password);

  58. }

  59. }

  60. }

 

————————————————————————————————————————————————————————————————————————————————————————————————————————————————

更改mstsc远程端口方法

Windows 系统中的远程终端服务是一项功能非常强大的服务,同时也成了入侵者长驻主机的通道,入侵者可以利用一些手段得到管理员账号和密码并入侵主机。下面,我们来看看如何通过修改默认端口,防范黑客入侵。

众所周知,远程终端服务基于端口3389。入侵者一般先扫描主机开放端口,一旦发现其开放了3389端口,就会进行下一步的入侵,所以我们只需要修改该务默认端口就可以避开大多数入侵者的耳目。

步骤:

1、打开“开始→运行”,输入“regedit”,打开注册表,进入以下路径:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp,看见PortNamber值了吗?其默认值是3389,修改成所希望的端口即可,例如6111。

2、再打开

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentContro1Set\Control\Tenninal Server\WinStations\RDP\Tcp,将PortNumber的值(默认是3389)修改成端口6111。

3、修改完毕,重新启动电脑,以后远程登录的时候使用端口6111就可以了。

 

相关文章:

  • mstsc命令详解
  • Loading.UpdatePreloading是什么东西,为什么会突然那么高?
  • unity中Loding.UpdatePreloading占用CPU过高如何解决?
  • [总结] 漫谈HDR和色彩管理(四)HDR标准和ACES
  • 视频名词浅析——HDR
  • 虚幻引擎学习之路:渲染模块之全局光照明
  • 我所理解的DirectX Ray Tracing
  • Unity 曲线插值(Hermite插值和Catmull_Rom插值)
  • 参数化曲线:Hermite Catmull-Rom Bezier
  • 贝塞尔曲线原理(简单阐述)
  • 插值与样条
  • Unity 打包因为资源没有 meta ,打包 assetbundle 的时候,导致资源没有打包进去
  • 深入理解color model(颜色模型)
  • LMS色彩空间
  • 计算机图形中的色彩概念
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 【RocksDB】TransactionDB源码分析
  • 【个人向】《HTTP图解》阅后小结
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • ES6 ...操作符
  • in typeof instanceof ===这些运算符有什么作用
  • Java IO学习笔记一
  • js学习笔记
  • Spring Boot快速入门(一):Hello Spring Boot
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • springboot_database项目介绍
  • 分布式熔断降级平台aegis
  • 工作手记之html2canvas使用概述
  • 关于for循环的简单归纳
  • 聚簇索引和非聚簇索引
  • 前端js -- this指向总结。
  • 使用SAX解析XML
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • Nginx实现动静分离
  • ​业务双活的数据切换思路设计(下)
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #WEB前端(HTML属性)
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (9)STL算法之逆转旋转
  • (BFS)hdoj2377-Bus Pass
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (Java数据结构)ArrayList
  • (js)循环条件满足时终止循环
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (理论篇)httpmoudle和httphandler一览
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (全注解开发)学习Spring-MVC的第三天
  • (转)重识new
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .NET 8.0 中有哪些新的变化?
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET/C# 获取一个正在运行的进程的命令行参数