逆向工程惡意軟體入門(基礎篇)

2021-09-23 05:13:07 字數 2572 閱讀 1812

本文講的是逆向工程惡意軟體入門(基礎篇)

前言

在這個系列文章中,我會向大家介紹逆向工程惡意軟體的各個方面的知識。逆向工程惡意軟體是乙個很深奧和複雜的主題,因此很少有人掌握它,這也是這個領域的薪酬很高的主要原因。

在開始本文之前,我需要先闡述乙個概念框架,並闡述與逆向工程惡意軟體有關的一些策略和問題。

什麼是逆向工程?

在本系列文章中,即使我無法訪問源**(通常是這種情況),我也將嘗試確定該惡意軟體的功能。在確定軟體功能之後,我將嘗試對其調整或在另乙個惡意軟體中重新構建相關功能。

逆向工程用於惡意軟體開發和監測的兩個環節。在開發環節,使用逆向工程的作用是用來查詢惡意軟體可以利用的作業系統和應用程式中的漏洞。此外,開發人員可以使用逆向工程來查詢和使用其他惡意軟體的模組。像所有軟體開發人員一樣,惡意軟體開發人員會重複使用他人軟體中的有用**,即使在進行惡意軟體開發時也不會重新編寫**。

而在監測環節,安全調查員和事件處理程式要使用逆向工程來跟蹤惡意軟體的作用以及它可能帶來的危害。此外,逆向工程通常可以使安全調查員了解惡意軟體的起源和歸因。

低階軟體

在進行逆向工程過程中,我經常會在低階軟體中進行工作。因為對我來說源**通常是不可用的,只有在低階軟體才能實現這點。

彙編碼

彙編是軟體鏈中的最低級別,儘管我無法訪問源**,但是可以使用各種工具將源**減少到彙編級別。任何高階語言的指令都必須對組合語言**可見,每個指令必須減少到乙個或多個彙編指令。在大多數情況下,我將在逆向工程時使用這個簡單的彙編**。

顯然,要取得成功,我必須熟悉組合語言**。不幸的是,沒有一種具體的組合語言,因為組合語言是一種用於電子計算機、微處理器、微控制器或其他可程式設計器件的低階語言。要掌握逆向工程,就必須掌握我選定平台的彙編**。在本系列中,我將研究x86,x64和arm彙編。

機器碼

機器碼或二進位制**是由cpu讀取的**,機器碼和裝配碼是同一件事情的兩種不同的表示。機器語言(machine language)是一種指令集的體系,這種指令集,稱機器碼,是電腦的cpu可直接解讀的資料,機器碼有時也被稱為原生碼(native code)。

組合語言只是機器碼的文字表示,使得它們更容易使人類可讀。每個組合語言命令由乙個稱為操作碼的數字表示,以方便操作。

編譯器

編譯器將源**轉換為機器碼,逆向過程中最大的挑戰之一是編譯器傾向於優化**,使其更有效率,並且效能更好。因此,由兩個不同的編譯器編譯的相同的**實際上會產生不同的機器碼,從而使我的分析工作變得更加困難。

逆向過程

逆向過程通常可以分為至少兩種型別:**級和系統級。

**級

當我執行**級逆向過程時,就會嘗試從機器碼中提取軟體的**概念和演算法。這就需要對cpu如何工作,作業系統如何工作以及軟體開發過程等方面進行了解。在此過程中,我將使用ida pro,softice,ollydbg等一些工具。

系統級

系統級逆向過程涉及使用執行工具來獲取有關軟體的資訊,檢查程式,檢查可執行檔案以及跟蹤程式的輸入和輸出,大部分資訊將來自作業系統。我將使用諸如sysinternals suite,tripwire,lsof,wireshark等工具。

逆向工具

逆向工程工具可以分為幾類,包括:

1.系統級工具

這些工具會探測,監視和探索我正在檢查的軟體。在大多數情況下,安全員會使用作業系統來收集惡意軟體的資訊。

2.反彙編工具

反彙編工具將使用該軟體來生成程式的彙編**,這樣,我就可以在沒有看到源**的情況下檢查惡意軟體的內部工作了。

3.偵錯程式

我可以使用偵錯程式在程式執行時觀察程式,這樣我就能夠設定斷點並跟蹤**。

4.解壓器

反編譯器會嘗試使用可執行檔案並以高階語言重新建立源**,雖然由於編譯人員不同而使逆向過程不同,但仍然是逆向工程的乙個最有效率的工具。

合法性

逆向工程的合法性一直是有爭議的,合法性問題主要圍繞逆向工程的社會和經濟方面。例如,如果你要逆向微軟的excel,對其功能重新調整,然後重新**它,這就會被視為非法的。如果你是逆向工程惡意軟體來破譯其功能和起源,那麼這可能被認為是合法的。

版權法和「數字千年版權法案」(dmca)是與逆向工程有關的重要法規。有些人聲稱,在逆向工程過程中建立的軟體程式的非正式版本,本身就違反了版權法。不過,法院並不這麼認為。

另一方面,dmca保護的是受版權保護的系統不被複製,但這與逆向工程的精神完全是矛盾的,因為逆向工程通常都要涉及這些受版權保護的系統。

但是有乙個例外,比如,為了評估或提高計算機系統的安全性。

結論

我希望大家看完本文後,可以了解逆向工程惡意軟體過程的基本框架和細節背景。從而更好的踏上逆向工程的光輝大道!

後面的文章,我會深入淺出的向大家介紹各種相關比較深奧的逆向工程細節,請大家留意我的更新。

原文發布時間為:2023年8月16日

彙編 逆向工程基礎篇(基礎語法)

逆向工程 一 彙編 逆向工程基礎篇 一.單元,位,位元組。1.位 bit 電腦資料量中的最小單元,即0和 1。2.位元組 byte 乙個位元組有八位。3.字 word 乙個字有兩個位元組,即十六位。雙字 double word 兩個字,三十二位。千字 kilobyte 1024 個位元組 32 32...

逆向工程入門

本問只是為初入逆向工程大坑的新人們指出方向學習,沒有實質性的技術。總的來說,基礎才是最重要的。逆向工程入門應該算是所有學習方向中最難的。但是選擇了這一方向的請不要放棄,一旦學成,必定會是大神級別的存在。那麼,逆向工程的入門需要學習什麼?學習c語言是逆向工程的基礎。如果是學習滲透方向的,也許可以選擇p...

軟體工程 之逆向工程

逆向工程 reverse engineering 又稱反向工程是根據已有的東西和結果,通過分析來推導出具體的實現方法。比如你看到別人寫的某個exe程式能夠做出某種漂亮的動畫效果,你通過反彙編 w32dasm 反編譯和動態跟蹤 od 等方法,分析出其動畫效果的實現過程,這種行為就是逆向工程 不僅僅是反...