160CrackMe之001(Acid Burn)

此前一直从事iOS方面的逆向工作,有强烈的兴趣了解一下Windows逆向,所以就从这160个CM开始。
今天要分享的是160个CM第一个Acid burn,也算是对第一次Windows逆向分析的总结。话不多说,下面开始正文。

0x1 环境与工具

  • 吾爱破解虚拟机2.0
  • PEID、吾爱破解版OD

0x2 查壳

  • 注:作为CM的第一个程序,有壳的概率很小,但是逆向分析前查壳是个好习惯。

    PEID查壳

    0x3 去除NAG窗口

  • 双击程序启动会有如下的NAG窗口

    启动NAG窗口

  • 用OD加载程序,然后F9使程序进入运行状态,程序会显示NAG窗口,然后F12暂停程序运行,Alt + F9使程序重回运行态,点击NAG窗口的【确定】按钮,程序将断下,并回到用户程序空间。
  • 发现这里并没有爆破常用的点(跳转),因此沿着堆栈继续回溯。
    0x42A1AE --> 0x42A170 --> 0x42F79C --> 0x42F784 --> 0x425643
  • 回溯到0x425643时,可以在0x42562F处找到爆破点,修改je为jmp,NAG窗口成功去掉。

    NAG窗口爆破点

    0x4 注册算法

  • 随意输入用户名和序列号,点击【check】按钮,弹出错误提示对话框。采用去除NAG窗口的方式使程序断在用户程序空间。我们发现断点断在了NAG窗口相同的位置,所以我们推测,断下来的位置是对MessageBox的封装函数,回溯堆栈到上层。
    0x42A1AE --> 0x42A170 --> 0x42FB32

    name_serial窗口

  • 回溯到0x42FB32时,我们可以在0x42FB03处找到关键跳转,那么我们推测0x42FAFE处为序列号验证函数。

    关键算法1

  • 我们在0x42FAFE处下断点,重新触发验证流程,我们在寄存器EAX和EDX中看到了两个可疑的字符串,EDX是我们输入的序列号,EAX我们猜测就是我们要找的序列号。

    关键算法2

  • 接下来我们重点关注EAX的来源,EAX来源于[local.3],上翻代码,看到0x42FAE5的调用,我们看到0x42FADD的传参与[local.3]有关,那么我们在0x42FAE5下断点,然后在数据窗口监视[local.3]的内存,F8观察数据窗口
  • 至此我们确定了0x42FAE5为生成序列号的算法函数,但是这只是个拼装算法,观察堆栈,关键数据已经在堆栈中,我们查看数据来源于[local.6],继续上翻代码,在0x42FACD处看到了[local.6]的传参,在0x42FACD处下断点调试。

    关键算法3

  • 经过调试,我们确定了0x42FACD处即为注册算法的函数调用。此处经过三次硬件断点能快速定位到0x406DDA,我们看到这里已经不是内存拷贝指令,而是寄存器mov到内存,所以我们猜测dl就是保存结果的寄存器。

    关键算法4

  • 此处代码对EAX的值进行10进制转化,执行的最终结果会保存在ESI指向的内存地址,正是我们要的结果,回溯代码寻找EAX的来源。
  • 与查找关键算法点类似,经过三次硬件断点,可以找到以下位置0x42FA8A,此地即为计算EAX的值,结果保存在0x431750

    关键算法5

  • 至此,算法的破解完成。

0x5 序列号校验

  • 这个类似于去除NAG窗口的过程,直接就能定位到爆破点,不再赘述。

总结

通过对Acid burn的分析,目前仍然遗留一个问题尚未解决,在爆破序列号校验的时候,爆破点如果选择下图的位置,重启应用会导致UI的文字全部消失,目前尚不知原因,如果有知道的朋友欢迎下面留言指导,不胜感激。

失败的爆破点

UI文字消失

THE END
喜欢就支持以下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称