用这个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跟出序列号