真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

【安全健行】(1):Hacker編程技能

【PS:最近才在之前的博客上寫的筆記,直接轉(zhuǎn)過來了?!?br />

公司主營業(yè)務(wù):成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出襄汾免費(fèi)做網(wǎng)站回饋大家。

接觸 安全領(lǐng)域也算四年了,大大小小的方向都看過一些,卻都未能精通,日漸感到自己實(shí)力的匱乏,因此自己決定今天開始來學(xué)習(xí)下Hack技術(shù)最為核心的知識(shí)和技 能:漏洞挖掘與惡意代碼分析。由于主要涉及這個(gè)領(lǐng)域,因此所談與WEB安全腳本之類的關(guān)聯(lián)不大,凡事須追本,根深才能葉茂,希望可以利用近兩年的時(shí)間,小 有所成。
   今天要講的是Hack技術(shù)的編程基礎(chǔ),談到基礎(chǔ),大家都會(huì)給出一些有見解的意見,主流推薦就有C/C++、Java、Perl、Python、VB等; 進(jìn)一步地還有SOCKET編程、系統(tǒng)編程等。自己當(dāng)初也迷茫了好一陣子,大學(xué)學(xué)過C,研究生自學(xué)了C++,工作后又學(xué)習(xí)了Python。自己的感覺是:做 工程還是要用C++、Java,但是開發(fā)安全工具,還是Python更勝一籌,因?yàn)橐讓W(xué)易用且功能強(qiáng)大,非常適合寫自己的個(gè)人小工具。自己認(rèn)為,Hack 編程基礎(chǔ)應(yīng)當(dāng)涉及以下幾個(gè)方面:
1. C/C++編程語言;
2. 計(jì)算機(jī)內(nèi)存知識(shí);
3. Intel處理器的基本知識(shí);
4. 匯編語言基礎(chǔ);
5. gdb程序調(diào)試;
6. Python編程技能;
   下面逐一作簡要的說明。
一、C編程語言
   C的重要性在于,Unix及Windows的系統(tǒng)主要都是用C來編寫的,因此其底層的核心機(jī)制還是C的,盡管Widows系統(tǒng)越來越多的使用了C++架 構(gòu),但是其漏洞存在的根源卻和C大致相同,其漏洞存在的根本問題并未解決。C/C++語言可以幫助我們理解實(shí)現(xiàn)漏洞程序。這部分涉及漏洞的只需要掌握 main()、變量、函數(shù)調(diào)用、基本輸入輸出、字符串操作、條件/循環(huán)結(jié)構(gòu)等基本知識(shí)。
   另外一個(gè)需要學(xué)習(xí)的是基本的編譯技能,推薦使用gcc,因?yàn)榭梢愿鶕?jù)自主選擇獲得目標(biāo)文件(gcc -c)、匯編文件(gcc -S)、關(guān)閉棧保護(hù)(gcc -fno-stack-protector)等選項(xiàng),可以說功能十分強(qiáng)大。
   具體的C/C++知識(shí)要點(diǎn)可以參考我的文集:http://blog.chinaunix.net/special/show/sid/1129.html

二、計(jì)算機(jī)內(nèi)存
   計(jì)算機(jī)的內(nèi)存是基本的讀寫存儲(chǔ)器,與我們程序最相關(guān)的為RAM,這里需要掌握以下幾個(gè)小的要點(diǎn):
-1. 字節(jié)序:不同的廠商支持不同的寫入順序,有些廠商認(rèn)為數(shù)據(jù)寫入時(shí)應(yīng)當(dāng)由內(nèi)存的低地址開始寫入,比如Intel,因此稱之為“小端法”;另外一些廠商認(rèn)為應(yīng) 當(dāng)從高地址開始寫入,比如Moto,因此稱之為“大端法”。后續(xù)討論shellcode時(shí)我們將會(huì)實(shí)際處理這兩種寫入方法。
-2. 內(nèi)存中的程序布局:每個(gè)進(jìn)程當(dāng)然擁有自己的內(nèi)存空間,進(jìn)程實(shí)際就是程序運(yùn)行的資源容器,線程才是具體運(yùn)行的實(shí)例。這里我們關(guān)注六種主要的內(nèi)存節(jié),它們是:
-2.1-:.text節(jié),該節(jié)與二進(jìn)制可執(zhí)行文件的.text節(jié)部分一致,主要包含完成工作所需執(zhí)行的機(jī)器指令,該節(jié)是只讀的,若寫入則會(huì)導(dǎo)致段錯(cuò)誤;
-2.2-:.data節(jié),該節(jié)主要用來存儲(chǔ)全局初始化變量,如int a = 0,該節(jié)大小運(yùn)行時(shí)固定;
-2.3-:.bss節(jié),低于棧(below stack section),該節(jié)存儲(chǔ)未初始化的全局變量,如int b,該節(jié)運(yùn)行時(shí)大小固定;
-2.4-:堆節(jié),該節(jié)用于處理程序運(yùn)行時(shí)動(dòng)態(tài)分配的變量,并且分配的空間采取由低地址到高地址的寫入方式;
-2.5-:棧節(jié),該節(jié)主要處理函數(shù)過程調(diào)用數(shù)據(jù),包括函數(shù)內(nèi)部的變量與語句,但是大多數(shù)系統(tǒng)上卻是采用由高地址到低地址的方式,這種棧的增長方式導(dǎo)致了魂沖去溢出的存在;
-2.6-:環(huán)境/參數(shù)節(jié),該節(jié)用于保存進(jìn)程在運(yùn)行時(shí)可能用到的系統(tǒng)級(jí)變量的副本,如運(yùn)行中的進(jìn)程可訪問的路徑、shell名稱以及主機(jī)名等。
-3. 緩沖區(qū)、字符串與指針:這部分是C的基礎(chǔ),就不需要再多說了吧?

