轉載:https://blog.csdn.net/super_mimi/article/details/39834329
調試軟件,最重要的就是下斷點,那么如何下斷點,就是一門重要的技巧.
比如:彈提示框,就下MessageBoxA,注冊表的,就下RegOpenKeyA等等.
當然,能直接下到按鈕事件,當然更為方便,因為到了按鈕事件后,很快就會到達核心代碼,離你的破解也就不遠了.
本文就總結一下各類語言找按鈕事件的方法,當然也可以借助工具,如VBexplorer,DEDE,ECE等等.
一、VB程序
其實,VB的按鈕事件的找法是最為普遍的,也就是大家所謂的萬能斷點.其實也不僅僅是針對按鈕事件,還有很多其他的用處,如取消NAG,啟動框,灰色按鈕或隱藏按鈕,啟動時的timer事件等等,具體的就自己去總結吧,這里只演示按鈕事件!
OD載入后,CTRL+B,816C24
確定后,
然后,就在下面的JMP處F2下斷,下完后CTRL+L,如果還有,就繼續下斷點.
下完斷點后,運行程序,點擊相應的按鈕,OD就會斷下來了
下面的任務就是考驗大家的耐心,F8跟蹤吧,不再贅述了.
當然,為了方便大家,可以寫個簡單的腳本,免的每次都去手動設置了,節省時間:
復制內容到剪貼板
代碼:
var Addr
mov Addr,401000
loop:
find Addr,# 816C2404??000000#
cmp $RESULT,0
je Exit
add $RESULT,08
bp $RESULT
add $RESULT,1
mov Addr,$RESULT
jmp loop
Exit:
eval "按鈕事件查找完畢!"
msg $RESULT
ret
二、Delphi和BC++程序
Delphi和BC++都是同一公司開發的,故查找方法都一樣,當然你也可以使用DEDE.
OD載入后,CTRL+G,轉到00401000處
然后就CTRL+B,查找特征碼 740E8BD38B83????????FF93????????
然后就會找到下面的地方:
然后就在下面的CALL處下斷吧.
下面的工作就是不斷的CTRL+L繼續查找和F2下斷了.
運行下看看效果吧:
看,斷下了吧,下面就F7跟進這個CALL吧,就來到這個按鈕事件處了.
同樣寫個腳本,方便大家操作:
復制內容到剪貼板
代碼:
var Addr
mov Addr,401000
loop:
find Addr,#740E8BD38B83????????FF93????????#
cmp $RESULT,0
je Exit
add $RESULT,0A
bp $RESULT
add $RESULT,1
mov Addr,$RESULT
jmp loop
Exit:
ret
三、易語言
易語言的這種查找方法,同樣適合有殼的程序,其他的就必須脫殼后再繼續操作了.
OD載入后,就F9運行程序吧,當程序運行后,ALT+E
選中易語言的 核心庫krnln,雙擊進去
然后CTRL+B,查找 FF 55 FC
查找到的這個CALL就是了,F2下斷吧
現在輸入必須的內容后,單擊對應的按鈕吧
看,斷下了吧,下面就F7跟進吧,就來到按鈕事件處了
同樣,寫個腳本,方便大家
gpa"GetProcessHeap","kernel32.dll"
cmp $RESULT,0
je err
bp $RESULT
run
run
run
bc $RESULT
rtu
find 10001000,#FF55FC5F5E895D??8945#
bp $RESULT
find eip,#FFE0#
cmp$RESULT,0
je err
bp $RESULT
run
bc $RESULT
sto
MSG "按鈕事件查找完畢!"
ret
err:
MSG "腳本運行錯誤!請檢查錯誤后再繼續運行腳本!"
ret
四、VC++程序(非MFC程序)
OD載入后,單擊鼠標右鍵,選擇"查找",然后是"所有命令"
在彈出的輸入框里,寫入特征代碼" sub eax,0a"
確定后,就來到下面的窗口
在下面的sub eax,0A處,雙擊進去吧:
來找這里后,在下面的je處跟隨過去
跟隨來到的這個CALL,就是了,F2下斷吧
然后斷下后,F7跟進,F8幾次,就來到按鈕事件了.
五、MFC類程序
當然判斷MFC和非MFC的程序,靠大家自己去判斷了
OD載入后.ALT+E,來到可執行模塊,找MFC的核心DLL:MFC42
然后就雙擊進去
然后就CTRL+F,查找特征代碼:sub eax,0a
同樣,找到后,就在下面的je處跟隨,跟隨后看到的CALL,就是那個關鍵CALL了!
斷下后F7跟進,F8幾次,就會來到按鈕事件代碼處了!
方法就簡單的介紹到這里了,當然只是拋磚引玉,其他的,還得多靠大家自己慢慢總結吧!