DLL記憶體載入

2021-07-24 17:53:44 字數 1139 閱讀 2598

動態載入dll

功能:把乙個處於記憶體裡的dll直接載入並且使用。

用途:免殺(靜態檔案查殺),外掛程式(防止遊戲自己hook了loadlibrary等函式),以及其他。

原理: 

假設目前處於記憶體裡的dll是a,然後開闢乙個新的記憶體空間b,根據a的檔案頭等相關資訊,把b看做是載入記憶體。

然後把資料拷貝到b裡,並且對齊相關節,然後修正iat等相關。然後在手動呼叫一次dllmain函式,這樣dll就被從記憶體a

載入到記憶體b裡了。之後再呼叫函式的時候,直接根據函式名,在int或者其他位置找到函式位址,這個過程就是模擬了

getprocaddress函式的功能。

整理了乙個記憶體載入dll相關的類以及測試專案**:(

下面是相關測試**:

#include "stdafx.h"

#include #include #include #include "memloaddll.h"

#pragma comment(lib, "shlwapi.lib")

using namespace std;

#pragma warning(disable : 4996)

unsigned char bmemory[1024*1024*5] = ;

dword dwloaddll2memory(string strdllpath)

dword dwnowreadid = 0;

while (1)

for(int i = 1 ;i <= dwreadsize ;i ++)

} fclose(fploaddll);

return dwnowreadid;

}void setcurrentdir();

getmodulefilename(0 ,wclocalpath ,max_path);

pathremovefilespec(wclocalpath);

setcurrentdirectory(wclocalpath);

}int _tmain(int argc, _tchar* argv)

else

}else

delete clloadclass;

return 0;

}

記憶體載入Dll

分享乙份自己之前總結以前的 寫的dll記憶體載入庫c 版本 專案要自行編譯生成lib檔案 支援 1.win32標準dll 2.mfc dll 3.易語言dll 4.其他環境下生成的dll 但不能加殼加密 file include ldr.h ldr header ifndef ldr h defin...

靜態載入dll和動態載入dll

一,首先編寫dll 建win32空dll工程 標頭檔案.h extern c declspec dllexport int max int a,int b extern c 解決函式名由於不同編譯器造成的名字匹配問題,通常c 編譯器編譯時會對函式進行改名,而c編譯器不會 extern c decls...

靜態載入dll和動態載入dll

一,首先編寫dll 建win32空dll工程 標頭檔案.h extern c declspec dllexport int max int a,int b extern c 解決函式名由於不同編譯器造成的名字匹配問題,通常c 編譯器編譯時會對函式進行改名,而c編譯器不會 extern c decls...