本文为看雪论坛优秀文章
看雪论坛作者ID:wx_Niatruc
一
摘要
二
直接注入
1、OpenProcess打开目标进程(一参为PROCESS_CREATE_THREAD|PROCESS_QUERY_INFORMATION|PROCESS_VM_OPERATION|PROCESS_VM_WRITE| PROCESS_VM_READ, 后面CreateRemoteThread才能执行)。
需要给进程提权, 得到SeDebug权限。
三
反射式注入(reflective injection)
// shellcode函数
void shellcodeFunc(PMY_PARAMS pParams) {
// pParams保存LdrLoadDll等系统api的内存地址
// 用NtAllocateVirtualMemory在目标进程中开辟一块内存(需指定PAGE_EXECUTE_READWRITE权限)
// 将dll的文件内容写入开辟的内存
// 修复导入表; 重定位
// 执行dll的入口函数DLLMain
}
DWORD size = 0, ssss=0;
// 获取jmp指令后的双字操作数(即jmp的目的地址偏移)
DWORD* jmpAddr = (DWORD*) ((BYTE*) shellcodeFunc + 1);
// 加5得到jmp指令的下一条指令地址, 然后加上jmp的目的地址偏移, 得到函数体的实际起始地址
WORD* Memx0 = (WORD*) ((BYTE*) shellcodeFunc + 5 + *jmpAddr);
LONG_PTR* Memx = (LONG_PTR*) Memx0;
// 用0xCCCCCCCCCCCCCCCC作为函数体结束识别标识.
while (*Memx != 0xCCCCCCCCCCCCCCCC) {
Memx++;
size += 8;
}
// 将shellcode写入文件
HANDLE hFile = CreateFile(LOADECODE, GENERIC_ALL, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, NULL, NULL);
if (hFile) {
WriteFile(hFile, Memx0, size, &ssss, NULL);
CloseHandle(hFile);
}
四
镂空(hollowing):
看雪ID:wx_Niatruc
https://bbs.pediy.com/user-home-873582.htm
# 往期推荐
球分享
球点赞
球在看
点击“阅读原文”,了解更多!