通过DuplicateHandle防止文件删除
还是Ring3下的老代码,使用DuplicateHandle()获得文件句柄,复制到其他进程当中,在删除被保护文件时,会提示无法删除,在保护进程中打开。
Win XP下可以打开system进程,而这个进程PID是固定的数值4;但是Win 7下却无法打开system进程,提权后也无法打开,所以这里将句柄复制到winlogon.exe进行保护。
#include <windows.h>
#include <Psapi.h>
#include <stdio.h>
#pragma comment(lib,"Psapi.lib")
#pragma comment(lib, "Advapi32.lib") VOID EnablePriv()
{ HANDLE hToken; if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken)) { TOKEN_PRIVILEGES tkp; LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tkp.Privileges[0].Luid); tkp.PrivilegeCount = 1; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken, FALSE, &tkp, sizeof(tkp), NULL, NULL); printf("EnablePriv Ok\n"); return ; } printf("EnablePriv Error\n");
} DWORD GetProcessIdByName(CHAR *ProcessName)
{ DWORD ProcessArray[1024], ArraySize, ReturnSize; HANDLE hProcess; HMODULE hModule; CHAR NormalName[MAX_PATH] = {"UnknownProcess"}; if(!EnumProcesses(ProcessArray, sizeof(ProcessArray), &ArraySize)) { return -1; } ReturnSize = ArraySize/sizeof(DWORD); for(unsigned int i=0; i<ReturnSize; i++) { hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, ProcessArray[i]); if(hProcess) { if(EnumProcessModules(hProcess, &hModule, sizeof(hModule), &ArraySize)) { GetModuleBaseName(hProcess, hModule, NormalName, sizeof(NormalName)); if(!strcmp(NormalName, ProcessName)) { CloseHandle(hProcess); return ProcessArray[i]; } } } } CloseHandle(hProcess); return 0;
} BOOL OccupyFile(CHAR * FileName, CHAR *ProcessName)
{BOOL bRet;EnablePriv();HANDLE hProcess = OpenProcess(PROCESS_DUP_HANDLE, FALSE, 4); if (hProcess == NULL) {printf("OpenProcess PID=4 Error\n"); hProcess = OpenProcess(PROCESS_DUP_HANDLE, FALSE, GetProcessIdByName(ProcessName)); if (hProcess == NULL){printf("OpenProcess PID=ProcessName Error\n"); return FALSE;}}HANDLE hFile;HANDLE hTargetHandle;hFile = CreateFile(FileName, GENERIC_READ, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE){printf("CreateFile Error\n"); CloseHandle(hProcess);return FALSE;}bRet = DuplicateHandle(GetCurrentProcess(), hFile, hProcess, &hTargetHandle, 0, FALSE, DUPLICATE_SAME_ACCESS | DUPLICATE_CLOSE_SOURCE);CloseHandle( hProcess );return bRet;
}int main()
{OccupyFile("c:\\t.txt", "winlogon.exe");return 0;
}
通过DuplicateHandle防止文件删除相关推荐
- linux 编辑文件删除不了怎么办,Linux中文件/文件夹无法删除的解决方案
最近我们的 普通删除 如果文件是当前用户的,那么使用 rm 命令就可以删除 rm -rf file.sh 如果无法删除,则尝试使用 root 用户删除,如果无法删除那么请看下面的说明. 需要了解的命令 ...
- Linux服务器生产环境中的文件删除与替换
在Linux运维中经常遇到要替换Linux服务器系统程序或者业务应用程序文件的情况,很多人都会担心,直接替换会不会导致Linux系统程序崩溃或者应用程序崩溃,而需要关闭服务才敢替换,今天在freebu ...
- feifeicms 4.0 几处任意文件删除
1.位置Lib/Lib/Action/Admin/DataAction.class.php,两处 未经处理的GET和POST参数直接拼接到路径后,造成文件删除.但实际本地测试发现_bak文件夹默认是不 ...
- 软硬链接、文件删除原理、linux中的三种时间、chkconfig优化
第1章 软硬链接 1.1 硬链接 1.1.1 含义 多个文件拥有相同的inode号码 硬链接即文件的多个入口 1.1.2 作用 防止你误删除文件 1.1.3 如何创建硬链接 ln 命令,前面是源文件 ...
- SVN的搭建及使用(三)用TortoiseSVN修改文件,添加文件,删除文件,以及如何解决冲突,重新设置用户名和密码等...
添加文件 在检出的工作副本中添加一个Readme.txt文本文件,这时候这个文本文件会显示为没有版本控制的状态,如图: 这时候,你需要告知TortoiseSVN你的操作,如图: 加入以后,你的文件会变 ...
- Python编程基础:第三十五节 文件删除Delete a File
第三十五节 文件删除Delete a File 前言 实践 前言 我们这一节来介绍如何删除一个文件,这里需要用到函数os.remove(path)用于删除指定路径下的文件,os.rmdir(path) ...
- 如何删除tmp计算机桌面,Win10系统中tmp文件删除不了应该如何解决?
win10系统中tmp文件删除不了怎么办?有Win10系统用户反应,有后缀名为TMP的文件怎么也删除不了,当电脑开机重启之后又会出现,那么遇到这个问题应该如何解决呢?接下来就为大家分享win10系统删 ...
- java 删除文件失败_java 文件删除失败(被进程占用)
解决方案:系统进行资源强制回收//System.gc();{不建议使用} 关闭流(未及时关闭会内存溢出) 问题--- 文件删除失败 (后来发现是被进程占用) 发现问题--第一次测试10个文件上传成功8 ...
- PHP-代码审计-文件删除
概述 文件删除漏洞出现在文件管理功能的应用上比较多,这些应用一般也都有文件上传和读取的功能,删除原理漏洞原理跟文件读取漏洞差不多,利用的函数不一样而已 函数 常出现的函数是unlink() 挖掘经验 ...
最新文章
- Python到底有多强大?只需 15 行代码即可进行人脸检测
- mysql bypass_Bypass MySQL Safedog
- 成功解决 keras\callbacks.py:999: UserWarning: `epsilon` argument is deprecated and will be removed, use
- JZOJ 4161. 于神之怒
- 【数字图像处理】 二.MFC单文档分割窗口显示图片
- 【qduoj】奇数阶幻方 (构造)
- 5.Underfitting and Overfitting
- Java语言程序设计(基础篇) 第二章
- ajax提交数据被截断的问题
- 定义一个dto对象_java里面Dto对象跟VO的区别
- 从零开始,教初学者如何征战全球最大机器学习竞赛社区Kaggle竞赛
- Hadoop系列之DistributedCache用法
- 编译器优化对齐(字节对齐)
- shell oracle 多进程,Shell多进程实现
- liunx 的 crontab
- Linux和Solaris系统上添加默认路由和静态路由方法
- 如何下载陕西省卫星地图高清版大图
- 编程开发常用词汇(持续更新)
- Matlab是常见的高级语,高级语言具有哪些特点 试述低级语言与高级语言的特点...
- 错误代码105是什么意思
热门文章
- python统计小写字母出现次数_Python函数计算字母字符数,跟踪“e”出现的次数...
- 【求助:PowerShell激活win10失败】程序“slmgr.vbs”无法运行:找不到应用程序所在位置设置报错0xC004F074
- C++游戏开发实战视频教程
- 计算机主板上有独显怎么删除,笔记本电脑独显驱动出现问题怎么办?独显烧坏了怎么禁用?...
- CAS SSO用户认证原理分析
- advisor2002安装教程(MATLAB2014a及以下最好)
- EA免费开放的智能交易
- 微信小程序九宫格抽奖活动制作
- tcpdump抓包ftp协议_tcpdump抓包使用方法详解
- 星起航跨境:跨境卖家可以这样获得好评,稳步提升销量