逆向工程基础
文章目錄
- 0x01、逆向分析基礎介紹
- 1、逆向分析概述
- 2、逆向分析準備工作
- 基礎知識準備-匯編語言基礎
- 逆向分析工具準備
- 3、逆向分析的學術價值
- 0x02、逆向分析的作用方向
- 1、破解軟件
- 破解軟件思路
- 2、木馬、病毒等惡意代碼的分析
- 3、內部算法的分析
- 4、對軟件進行修改、二次開發、擴展其功能
- 0x03、逆向分析工具的簡單介紹
- 查找軟件是否加殼(PEID)
- 識別軟件使用什么語言編寫的(DIE)
- 反匯編調試工具(OllyDbg)
0x01、逆向分析基礎介紹
1、逆向分析概述
逆向工程(又稱逆向技術),是一種產品設計技術再現過程,即對一項目標產品進行逆向分析及研究,從而演繹并得出該產品的處理流程、組織結構、功能特性及技術規格等設計要素,以制作出功能相近,但又不完全一樣的產品。逆向工程源于商業及軍事領域中的硬件分析。其主要目的是在不能輕易獲得必要的生產信息的情況下,直接從成品分析,推導出產品的設計原理。
2、逆向分析準備工作
基礎知識準備-匯編語言基礎
匯編是逆向工程的基礎,匯編語言是一切程序的起點和終點,畢竟所有的高級語言都是建立在匯編基礎之上的。在許多高級語言中我們都需要相對明確的語法,但是在匯編中,我們會使用一些單詞縮寫和數字來表達程序。
匯編語言是最古老的編程語言,在所有的語言中,它與原生機器語言最為接近。它能直接訪問計算機硬件,要求用戶了解計算機架構和操作系統。
匯編是逆向工程的基礎,在現代編程中大家用的都是python,C/C++,java,易語言等這些高級語言,但是程序經過編譯鏈接之后執行的都是匯編語言。
計算機是基于二進制的,只能接受和處理二進制信息,CPU處理的指令也是二進制流,我們稱之為機器語言。
逆向分析工具準備
3、逆向分析的學術價值
1、破解軟件的登錄,注冊碼和其他的授權
2、挖掘漏洞和安全性檢測
3、還原非開源項目
4、挑戰自我,提高自我
0x02、逆向分析的作用方向
- 破解軟件,去除軟件的各種限制
- 木馬、病毒等惡意代碼的分析
- 內部算法的分析
- 對軟件進行修改,二次開發,擴展其功能
1、破解軟件
逆向破解軟件指的通過修改內存或者程序文件、或者寫注冊機(keygen)程序并隨機產生有效的序列號注冊碼,來達到免費使用該軟件、或者突破其功能限制的目的的過程。
破解軟件思路
查找軟件是否加殼,如果加殼的話,找對應的脫殼工具脫殼。檢測識別使用什么語言編寫的,然后找出驗證的關鍵位置,分析驗證機制,修改關鍵跳轉。
加殼:加殼的全稱應該是可執行程序資源壓縮,壓縮后的程序可以直接運行。加殼的另一種常用的方式是在二進制的程序中植入一段代碼,在運行的時候優先取得程序的控制權,之后再把控制權交還給原始代碼,這樣做的目的是隱藏程序真正的OEP(入口點,防止被破解)。加殼的程序需要阻止外部程序或軟件對加殼程序本身的反匯編分析或者動態分析,以達到保護殼內原始程序以及軟件不被外部程序破壞,保證原始程序正常運行。這種技術也常用來保護軟件版權,防止軟件被破解。
脫殼:脫殼即去掉軟件所加的殼。
? 在這三步中驗證的關鍵是第二步驗證中,這個位置是真假碼的比較。第二步一般很難直接找到,因為一個程序里面有很多不同的判斷。
? 要找關鍵位置必須依靠線索。最直接的線索就是驗證后的不同結果。最常用的辦法就是通過驗證后的結果來反查到關鍵位置。一種結果是有提示的字符串,比如“成功”,“失敗”等,破解思路就在程序代碼中先定位到這些字符串,然后往前找關鍵比較代碼。
? 通過結果來反查是最主要的做法,對于不同的結果,要用不同的辦法。比如提示字符串,錯誤對話框等等。
? 如果沒有錯誤返回結果,那我們就需要從驗證前的線索入手了。
2、木馬、病毒等惡意代碼的分析
將程序反匯編出源碼,靜態分析源碼。
將機器代碼反匯編成方便人類理解的代碼,如Java代碼、匯編代碼或匯編代碼翻譯的C語言偽代碼等等,通過分析這些比較低級的編程語言的代碼,來分析查看木馬、病毒等惡意代碼。
3、內部算法的分析
通過斷點調試手段,讓程序單步執行進行分析。動態分析住往是在靜態分析出一定的結果的基礎上進行,找到合適的地方給代碼打斷點,即時地讀取當前變量的值,來進一步分析程序的邏輯、獲取程序關系數據。
4、對軟件進行修改、二次開發、擴展其功能
軟件部分功能不能適應滿足個人的使用需求需求,在現有的軟件上進行定制修改和功能的擴展,然后達到自己想要的功能。
0x03、逆向分析工具的簡單介紹
查找軟件是否加殼(PEID)
點擊瀏覽選擇要逆向分析的軟件或者直接將要逆向分析的軟件拖動到PEID
識別軟件使用什么語言編寫的(DIE)
點擊…選擇要逆向分析的軟件或者直接將要逆向分析的軟件拖動到DIE
反匯編調試工具(OllyDbg)
將機器代碼反匯編成方便人類理解的代碼,如Java代碼、匯編代碼或匯編代碼翻譯的C語言偽代碼等等,通過分析這些比較低級的編程語言的代碼,找到程序的業務流程或設計邏輯。通過斷點調試手段,讓程序單步執行進行分析。動態分析往往是在靜態分析出一定的結果的基礎上進行,找到合適的地方給代碼打斷點,即時地讀取當前變量的值,來進一步分析程序的邏輯、獲取程序關系數據。
將程序直接拖進OD,將程序反匯編出來,分析反匯編的代碼,找到程序驗證的關鍵位置,逐步分析,修改程序。
代碼區:顯示匯編代碼的地方,查看程序執行代碼
信息區:顯示程序運行每句代碼的相關信息
數據區:顯示程序的數據的地方
寄存器區:顯示寄存器
堆棧區:堆棧也是內存的一部分,堆棧里面的地址存放數據
總結
- 上一篇: 关于毫米波技术的描述
- 下一篇: Mysql优化之执行计划查看