OD逆向调试程序的笔记
1-讀取文本框內容常用的函數(這里的“A”表示ASCII,“W”表示寬字符UNICODE,下同)
? -GetDlgItemTextA()<這個函數是最常用到的>
? -GetWindowTextA()
? -DialogBoxParamA()
? -GetDlgItem()
? -GetDlgItemInt()
? -GetWindowLong()
2-在逆向程序的算法邏輯時,add,mov,sub,sbb,test,cmp……等這些指令出現的地方,這些指令往往用來進行某些驗證等,也是程序設計時的關鍵手法,在這些指令上面動手腳通常都可以找到突破口,逆向時要做好注釋,防止走迷宮。
3-Killtimer()函數是一個記時API函數,例如某些商業軟件的試用時間就與KillTimer()有關。
4-當在破解軟件的時候如果某些條件下達成了一些狀態,也就是突破了某些限制的時候,往往程序自身會根據開發時的規劃重新設置當前自身狀態,比如重新繪制窗口("ResetToolbars","Settings")。
5-在編寫匯編程序時要注意十六進制數不能以字母開頭,如果原始數是以字母開頭,要在前面加上0,否則在編譯的時候就不能被識別出 來,如果不是以字母開頭則不作改變,并以H/h結尾表示該數是十六進制數。同理,打補丁修改成的時候,單獨的十六進制數如果是字母,就需要在前面加個0。
6-對話框從類型上分為兩類:modal(模態對話框)和非模態(modeless)對話框。他們之間的區別在于是否允許用戶在不同窗口間進行切換,模態對話框不允許,而非模態對話框允。
創建模態對話框是由調用DiaLogBoxParam()函數實現,而創建非模態對話框是調用CreateDiaLogParam()函數實現的。
7-RegOpenKeyEx()函數的作用是打開一個注冊表的鍵值(注冊表是widows提供的一個數據庫,讓普通的程序軟件把自己的版本信息,完成進度,環境變量,是否注冊等信息寫到里面),打開之后如果函數返回值為0,說明成功的打開了一個鍵值,這個操作類似C語言的main函數返回0表示正常。
8-RegQueryValueEx()函數通常與RegOpenKeyEx()函數搭配使用,它的作用是在RegOpenKeyEx()打開的鍵值中找到一個鍵名,并把這個鍵名的值傳出來,存放到數據緩沖區里。比如二者搭配起來就可以檢測程序在注冊表里是否被注冊。
轉載于:https://blog.51cto.com/11960307/1869875
總結
以上是生活随笔為你收集整理的OD逆向调试程序的笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: POJ 2653 Pick-up sti
- 下一篇: JavaScript设计模式之发布-订阅