硬编码寻找序列号(四)
使用工具
- OllyDbg 1.10原版,简称
OD; OD插件:中文搜索引擎;OD汉化和插件均来自互联网;- CrackMe来自互联网,仅供学习使用;
- 文中特殊数字均是
HEX,为了书写方便采用DEC;
逆向思路
事实证明:不能“以貌取人”。
刚打开软件的时候,心里还想着,这么简陋?分分钟就逆向完毕了,结果,“啪啪啪”实力打脸,针扎的疼。
首先,打开软件到处点点,逆向一个软件起码要会用吧,不会用就没必要说逆向了;
倒入
OD开始分析:首先按下
Ctrl + A让OD分析一下代码;接着按下
Ctrl + N查看使用了哪些API,翻了翻,呀呵,看着简陋,用的API还真不少,那就搜索吧,没有GetDlgItemTextA?那就拿GetWindowTextA下手吧:在GetWindowTextA函数上设置断点,然后去断点窗口双击断点进入反汇编窗口给断点设置备注,这是一个好的习惯,请保持;然后
F9运行程序,“随便输入” 一些字符后点击验证,可以随便输入,但请记住它;居然没有断下来,也没有弹窗,这让我很尴尬:
![尴尬]()
嗯,界面有按钮,那就试试消息断点,熟练的设置好
消息断点,运行程序,输入,点击按钮,还是没有断下来;不怕,还有
内存断点、硬件断点,挨个试了一遍之后,没有一个成功的,灰心丧气呀,怎么像刺猬 🦔 一样无从下手?等等,看了看程序的界面,猛的想起了大佬说的一个工具:
中文搜索引擎:这玩意儿可以参考,但不要过分依赖,友好的开发者可能只是关闭你的程序不让你调试,至于不友好的,知道为啥要用虚拟机吗?重载程序,在
反汇编窗口右键选择中文搜索引擎:![中文搜索引擎]()
然后
Ctrl + F搜索熟悉的字眼儿Wrong Code DUDE,果然有,双击来到反汇编窗口,嘿嘿,这里看起来很重要嘛:![关键]()
- 一个失败的字样;
- 一个成功的字样;
- 紧挨着上面有一个跳转:可以猜测,如果跳转的话,可能就显示成功了;
- 跳转上面是一个
CALL,那它很可能是比较的CALL; - 至于更上面的代码,那肯定是获取用的呗,瞎猜的;
既然找到了可疑的代码,那就双击
CALL给它下一个CC断点,然后运行程序,输入序列号点击验证后,程序暂停在了CALL的位置,那就F7进CALL看看,验证一下猜测;刚一进
CALL,就在寄存器窗口发现了熟悉的字样:![call]()
既然把“序列号”都传进来了,那应该就是比较了,开始分析:
![分析]()
分析完成,比较的部分是常规方法,就是中断程序有点麻烦!




