160个crackme 004 ajj

今天来肝第4个,ajj(唔

作者挺萌=.=,crackme还附上了一个txt:


作者不打自招说是delphi程序=.=,信息如下:


运行一下,界面如下:


鼠标移到文本框上会有提示说如果注册成功,下方会出现朱茵的照片=.=(女神

没有注册按钮,那么要不是一个不停循环的时钟检测,要么就是文本改变的时候检测。

将程序拖入OD,既然没有按钮,就不能老套路看堆栈了,可以使用吾爱OD右键带的智能中文搜索,惊喜发现了救命稻草:


右键跟进轻松发现关键跳:


右键nop一下=.=,运行程序,点一下图片位置,果然图片出现:


爆破小组施工完毕=.=


算法

算法位置由上可知在00457FDC到00458031,用ida分析了一段时间,那些unknown调用搞得人焦头烂额=.=,后来直接用idr来看一下:


然后我就在这纠结了很久=.=,上面一堆操作,下面比较的居然是esi+30C?


慌也没用。。。想办法吧。

后来直接用OD右键查找所有常量,查找0x30C(逃,得到结果:


全部f2下上断点,重启程序,在输serial的过程中在00457D46处断下:


此时是ebx+0x30C和之前esi+0x30C其实一样,指向的都是042F1BF0。这时可以看见上面是一个调用了系统api(strcmp),跟踪可以发现比较的是输入的serial和一个之前计算出来的字符串,如果一样就把ebx+0x30C设置为0x3E。(那个字符串经过简单的分析发现字符串是"黑头Sun Bird(name长度+5)dseloffc-012-OK(name)"

我们再看一下之前搜出的位置00457F5:

结构很清晰如果esi+0x30C是0x3E则将其设置为0x85,而0x85正是之前显示图片的要求!然而,这里的断点我这怎么弄都断不下来,后来通过idr看见这是个双击事件=.=:

这下就很清晰了,serial是黑头Sun Bird(name长度+5)dseloffc-012-OK(name),而之前的那是个esi+0x30C是作为一个标志位的存在。恰好是需要双击画板再单击画板就能注册成功!


猜你喜欢

转载自blog.csdn.net/qq_21201963/article/details/79339749