軟件基址是軟件的內(nèi)存起始地址,能夠幫助我們實(shí)現(xiàn)很多有趣的功能,但要找準(zhǔn)確地它也有些技巧。
1.使用調(diào)試器獲取基址
通過使用調(diào)試器如Ollydbg等軟件可以很快找到基址,首先打開軟件,并打開要分析的程序以加載它的圖像到內(nèi)存中。然后在軟件的工具欄中選擇“打開進(jìn)程”,選擇分析目標(biāo)程序。打開后點(diǎn)擊“菜單欄-查看-DumpBinary”保存內(nèi)存。打開生成的Dump文件,使用當(dāng)前分析節(jié)頭的物理偏移量減去節(jié)的RVA或者文件偏移量減去節(jié)頭大小可以得到基址。
2.使用特定的輔助軟件
使用特定的輔助軟件如CheatEngine或ArtMoney等軟件可以幫助我們找到基址。首先運(yùn)行目標(biāo)程序,并打開輔助工具,點(diǎn)擊“打開進(jìn)程”,然后選擇你的目標(biāo)程序,跟隨輔助工具的菜單欄依次選擇“搜索-值類型-精確值搜索”輸入你想要搜索而且你知道的一個(gè)值,重復(fù)幾次后,工具就會(huì)給出基址。
3.使用獨(dú)立模塊基址
若該程序本身是個(gè)獨(dú)立模塊,那么它的基址很可能就是它的模塊起始偏移量。這時(shí)我們可以用“PEInfo”這類模塊信息查看工具來(lái)查找模塊基址,然后使用獨(dú)立模塊基址加上需要的偏移量得到目標(biāo)地址。
4.使用黑科技:硬件斷點(diǎn)和INT3指令誘導(dǎo)中斷
在程序的內(nèi)存區(qū)域下斷點(diǎn)然后讓它執(zhí)行指令時(shí)回避斷點(diǎn)在指令單元執(zhí)行時(shí)的問題。通過這個(gè)方法可以獲取到基址,但是要求程序本身的代碼具備一定的特征,不然結(jié)果不可預(yù)測(cè)。
5.使用重載操作符運(yùn)算
可以通過重載操作符技術(shù)在程序中自行注入獲取基址的函數(shù)、操作符。要注意的是,這個(gè)方法需要使用高級(jí)的反匯編、調(diào)試技術(shù),且存在程序修改的法律風(fēng)險(xiǎn)。
6.結(jié)合多種方法綜合分析
要獲取基址并不是只能使用單一的方法,而是結(jié)合多種因素進(jìn)行分析,最終得出正確的結(jié)果。充分了解每種方法的優(yōu)劣和特點(diǎn),合理選用合適的方法,可以大大提高分析的成功率。
綜上所述,找到基址雖然有難度,但是有很多方法可以幫助我們達(dá)到目的。在實(shí)踐中要結(jié)合各種因素進(jìn)行分析,充分利用工具功能,才能最終找到準(zhǔn)確的目標(biāo)地址。