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