bool inject(lpctstr szmodule, dword dwid) //dwid為程序id
int cbyte = (_tcslen(szmodule)+1) * sizeof(tchar);
lpvoid paddr = virtualallocex(hprocess, null, cbyte, mem_commit, page_readwrite);
if ( !paddr || !writeprocessmemory(hprocess, paddr, szmodule, cbyte, null))
#ifdef _unicode
pthread_start_routine pfnstartaddr = (pthread_start_routine)getprocaddress(getmodulehandle(_t("kernel32")), "loadlibraryw");
#else
pthread_start_routine pfnstartaddr = (pthread_start_routine)getprocaddress(getmodulehandle(_t("kernel32")), "loadlibrarya");
#endif
if ( !pfnstartaddr )
dword dwthreadid = 0;
handle hremotethread = createremotethread(hprocess, null, 0, pfnstartaddr, paddr, 0, &dwthreadid);
if ( !hremotethread )
closehandle(hremotethread);
closehandle(hprocess);
return true;
}bool enableprivilege(lpctstr lpszprivilegename, bool benable)
//提權
bool enableprivilege(lpctstr lpszprivilegename = se_debug_name, bool benable = true);
int apientry _twinmain(hinstance hinstance,
hinstance hprevinstance,
lptstr lpcmdline,
int ncmdshow)
1、為什麼要進行程序注入:到了winnt以後的系列作業系統中,每個程序都有自己的4gb私有程序位址空間,彼此互不相關。程序a中的乙個位址,比如:0x12345678,到了程序b中的相同地方,存的東西完全不一樣,或者說不可預料。所以說如果程序a想要看看或者修改程序b位址空間中的內容,就必須深入到其位址空間中,因為dll是可以被載入到任何程序當中的,所以在程序注入中,dll應該是主角,也就是說一些核心的**都應該放在dll中編寫。
對於我們小黑來說:優點就是程序隱藏,能穿透防火牆。
2、注入的缺點:
如果dll程式的演算法不是很好,或者dll檔案有bug,那麼將影響目標程序的執行效率,或者說乾脆目標程序崩潰。
3、注入的具體方法:
目前windows作業系統上面注入的方法也很多,《windows核心程式設計》上面介紹了不少,大家也可以到網上搜尋一下,比如鉤子,遠端執行緒技術等等……
4、具體程式設計方法:
本課程教大家用遠端執行緒技術來實現程序的注入。
用到的api函式:
openprocess(...) //獲取已知程序的控制代碼;
virtualallocex(...) //在程序中申請空間;
writeprocessmemory(...) //向程序中寫入東西;
getprocaddress(...) //取得函式在dll中的位址;
createremotethread(...) //在其他程序中建立新執行緒;
closehandle(...) //關閉控制代碼;
■補充:並不是所有的遠端注入都能成功,有時候呼叫openprocess(...)或者writeprocessmemory(...)函式的時候,會呼叫失敗,呼叫getlasterror()返回錯誤碼是5,拒絕訪問,意思是說你的許可權不夠,那麼網上也有現成的提權的函式,這裡面也給大家寫了乙個,但是隨著windows作業系統的公升級,xp->vista->7,其安全性也越來越高,所以以前在xpsp2上編寫的程式,到sp3或者vista上面許可權又不夠了,所以說提權**也不是萬能的,技術沒有止境!
動態鏈結庫DLL
函式和資料被編譯進乙個二進位制檔案 通常擴充套件名為.lib 靜態庫 在使用靜態庫的情況下,在編譯鏈結可執行檔案時,鏈結器從庫中複製這些函式和資料並把它們和應用程式的其它模組組合起來建立最終的可執行檔案 exe檔案 在多個同樣的程式執行時,系統保留了許多重複的 副本,造成記憶體資源浪費。動態庫 使用...
DLL(動態鏈結庫)程式設計
dll是現在常見的檔案,它整合了程式的很多功能在裡面。一般情況下,它不能直接被執行,常見的使用方法是用其他的 exe呼叫其執行,以使其內部功能表現出來。還有 ocx檔案也與之類似,也就是人們常說的com 1.簡要 windows api中所有的函式都包含在dll中,其中有3個最重要的dll。1 ke...
DLL 動態鏈結庫 專題
windows api中所有的函式都包含在dll中,其中有3個最重要的dll。1 kernel32.dll 它包含那些用於管理記憶體 程序和執行緒的函式,例如createthread函式 2 user32.dll 它包含那些用於執行使用者介面任務 如視窗的建立和訊息的傳送 的函式,例如createw...