首页 > 编程语言 >基于DPAPI+RDP技术实现本地打开远程程序,并映射到本地机器桌面上

基于DPAPI+RDP技术实现本地打开远程程序,并映射到本地机器桌面上

时间:2024-10-25 12:11:01浏览次数:1  
标签:DPAPI 启动器 RDP 程序 本地 注册表 服务器 远程 string

本教程使用工具所使用的环境说明: 启动器开发工具:VS2022 启动器所用客户端技术:.NET 8 + WPF 启动器其他技术:DPAPI 启动器发布的可执行程序,系统要求:Windows 7以及以上,X64 如果需要本程序,可以在网盘获取。网盘地址: 通过网盘分享的文件:RemoteShadowApp.7z 链接: https://pan.baidu.com/s/1QPstE5-1zPK-qOp8GQ90ew?pwd=6666 提取码: 6666   接下来是该工具的具体使用教程。 先对远程服务器上面的注册表进行设置。路径如下:HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services 如下图所示,目前里面没啥东西。 0   可以通过当前工具进行设置,在服务器上面打开RemoteShadowApp程序,然后点击设置注册表,即可看到注册表被自动创建成功了。这样可以直接快速设置注册表。 0 当然,如果不想在服务器上面运行,也可以手动自己设置一下。自己创建一个注册表,创建DWORD键值对,名称是 fAllowUnlistedRemotePrograms 对应的值设为1。如果觉得麻烦,那就用我上面的工具直接设置,效果也是一样的。 0   0   在本机机器上面,就可以通过远程访问目标服务器的程序了。操作如下: 例如我要打开远程桌面上的Notepad++程序 0 我需要获取服务器的IP、登陆的用户名、密码、以及NotePad++的启动程序的绝对路径,例如如下图所示。我没做记住信息功能,所以大家也可以自己创建一个记事本之类的,存储你的远程程序信息,方便粘贴进去填写。都输入完毕以后,点击 【打开远程程序】 按钮 0   注意事项:如果远程服务器有360等软件,可能会限制你的权限,例如一直卡在这个界面   0 此刻你需要点开 显示详细信息,可以看到有一个登陆按钮,点击登陆即可。这个只有部分远程服务器会出现,如果本机没有一些限制设置或者安全软件,这一步不会出现。仅在有出现这个现象的时候才需要这样操作。 0 打开的远程的notepad++程序,效果如图所示。 0 接着我们打开远程服务器,看下现象。具体如图所示效果。 0   支持打开多个远程程序,例如,我现在打开一个以前自己写的控制台程序服务,地址如下 0 在刚才的程序里面,更改启动的路径为上面的控制台服务路径,然后启动。可以看到启动成功了。并且和上一个notepad程序可以共存。 0 同样,服务器上面也并不存在控制台程序的页面,但是存在进程。控制台程序也是占用服务器资源,而不会占用本地资源。 0 如果当前没啥需要,就可以退出启动器,退出启动器对已经打开的远程程序没有任何影响。启动器只是用来提供远程程序作用,没有其他功能。 0   启动器核心功能,主要是DPAPI加密功能。DPAPI(数据保护应用程序编程接口)是微软提供的一个用于帮助保护数据安全的API,它可以简化在Windows平台上的数据加密过程。DPAPI 提供了一个系统级别的加密服务,其特点是不需要应用程序自行处理加密密钥的存储和保护。DPAPI主要用于保护敏感信息,如密码、密钥和其他个人或系统数据。 如下所示代码,我在Wesky.Net.Opentools开源项目上也有集成该功能。此处我在本程序内直接使用来加密。必须加密以后的密码,才能被远程服务器识别。 0   下面是DPAPI具体的加密和解密过程: 复制代码

 /// <summary>
 /// 加密数据
 /// </summary>
 /// <param name="dataToEncrypt"></param>
 /// <returns></returns>
 public static string EncryptData(string dataToEncrypt)
 {
     try
     {
         byte[] secret = Encoding.Unicode.GetBytes(dataToEncrypt);
         byte[] encryptedSecret = ProtectedData.Protect(secret, additionalEntropy, DataProtectionScope.LocalMachine);
         string res = string.Empty;
         foreach (byte b in encryptedSecret)
         {
             res += b.ToString("X2");
         }
         return res;

     }
     catch (Exception ex)
     {
         Console.WriteLine("加密过程中出现异常: " + ex.Message);
         return null;
     }
 }

 /// <summary>
 /// 解密数据
 /// </summary>
 /// <param name="dataToDecrypt"></param>
 /// <returns></returns>
 public static string DecryptData(string hexEncryptedData)
 {
     try
     {
         byte[] dataToDecrypt = ConvertHexStringToByteArray(hexEncryptedData);
         byte[] decryptedData = ProtectedData.Unprotect(dataToDecrypt, null, DataProtectionScope.LocalMachine);
         return Encoding.Default.GetString(decryptedData);
     }
     catch (Exception ex)
     {
         Console.WriteLine("解密过程中出现异常: " + ex.Message);
         return null;
     }
 }
复制代码

 

