這篇說一下,PE病毒需要那些技術積累,以及這些技術的學習方法和重點是什麼。
1.先說彙編吧
其實我說的彙編關於兩個方面:彙編語言設計 和 微機原理
彙編語言設計,它也是兩方面: 常規教材講的 和 病毒的技巧
常規教材上講的基本都得學會,最基本的8086/8088肯定都得會,各種書籍視頻很豐富,學起來不難。80x86也是必須得學,建議看一下《80x86彙編語言程序設計》(楊季文著,清華大學出版),這本書的後半本寫的很精彩,至於羅雲杉的那本,明白意思就行了,因爲使用Radasm,簡化很多。64位彙編,我也正在學,隨着win7的成功,它將來也會越發重要。
病毒的技巧,沒有一本書或者一部視頻能交給你全部。你只好從各類的書籍和網上的帖子中收集隻言片語,有的是代碼細節,有的是概念介紹,基本只能憑個人探索。
舉個例子:
常規彙編代碼結構:
.DATA
str dd 'yangbostar',0
.DATA?
name dd ?
.CODE
start:
mov edi,offset str
mov name,edi
...
END start
在病毒卻可以只寫一個.code段完成三個段的使命:
.CODE
_start:
jmp start
MyName dd 'yangbostar',0 ;只讀數據經常寫在.code裏
start:
push esp
mov ebp,esp
sub esp,10h
mov [ebp+4],offset MyName ;用堆棧存儲變量
...
END _start
再說微機原理,實際我學得很痛苦,學校要考,不得不學,可以直接學32位的,至於64位的資料都需要極好的32位基礎。個人覺得學微機原理用處很多,可每個用處總是一點點,但絕對比別人看的更深一步。
2.c/c++
程序員的世界語,基礎中的基礎,不想再多說別的,只想推薦這本書《0 bug:C/C++商用工程之道》,我從這書中收益良多。
3.windows API
有人說還應該學MFC,可能本人才疏學淺,不知道MFC對於病毒的作用和優勢在哪裏。
4.windows驅動設計
即使不寫驅動程序,通過它瞭解windows底層運行機制也是很必要的。
當初學它,只是爲了看懂《Rootkit——windows內核的安全防護》,但過程很艱辛,資料真是太少了,很少有優秀中文作品。
針對windows NT之後版本的驅動資料就更少了。只找到三本:
《天書夜讀》——很適合入門
《寒江獨釣》——代碼很好,講的很垃圾
《windows驅動開發技術詳解》——代碼很垃圾,講的很好
5.數據結構
和c語言一樣,是程序員相當重要的基本功,資料相當豐富,不過,作爲病毒編寫愛好者,學習數據結構的同時,算法的學習也是相當重要,如果有時間的話,啃一下《C算法》這本書。
6.程序調試和逆向工程
個人體會,在VC上進行程序源碼調試,要比到處嵌入MessageBox和printf效率高得多。它的學習和你選擇的編譯器相關,即使是同一編譯器的不同版本也調試習慣有不同。資料自己找吧,不必全學會,夠用就行。
學習逆向工程和學習病毒編寫一樣,在網上充滿了各種各樣的迷信和謬論。相當多書面和視頻教程都是將“脫殼”和“爆破程序”爲主,其實這樣的學習主要就會了兩樣東西:OD和修改程序流向。其關於逆向工程很多本質的東西都不說明。我的個人體會是,數據逆向伴隨IDA的學習會補充它們的不足,當然,逆向工程博大精深,我只能說明白如何入門,後面的學習大家來相互交流吧。
總結:
呵呵,又囉嗦這麼長,除了那段彙編代碼,沒有別的和病毒直接相關,這是我希望大家能有足夠的基礎,我們常說,授人魚不如授人以漁。
下一章,我會介紹是個病毒,但不是PE病毒。因爲我要將足夠多的DOS病毒技術遷移到windows下,我們才能開始PE病毒上大展拳腳。