TraceMe序號驗證程式流程圖

加載目標檔案除錯
- 設定OD中斷在程式的入口點,
- 名詞注釋:
(1)System breakpoint:系統斷點,OD用CreateProcessA加載DEBUG_ONLY_THIS_PROCESS引數執行,程式運行之后會觸發一個INT13,在系統空間里,
(2)Entry point of main module:主模塊的入口點,即檔案的入口點,
(3)WinMain:程式的WinMain()函式入口點
·-------------------------------------------------------------

- 1.虛擬地址:一般情況下,同一程式的同一條指令在不同系統環境下此值相同,
- 2.機器碼:這就是CPU執行的機器代碼,
- 3.匯編指令:和機器碼對應的程式代碼,
容易犯錯的除錯方法 - 用上次的方法來摸索一下


打開程式一路F8,在這里停了,設定一個斷點


Ctrl+F2再次打開,F9跑到斷點位置,F7步入CALL(Ctrl+F9回傳到被呼叫之前的位置),一路F8到程式運行:

再下一個斷點:

Alt+B然后取消掉第一個斷點

F7步入,繼續F8:

再一次彈出來了,所以設定一個斷點:

取消上次斷點,F7步入,繼續F8

又停了,所以設定斷點,取消上次斷點,繼續F7步入F8跟進

又停了,重復操作
這次F7步入之后,一直F8步過,
發現程式陷入了死回圈!
陷入死回圈的原因:

正確的方式
- 猜測使用GetDlgItemTextA(A,W," ")來獲取輸入

設定斷點:

運行程式,輸入

在斷點處停下來

F8步過

呼叫CALL,發現沒什么,所以Ctrl+F9回到呼叫位置,繼續F8

在這里看到我們輸入的值

這一段操作相當于:
a(“123456”,“wdnmd”,5);
三個引數,不知道回傳值
繼續F8

這個很可能為驗證程式的函式,但是我們現在只管回傳值,繼續F8

測驗回傳值是否為0

然而回傳值就為0,顯然“wdnmd,123456”密碼必然錯誤,因此ZF零標志位為1

je指令不跳轉了
那么,改為0讓他跳轉

(任何語言回傳值都會放在eax里面)
未完待續
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/279996.html
標籤:其他
上一篇:jmu資料結構課程實驗任務
下一篇:Unity組件批量復制
