郁金香外挂技术-郁金香灬老师

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

2021-暑期班(火热报名中)郁金香终身VIP管理员QQ150330575
项目合作(有实力的+)视频教程+每月更新+QQ群
飞郁视频分享(每周更新)
查看: 877|回复: 0

利用DuplicateHandle 保护文件的例子

[复制链接]
发表于 2021-5-26 20:27:03 | 显示全部楼层 |阅读模式




BOOL
WINAPI
DuplicateHandle(
    _In_ HANDLE hSourceProcessHandle, //源进程  句柄 一般是当前进程 句柄
    _In_ HANDLE hSourceHandle, // 源句柄     一般是当前进程  要复制的 句柄
    _In_ HANDLE hTargetProcessHandle, //目标进程句柄  就是说源句柄要复制到的 目标进程
    _Outptr_ LPHANDLE lpTargetHandle, //返回 成功复制的句柄
    _In_ DWORD dwDesiredAccess, //句柄属性
    _In_ BOOL bInheritHandle, //是否继承
    _In_ DWORD dwOptions //选项
    );



_In_ DWORD dwOptions //选项 有以下值
#define DUPLICATE_CLOSE_SOURCE      0x00000001   //复制后关闭源句柄
#define DUPLICATE_SAME_ACCESS       0x00000002   //仅复制一个 相同权限的句柄



//保护文件的例子

  1. 以独占方式打开一个文件,然后将文件的句柄复制到另一个进程,比如复制到System进程,然后自己的进程就可以退出。

  2. 在Ring3下只要句柄没有关闭,别人就删除不了文件。



  3. #include <windows.h>
  4. #include <stdio.h>



  5. void SetPrivilege()
  6. {
  7. HANDLE hToken;
  8. LUID destLuid;
  9. TOKEN_PRIVILEGES TokenPrivileges;
  10. OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken); //获得进程访问令牌的句柄
  11. LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &destLuid);   //操作的类型为SE_DEBUG_NAME        
  12. TokenPrivileges.PrivilegeCount = 1;
  13. TokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
  14. TokenPrivileges.Privileges[0].Luid = destLuid;
  15. AdjustTokenPrivileges(hToken, FALSE, &TokenPrivileges, 0, NULL, NULL); //提升权限
  16. CloseHandle(hToken);   //关闭句柄
  17. }



  18. BOOL ProtectFile(
  19.      IN LPCTSTR pszFilePath,
  20.      IN DWORD dwProcessId,
  21.      IN BOOL bFileCanBeRead
  22.      )
  23. {
  24. HANDLE hFile;
  25. HANDLE hProcess;

  26. // get the file handle

  27. hFile = CreateFile(
  28.   pszFilePath,
  29.   GENERIC_READ,
  30.   (bFileCanBeRead ? FILE_SHARE_READ : 0),
  31.   NULL,
  32.   OPEN_EXISTING,
  33.   FILE_ATTRIBUTE_NORMAL,
  34.   NULL
  35.   );
  36. if (hFile == INVALID_HANDLE_VALUE)
  37. {
  38.   return FALSE;
  39. }

  40. // open the process handle

  41. hProcess = OpenProcess(PROCESS_DUP_HANDLE, FALSE, dwProcessId);
  42. if (!hProcess)
  43. {
  44.   printf("OpenProcess error/n");
  45.   CloseHandle(hFile);
  46.   return FALSE;
  47. }

  48. // call duplicatehandle

  49. BOOL fOk = DuplicateHandle(
  50.   GetCurrentProcess(),              // source process handle
  51.   hFile,                                     // source handle
  52.   hProcess,                              // target process handle
  53.   NULL,                                    // target handle, we don't care it
  54.   0,
  55.   FALSE,                                   
  56.   DUPLICATE_SAME_ACCESS
  57.   );

  58. CloseHandle(hFile);
  59. CloseHandle(hProcess);
  60. return fOk;
  61. }

  62. void main()
  63. {
  64. SetPrivilege();   //提升进程权限
  65. ProtectFile("C://1.txt",4,false);
  66. }
  67. ————————————————
  68. 版权声明:本文为CSDN博主「sysprogram」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
  69. 原文链接:https://blog.csdn.net/SysProgram/article/details/6305788
复制代码






郁金香外挂教程,学习中...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

限时限量优惠

QQ|小黑屋|手机版|郁金香外挂技术-郁金香灬老师 ( 苏ICP备10059359号 )

GMT+8, 2021-6-24 23:50 , Processed in 0.058003 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表