資源描述:
《windows黑客編程》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、Windows黑客編程基礎(chǔ)要想在安全知識方面有更多的建樹,那么編程就是你必須得懂的技能。前幾天在網(wǎng)上看了《WIN下編程須知》一文,覺得寫出一篇適合初學(xué)者們看的入門級文章的確很重要,可惜此文只介紹了線程、消息、句柄等幾個基本概念。很多初學(xué)者看了對編程還是感到很迷惑,一個從來沒有寫過程序的人如何入門?如何在短時間內(nèi)寫出自己的程序來?筆者帶著這些問題寫了這篇文章。這也是筆者在學(xué)習(xí)編程的初期所遇到的困惑,在此根據(jù)筆者的個人理解將其整理成文,希望能引起廣大菜鳥們的共鳴,對初學(xué)者們有所幫助。 從理論上說,任何一門語言都可以在任何一個系統(tǒng)
2、上編程,只要找到該系統(tǒng)提供的“接口”和對系統(tǒng)內(nèi)部機制有深入的了解就可以了,至少我是這么認(rèn)為的。正如C語言可以在Windows下編程,也同樣可以在Linux上大放異彩一樣。 編程是一項很繁雜的工作,除了應(yīng)用編程工具之外,了解系統(tǒng)本身內(nèi)部工作機理非常重要,這是你寫出穩(wěn)定兼容的程序所必不可少的前提條件。你要在哪一種系統(tǒng)上編程就要對該系統(tǒng)的機制進行研究,至少你應(yīng)該知道一個程序在那個系統(tǒng)上是如何運行的?! ∫弧⒘私釽indows內(nèi)部機制 Windows是一個“基于事件的,消息驅(qū)動的”操作系統(tǒng)。 在Windows下執(zhí)行一個程序,只要
3、用戶進行了影響窗口的動作(如改變窗口大小或移動、單擊鼠標(biāo)等)該動作就會觸發(fā)一個相應(yīng)的“事件”。系統(tǒng)每次檢測到一個事件時,就會給程序發(fā)送一個“消息”,從而使程序可以處理該事件。每個Windows應(yīng)用程序都是基于事件和消息的,而且包含一個主事件循環(huán),它不停地、反復(fù)地檢測是否有用戶事件發(fā)生。每次檢測到一個用戶事件,程序就對該事件做出響應(yīng),處理完再等待下一個事件的發(fā)生。 Windows下的應(yīng)用程序不斷地重復(fù)這一過程,直至用戶終止程序,用代碼來描述實際上也就是一個消息處理過程的while循環(huán)語句?! ∠旅姹愫唵谓榻B一下與Windows
4、系統(tǒng)密切相關(guān)的幾個基本概念: 1.窗口:這是我要說的第一個概念。似乎是地球人都知道的事兒了,窗口是Windows本身以及Windows環(huán)境下的應(yīng)用程序的基本界面單位,但是很多人都誤以為只有具有標(biāo)題欄、狀態(tài)欄、最大化、最小化按鈕這樣標(biāo)準(zhǔn)的方框才叫窗口。其實窗口的概念很廣,例如按鈕和對話框等也是窗口哦,只不過是一種特殊的窗口罷了。 從用戶的角度看,窗口就是顯示在屏幕上的一個矩形區(qū)域,其外觀獨立于應(yīng)用程序,事實上它就是生成該窗口的應(yīng)用程序與用戶間的直觀接口;從應(yīng)用程序的角度看,窗口是受其控制的一部分矩形屏幕區(qū)。應(yīng)用程序生成并控制
5、與窗口有關(guān)的一切內(nèi)容,包括窗口的大小、風(fēng)格、位置以及窗口內(nèi)顯示的內(nèi)容等。用戶打開一個應(yīng)用程序后,程序?qū)?chuàng)建一個窗口,并在那里默默地等待用戶的要求。每當(dāng)用戶選擇窗口中的選項,程序即對此做出響應(yīng)?! ?.程序:通常說的程序都是指一個能讓計算機識別的文件,接觸得最多的便是.exe型的可執(zhí)行文件,這個不難理解?! ?.進程:說到進程,學(xué)過《操作系統(tǒng)》的人都很清楚,所謂進程就是應(yīng)用程序的執(zhí)行實例(或稱一個執(zhí)行程序)需要注意的是:進程是程序動態(tài)的描述,而上面說到的程序是靜態(tài)的描述,兩者有本質(zhì)的區(qū)別。舉個例子,從網(wǎng)上Down了一個瑞星殺毒軟
6、件到C盤但沒有運行,那個.exe可執(zhí)行文件叫做程序,它是一個二進制碼的文件。一旦雙擊了exe文件圖標(biāo)運行程序,那個“正在運行著的瑞星殺毒”便稱為進程,它在雙擊的那一刻被系統(tǒng)創(chuàng)建,當(dāng)你關(guān)機或者在任務(wù)欄的圖標(biāo)上單擊鼠標(biāo)右鍵選“退出”時,進程便消亡,徹底結(jié)束了生命。進程經(jīng)歷了由“創(chuàng)建”到“消亡”的生命期,而程序自始至終存在于你的硬盤上,不管你的機器是否啟動?! ?.線程:線程是進程中的一個執(zhí)行單元,同一個進程中的各個線程對應(yīng)于一組CPU指令、一組CPU寄存器以及一堆棧。進程本來就具有動態(tài)的含義,然而實質(zhì)上是通過線程來執(zhí)行體現(xiàn)的,從這
7、個意義上說,Windows中進程的動態(tài)性意義已經(jīng)不是很明顯了,只算是給程序所占的資源劃定一個范圍而已(個人觀點,純屬個人理解,不必引起爭議?。嬲哂袆討B(tài)性意義的是線程。以前在大二學(xué)習(xí)操作系統(tǒng)課的時候就有個同學(xué)跟筆者提起這點,筆者還跟他駁得面紅耳赤呢!現(xiàn)在想想,覺得很有道理,不得不佩服那位同學(xué)對Windows內(nèi)部機制了解得如此清楚?! ≈栽诖嘶敲炊嗟钠f線程,是因為下面將要介紹到多線程編程技巧,如果不理解這點,那就很難應(yīng)用到實踐上,希望大家明白。5.消息:我們幾乎做每一個動作都會產(chǎn)生一個消息,在用鼠標(biāo)指點江山的今天,
8、鼠標(biāo)被移動會產(chǎn)生WM_MOUSEMOVE消息,鼠標(biāo)左鍵被按下會產(chǎn)生WM_LBUTTONDOWN的消息,鼠標(biāo)右鍵按下便產(chǎn)生WM_RBUTTONDOWN消息等等。所有的這些都可以通過GetMessage,SendMessage等函數(shù)得到,以后的操作中我們會經(jīng)常接觸到這些函數(shù)?! ?/p>