小甲鱼 OllyDbg 教程系列 (五) : 破解 PC Surgeon 之 查找字符串
?
https://www.bilibili.com/video/av6889190/?p=11
https://www.bilibili.com/video/av6889190/?p=12
?
程序下載地址:https://pan.baidu.com/s/1eVTLQ_AatLrmrz3FLwM5ww? ? 提取碼:wny9?
?
?
修復(fù)?OllyDBG? 右鍵 ->?復(fù)制到可執(zhí)行文件 ->?所有修改? 中?所有修改不顯示的問題
? 修復(fù)不顯示 “?所有修改 ”:
修復(fù)后:
?
?
開始逆向分析
?
切入點(diǎn):
?
查找字符串:
?
下斷點(diǎn):
函數(shù)入口處下斷點(diǎn):
重新載入程序,斷點(diǎn)到相應(yīng)位置,然后讓跳轉(zhuǎn)實(shí)現(xiàn):
跳轉(zhuǎn)實(shí)現(xiàn)后,程序跳過開始的窗口,顯示主窗口,說明需要修改的位置就在斷點(diǎn)位置的附近:
about?窗口:
在根據(jù)?about?窗口中的 <Unregistered Version>?作為字符串進(jìn)行搜索:
字符串對應(yīng)位置下斷點(diǎn)
所在函數(shù)開始位置也下個斷點(diǎn)( 55?位置,即?push ebp?):
重新載入程序,點(diǎn)擊?about?窗口,觸發(fā)斷點(diǎn),
然后?按?F9 ,運(yùn)行程序:
?
暴力破解,打補(bǔ)丁。重新載入程序,在?條件跳轉(zhuǎn)的地方,都用 jmp? 無條件跳轉(zhuǎn)
?
保存程序:
?
保存文件
?
驗(yàn)證:
重新載入修改后的程序,按?F9?運(yùn)行程序,發(fā)現(xiàn)已經(jīng)是想要的效果:
?
?
?
比較高級的方法
https://www.bilibili.com/video/av6889190?p=12
上面是比較低級的方法。。。當(dāng)然有比較高級的方法。
重新將軟件載入OD。來到代碼處。鼠標(biāo)向上滑幾行,可以看到這樣的代碼:
mov eax,dword ptr [60ebe8]
cmp byte ptr [eax],0
jnz 005cc935
顯然,將地址60ebe8的值送到eax里,然后將eax的值作為地址,將這個地址中的值和0比較(其實(shí)是兩數(shù)相減),結(jié)果不為零就跳轉(zhuǎn),但是,,,,
ds:[0060eb8c]=00610c4a
右鍵點(diǎn)擊mov eax,dword ptr [60ebe8] 這一行 —>?右鍵?—> 查找參考 —> 地址常量,將所有的都設(shè)置斷點(diǎn):
重新運(yùn)行程序,來到第一個斷點(diǎn)處,有這樣的代碼:
mov edx,dword ptr [60ebe8]
mov byte ptr [edx],al
在上面我們知道ds:[0060eb8c]=00610c4a,所以:
mov edx,dword ptr [60ebe8]
mov byte ptr [edx],al
這兩段代碼執(zhí)行后,ds:[00610c4a]的值就是al的值,不幸的是,我們從OD右邊的寄存器中看到al=0,所以
ds:[00610c4a]=00,所以cmp byte ptr [eax],0的結(jié)果就是0,所以jnz 005cc935就不能跳轉(zhuǎn),所以。。。
我們直接將mov byte ptr [edx],al 改為
mov byte ptr [edx],1,復(fù)制到可執(zhí)行文件,保存文件就破解成功了,牛逼吧,但是這樣改會出現(xiàn)這樣的問題:
?
這個軟件這樣改是沒有問題,但比較大的軟件這樣改,就可能會影響程序,因?yàn)橐囟ㄎ坏臇|西太多了(至于什么是重定位,這個很重要,提醒一下自己,有興趣的可以去看看PE結(jié)構(gòu)),所以也可以這樣改:
將后面的 cmp byte ptr [eax],0改為 mov byte ptr [eax],1
將jnz short 005c2c15 改為jmp short 005c2c15
這樣就不會出現(xiàn)重定位 的代碼過多的問題。
?
?
?
總結(jié)
以上是生活随笔為你收集整理的小甲鱼 OllyDbg 教程系列 (五) : 破解 PC Surgeon 之 查找字符串的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 王爽 汇编语言第三版 第11章 标志寄存
- 下一篇: Linux的发展