用這個CM程序來分析一下簡單算法。
鏈接:
https://pan.baidu.com/s/1VPwZdeM3Qd5cbp_rQBpNDQ
首先OD載入,Ctrl+N查找當前模塊。
找到獲取輸入函數,GetlDlgItemTextA,下斷。
run跑起來,輸入name和序列號,點擊ok
程序斷在我們的斷點處了,右擊緩沖區,數據窗口跟隨
Ctrl+F9執行到返回,接著F9,執行到返回,看到錯誤序列號
給錯誤序列號下內存訪問斷點,run跑起來
程序跑到一個循環,讀取了錯誤序列號,存在EDI寄存器中
然后接著單步,有個EAX壓棧,然后和EBX(錯碼)的比較
EAX就是程序算出來的,EBX是我們的錯碼
EAX的值 or 1234 就是序列號了
* * * * *
通過直接函數下斷,搜索字符串,或者搜內存等方法
來到錯誤或正確提示點
找關鍵算法Call分析。
在錯誤序列號處下內存斷點等~~
**來一個例子**:
鏈接:
https://pan.baidu.com/s/1Q1gH3R3v4T5n1bGVYLbi6Q
F9運行輸入用戶名和序列號(xxx)
在內存模塊搜索xxx(Crtl+B),然后下內存寫入斷點
Ctrl+F8自動單步到用戶名的地方,然后手動F8跟出序列號