句柄复制技术,相信很多人对这个概念还会比较陌生,究竟什么是句柄复制呢?危险漫步将他简单的理解为“将某个文件的句柄复制到一个进程里”,这里我们可以将一个没有运行或打开的文件为它复制一个句柄,从而实现文件被占用无法删除的目的。当然我们也可以这样思考,“将已经打开的文件或程序的句柄删除掉”,这样就实现了文件可以删除,达到了解锁的目的。现实中很多病毒或者是杀毒软件使用这样的技术来达到保护病毒自身或者删除恶意文件的作用。本篇文章中,危险漫步将介绍怎么通过编程的的方法来解析这些技术。
由于本文会涉及到一些比较高级的c++编程,所以考虑大多数读者的编程,笔者这里只进行部分代码的介绍与实现,更加详细的代码源代码不提供。这个软件我们采用c++控制台得模式,首先先介绍一下关于main(int argc,char *argv口)这AI函数的一些问题。main()函数是控制台程序的主函数入口,由于控制台程序可以接受参数,所以这里我们介绍一下它的参数含义。argc表示传递给控制台程序的参数的个数,*argv[]是指向参数的字符串指针,
或者是指向字符串参数的指针的指针。这个字符串必须是以0结束的字符串,第一个参数(argv[0l)表示程序的名称,—般情况下我们不关心,从argv[l]开始时真正的参数。由于涉及到进程的问题,所以我们对一些重要的函数进行一下简单介绍。
函数描述:获得进程访问令牌的句柄
函数描述:该函数将特权名字转换成一个64位的等价数值叫做LUID。
函数描述:启用或禁用特权一个有TOKENADJUST PRMEGES访问的。访问令牌。
函数描述:枚举进程信息
函数描述: 获取当前进程一个唯一的标识符
函数描述:在线程外终止一个线程,用于强制终止线程。
函数描述:为指定的进程、进程使用的堆[HEAP]、模块[MOULE].线程[THREAD])建立一个快照[snpshot]。
函数描述:是一个进程获取函数,当我们利用函数CreateTolelp32napshot()获得当前运行进程的快照后,我们可以利用Proces32Next函数来获得下一个进程的句柄。
在指出一个现有系统对象当前句柄的情况下,为那个对象创建一个新句柄。当前句柄可能位于一个不同的进程。
主要的函数危险漫步介绍完了,我们核心代码的实现就是基于上面的函数来完成的,说得简单一些就是函数的拼接,由于大部分是代码的介绍,所以建议读者自行参考源代码,文章中就不详细介绍了。下面主要介绍一下编译完毕后程序的用法,用法的实例在源程序中已经给出了,程序运行后也可以看到。这里用第四个例子的介绍一下文件的保护。对于一个没有在使用的文件,我们可以采用我们刚才编译的程序将其保护起来,具体的操作方式如下。打开cmd后来到我们程序所在的目录,输入:程序名/参数pid被保护文件名,这里我在c盘下放置了一个名字为“l.txt”的文件来做实验。我把这个匐柄复制到我当前正在运行的一个IE进程里面,进程的PID通过任务管理器可以看到是2268,所以这里输入的参数就是“clsp/p 228 c:\l.txt”,输入后按回车,如果保护成功的话会有提示“复制成功”。下面我们来打开来这个文件看一下有什么反应,它会提示“有一个程序正在使用”,当然我们也没法删除这个文件。
这个程序中实现了保护文件和解除使用的函数方法,这些方法都是在病毒文件中使用或者是杀软中使用,大家可以将这些函数一直到自己的程序中另行发挥。
本文内容所提及均为本地测试或经过目标授权同意,旨在提供教育和研究信息,内容已去除关键敏感信息和代码,以防止被恶意利用。文章内提及的漏洞均已修复,作者不鼓励或支持任何形式的非法行为。