易语言APC内存注入主要流程
1、打开进程
进程句柄 = OpenProcess (2035711, 假, 进程ID)
2、读入DLL文件及获取主要汇编指令
DLL文件 = 读入文件 (DLL路径)
DLL文件长度 = 取字节集长度 (DLL文件)
主要汇编指令长度 = 取字节集长度 (#PE文件)
3、创建文件映射对象
映射对象句柄 = CreateFileMappingA (-1, 0, 64, 0, DLL文件长度 + 主要汇编指令长度, “Mapc”)
4、将文件映射对象映射到当前程序内存空间
映射对象开始地址 = MapViewOfFile (映射对象句柄,2, 0, 0, DLL文件长度 + 主要汇编指令长度)
5、 写入内存
RtlMoveMemory_字节集 (映射对象开始地址, #PE文件, 主要汇编指令长度)
RtlMoveMemory_字节集 (映射对象开始地址 + 主要汇编指令长度, DLL文件, DLL文件长度)
6、关闭文件映射对象
UnmapViewOfFile (映射对象开始地址)
7、创建内存映射对象 内核
ZwMapViewOfSection (映射对象句柄, 进程句柄, 内核映射对象基址, 0, 0, 0, 内核映射对象大小, 1, 0, 64)
8、获取GetModuleHandleA地址
GetModuleHandleA地址 = GetProcAddress (GetModuleHandleA (“kernel32.dll”), “GetModuleHandleA”)
9、创建远程线程并挂起
线程句柄 = CreateRemoteTh