Hook dll中匯出函式,輸出想要的入參或出參

2021-08-30 11:25:36 字數 1800 閱讀 7430

最近逆向某聊天軟體協議部分,需要列印出所有報文加解密的原文,密文以及金鑰。想通過hook的方式,hook匯出函式的位址,然後在函式進入前輸出想要的入參,函式返回時輸出想要的出參。用到了dll注入的方式。參考了逆向工程核心原理的內容。可通用性還可以,分享**如下:

如果想針對自己的dll進行hook,需要修改的檔案部分如下:

#include "stdafx.h"

#include "gdc_apihook.h"

#include #include #include #include #pragma comment(lib,"ws2_32.lib") //主機轉位元組序

gdc_apihook g_objscalehook;

gdc_apihook g_objcorehook;

file *fp = null;

char buf = ;

char zero = ; //填充部分,我這裡自己標識位,無意義。

typedef unsigned int (*aout_filtersplay) (int *in, __m128 *out, unsigned int flag, int param, const __m128i *param2); //待捕獲函式的替代。這裡注意引數需要和hook的函式個數一樣,型別不是很重要。且函式呼叫方式要一樣,這裡函式呼叫方式指stdcall之類。

//這裡就是函式的具體實現了,其中有函式的真實呼叫。在呼叫前後列印自己所需的引數即可。

unsigned int gdc_aout_filtersplay (int *in, __m128 *out, unsigned int flag, int param, const __m128i *param2)

//上面是函式之前的呼叫

//下面接真實函式呼叫後,輸出需要的返回引數

unsigned int p = oldfileterplay(in, out, flag, param, param2);

if(flag == 5)

return p;

}void hook()

int addr = (int)getprocaddress(hmod, "aout_filtersplay");

g_objcorehook.hookapi((char*)addr, (char*)gdc_aout_filtersplay);*/

hmodule hmod = getmodulehandle("wechatwin.dll");//dll名稱

if (null == hmod)

int addr = ((int)hmod) + 0x215a0;//偏移位址

g_objcorehook.hookapi((char*)addr, (char*)gdc_aout_filtersplay);

//g_objscalehook.hookapi((char*)addr, (char*)gdc_dowork);

}bool apientry dllmain( hmodule hmodule,

dword ul_reason_for_call,

lpvoid lpreserved

)return true;}

共分兩個exe,乙個是hook的dll,就是上面那長段**生成的。

乙個是dll注入函式,用來將上面編寫的hook用dll注入進exe,使用方式如下:

injectdll.exe 276748 c:\users\liuti\downloads\apihook\apihook\release\apihook.dll
其中 276748 是需要注入的exe的當前pid。

動態鏈結庫中匯出模板函式

c 支援函式模板。利用函式模板,能夠簡化我們的程式 我在自己的 中也經經常使用到函式模板,可是曾經一直以為函式模板是要放到標頭檔案裡的,否則呼叫模板函式時,編譯器會找不到函式模板的定義。今天閒暇,又翻了翻 c primer。發現我曾經的理解是有問題的。模板函式也能夠像普通函式那樣。將宣告放在標頭檔案...

DLL中匯出函式的兩種方式

dll中匯出函式的兩種方式 dllexport與.def檔案 2009 03 06 11 34 58 標籤 dll匯出函式 兩種方式 declspec dllexport def 檔案it 分類 程式設計技術 dll中匯出函式的宣告有兩種方式 一種方式是 在函式宣告中加上 declspec dlle...

DLL中匯出函式的兩種方式

經常使用vc6的dependency檢視dll匯出函式的名字,會發現有dll匯出函式的名字有時大不相同,導致不同的原因大多是和編譯dll時候指定dll匯出函式的界定符有關係。vc 支援兩種語言 即c c 這也是造成dll匯出函式差異的根源 我們用vs2008新建個dll工程,工程名為 testdll...