羽夏逆向——逆向基礎
寫在前面
此係列是本人一個字一個字碼出來的,包括示例和實驗截圖。可能有錯誤或者不全面的地方,如有錯誤,歡迎批評指正,本教程將會長期更新。 如有好的建議,歡迎反饋。碼字不易,如果本篇文章有幫助你的,如有閒錢,可以打賞支援我的創作。如想轉載,請把我的轉載資訊附在文章後面,並宣告我的個人資訊和本人部落格地址即可,但必須事先通知我。
你如果是從中間插過來看的,請仔細閱讀 羽夏逆向——序 ,方便學習本教程。
基礎
既然你想要學習逆向,基礎沒有是不行的。如下將詳細介紹你需要的基礎和我可能涉及講解的內容。注意,本篇可能對您來說是勸退文,只有3分鐘熱度或者連作業系統怎麼使用都不熟練的同志就不要繼續了。
一門編譯型語言
為什麼需要一門編譯型語言呢?什麼是編譯型語言?我們的計算機跑程式碼都是在CPU
上跑的,名為中央處理器,是計算機的最重要的組成單位之一。如果我們想要讓計算機幹活,咱們人類的自然語言計算機是聽不懂的,只能聽懂機器語言。
在計算機中,能夠讓它聽懂的只有機器語言,而和機器語言一句一對應的語言,只有組合語言。每一句組合語言,都能翻譯成對等的語言,我們來看看如何讓計算機執行1+1=?
的功能:
十六進位制資料 | 彙編程式碼 |
---|---|
B801000000 | mov eax,1 |
00463896 | 83C0 01 |
前面的十六進位制資料才是CPU
能夠聽懂的語言。除了編譯型語言,還有解釋型語言。那麼什麼是解釋型語言呢?比如我們常見的Python
Java
,.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-8
、GBK
、ASCII
文字編碼,不懂的建議學習一下,這個可是學習C語言的基礎,很多計算機基礎課程都有這個東西,本指引注重逆向,故不再贅述。
基本的除錯能力
軟體出Bug
怎麼辦?連除錯都不會?那就別繼續了,先拿個程式自己除錯練習,熟練了再回來,這東西不難。
結語
具有上面所述的基礎後,你就有具備逆向的基本最低要求。下面的教程我將用例項介紹如何使用它們,但是如果想要系統的學習,還是得靠你自己了。
下一篇
羽夏逆向——破解第一個程式
本文來自部落格園,作者:寂靜的羽夏,一個熱愛計算機技術的菜鳥,轉載請註明原文連結:https://www.cnblogs.com/wingsummer/p/15574504.html