羽夏逆向指引——逆向基礎


寫在前面

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

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

基礎

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

一門編譯型語言

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

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

十六進制數據 匯編代碼
B8 01000000 mov eax,1
83C0 01 add eax,1

  前面的十六進制數據才是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怎么辦?連調試都不會?那就別繼續了,先拿個程序自己調試練習,熟練了再回來,這東西不難。

結語

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

下一篇

  羽夏逆向指引——破解第一個程序


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM