動態載入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...