關於PE病毒編寫的學習

首先聲明,因爲害怕被刪帖,我肯定不會展示正確完整病毒代碼,但是會介紹可行的學習方法。

 

網上有很多關於介紹PE病毒編寫的帖子,但基本上都是分析源碼FunLove和《計算機病毒分析與對抗》中PE病毒的代碼翻版。事實上這兩個代碼是用於原理展示,前者根本通不過編譯,後者編譯後並不能正確運行,雖然有部分帖子對其做了修改,受到正統彙編教材代碼的影響,導致其修改方法是錯誤的。

 

關於病毒編寫充滿了各種各樣的迷信和謬論,因此在學習的過程中,我走了不少彎路,讓我來一一說明:

 

誤區1:PE病毒一定要用匯編來寫,其生成文件小,效率高,病毒最好小於4KB

 

      實際上,從DOS時代的文件型病毒開始,就有相當多的著名文件型病毒使用C、Pascal編寫,到了windows時代,PE病毒的編寫成員又加入了VB、dephi等重要角色。用這些高級語言開發病毒的優勢相當明顯,開發快,升級快,調試方便,Bug少,有時能跨平臺。

      如今病毒短小,再也不是彙編的優勢,現在百G磁盤是常態,磁盤缺少幾百MB不會引起用戶的注意,大一點病毒文件反而增大了安全分析人員的分析難度。

      但是還是有相當多的病毒編寫技巧是彙編所獨有的,不過本人十分懶惰並且彙編優化功底欠佳,可是偷懶的方法我是有的,我先用VC的寫出初始代碼,設置爲Release,然後用它自帶的調試器反彙編,copy到Radasm上,再進行手工修改,這樣用匯編寫的代碼就成了。

 

誤區2:DOS病毒毫無參考價值,FunLove代碼是最好的入門教材

 

      相當長的一段時間,我也秉持這種看法。然而我對PE病毒的頓悟,卻完全來自DOS病毒的靈感,才寫出我的第一個病毒代碼。事實上,現在的PE病毒除了網絡方面,各種技術的思想基本都是源自DOS病毒,只是技術上的另一種實現。

      DOS病毒也不是都有用,比如引導區病毒的扇區引導方面就沒什麼參考價值,但作爲早期病毒,它的很多其他思想至今仍在應用。

 

誤區3:win32彙編與16位彙編有很大不同,可以直接學習win32彙編,16位彙編沒什麼價值

 

      也許在其他地方,這是是正確的,雖然中斷很少應用(不是不用,內核代碼依然可用),但是像Radasm這樣很好支持.if  .while  invoke 的高級宏彙編的編譯,可我還是很少用它們,跳轉、call、這兩門功課不能迴避。很多病毒獨有的彙編技巧,是.if .while 所不能表達的

 

誤區4:網上帖子PE代碼的常見錯誤,建立(.data?)段或向(.code)段寫入數據

 

      雖然建立(.data?)段也不是不可以,但是建立(.data?)後,重定位技術單靠簡單(call delt  |delt: pop ebp)是不可能成功的,因爲它不在.code裏,還得建立單獨的尋址表,感染時,還得將其寫如.idata節裏,重定位自然與.code裏不一樣,反正挺複雜,寫多節感染PE病毒時可以試一試。

     .code是隻讀的,雖然可以改爲可寫,但是殺毒軟件可是不會輕易放過它的。在.code嵌入常量是可以,變量還是用sub esp,xxx申請堆棧吧

 

誤區5:用匯編寫病毒應該使用Tasm,大牛們都用它們

 

      這個誤解來自於DOS病毒的書籍,1989年,TASM早在1.0版本就有了對80386處理器指令的完全支持(MASM要到5.0版本才支持80386指令),Tasm4.0版是編寫DOS程序使用比較廣泛。它與Masm又比較大的差異,但Tasm5.0已經全面兼容Masm

      目前,Tasm已經停止更新,而Masm隨Visual Studio不斷更新。

      如果分要我推崇某個編譯器,那麼Nasm是個不錯的選擇,原因如下:

      1.免費

      2.使用Intel彙編格式

      3.各個平臺都有這個軟件,學Masm的人寫跨平臺程序的首選

另外有人說fasm很好,我從未接觸過,所以沒有發言權

 

                                                                                                                                        未完待續

發佈了41 篇原創文章 · 獲贊 4 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章