硬编码寻找序列号(四)

使用工具

  • OllyDbg 1.10原版,简称OD
  • OD插件:中文搜索引擎
  • OD 汉化插件均来自互联网;
  • CrackMe来自互联网,仅供学习使用;
  • 文中特殊数字均是HEX,为了书写方便采用DEC

逆向思路

事实证明:不能“以貌取人”。

刚打开软件的时候,心里还想着,这么简陋?分分钟就逆向完毕了,结果,“啪啪啪”实力打脸,针扎的疼。

  1. 首先,打开软件到处点点,逆向一个软件起码要会用吧,不会用就没必要说逆向了;

  2. 倒入OD开始分析:

    • 首先按下Ctrl + AOD分析一下代码;

    • 接着按下Ctrl + N查看使用了哪些API,翻了翻,呀呵,看着简陋,用的API还真不少,那就搜索吧,没有GetDlgItemTextA?那就拿GetWindowTextA下手吧:在GetWindowTextA函数上设置断点,然后去断点窗口双击断点进入反汇编窗口给断点设置备注,这是一个好的习惯,请保持;

    • 然后F9运行程序,“随便输入” 一些字符后点击验证,可以随便输入,但请记住它;

    • 居然没有断下来,也没有弹窗,这让我很尴尬:

      尴尬

    • 嗯,界面有按钮,那就试试消息断点,熟练的设置好消息断点,运行程序,输入,点击按钮,还是没有断下来;

    • 不怕,还有内存断点硬件断点,挨个试了一遍之后,没有一个成功的,灰心丧气呀,怎么像刺猬 🦔 一样无从下手?

    • 等等,看了看程序的界面,猛的想起了大佬说的一个工具:

      中文搜索引擎:这玩意儿可以参考,但不要过分依赖,友好的开发者可能只是关闭你的程序不让你调试,至于不友好的,知道为啥要用虚拟机吗?

    • 重载程序,在反汇编窗口右键选择中文搜索引擎

      中文搜索引擎

      然后Ctrl + F搜索熟悉的字眼儿Wrong Code DUDE,果然有,双击来到反汇编窗口,嘿嘿,这里看起来很重要嘛:

      关键

      • 一个失败的字样;
      • 一个成功的字样;
      • 紧挨着上面有一个跳转:可以猜测,如果跳转的话,可能就显示成功了;
      • 跳转上面是一个CALL,那它很可能是比较的CALL
      • 至于更上面的代码,那肯定是获取用的呗,瞎猜的;
    • 既然找到了可疑的代码,那就双击CALL给它下一个CC断点,然后运行程序,输入序列号点击验证后,程序暂停在了CALL的位置,那就F7CALL看看,验证一下猜测;

    • 刚一进CALL,就在寄存器窗口发现了熟悉的字样:

      call

      既然把“序列号”都传进来了,那应该就是比较了,开始分析:

      分析

    • 分析完成,比较的部分是常规方法,就是中断程序有点麻烦!