在進(jìn)行軟件的破解、解密以及計(jì)算機(jī)病毒分析工作中,一個(gè)首要的問題是對(duì)軟件及病毒進(jìn)行分析。這些軟件都是機(jī)器代碼程序,對(duì)于它們分析必須使用靜態(tài)或動(dòng)態(tài)調(diào)試工具,分析跟蹤其匯編代碼。
一、從軟件使用說明和操作中分析軟件
欲破解一軟件,首先應(yīng)該先用用這軟件,了解一下功能是否有限制,最好閱讀一下軟件的說明或手冊(cè)特別是自己所關(guān)心的關(guān)鍵部分的使用說明,這樣也許能夠找點(diǎn)線索。
二、靜態(tài)反匯編
所謂靜態(tài)分析即從反匯編出來的程序清單上分析,從提示信息入手進(jìn)行分析。目前,大多數(shù)軟件在設(shè)計(jì)時(shí),都采用了人機(jī)對(duì)話方式。所謂人機(jī)對(duì)話,即在軟件運(yùn)行過程中,需要由用戶選擇的地方,軟件即顯示相應(yīng)的提示信息,并等待用戶按鍵選擇。而在執(zhí)行完某一段程序之后,便顯示一串提示信息,以反映該段程序運(yùn)行后的狀態(tài),是正常運(yùn)行,還是出現(xiàn)錯(cuò)誤,或者提示用戶進(jìn)行下一步工作的幫助信息。為此,如果我們對(duì)靜態(tài)反匯編出來的程序清單進(jìn)行閱讀,可了解軟件的編程思路,以便順利破解。 常用的靜態(tài)分析工具是W32DASM、IDA和HIEW等。
三、動(dòng)態(tài)跟蹤分析
雖然從靜態(tài)上可以了解程序的思路,但是并不可能真正了解地了解軟件的細(xì)節(jié),如靜態(tài)分析找不出線索,就要?jiǎng)討B(tài)分析程序,另外,碰到壓縮程序,靜態(tài)分析也無能為力了,只能動(dòng)態(tài)分析了。所謂動(dòng)態(tài)分析是利用SOFTICE或TRW2000一步一步地單步執(zhí)行軟件。為什么要對(duì)軟件進(jìn)行動(dòng)態(tài)分析呢?這主要是因?yàn)椋?/P>
1、許多軟件在整體上完成的功能,一般要分解成若干模塊來完成,而且后一模塊在執(zhí)行時(shí),往往需要使用其前一模塊處理的結(jié)果,這一結(jié)果我們把它叫中間結(jié)果。如果我們只對(duì)軟件本身進(jìn)行靜態(tài)地分析,一般是很難分析出這些中間結(jié)果的。而只有通過跟蹤執(zhí)行前一模塊,才能看到這些結(jié)果。另外,在程序的運(yùn)行過程中,往往會(huì)在某一地方出現(xiàn)許多分支和轉(zhuǎn)移,不同的分支和轉(zhuǎn)移往往需要不同的條件,而這些條件一般是由運(yùn)行該分支之前的程序來產(chǎn)生的。如果想知道程序運(yùn)行到該分支的地方時(shí),去底走向哪一分支,不進(jìn)行動(dòng)態(tài)地跟蹤和分析是不得而知的。
2、有許多軟件在運(yùn)行時(shí),其最初執(zhí)行的一段程序往往需要對(duì)該軟件的后面各個(gè)模塊進(jìn)行一些初始始化工作,而沒有依賴系統(tǒng)的重定位。
3、有許多加密程序?yàn)榱俗柚狗欠ǜ櫤烷喿x,對(duì)執(zhí)行代碼的大部分內(nèi)容進(jìn)行了加密變換,而只有很短的一段程序是明文。加密程序運(yùn)行時(shí),采用了逐塊解密,逐塊執(zhí)行和方法,首先運(yùn)行最初的一段明文程序,該程序在運(yùn)行過程中,不僅要完成阻止跟蹤的任務(wù),而且還要負(fù)責(zé)對(duì)下一塊密碼進(jìn)行解密。顯然僅對(duì)該軟件的密碼部分進(jìn)行反匯編,不對(duì)該軟件動(dòng)態(tài)跟蹤分析,是根本不可能進(jìn)行解密的。
由于上述原因,在對(duì)軟件靜態(tài)分析不行的條件下,就要進(jìn)行動(dòng)態(tài)分析了。哪么如何有效地進(jìn)行動(dòng)態(tài)跟蹤分析呢?一般來說有如下幾點(diǎn):
1、對(duì)軟件進(jìn)行粗跟蹤
所謂粗跟蹤,即在跟蹤時(shí)要大塊大塊地跟蹤,也就是說每次遇到調(diào)用CALL指令、重復(fù)操作指令REP.循環(huán)操作LOOP指令以及中斷調(diào)用INT指令等,一般不要跟蹤進(jìn)去,而是根據(jù)執(zhí)行結(jié)果分析該段程序的功能。
2、對(duì)關(guān)鍵部分進(jìn)行細(xì)跟蹤
對(duì)軟件進(jìn)行了一定程度的粗跟蹤之后,便可以獲取軟件中我們所關(guān)心的模塊或程序段,這樣就可以針對(duì)性地對(duì)該模塊進(jìn)行具體而詳細(xì)地跟蹤分析。一般情況下,對(duì)關(guān)鍵代碼的跟蹤可能要反復(fù)進(jìn)行若干次才能讀懂該程序,每次要把比較關(guān)鍵的中間結(jié)果或指令地址記錄下來,這樣會(huì)對(duì)下一次分析有很大的幫助。軟件分析是一種比較復(fù)雜和艱苦的工作,上面的幾點(diǎn)分析方法,只是提供了一種基本的分析方法。要積累軟件分析的經(jīng)驗(yàn)需要在實(shí)踐中不斷地探索和總結(jié)。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注