简单的crackme

来源:互联网 发布:sql cast 编辑:程序博客网 时间:2024/05/01 06:55

可以看到这个要求输入序列号,验证其用户名和序列号是否正确的一个检验程序。

分析:

字符通常利用Windows文本框输入。为了检查输入的字符,程序太长才有下面这些函数吧文本框中的内容读出来。

16位32位(ANSI)32位(unicode)GetDlgItemTextGetDlgItemTextAGetDlgItemTextWGetwindowTextGeywindowTextAGetDlgItemTextW

因为这个程序是32位ASCII码的

所以直接上OllyDgb,设置为在模块入口处设断。

使用Ctrl+G可以定位我们想要的函数,我们将函数名直接输入,回车,就跳转到这个函数的入口地方,然后按F2,设断点,然后按F9让程序运行起来,接着就在运行着的程序中输入内容,当输入完后,按check按钮时,这时程序就调用了GetDlgItemTextA函数来获取文本框中的内容,然后去检查,因为设断了,我们可以看到OllyDgb上停在我们刚刚设断的地方。然后分析这一段代码

这就是我们停下的地方,上面除了原本程序自动解析的注释外,我还加上了直接的注释。

分析上面的程序流程,可以很明显的看出了,它调用了两次GetDlgItemTextA函数来分别获取两个编辑框的内容。

下面我们看到了一个很重要的函数,就是GenRegCode函数,这就是这个程序的核心代码,如果有兴趣的可以跟进去看一下验证的过程

但是我们的目的是让程序直接显示注册成功,可以看到004011F5中看到一个跳转指令,经发现就是这个跳转指令,决定显示对应得消息(失败或者成功)

我直接把它NOP掉

直接右键那上图所示


之后就保存文件

任意输入什么内容都会显示成功。但是长度一定要超过4.

0 0
原创粉丝点击