**硬編碼序列號:**
> 不依賴于用戶名來生成,總是由固定的字符和數字構成的固定不變的字符串
* * * * *
首先`Ctrl+N`查看API函數列表
`GetDlgItemTextA`獲取用戶輸入的序列號
`MessageBoxA`提示輸入的序列號正確,錯誤與否
我們給這兩個API函數設置斷點
然后,按F9鍵,運行CrackMe程序
在輸入框輸入wintry,然后單擊確認驗證
* * * * *
斷在了GetDlgItemTextA處,該函數用于獲取用戶輸入的序列號,
并且該函數的Buffer參數是用于存放獲取到的序列號的緩沖區首地址
在該參數上單擊鼠標右鍵選擇數據窗口跟隨。
當前緩沖區為空,因為該API函數還沒有執行
Ctr+F9執行到函數返回。
該函數將用戶輸入的序列號保存到了緩沖區中
* * * * *
F7鍵單步返回到主程序中
看到比較和條件跳轉指令,分別跳到正確和錯誤兩個分支
往上有兩條指令,一條給EBX寄存器賦值,一條和EBX比較
其中被賦值的值就是我們輸入的序列號,然后和下邊正確的序列號比較、
選擇在數據窗口中跟隨內存地址,對比寄存器,就能找到正確序列號了。
* * * * *
還有一個簡單的方法,
直接查找參考字符串,跟進正確活錯誤提示語句
向上尋找關鍵Call,字符串比較函數等。。。
例子:
https://pan.baidu.com/s/1cO4vhODN388kwnyX9evrKQ
https://pan.baidu.com/s/1xIWFMBL79xVMeWWIwkhmNA
* * * * *
**再來看一個更加復雜的硬編碼的CrackMe**
這個CrackMe并不是序列號直接進行比較
有一個簡單的算法
https://pan.baidu.com/s/1QBz_dF9v1oz3RFYZ2zApIw