小甲鱼 OllyDbg 教程系列 (九) :Delphi 程序逆向特点
?
小甲魚?OllyDBG?使用教程:https://www.bilibili.com/video/av30969642?p=16
OD 實驗(十二) - 對一個 Delphi 程序的逆向:https://www.cnblogs.com/sch01ar/p/9678256.html
程序下載地址:https://pan.baidu.com/s/1Gb97C6HBNlmph7MbGrN_SQ ? ?提取碼:qhiq?
PEiD 查殼工具:https://pan.baidu.com/s/1iNS4UlBvmXCxaj5a-AFupw ? ?提取碼:79z5?
?
?
程序:
?
運行程序
界面顯示的是未注冊。點擊 Help -> About
點擊 Use Reg Key
這里輸入注冊碼,用 PEiD 看一下
該程序是用 Delphi 6.0 - 7.0 寫的
?
?
逆向:
用 OD 打開程序
右鍵 -> 查找 -> 所有參考文本字串,然后右鍵 -> 查找文本
搜索
這里有個是 accepted 為接受,failed 為失敗
雙擊到 accepted 處
如果程序執行到這里則說明,注冊碼是可以的
在 Delphi 中,push 后的 retn 指令相當于 jmp 指令
在該 push 處下一個斷點,然后跑一下程序
輸入注冊碼,點擊 Register
程序沒有停在斷點處,我們往上看程序
可以看到很多的 call 指令
這也是 Delphi 語言的特性
在提示信息之后下一個斷點
重新跑一下程序
輸入注冊碼,點 Register
程序停在了斷點處
程序會出現這樣的對話框
點擊“確定”,然后按“Register”
再按 F8 往下走
走到某個地方會跳到動態鏈接庫處
按“-”后退一步看看在哪跳的(“+”為向前一步),已經執行,只是向前或向后看一下
在 call 上面的 mov 指令下一個斷點
運行程序,停在該斷點處
如果繼續執行的話,會彈出剛才那個錯誤的對話框
把 call 語句改為 nop
接下來有個 jbe 跳轉語句會進行跳轉
跳轉到下面的地方
按 F8 繼續往下走
這里有兩個跳轉,這兩個跳轉都是未實現的
如果這兩個跳轉都沒跳的話,將會彈出錯誤的對話框,所以要讓其中一個進行跳轉
je 跳轉的地方為
jnz 跳轉的地方為
jnz 跳轉到退出的位置
所以,讓 je 指令執行跳轉,把 je 改為 jmp
je 執行跳轉之后按“F8”繼續往下走
這里有個已實現跳轉的 jnz 跳轉
如果它實現跳轉的話,將會跳過成功的對話框,所以不要讓它實現跳轉
把該指令改為 nop
然后繼續按 F8 往下走
走到這個地方會彈出成功的對話框
?
?
?
總結
以上是生活随笔為你收集整理的小甲鱼 OllyDbg 教程系列 (九) :Delphi 程序逆向特点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows 快捷键整理
- 下一篇: Fiddler (一) 教程(Web调试