HOOK API 之修改IAT實現程序隱藏

2021-09-12 13:02:06 字數 2500 閱讀 9118

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

#include

#include

#include

#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 my_system_process_information, *pmy_system_process_information;

typedef ntstatus(winapi* pnt_query_system_information)(

__in system_information_class systeminformationclass,

__inout pvoid systeminformation, __in ulong systeminformationlength,

__out_opt pulong returnlength);

pnt_query_system_information originalntquerysysteminformation =

(pnt_query_system_information)::getprocaddress(::getmodulehandle(l"ntdll"), "ntquerysysteminformation");

ntstatus winapi hookedntquerysysteminformation(

__in system_information_class systeminformationclass,

__inout pvoid systeminformation, __in ulong systeminformationlength,

__out_opt pulong returnlength)

else

pnext = pcurrent;

//    pcurrent = pnext;

}} while (pcurrent->nextentryoffset != 0);

}return status;

}//#pragma comment(lib,"th32.lib")

pimage_dos_header  pdosheader;

pimage_nt_headers  pntheaders;

pimage_optional_header   poptheader;

pimage_import_descriptor  pimportdescriptor;

pimage_thunk_data         pthunkdata;

pimage_import_by_name     pimportbyname;

hmodule hmod;

void threadproc(void *param);//執行緒函式

void threadproc(void *param)

//---------

no+=2;

pthunkdata++;

}pimportdescriptor++;

}//-------------------hook end-----------------

}bool apientry dllmain( hmodule hmodule,

dword  ul_reason_for_call,

lpvoid lpreserved

)case dll_thread_attach:

case dll_thread_detach:

case dll_process_detach:

break;

}return true;

}

IAT表是如何實現的

我們知道當程式要呼叫系統dll時,會用到iat表 具體是怎麼實現的呢,假設我們程式中某處要用到messageboxa,那麼這裡會有兩種形式,一種是先call到乙個位址,這個位址中是乙個jmp a a中存放著資料,資料內容就是我們的messagebox的入口位址。另一種情況是直接calll到messa...

古典黑客技術之HOOK API

hook api技術可以攔截 控制某些api函式的呼叫。當乙個api函式被攔截之後,使用者可以讓目標程式執行事先準備好的 比如說,構造的 是過濾此api函式傳入的引數的,而此api函式又是用來獲取程序的,當此api被攔截之後,我們就可以讓它轉去執行過濾引數的 hook api其實是對遠端程序記憶體資...

第32章 計算器顯示中文數字 修改IAT 略

需要明確自己要修改的功能對應的api函式,這個需要經驗積累.iat鉤取通過修改iat中儲存的api位址來鉤取某個api.大致流程如下 1.通過injectdll 將自己寫的dll檔案注入目標程序.2.在自己寫的dll main函式中獲取本程序中的 setwindowtextw 的函式位址,再呼叫 h...