現(xiàn)在的軟件界,操作起來(lái)挺神秘的,好多都不明所以。就拿這次軟件分析來(lái)說(shuō),加密壓縮殼一搞,連個(gè)有效信息都撈不著。可流程還得按部就班,這心里就滿是無(wú)奈和不確定感。真讓人好奇,這到底是個(gè)啥情況?
加密壓縮殼的阻礙
加密壓縮殼,那東西在分析軟件時(shí)特別頭疼。它把軟件保護(hù)得嚴(yán)嚴(yán)實(shí)實(shí),就像一座堅(jiān)不可摧的堡壘。很多軟件開(kāi)發(fā)者就是用這招防止別人輕易破解他們的軟件。實(shí)際上,不少商業(yè)軟件為了保護(hù)自己的知識(shí)產(chǎn)權(quán),都會(huì)用這種加密壓縮殼。遇到這種情況,分析者確實(shí)挺難找到有用的信息。更別提了,這些加密壓縮殼的加密算法和強(qiáng)度各不相同,有的甚至多層加密,這直接把分析的難度給提升了。
軟件分析這活兒可真不簡(jiǎn)單,尤其在這種加密手段下。有時(shí)候咱們得投入好多時(shí)間和精力,可最后還是一無(wú)所獲。只能抱著一線希望,說(shuō)不定按照這套流程走,能有個(gè)新發(fā)現(xiàn)。咱們這軟件安全公司的研究員們,經(jīng)常會(huì)遇到這種狀況。要是找不到有效的解決辦法,那可就得影響項(xiàng)目進(jìn)度了。
軟件內(nèi)機(jī)器碼的觀察
打開(kāi)軟件一看,發(fā)現(xiàn)機(jī)器碼全都是00,這挺不尋常的。這種情況通常是因?yàn)樘摂M化操作造成的。比如在一些特別注重軟件安全的企業(yè)里,他們內(nèi)部使用的程序常常會(huì)用上虛擬化技術(shù)。程序在虛擬環(huán)境下運(yùn)行時(shí),就容易出現(xiàn)這樣的機(jī)器碼顯示。
這事說(shuō)明軟件可能經(jīng)過(guò)了特殊處理,才釋放出了那些全是0的機(jī)器碼。這既是分析者的線索,又是個(gè)謎。它可能指向軟件啟動(dòng)時(shí)某個(gè)特別的機(jī)制。要完全搞懂這,得深入挖掘軟件各模塊間的調(diào)用關(guān)系。很多論壇里,大家都在熱烈討論這個(gè)機(jī)器碼現(xiàn)象,分享經(jīng)驗(yàn)和看法。
指令跳轉(zhuǎn)的猜測(cè)
發(fā)現(xiàn)jmp和jnz這兩個(gè)指令,就像在迷宮里找到了路標(biāo)。它們?cè)诰幊踢壿嬂锓浅V匾?。jmp指令簡(jiǎn)單直接,就是直接跳到指定程序地址。比如,開(kāi)發(fā)游戲軟件時(shí),要實(shí)現(xiàn)場(chǎng)景跳轉(zhuǎn),就得用到j(luò)mp指令。
jnz指令跟判斷條件扯上關(guān)系。咱們看看它對(duì)錯(cuò)誤彈窗跳過(guò)的那些情況注冊(cè)機(jī)打開(kāi)指令,大概就能猜到軟件想隱藏或不展示某些提示的邏輯。這種指令層面的分析,每個(gè)小發(fā)現(xiàn)都可能揭開(kāi)軟件運(yùn)行機(jī)制的秘密,咱們得耐心地挖掘每個(gè)指令可能涉及的引用關(guān)系。
注冊(cè)成功關(guān)鍵跳轉(zhuǎn)的分析
關(guān)鍵在于判斷注冊(cè)是否成功,這個(gè)環(huán)節(jié)在軟件分析中極其關(guān)鍵。它直接影響到軟件的商業(yè)運(yùn)營(yíng)模式。比如,對(duì)于一款需要付費(fèi)下載的軟件,如果注冊(cè)成功的跳轉(zhuǎn)分析出現(xiàn)失誤,那可能會(huì)讓整個(gè)軟件面臨被破解或使用時(shí)出現(xiàn)漏洞的風(fēng)險(xiǎn)。
咱們得在分析過(guò)程中注冊(cè)機(jī)打開(kāi)指令,把操作前后的情況好好對(duì)比一下。比如說(shuō),用這個(gè)軟件的時(shí)候,得反復(fù)注冊(cè),然后看它斷在不同的地方,再根據(jù)左上角顯示的信息,判斷注冊(cè)是不是成功了。這事得用上軟件分析工具的各種顯示功能,比如寄存器窗口和引導(dǎo)線箭頭這些輔助信息。
真碼追蹤的過(guò)程
追尋真碼就像是在走一遭解謎的冒險(xiǎn)。你得先給特定的call點(diǎn)設(shè)個(gè)斷,然后一步一步地跟著走,就跟偵探追查線索似的,慢慢就能挖出軟件里的門道來(lái)。操作這個(gè)軟件的時(shí)候,得留意那些標(biāo)志符的變動(dòng)注冊(cè)機(jī)打開(kāi)指令,比如al標(biāo)志符的數(shù)值,這可是判斷注冊(cè)成不成功的關(guān)鍵。
不過(guò),這過(guò)程中難免會(huì)遇到點(diǎn)麻煩,比如說(shuō)代碼上下移動(dòng)后,EIP所在的那一行出了問(wèn)題。這時(shí)候得動(dòng)用點(diǎn)軟件分析的小技巧,比如用od里的ctrl+A重新解析代碼啥的。在真正的軟件安全分析里,這種處理各種代碼錯(cuò)誤的能力,可是研究員們必須掌握的本事。
注冊(cè)文件與請(qǐng)求碼發(fā)現(xiàn)
注冊(cè)成功后,會(huì)自動(dòng)生成一個(gè)新的注冊(cè)文件。這個(gè)文件里頭有非常關(guān)鍵的請(qǐng)求碼和注冊(cè)碼等資料。這種事情在不少軟件里都有,比如某些辦公軟件用戶付完費(fèi)注冊(cè)后,就會(huì)在安裝文件夾里生成這種文件。找到這個(gè)文件,解讀里面的內(nèi)容,就能更深入地了解軟件注冊(cè)系統(tǒng)的運(yùn)作方式。比如,能從文件里看出注冊(cè)碼的構(gòu)成。再比如,通過(guò)觀察注冊(cè)碼的構(gòu)成和軟件代碼中的跳轉(zhuǎn)判斷等細(xì)節(jié),比如這個(gè)軟件里的je跳轉(zhuǎn)判斷,就能發(fā)現(xiàn)它們之間可能存在的邏輯聯(lián)系,這樣就能為分析整個(gè)軟件的邏輯提供更多線索。
在使用軟件分析的時(shí)候,你是不是也遇到過(guò)那種加密特別難破解的情況?真心希望大家都來(lái)點(diǎn)個(gè)贊、轉(zhuǎn)發(fā)一下,然后在評(píng)論區(qū)里聊聊你的看法和經(jīng)驗(yàn)。