设置注册表的地方,也是很简单的一个写死的代码,供参考 复制代码
 // 指定注册表键的路径
 string registryPath = @"SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services"; // 根据需要修改路径
 string valueName = "fAllowUnlistedRemotePrograms"; // 注册表项名称

 try
 {
     // 创建或打开指定的注册表键
     using (RegistryKey key = Registry.LocalMachine.CreateSubKey(registryPath))
     {
         if (key != null)
         {
             // 设置值为 DWORD32 类型,并赋值为 1
             key.SetValue(valueName, 1, RegistryValueKind.DWord);
             MessageBox.Show("注册表键已创建并赋值成功。");
         }
         else
         {
             MessageBox.Show("无法创建注册表。");
         }
     }
 }
 catch (UnauthorizedAccessException)
 {
     MessageBox.Show("您没有权限设置注册表,请以管理员身份运行程序。");
 }
 catch (Exception ex)
 {
     MessageBox.Show($"设置注册表发生错误: {ex.Message}");
 }
复制代码

后记:本工具打开的远程程序,支持局域网、外网,只要你可以通过远程桌面访问的服务器或者电脑,都可以通过该方式进行启动。

如果以上内容对你有帮助,欢迎点赞、在看、转发和留言。感谢大家的支持。也欢迎关注公众号:【Dotnet Dancer】

标签:DPAPI,启动器,RDP,程序,本地,注册表,服务器,远程,string
From: https://www.cnblogs.com/chinasoft/p/18502246

相关文章

  • 如何将本地代码使用git提交至码云仓库
    1新建一个仓库填写仓库名称,私有和开源按自己的需求 2新建完成后设置自己git的提交信息 打开本地的gitbash输入以下命令,以下的--global是全局设置,以后git提交文件都用该用户信息gitconfig--globaluser.name"xxxxxx"gitconfig--globaluser.email"xxxxxxxx" ......
  • 使用本地浏览器打开远程服务器生成的网页——详细教程
    使用本地浏览器打开远程服务器生成的网页——详细教程在日常开发或运维中,我们常常需要访问部署在远程服务器上的网页应用,例如JupyterNotebook、Web服务等。通过SSH端口转发,我们可以在不暴露远程服务器端口的情况下,使用本地浏览器直接访问远程服务器生成的网页。本文将......
  • 本地环境、开发环境、测试环境的区别
    从我进公司开始,我就经常听到关于本地环境、开发环境和测试环境的讨论,但一直不明白它们的具体含义。最早我问的是睿哥,他的回答很简短,对于我这种新手来说,完全无法理解。后来我又咨询了辉哥,他的解释非常详细,但当时我刚入职,仍然没有完全弄明白。过了一两个月后,我又请教了光哥,他耐心......
  • 在笔记本电脑上,实现本地知识库和大模型检索增强生成(RAG)
    现在,我们可以引入AnythingLLM,管理本地知识库,并和Ollama结合起来,实现大模型+知识库+RAG的智能问答。1.下载AnythingLLMAnythingLLM是采用MIT许可证的开源框架,支持快速在本地部署基于检索增强生成(RAG)的大模型应用。在不调用外部接口、不发送本地数据的情况下,确保用户数据......
  • 将本地项目上传到gitlab
    当遇到先是本地创建项目开发,需要把项目传到gitlab代码托管中心的时候,可以执行一下几步操作:先在gitlab上创建好项目名称,和本地的项目名称一致,再进入本地项目文件夹下,打开git的bash客户端,执行命令1、初始化仓库,将文件夹设置为本地仓库gitinit2、建立本地与github......
  • 【NodeJS】NodeJS+mongoDB在线版开发简单RestfulAPI (八):API说明(暂时完结,后续考虑将
    本项目旨在学习如何快速使用nodejs开发后端api,并为以后开展其他项目的开启提供简易的后端模版。(非后端工程师)由于文档是代码写完之后,为了记录项目中需要注意的技术点,因此文档的叙述方式并非开发顺序(并非循序渐进的教学文档)。建议配合项目源码node-mongodb-template。【NodeJS......
  • 中国大学mooc慕课视频课件课程下载工具,如何在电脑端下载中国大学mooc慕课视频课程课件
    一.安装中国大学mooc慕课课程下载器1.获取学无止下载器https://www.xuewuzhi.cn/icourse163_downloader 2.下载安装后,然后点击桌面快捷方式运行即可。注意:杀毒软件可能会阻止外部exe文件运行,并将其当做成病毒,直接添加信任即可,本软件绝对没有木马病毒。二.使用说明1.学无......
  • 腾讯课堂上买的课程过期了怎么办?教你如何下载到本地永久观看~
    最近腾讯课堂停止运营,要下架关闭了,这篇文章主要教大家如何下载保存上面的课程前言:很多同学都遇到过购买的网课课程过期了,然后无法观看,花了钱还没学完,血亏。这里教大家一种方法,把腾讯课堂上面快过期的课程下载到电脑本地,然后可以永久观看,再也不用担心过期了~PS:对于腾讯课堂上面已......
  • 网易云课堂上买的课程过期了怎么办?教你如何下载到本地永久观看~
    前言:很多同学都遇到过购买的网课课程过期了,然后无法观看,花了钱还没学完,血亏。这里教大家一种方法,把网易云课堂上面快过期的课程下载到电脑本地,然后可以永久观看,再也不用担心过期了~【已经过期的课程也是支持下载的哦!】提示:操此方法需要用到Windows电脑,Mac还不支持一、电脑登录......
  • 中公网校上买的课程快过期了怎么办?教你如何下载到本地永久观看~
    前言:很多同学都遇到过购买的网课课程过期了,然后无法观看,花了钱还没学完,血亏。这里教大家一种方法,把中公网校上面快过期的课程下载到电脑本地,然后可以永久观看了~提示:操此方法需要使用Windows电脑,Mac还不支持一、电脑登录中公网校官网(点此登录中公网页)二、打开要下载的课程,复制......