羽夏逆向——逆向基礎

寂靜的羽夏發表於2021-11-19

寫在前面

  此係列是本人一個字一個字碼出來的,包括示例和實驗截圖。可能有錯誤或者不全面的地方,如有錯誤,歡迎批評指正,本教程將會長期更新。 如有好的建議,歡迎反饋。碼字不易,如果本篇文章有幫助你的,如有閒錢,可以打賞支援我的創作。如想轉載,請把我的轉載資訊附在文章後面,並宣告我的個人資訊和本人部落格地址即可,但必須事先通知我

你如果是從中間插過來看的,請仔細閱讀 羽夏逆向——序 ,方便學習本教程。

基礎

  既然你想要學習逆向,基礎沒有是不行的。如下將詳細介紹你需要的基礎和我可能涉及講解的內容。注意,本篇可能對您來說是勸退文,只有3分鐘熱度或者連作業系統怎麼使用都不熟練的同志就不要繼續了。

一門編譯型語言

  為什麼需要一門編譯型語言呢?什麼是編譯型語言?我們的計算機跑程式碼都是在CPU上跑的,名為中央處理器,是計算機的最重要的組成單位之一。如果我們想要讓計算機幹活,我們們人類的自然語言計算機是聽不懂的,只能聽懂機器語言。

羽夏逆向——逆向基礎

  在計算機中,能夠讓它聽懂的只有機器語言,而和機器語言一句一對應的語言,只有組合語言。每一句組合語言,都能翻譯成對等的語言,我們來看看如何讓計算機執行1+1=?的功能:
  

十六進位制資料 彙編程式碼
B801000000 mov eax,1
00463896 83C0 01

  前面的十六進位制資料才是CPU能夠聽懂的語言。除了編譯型語言,還有解釋型語言。那麼什麼是解釋型語言呢?比如我們常見的PythonJava.Net系列語言都是解釋型語言。我們以我最熟悉的C#來介紹:

graph LR A(C#程式碼) --編譯--> B(CLI) --執行--> C(虛擬機器編譯) ----> D(彙編程式碼)

  我們在IDE編寫的程式碼,對於解釋型語言,它會編譯成位元組碼(Java的說法)。等到雙擊執行該程式,就會啟動一個虛擬機器解釋環境,再由它編譯成彙編指令執行。由於彙編指令和機器指令存在一一對應的關係,故把彙編指令視為機器指令,但它們並不是完全對等的,如果彙編想要執行,就必須經過編譯器編譯連結才能被CPU所識別。
  如果我們逆向解釋型語言咋辦?本人僅會簡單的逆向.Net程式,並且還是指令碼小子的水平,但還是可以簡單的指引如何逆向該系列程式。

會 Intel CPU 的彙編指令集

  CPU不僅僅只有Intel的,只是在PC端最主流最常見而已。還有一個有名的,在微控制器和移動端佔據江山的就是ARM公司的CPU。它們的設計理念不一樣,故它們的指令集不一樣,硬編碼不一樣。硬編碼是什麼?就是我們在上一小部分介紹中的彙編程式碼對應的十六進位制資料,這些資料並不是隨便搞得,而是通過一系列的規則。對於32位的CPU想要了解學習硬編碼,可以參考我的 羽夏筆記——硬編碼(32位) 。由於我們們的目標是PC端的Window逆向,故學習Intel CPU的彙編指令集即可。

PE 檔案結構的知識

  我們逆向肯定是分析可執行程式,而在Windows的所有可執行程式都遵守PE結構,英文全稱為Portable Executable。它的結構比較複雜,是由一系列的結構體組成,可以參考我的 羽夏筆記——PE結構(不包含.Net)。如果這個不會的話建議不要根據下面的教程來了,否則到最後依舊是指令碼小子的皮毛水平。那麼如何學習呢?推薦B站上的 小甲魚系統篇 視訊教程,詳細地講解了必要的PE結構,學會完這個,就可以說過關了。

逆向工具

  既然逆向,就必須有工具:查殼工具和傳說的倚天劍與屠龍刀。只有知己知彼,才能百戰百勝,查殼工具就必須的,它會幫我們檢查這個是由哪個程式語言編寫,有沒有加啥殼,因為程式語言編譯後的程式或者加殼的程式都會有固定的特徵,通過這個特徵匹配就能推測出是什麼。倚天劍以前說是OD,但現在它很老了,還沒有64位的,只有一些愛好者來維護。我覺得現在的倚天劍應該是X96Dbg,是一個強大的開源的彙編級動態除錯工具,活躍在Github當中,和OD操作相似,以後的示例我們會用這個軟體進行。

羽夏逆向——逆向基礎

  屠龍刀是什麼?當然是IDA了。它是一個強大的靜態分析工具。它的圖示據說是第一個程式設計師的頭像,不用驚訝,第一個程式設計師就是女的。但它是商業軟體,不過看雪有patch版本,自己找找下載吧。

羽夏逆向——逆向基礎

  這些工具自行到官網下載,本教程不提供。

編碼

  計算機中,所有的資料都是經過編碼的,比如數字的儲存、文字的顯示和儲存等。什麼是原碼、反碼、補碼,什麼是UTF-8GBKASCII文字編碼,不懂的建議學習一下,這個可是學習C語言的基礎,很多計算機基礎課程都有這個東西,本指引注重逆向,故不再贅述。

基本的除錯能力

  軟體出Bug怎麼辦?連除錯都不會?那就別繼續了,先拿個程式自己除錯練習,熟練了再回來,這東西不難。

結語

  具有上面所述的基礎後,你就有具備逆向的基本最低要求。下面的教程我將用例項介紹如何使用它們,但是如果想要系統的學習,還是得靠你自己了。

下一篇

  羽夏逆向——破解第一個程式

相關文章