前言
这题竟然三星,明显没有三星题的水平。他喵的就是在前两个题的基础上改的,还没有上一个题有水平。
正文
由于一个作者,大致是一样的,暴力破解的方法同前面两个,可以去翻一下我前两篇博客,不过他这次是个key加密再和一串字符比较,我们只能改跳转了,无法从寄存器里找到什么有用的信息。
接下来分析一下。(本来想偷个懒直接把汇编从OD里复制过来的,结果格式不太好调,算了)
还是OD打开,搜素错误字符串,找到程序处,下断点。(当然,找按钮事件来下断点)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YhS0oOSB-1589015963346)(https://s1.ax1x.com/2020/05/09/YlED7F.png)]
运行两遍,可以发现,上面有个循环,这个循环之前取了key的值,一看就不一般。主要的是这两个函数,取出一个字符,将字符变成ASCII值,注意下一句,
add ax,0xA
由于上一个函数结果存在eax中,所以字符的ASCII值加上了0xA。
不得不说,这里面没用的函数也太多了,下面好几个系统函数,可怜我没看出来,以为还有什么处理,硬生生打断点,运行,搞了一个多小时。心态崩了。
再往下,跳转前有个比较函数,可以稍微猜测一下,这是关键。
跟进,遇见函数就步进,我们会找到这样的地方
换个key试试,还是一样的字符串,可以肯定,上面加密(?)的字符和他来比较。
可以写注册机了。
注册机
依旧是python,python太简单,以至于我都不想用C\C++了。
s="kXy^rO|*yXo*m\kMuOn*+"
t=[]
for i in s:
m=ord(i)
t.append(chr(m-0xA))
print("".join(t))
#结果:aNoThEr oNe cRaCkEd !