160个crackme(4)----ajj.1(CKme.exe)

这个CKme与一般的软件注册过程不一样,它没有"确定"键,而且注册成功还有奖励,激动

160个crackme(4)----ajj.1(CKme.exe)_第1张图片

先放到OD里看下,crtl+F8,程序停下来了,输入name和serial后,没反应。先用最简单的方法,搜字符串,一搜还真有,双击进去再前面的push ebp下断点

160个crackme(4)----ajj.1(CKme.exe)_第2张图片



输入name和serial,发现不知道怎么触发断点,双击灰色框后竟然跳到了断点,看来双击灰色框相当于确定键。进去后发现了我们输入的name,数据窗口跟随,发现了我们输入的name附近有很多其他的字符串拼接了我们输入的name,其中有一个很特别,Sun Bird在crackme作者的文档提到了,凑巧的可能性有点小,很可能是把算好的serial跟name放在一块了。

160个crackme(4)----ajj.1(CKme.exe)_第3张图片


不能放过一切可能性,试着输了一下刚才发现的serial,发现还真的注册成功了。emmmm这有点快啊,朱茵女神的笑好美啊

160个crackme(4)----ajj.1(CKme.exe)_第4张图片


可惜,后面用OD不怎么好分析了,这里我们接着用DeDe工具分析一下。查看窗体,发现了三个按钮,Edit1,Edit2和Panel1,其中Edit1的事件为KeyUp,Edit2的事件有chkcode,panel1有click和Dblclick两个事件(单击和双击)。

160个crackme(4)----ajj.1(CKme.exe)_第5张图片

160个crackme(4)----ajj.1(CKme.exe)_第6张图片


根据DeDe给的汇编地址,给三个事件都下断点。keyUp没什么特别,下断点后在name框每输入一个字符都停在断点。

160个crackme(4)----ajj.1(CKme.exe)_第7张图片





在chkcode停下来的时候马上就发现了熟悉的字符串,Sun bird,还有dseloffc-012-OK

160个crackme(4)----ajj.1(CKme.exe)_第8张图片


因为还没看到刚才找到的“黑头”,往上一翻就发现了,看样子是想把几个字符串拼接在一起

160个crackme(4)----ajj.1(CKme.exe)_第9张图片


在chkcode里面找,跟容易就找到了拼接字符串的函数,其中有两个字符串是固定的,还有一个字符串是我们输入的name,还有一个数字,这个需要我们在去找

160个crackme(4)----ajj.1(CKme.exe)_第10张图片

观察发现,是通过esi来传递这个数字,回去找esi的变化,发现如下,至此,整个注册算法已经了如指掌了

160个crackme(4)----ajj.1(CKme.exe)_第11张图片

写个注册机,代码如下:(最近学了python,以后都用python写了)

name = input("please input your name:")
print("黑头Sun Bird"+ str(len(name) + 5) + "dseloffc-012-OK" + name)
160个crackme(4)----ajj.1(CKme.exe)_第12张图片






在单击断点停下,发现运行完单击函数后直接运行检验是否注册成功函数了,而且发现如果是单击panel1的话,就算serial正确也是不能注册成功的。

160个crackme(4)----ajj.1(CKme.exe)_第13张图片




在双击断点停下发现了跟单击断点出不一样,它里面有个比较,如果serial正确会在ds:[043D1BF0]赋值0x85,这样就能通过注册验证函数了,作者想这个可谓是用心良苦,这应该就是作者说的作了一点别的手脚,不过我觉得可能效果不大,因为正常情况下很多人如果单击没有出来结果,他很可能以为没点到,多以多点几下,这样也是可以显示图片的,这样作者精心设计的陷阱就失效了

160个crackme(4)----ajj.1(CKme.exe)_第14张图片

160个crackme(4)----ajj.1(CKme.exe)_第15张图片

你可能感兴趣的:(逆向)