利用Windows事件通知机制监控进程创建
利用Windows内核提供的事件通知机制,可以对系统内某一类事件的操作进行监控。比如,可以通过PsSetCreateProcessNotifyRoutineEx函数注册一个创建进程的通知,从而实现对进程创建的监控。
本文主要参考《Windows内核编程》第21章。
利用Windows内核提供的事件通知机制,可以对系统内某一类事件的操作进行监控。比如,可以通过PsSetCreateProcessNotifyRoutineEx函数注册一个创建进程的通知,从而实现对进程创建的监控。
本文主要参考《Windows内核编程》第21章。
首先,创建一个挂起状态的合法进程(比如notepad进程),然后再使用ZwUnmapViewOfSection
或NtUnmapViewOfSection
将合法的notepad模块占据的内存空间给unmap掉。接下来,向notepad的内存空间中写入恶意的PE文件,并通过修改进程的context,将入口点改为恶意PE文件的入口点。最后,使用ResumeThread
使notepad恢复执行,从而达到在notepad进程空间中运行恶意PE文件的效果。这种方法就是Process Hollowing。
本文大量参考Leitch, J. (n.d.). Process Hollowing.这篇文章。
进程注入的一种实现方法是将恶意代码直接复制到目标进程的内存空间,并通过CreateRemoteThread在目标进程中执行这段恶意代码。这个方法的一个难点在于,恶意代码复制到目标进程的内存空间后,它的基地址可能会发生变化。假如说恶意代码需要对自身某个特定地址的数据进行访问,就会访问不到这个数据,因为数据的地址已经改变了。为了解决这一问题,需要进行重定位的操作。
在之前的文章中提到,如果要使用CreateRemoteThread在目标进程中创建远程线程:
在正常使用时,远程线程的代码是在目标进程中本来就有的。
是否有一种手段,使得在目标进程中创建的远程线程,执行任意自己想要执行的代码呢?一种方法是通过DLL注入来实现。
本文记录了如何使用CreateThread和CreateRemoteThread创建线程和远程线程。
本文记录了如何使用Windows提供的ReadProcessMemory和WriteProcessMemory对其他进程的内存空间进行读写操作。
本文记录了在Windows中使用CreateProcessA创建子进程的方法。