资源简介

本压缩包有我自己写的内存注入程序与测试程序,并附有相应的源码..会用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;               

评论

共有 条评论

相关资源