-
大小: 53KB文件类型: .7z金币: 1下载: 0 次发布日期: 2021-06-01
- 语言: 其他
- 标签: 内存注入 IATHook InlineHook
资源简介
本压缩包有我自己写的内存注入程序与测试程序,并附有相应的源码..会用MessageBox 去Hook 指定的函数
代码片段和文件信息
/*******************************************************************************
程序员 : enjoy
最后修改时间: 2016年5月16日 21:43:02
函数说明 : 本程序用于实现进程列表进程IAT信息IAT hookinginline hooking
本代码更详细的解释请看本人博客
http://blog.csdn.net/enjoy5512/article/details/51006114
*******************************************************************************/
#include
#include
#include
#include“tlhelp32.h“
#define NAMESIZE 41 //函数名
typedef struct ProcessNode //进程结构体
{
PROCESSENTRY32 pe32; //保存进程信息
MODULEENTRY32 me32; //保存进程第一个模块信息
struct ProcessNode *next;
}PNode;
typedef struct IATNode //IAT表项结构体
{
char dllname[NAMESIZE]; //对应dll名
char name[NAMESIZE]; //函数名
int order; //函数序号
int address; //函数在内存中的地址
int addrOfAddr; //函数地址所在内存的地址
struct IATNode *next;
}INode;
int DestroyPNode(PNode **pNode); //释放进程结构体链表
int DestroyINode(INode **iNode); //释放IAT表项结构体链表
int InitPNode(PNode **pNode); //初始化进程结构体
int InitINode(INode **iNode); //初始化IAT表项结构体
void SetColor(unsigned short mColor); //设置终端字体颜色
int ShowHelp(void); //显示帮助信息
int EnableDebugPriv(const LPCTSTR lpName); //获取调试权限
int GetProcessInfo(PNode **pNode); //得到进程列表信息
int GetIAT(INode **iNode PNode *pNode unsigned int pid); //获取进程IAT表项
int IATHook(INode *iNode PNode *pNode int order unsigned int pid); //IAT hooking
int InlineHook(INode *iNode PNode *pNode int order unsigned int pid); //Inline Hooking
int main(void)
{
char cmd[15] = {0}; //保存操作指令
PNode *pNode = NULL; //进程结构体链表头指针
PNode *bkPNode = NULL; //进程结构体链表操作指针
INode *iNode = NULL; //IAT结构体链表头指针
INode *bkINode = NULL; //IAT结构体链表操作指针
int i = 0; //循环计数
unsigned int pid = 0; //进程PID
int order = 0; //函数序号
ShowHelp(); //程序开始显示帮助信息
printf(“\n\nhook >“);
for (;;) //循环接收指令
{
scanf(“%s“cmd);
if (0 == strcmp(cmd“help“)) //显示帮助信息
{
ShowHelp();
}
else if (0 == strcmp(cmd“exit“)) //退出循环
{
break;
}
else if (0 == strcmp(cmd“ls“)) //显示进程列表
{
i = 0; //初始化计数器
GetProcessInfo(&pNode); //获取进程列表链表
bkPNode = pNode; //初始化进程结构体操作指针
printf(“进程序号 父进程PID\t进程PID\t\t子线程数 进程名\n“);
while (bkPNode)
{
i++;
SetColor(0xf); //设置终端字体颜色
printf(“%d\t\t%d\t%d\t\t%d\t%s\n“ibkPNode->pe32.th32ParentProcessIDbkPNode->pe32.th32ProcessIDbkPNode->pe32.cntThreadsbkPNode->pe32.szExeFile);
if (1 == bkPNode->me32.th32ModuleID) //如果有模块信息则显示对应模块信息
{
printf(“模块名 : %s\n模块路径 : %s\n“bkPNode->me32.szModulebkPNode->me32.szExePath);
}
bkPNode = bkPNode->next;
}
}
else if (0 == strcmp(cmd“info“)) //显示进程IAT表项
{
bkPNode = pNode; //初始化进程结构体操作指针
pid = 0;
评论
共有 条评论