-
大小: 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;???????????????
評論
共有 條評論