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...