今天来肝第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)"
结构很清晰如果esi+0x30C是0x3E则将其设置为0x85,而0x85正是之前显示图片的要求!然而,这里的断点我这怎么弄都断不下来,后来通过idr看见这是个双击事件=.=:
这下就很清晰了,serial是黑头Sun Bird(name长度+5)dseloffc-012-OK(name),而之前的那是个esi+0x30C是作为一个标志位的存在。恰好是需要双击画板再单击画板就能注册成功!