发一块代码段(删除正在运行的程序文件)

keil生成的map文件全面分析 一 map文件 map文件是编译器在连接之后生成的一个文件,用来反映各个函数模块之前的调用关系以及在flash和SRAM中的分布情况,了解这个文件对深入理解嵌入式软件开发有很大的帮助。 map文件大致有4个模块: Section Cross References(代码段间的相互调用关系) Removing Unused input sections from the image.(删除冗余的模块) Image Symbol Table(代码、变量映射表) Memory Map of the image(存 阅读详情

原创 发一块代码段(删除正在运行的程序文件)收藏

作 者: 老Y 时 间: 2007-05-25,16:59 链 接: http://bbs.pediy.com/showthread.php?t=45233 先声明一下,本文的代码其实也是从别人的工具里A出来的(A=逆向+还原),所以也不敢称是原创,有同好的朋友自然知道是哪个工具里的:),另外,由于本人不太会写文章,看不明白的地方还请大家多多谅解。 回到正题,通过分析得知,删除正在运行的程序文件的关键在于hook MmFlushImageSection这个函数,该函数原型BOOLEAN MmFlushImageSection(                  PSECTION_OBJECT_POINTERS SectionObjectPointer,                  MMFLUSH_TYPE FlushType),其流程大概如下: 1.打开要删除的文件,如:调用IoCreateFile 2.把要删除的文件属性设为Normal 3.Hook ntfs和fatfast内的引入函数MmFlushImageSection 4.发送删除IRP 大概代码如下(比较简单的一个Demo): void ForceDeleteFile(PVOID ThreadContext) {   int krResult = FALSE;   int krRetCode = FALSE;   //NTSTATUS rc;   HANDLE hFile = NULL, hFileSystem = NULL, SectionHandle = NULL;   CHAR *FileName = (CHAR*)ThreadContext;   CHAR szFileSystem[MAX_PATH_LEN];   PUCHAR  pMap = NULL;   ULONG  uMapSize = 0;   PVOID  OrgFunc = NULL, OrgFunc_Ptr = NULL;   KFile  ntfs, fastfat, del;      //UNICODE_STRING usFileName;   //PFILE_OBJECT pFileObject = NULL;   //OBJECT_ATTRIBUTES ob;   DEBUG_BREAK;   krRetCode = del.OpenFile(FileName, GENERIC_READ);   PROCESS_ERROR(krRetCode);   dprintf("Open %s successful./n", FileName);   krResult = del.SetFileAttributeToNormal();   PROCESS_ERROR(krResult);   strcpy(szFileSystem, DRIVERS_PATH);   strcat(szFileSystem, "ntfs.sys");   krRetCode = ntfs.OpenFile(szFileSystem, GENERIC_READ);   PROCESS_ERROR(krRetCode);   g_Deleted = TRUE;   krRetCode = ntfs.MapFile(&pMap, &uMapSize);   PROCESS_ERROR(krRetCode);      krRetCode = HookIAT(     "MmFlushImageSection",     "ntfs.sys",      pMap,     uMapSize,     (PVOID)MmFlushImageSection_New,     (PVOID*)&_MmFlushImageSection,     &OrgFunc_Ptr     );   PROCESS_ERROR(krRetCode);   krRetCode = ntfs.UnMapFile();   PROCESS_ERROR(krRetCode);   strcpy(szFileSystem, DRIVERS_PATH);   strcat(szFileSystem, "fastfat.sys");   krRetCode = fastfat.OpenFile(szFileSystem, GENERIC_READ);   PROCESS_ERROR(hFileSystem);   krRetCode = fastfat.MapFile( &pMap, &uMapSize);   PROCESS_ERROR(krRetCode);   krRetCode = HookIAT(     "MmFlushImageSection",     "fastfat.sys",      pMap,     uMapSize,     (PVOID)MmFlushImageSection_New,     (PVOID*)&_MmFlushImageSection,     &OrgFunc_Ptr     );   PROCESS_ERROR(krRetCode);   krRetCode = ntfs.UnMapFile();   PROCESS_ERROR(krRetCode);   krResult = Rd_DeleteFile(del.GetFileHandle());   PROCESS_ERROR(krResult);   krResult = TRUE; Exit0:   g_Deleted = FALSE;   if (OrgFunc && OrgFunc_Ptr)   {     UnHookIAT(_MmFlushImageSection, OrgFunc_Ptr);   }   ntfs.Close();   fastfat.Close();   del.Close();   return; } Rd_DeleteFile代码如下: int Rd_DeleteFile(HANDLE hFile) {   int krResult = FALSE;   DEVICE_OBJECT *pRealObject = NULL;   DEVICE_OBJECT *pDeviceObject = NULL;     PIRP irp;     NTSTATUS rc;     KEVENT event;     PIO_STACK_LOCATION irpSp;     IO_STATUS_BLOCK localIoStatus;   PFILE_OBJECT pFileObject = NULL;   FILE_DISPOSITION_INFORMATION disp;   ULONG Length = sizeof(FILE_DISPOSITION_INFORMATION);   disp.DeleteFile = TRUE;   rc = ObReferenceObjectByHandle(     hFile,     0,     *IoFileObjectType,     0,      (PVOID*)&pFileObject,     0);      PROCESS_DDK_ERROR(rc);   pDeviceObject = GetRealDeviceObject(pFileObject, &pRealObject);   PROCESS_ERROR(pDeviceObject);      KeInitializeEvent(&event, SynchronizationEvent, FALSE);   irp = IoAllocateIrp(pDeviceObject->StackSize, 0);   if (!irp)   {     goto Exit0;   }   irp->UserEvent = &event;   irp->UserIosb = &localIoStatus;   irp->Overlay.AsynchronousParameters.UserApcRoutine= (PIO_APC_ROUTINE) NULL;   irp->RequestorMode = 0;   irp->Tail.Overlay.Thread = PsGetCurrentThread();   irp->Tail.Overlay.OriginalFileObject = pFileObject;   irp->Flags = IRP_BUFFERED_IO;   irpSp = IoGetNextIrpStackLocation( irp );     irpSp->MajorFunction = IRP_MJ_SET_INFORMATION;     irpSp->FileObject = pFileObject;   irpSp->DeviceObject = pDeviceObject;     irp->UserBuffer = NULL;     irp->AssociatedIrp.SystemBuffer = NULL;     irp->MdlAddress = (PMDL) NULL;        __try {         irp->AssociatedIrp.SystemBuffer = ExAllocatePoolWithQuota( NonPagedPool,                                                                    Length );         RtlCopyMemory( irp->AssociatedIrp.SystemBuffer,                        &disp,                        Length );     }    __except(EXCEPTION_EXECUTE_HANDLER)    {         //         // An exception was incurred while allocating the intermediary         // system buffer or while copying the caller's data into the         // buffer. Cleanup and return an appropriate error status code.         //         IopExceptionCleanup( pFileObject,                              irp,                              (PKEVENT) NULL,                              &event );         return GetExceptionCode();     }     irp->Flags |= IRP_BUFFERED_IO | IRP_DEALLOCATE_BUFFER | IRP_DEFER_IO_COMPLETION;     irpSp->Parameters.SetFile.DeleteHandle = hFile;   irpSp->Parameters.SetFile.Length = Length;     irpSp->Parameters.SetFile.FileInformationClass = FileDispositionInformation;      irpSp->Control = 0xE0;   irpSp->CompletionRoutine = (PIO_COMPLETION_ROUTINE)Io_Completion_Routine;      if (rc == STATUS_PENDING)   {     rc = KeWaitForSingleObject(       &event,       Executive,       0,       1,       0);        }        krResult = TRUE; Exit0:   return krResult; } 原理: 该IRP最后会调用Ntfs内的NtfsSetDispositionInfo函数或Fastfat内的 FatSetPositionInfo函数(这区别于你的硬盘分区是什么文件系统),而这两个函数都会调用Ntoskrnl内的 MmFlushImageSection函数,由于我们 hook了这两驱动内的MmFlushImageSection调用,所以当它自己发送IRP 时,Hook_MmFlushImageSection就能截获请求,然后在该函数内判断SectionObjectPointer参数是否等于需要删除 文件的SectionObjectPointer,如果相等则调用原来的MmFlushImageSection并返回True(返回True表示正在被 操作的FileObject的Section不存在或没有被Map进内存),如果不相等,则返回原来的MmFlushImageSection的调用结 果。                  后记:     自己构造IRP直接与FSD通信已经是老生常谈的话题了,有兴趣的朋友可以网上找找。
快速批量删除特定格式文件实用程序 Windows API(Application Programming Interface)是一系列广泛使用于Windows操作系统中的函数、宏、数据类型和全局变量的集合。这些API提供给软件开发者一种标准方法,通过它们可以访问底层的操作系统服务,包括文件系统、网络通信、图形显示等。在批量删除文件的场景中,Windows API中的文件系统接口允许开发者编写程序来直接与文件系统交互。自动化处理的定义是指利用计算机技术和相关工具,自动执行一系列预先设定的指令和程序,以完成特定的任务。 阅读详情

相关推荐

Kernel-Force-Delete:强制删除正在运行的.exe应用程序文件或删除任何锁定的文件

内核强制删除 看看照片 QT GUI应用程序不完整 吹B群546110133

linux下删除正在运行的程序文件

linux下删除正在运行的程序文件 答:不会有任何影响。 Linux是通过link的数量来控制文件删除的,只有当一个文件不存在任何link的时候,这个文件才会被删除。一般来说,每个文件都有2个link计数器:i_count 和 i_nlink。 i_count 和 i_nlink,从VFS inode结构体中可以找到: struct inode { struct hlist_node i_hash; struct list_head i_list; struct list_head i_s

human!的专栏 3714

一种删除磁盘上锁定的或当前正在运行的可执行文件的方法。-C/C++开发

一种删除磁盘上锁定的或当前正在运行的可执行文件的方法。 这最初是由Jonas Lykkegaard发现的-我只是为此写了POC。 这也可以用于删除磁盘上的锁定文件,当前调用进程有权访问该磁盘以进行DELETE访问。 deletedelete-self-poc一种删除磁盘上已锁定或当前正在运行的可执行文件的方法。 这最初是由Jonas Lykkegaard发现的-我只是为此写了POC。 这也可以用于删除磁盘上的锁定文件,当前调用进程有权访问该磁盘以进行DELETE访问。 但是,在此POC中这是如何工作的? 使用GENERIC_READ |向当前正在运行的进程打开一个HANDLE。 同步| 删除访问。 注意,仅需要DELETE。 将主要文件流重命名为:$ DATA

文件过滤驱动学习笔记(三)

typedef struct _SECTION_OBJECT_POINTERS {  PVOID DataSectionObject;  PVOID SharedCacheMap;  PVOID ImageSectionObject; } SECTION_OBJECT_POINTERS,*PSECTION_OBJECT_POINTERS; DataSectionObject:   

lziog的专栏 1679

3D Slicer中文教程(三)—数据加载及保存方式

1.打开数据与保存数据 (1)打开数据 ——可以将数据拖拽到3D Slicer应用窗口或者从菜单栏工具栏打开。 ——多种方式加载大量数据。 有关DICOM数据,请参阅DICOM模块文档。 对于几乎所有其他(包括场景),您可以使用添加数据对话框。 有关支持的数据格式的列表,请参阅此列表。 请注意,仅部分支持列出的某些格式。 ——对于一些更复杂的格式(特别是DWI),建议首先使用DICOM到n...

weixin_33676492的博客 5535

手把手教你用西门子博图V18配置阿特拉斯PF6000拧紧枪PN通讯(附完整GSD文件与ToolsTalk配置文件)

本文详细介绍了如何使用西门子博图V18配置阿特拉斯PF6000拧紧枪的PN通讯,包括硬件连接、网络参数规划、ToolsTalk软件配置及博图工程设置。通过完整的GSD文件和配置文件,帮助工程师快速实现高精度拧紧设备与PLC的高效通讯,适用于汽车装配和电子制造等工业自动化场景。

weixin_42662293的博客 602

地址转译的相关问题(三)

内存区对象 结构体定义 typedef struct_SECTION { MMADDRESS_NODE Address;   //内存区的VAD节点,用于把所有特定类型的内存区对象组织成一颗平衡树(SEC_BASED)类型 PSEGMENT Segment;            // 段对象 LARGE_INTEGER SizeOfSection; union { ULONG Lo

商少 1066

GprMax正演模拟:为什么你的反射波‘消失’了?可能是直达波在捣鬼(附Python后处理脚本)

本文深入探讨了GprMax正演模拟中反射波信号被直达波淹没的现象,并提供了Python后处理脚本的实战指南。通过时域置零、自适应增益控制、频域滤波等多种技术,有效增强反射波信号,帮助用户解决探地雷达模拟中的常见问题。文章还包含详细的代码示例和效果评估方法,适合GPR数据处理的研究人员和工程师参考。

weixin_29305313的博客 232

NT缓存管理器(五)

CcPurgeCacheSection 这个例程被FSD用来清除cache里的所有页面映射。被清除的数据从内存中被抛弃。如果数据在清扫之前被修改了,那么对数据的更新就丢了。原型如下:          NTKERNELAPI BOOLEAN CcPurgeCacheSection (               IN PSECTION_OBJECT_POINTERS SectionObje

Tommy(凌飞)的专栏 3308

数字后端DRC Violation定位与自动化修复:Innovus与Calibre协同实战

设计规则检查(DRC)是芯片tapeout前确保版图可制造性的关键验证环节。在数字后端流程中,Calibre作为signoff级物理验证工具,会依据代工厂SVRF规则文件对GDS进行严格几何检查;而Innovus则提供快速迭代的in-design DRC反馈。两者协同成为工程师定位violation、保障流片成功的主流工作流。面对成千上万条DRC violation,高效的定位与分类思路、跨工具映射技巧,以及基于Tcl脚本的自动化修复方法,能大幅缩短物理验证周期。本文从DRC的分层定位出发,结合Innovu

weixin_29185167的博客 336

VSCode CMake 安装与配置详解

概述 在windows上使用cmake编译C/C++程序时,首先需要CMake,安装gcc/g++编译环境,然后使用VSCode 以及配置下CMakelist.txt。 所需工具: VSCode (需要安装以下插件) C/C++ C++ Intellisense CMake CMake tools CMake Tools Helper CMake MinGW 安装CMake 下载链接:...

Markus 8万+

删除运行中程序

<br />标 题: 【分享】发一块代码段(删除正在运行的程序文件)<br />作 者: 老Y<br />时 间: 2007-05-25,16:59:36<br />链 接: http://bbs.pediy.com/showthread.php?t=45233<br /><br />先声明一下,本文的代码其实也是从别人的工具里A出来的(A=逆向+还原),所以也不敢称是原创,有同好的朋友自然知道是哪个工具里的:),另外,由于本人不太会写文章,看不明白的地方还请大家多多谅解。<br /><br />回到正题,

jmp esp 748

GameFramework 框架详解之 Network网络模块 工具链

GameFramework(下面简称GF)Demo中,已经给我们提供了Network模块使用的protobuf使用的动态链接库protobuf-net.dll,但是GF并没有给我们提供protobuf相关的工具链,比如:1.proto文件自动导出对应c#的Packet类和PacketHandler类2.导出Packet类继承IReference以便使用引用池。3.自动生成Packet类和PacketHandler的Id,且保持和服务器Id一一对应。

TxNet 2903

c语言如何结束整个程序_程序如何不知不觉运行且不留痕迹?C语言专题之程序自删除技术...

前言自删除: 顾名思义,这个程序功能很简单,就是实现程序的自删除功能。是不是感到很困惑,一个程序自己运行着,怎样把自己关掉后,再把自己删除呢?结束自己进程的时候,自己也就结束了,不会再继续执行任何代码了。在程序执行的时候,文件处于打开状态,那也不能把自己给删了。是不是想不通啊,想不通就对了。想不通找找镜子就明白了哈哈实现原理程序自删除实现的思路便是:程序创建一个批处理文件,并创建进程执行,然后程序...

weixin_39840616的博客 1326

Debian Buster 软件源失效问题

摘要:基于Debian Buster的ARM64设备因系统版本结束支持(EOL)导致apt update报错404。解决方案包括:1)改用Debian官方存档源(需禁用安全检查);2)升级至受支持的Debian 11/12版本(推荐);3)临时使用第三方镜像源(不推荐)。操作步骤涉及修改sources.list、处理NTP同步问题及清理残留配置。建议优先采用版本升级方案以获得持续安全更新,避免使用过时系统带来的安全隐患。文中提供了完整命令示例和操作记录供参考。

yy_xzz的博客 2179

RIP协议

一、 Rip简介 早期在unix系统上使用,1988年才发布第一个rip协议标准“RFC1058”,是一种距离矢量(Distance-vector)协议。 1. 特点: 只关心跳数,下一跳,不关心整网拓扑。 基于传闻的路由协议。 2. 场景: 适用于规模小且可靠性要求低的网络环境,部署简单,因为其跳数限制,不适用于大型网络。 3. 工作原理: - 开启RIP发送RIP请求 - 接受请求发出响应...

ledrsnet的博客 8607

linux 运行文件

导读:和windows下的PE结构是一样的,安全逆向分析也需要这一块,这和云计算技术虚拟化也相关 本文只为整理思路,供自己日后参考。现在就从从一个执行文件a.out的运行开始,自上而下地分析linux是如何运行一个执行文件的。 1、首先,需要了解一下a.out这个目标文件。a.out在linux下是ELF(Executable Linkable Format)文件格式,该目标文件由一个文件头、代码段、数据段(已初始化)、从定位信息区、符号表及符号名字字符串构成,如下左图所示,经过链接后生成执行文件如下右图.

manongxianfeng的博客 9756

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

VC如何使程序运行后自己删除自己

有时候,我们需要创建一个运行后能够自己删除自己的可执行程序即自删除程序。很明显如果一个进程通过直接调用DeleteFile()来删除自己是不可能的。必须另想办法,经过本人在网上参考很多资料后实际测试并集众家之所长,发现有二种方法效果比较好。现在将其封装成函数,这样使用将更加容易:   方法1,调用BAT文件。 //向指定文件写入文本。如果文件不存在就创建。 int WriteTextToF

jiangqin115的专栏 682

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Xcode_代码段

Xcode_代码段 说明: 本篇博文介绍在Xocde中如何设置代码段. 如果你有经常使用的代码或注释, 每次都需要完整的写一遍, 感觉很麻烦, 又浪费时间. 那么代码段就可以完美的解决这个问题, 它只需要一个快捷键, 就可以把整段代码显示出来了. 此文章由@Scott提供技术支持

Sponge_CMZ的博客 829

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

C#正则实现匹配一块代码段

最近项目,生成聚合网关,但是生成的网关文件中,存在着不必要的代码段,比如一个类A,类B等 之前一直使用手动删除,这么做劳民伤财,浪费时间,考虑使用正则写一个工具实现自动删除。 正则写法: string pattern = @"public partial class A(\s|\S)+?(}\s*?){2}"; Regex regex = new Regex(sortP...

weixin_30889885的博客 309

visual studio 快捷代码段

visual studio 创建快捷代码段 ​ 在visual studio中,使用快捷代码段,能够提升代码编写速度.因此,对于一些经常需要重复编写的代码,可以使用快捷代码段的方式来提升开发效率. ​ 在visual studio中,可以通过代码段管理器来添加快捷代码段 以添加C++快捷代码段为例,可以根据库中已有的代码段来进行更改.如上图所示,Visual Studio中的快捷代码段为库自带的代码段,通常将自定义的代码段添加到My Code Snippets中. 添加代码段 首先复制一个库中已有的

qq_43331150的博客 2424

windows编程学习——关键代码段

 多线程学习篇(一)关键代码段 一、基本概念 关键代码段:关键代码段也称之为临界区,工作在用户模式下。它是一小段代码,在执行前需要独占对一些共享资源的访问权。   优点:关键代码段工作在用户模式下,因此它简单,执行速度快。   缺点:不能在多个进程之间对线程进行同步(原因:它不是内核对象) 二、API 1、关键段相关API CRITICAL_SECTION结构体:这是一个未公开内...

Cry_Alone的博客 3592

数据段 代码段 堆 栈 BSS

BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量和静态变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。     数据段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量和静态变量的一块内存区域。数据段属于静态内存分配。    代码段:代码段(code segment/t

Music_粉饰 694

C语言禁区之程序自身删除自身?是时候展现真正的技术之自删除

前言自删除: 顾名思义,这个程序功能很简单,就是实现程序的自删除功能。是不是感到很困惑,一个程序自己运行着,怎样把自己关掉后,再把自己删除呢?结束自己进程的时候,自己也就结束了,不会再继续执行任何代码了。在程序执行的时候,文件处于打开状态,那也不能把自己给删了。是不是想不通啊,想不通就对了。想不通找找镜子就明白了哈哈实现原理程序自删除实现的思路便是:程序创建一个批处理文件,并创建进程执行,然后程序...

maomibiancheng的博客 1004

用Python删除电脑空文件夹

之前看过别人牛皮的代码段: 不需要任何工具,一键删除电脑中的空文件夹! 然后就弱弱的给出自己的解决方案: #删除硬盘里的空文件夹remove empty directory,并在桌面生成“删除的空文件夹目录.txt”文件 def rmemptydir(C=False): ''' 删除硬盘里的空文件夹remove empty directory,并在桌面生成“删除的空文件夹目录.txt”文件 :param C:True 或 False :return:无返回 '

qq_42584843的博客 467
上一篇: U盘小病毒源代码收藏
下一篇: 建一个杀毒软件查不到的文件夹
大浪淘沙1
博客等级 码龄19年 42粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值