笔记
启动器:安装一些东西达到恶意行为对用户隐藏,设置自身或恶意代码启动。例如通过资源段隐藏恶意代码。
相关API函数:FindResource,LoadResource以及SizeofResource。
进程注入:将恶意代码注入到另一个正在运行的进程中,也用于绕过主机的防火墙和那些针对进程的安全机制。
相关API函数:VirtualAllocEx用于在另一个进程中分配内存空间
WriteProcessMemory函数用来向分配的地址空间写数据
DLL注入:编写一个恶意的DLL代码强制注入到一个远程进程中,并将远程进程调用LoadLibrary,强制调用一个DLL程序到它的进程中。
1.获取受害进程的句柄
CreateToolhelp32Snapshot,Process32First和Process32Next来查找进程列表中的目标进程,发现目标进程后,提取PID调用OpenProcess,获取目标进程的句柄。
2. DLL注入
利用函数VirtualAllocEx,WriteProcessMemory分配内存空间,并将DLL的名字写入受害进程。利用LoadLibrary加载。
3.远程进程中创建并运行线程
CreateRemoteThread(受害进程句柄,LoadLibrary地址,恶意dll名)
直接注入:直接将恶意代码注入到远程进程中
两次调用VirtualAllocEx WriteProcessMemory,第一次分配空间写入远程线程需要的数据,第二次分配空间写入远程线程代码
CreateRemoteThread(lpStartAddress->代码位置,lpParameter->数据)
进程替换:将执行文件重写到一个运行进程中的内存空间
1.解除内存映射
ZwUnmapViewOfSection释放由参数指向的所有内存
2.为恶意代码分配内存
VirtualAllocEx为恶意代码分配新的内存
3.替换操作
WriteProcessMemory将恶意代码的每个段写入到受害进程的内存空间,一个循环操作
4.恢复进程环境
通过调用SetThreadContext函数让入口点指向恶意代码,运行。最后调用ResumeThread函数,执行。
钩子注入:拦截发往某个应用程序的消息,利用SetWindowsHookEx挂钩注入。钩子机制允许应用程序截获处理window消息或特定事件
使用API函数SetWindowsHookEx()把一个应用程序定义的钩子子程安装到钩子链表中。 SetWindowsHookEx函数总是在Hook链的开头安装Hook子程。当指定类型的Hook监视的事件发生时,系统就调用与这个Hook关联的 Hook链的开头的Hook子程。每一个Hook链中的Hook子程都决定是否把这个事件传递到下一个Hook子程。Hook子程传递事件到下一个 Hook子程需要调用CallNextHookEx函数。
1.将HOOK的DLL 加载到本身的进程中,得到DLL的模块句柄
2.再使用GetProcAddress()得到DLL中显示导出的函数MyMessageProc()的函数地址,
3.最后遍历出待注入进程的线程ID
4.SetWindowsHookEx()利用这些参数进行HOOK
参数:idHook->>指定要安装的钩子例程的类型 WH_GETMESSAGE,//WH_KEYBOARD,//WH_CALLWNDPROC,
lpfn->>钩子例程指针
hMod->>钩子DLL的句柄///例程的本地模块句柄
dwThreadId-->与钩子例程关联的线程标识(当时击键记录器时是关联所有线程)
本地钩子:观察和操纵发往进程内部的消息
远程钩子:观察和操纵发往一个远程进程的消息
上层:钩子例程是一个DLL程序的导出函数,挂钩到一个线程中
底层:钩子例程保护在安装钩子的进程中
Detours:一个代码库实现对应用程序修改的简单化,通过对导入表进行修改,挂载DLL到已有的程序文件中,并向运行的进程添加函数钩子。
添加一个多余的段,构造一个新的恶意导入表,改变PE头部的指向。
APC注入(异步过程调用):可以让一个线程在它正常的执行路径之前执行一些恶意代码。每个线程都有一个附加的APC队列,在线程处于可警告的等待状态时被处理。如一些WaitForSingleObjectEx,WaitForMultipleObjectsEx和SleepEx函数等。这些函数给线程一个处理APC的机会。
用户模式APC:
1.查找合适线程
函数:CreateToolhelp32Snapshot,Process32First,Process32Next
2.使用QueueUserAPC排入一个让远程线程调用的函数
参数:pfnAPC:定义的函数->LoadLibrary
hThread:合适线程的句柄->svchost.exe的句柄
dwData:参数->恶意的dll文件
系统模式APC:恶意的驱动创建一个APC(由shellcode组成),分配用户模式进程中的一个线程(svchost.exe)来运行它。
函数:KeInitializeApc 初始化一个KAPC结构
第6个参数为非0,第7个参数为1 -->正在查找一个用户模式的APC(判断是否使用APC注入)
第2个参数-->要注入的线程
KeInsertQueueApc 将APC对象放入到目标线程的相应队列中,排队运行。