请选择 进入手机版 | 继续访问电脑版

160个CrackMe系列(第一篇)

2019-1-29 12:30
1850
作者:SnowMzn
序言

160个CrackMe是一个练习逆向、破解的小程序集合,对于刚学习逆向的人来说有助于从实战上提高逆向分析能力。通过这一系列的练习,可以学到很多逆向分析的方法、分析算法的能力以及编写注册机的能力。
第一题Acid burn,这道题没有什么过多的干扰信息,通过OD和IDA的联合分析,很容易解决掉。
查壳
    首先运行程序,这个程序有Nag、Serial、Serial/Name。查壳。可以看到程序没有加壳,并且是用Delphi写的。
160个CrackMe系列(第一篇)-1.jpg
去除Nag
    该程序没有壳,直接用OD跑起来。对于不熟悉Delphi语言来说,这块还是有点坑的。一开始以为就是一个MessageBox弹窗,直接用OD搜索,发现就调用了三个MessageBox函数,很开心,下断点,发现地址0x42A1A9处的MessageBox函数与Nag有关,这个MessageBox是由0x42A170函数调动的,直接jmp跳过这个函数,保存后发现,提示序列号输入对错的弹窗也没有啦。。。很尴尬。。。经过重新研究,发现0x42A170函数是个固定函数,传入的参数不同,弹窗的内容就会不同。试了各种方法,都没有成功,无奈下,只好用最原始的方法,一步一步来。。。这是程序入口处
160个CrackMe系列(第一篇)-2.jpg
    0x0042FD97处,为Nag的函数(这里不能直接nop这个函数,程序会崩),继续单步步入调试,可以发现可用的跳转
160个CrackMe系列(第一篇)-3.jpg
    在Nag函数处下断点,可以看到Nag函数前面有个je跳转,跳转的位置也是很好,直接修改je为jmp,强制跳转,保存下,第一步成功!!!
Serial
    接下来进入正题,破解序列号。这里就借助了下IDA,查看函数0x42A170的引用,有四个地方调用了这个函数,这里主要关注这个
160个CrackMe系列(第一篇)-4.jpg
    点进去后,能看到熟悉的东西。。。用OD定位这个函数,并下断点。
160个CrackMe系列(第一篇)-5.jpg
    调试后,找到了验证Serial的主要函数。
160个CrackMe系列(第一篇)-6.jpg
    这里的逻辑还是非常简单的,只是一个简单的比较,这里的Serial是个固定值“Hello Dude!”,将输入的Serial与“Hello Dude!”进行比较。
Serial/Name
    回到IDA,回到交叉引用的地方,刚才说有四个函数调用了0x42A170,这里来到另一个函数里0x42F998,很明显这里是Serial/Name的验证函数,继续用OD来定位这个函数
160个CrackMe系列(第一篇)-7.jpg
    调试会看到Serial的组成是有规律的,CW-****-CRACKED形式。
160个CrackMe系列(第一篇)-8.jpg
    算法不难,首先会判断Name的长度不能小于4。其次,会将Name的第一个字符拿出来用十六进制表示,将这个数乘0x29,再乘2,得到的数用十进制表示,加到CW-****-CRACKED中,得出最终的Serial。附上一个简单的python脚本:
[code][/code]
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|翁笔

Powered by Discuz! X3.3 © 2001-2018 Comsenz Inc.

返回顶部