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