三、Intel處理器
   處理器部分主要的知識(shí)是集中常用的寄存器,如通用寄存器EAX/EBX/ECX/EDX,如段寄存器CS/SS/DS/ES/FS/GS等等,這里比較 重要的是ESP(擴(kuò)展棧指針),我們經(jīng)常需要借助ESP來確定棧頂?shù)奈恢?;另一個(gè)則是EIP寄存器,其中存放著CPU將要執(zhí)行的下一條指令的地址。
   更多的信息可以參考:http://blog.chinaunix.net/uid-26275986-id-4334522.html

四、匯編語言基礎(chǔ)
   做安全就不能不懂匯編,不一定能用匯編編程,但是讀懂匯編是基本的要求,不懂匯編的人終究難深入進(jìn)安全問題的本質(zhì)。匯編語言分為ATT與NASM兩種格式,雖然其最終生成的機(jī)器指令完全一致,但是匯編語言表示卻有不同。比如ATT的操作數(shù)順序與NASM的相反:
將0x10寫入EAX寄存器:
ATT: Movl %eax, $0x10
NASM: mov 0x10, eax
   可以看出,ATT下常量需要使用$前綴,而寄存器則必須使用%前綴,且操作數(shù)順序相反。匯編語言學(xué)起來并不容易,所幸我們不是匯編程序員,我們需要的,僅僅是熟悉一些常用命令,需要的時(shí)候能夠看懂分析而已
1. mov:該命令用于將數(shù)據(jù)從源復(fù)制到目的地,復(fù)制成功后源數(shù)據(jù)不會(huì)移除;
2. add/sub:add命令用于將源數(shù)據(jù)與目的數(shù)據(jù)相加后結(jié)果保存在目的地;sub命令用于將源從目的中減去,并將結(jié)果存儲(chǔ)在目的地;
3. push/pop:push用于壓棧,即將一個(gè)數(shù)據(jù)寫入棧中;而pop用于彈棧,即從棧中取出棧頂元素,并且保存到操作數(shù)中;
4. xor:異或命令,其實(shí)是判斷二進(jìn)制位是否相同的運(yùn)算,不同為異,即‘1’,相同為‘0’,類似于mod2運(yùn)算;
5. jne/jnz、je/jz、jmp:jne與jnz是一回事,當(dāng)零標(biāo)記ZF=0時(shí)跳轉(zhuǎn);ZF=1時(shí)je和jz就會(huì)跳轉(zhuǎn);jmp無論何時(shí)都會(huì)跳轉(zhuǎn);
6. call/ret:用于函數(shù)過程調(diào)用與過程返回;
7. inc/dec:該命令用于將目的操作數(shù)遞增或遞減;
8. lea:該命令用于將源操作數(shù)的實(shí)際地址加載到目的操作數(shù)中,如lea eax, [dsi+4];
9. int:該命令可以向CPU拋出系統(tǒng)中斷信號(hào),常見的是0x80,它用于向內(nèi)核發(fā)送系統(tǒng)調(diào)用;
   除了基本的匯編命令,還需要了解匯編的尋址模式,主要是各種間接尋址與相對(duì)尋址,所幸都不難。另外一個(gè)技能是能夠使用gdb進(jìn)行程序的調(diào)試,比如設(shè)置端點(diǎn)跟蹤等。

五、Python編程技能
   這部分主要能夠使用Python開發(fā)需要的工具就好了,基本的語法概念可以參考主流的教材書籍,也可以參考我的文集:http://blog.chinaunix.net/special/show/sid/1235.html


分享名稱:【安全健行】(1):Hacker編程技能
本文路徑:http://weahome.cn/article/goohos.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部