小甲鱼 OllyDbg 教程系列 (十三) : 把代码和变量注入程序 以及 硬件断点
?
小甲魚 OllyDbg 視頻教程:https://www.bilibili.com/video/av6889190?p=21
程序下載地址:https://pan.baidu.com/s/1A4-BDgbdUgy-cmI4IMMzYw ? ?提取碼:jsdv
?
?
開始,按照慣例,首先用?PEiD?打開,看下是什么語言編寫的程序:
可以看到是?VC6.0 。載入程序,然后運行程序,當出現?neg?窗口時,暫停程序,然后查看調用堆棧:
對應代碼位置打上斷點:
重新載入程序,運行,發現程序斷點到斷點位置,按 F9?運行,neg?窗口出現,等一會消失,發現程序運行到斷點位置的下一行,說明斷點位置正確,這個就是出現?neg?窗口的位置。
現在既然找到斷點位置,常規做法是?直接?nop?掉這個call?調用,現在可以 nop掉保存程序,然后運行,發現不是想要的結果,說明不能直接?nop。
再重新載入原來的程序,按?F9?發現程序的三個窗口都是通過這個?call?調用來顯示的,然后往上看,發現一個?je?跳轉,這個可以控制 call?調用是不是顯示窗口,所以就相當于一個?if else ,這里要顯示最后一個窗口?所以就相當于等于 2?時跳轉,
可以找一塊程序自身不用的內存空間來寫入內聯補丁。點擊?m ,查看程序的?PE?映射:
雙擊?data?段,進入?data?段,找到沒有使用位置,下一個硬件寫入斷點,測試要是用的位置在程序運行時有沒有使用,如果在程序運行?的時候使用的那個位置,就按上面方法再找一個位置。然后繼續測試,直到找到程序在運行時不會使用的位置:
下完?硬件寫入斷點后,重新載入程序,測試要寫入數據的位置是否可用(?也就是程序在運行的時候不會往這個位置寫入數據?),這個示例中程序不會寫入數據,這個位置可用。
找到要寫入?內聯補丁的位置:
在要寫入的位置添加書簽,方便通過 右鍵 ->?書簽?直接跳轉:
在?je?位置添加書簽:
以前是通過手動跳來跳去直接改匯編代碼,現在可以通過插件?NonaWrite?來寫?內聯補丁的 匯編代碼:
開始寫?內聯補丁的匯編代碼:
完成后,內聯匯編?代碼:
現在開始?改?je?跳轉:
保存所有修改。然后運行修改后的程序,發現已經成功,只有?第二個?neg?窗口:
原程序運行后有3?個?neg?窗口
至此,逆向成功。
可以載入修改后的程序,按?F8?單步調試追蹤修改后的程序執行流程
?
?
?
總結
以上是生活随笔為你收集整理的小甲鱼 OllyDbg 教程系列 (十三) : 把代码和变量注入程序 以及 硬件断点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python3 中的 eval 函数
- 下一篇: Grafana 使用教程 --- 开源的