返回介绍

第十七章 - 序列号生成算法分析-Part2

发布于 2025-01-31 21:06:56 字数 7174 浏览 0 评论 0 收藏 0

首先我们来解决上一章留下的 mexcrk1.zip 这个 CrackMe,很简单。首先用 OD 加载它,断在入口点处。

首先看看程序中使用了哪些字符串,单击鼠标右键:

可以看到以下字符串。

我们可以在正确字符串上面或者错误字符串上面双击来到关键代码附近。

我们看到这里有一个 CALL 指令决定后面的 JE 指令是跳转到”Thanks you made it”代码处,还是直接显示后面的”Wrong Code DUDE”。我们在 42D534 地址处设置一个断点,然后运行起来。

我们在 Enter Serial#下面的编辑框中随便输入一个序列号。

这里我输入 Narvajita。

如果你跟进这个 CALL,你会发生时我们输入的错误序列号”Narvajita”在于”Benadryl”进行比较。

好了,我们现在达到了比较指令处,”Benadryl”就是正确的序列号,我们删除之前设置的断点,运行程序。

这里我们可以看到,显示”Thanks you made it”提示序列号正确的字样。

好了,接下来我们分析 Canasta 5.0 这个 CrackMe。

该 CrackMe 属于那种 OK 按钮开始不可用,当用户输入的用户名与序列号相匹配的时候才可以单击的例子。

我们首先安装程序,然后打开 About 对话框。

提示 20 美元,确切是说是 19.95 美元。

我们单击 Enter License 按钮。

提示说只有当用户输入的用户名和序列号组合正确时 OK 按钮才会变为可用。

用 OD 加载该程序。

我们断在了入口点处。

好,我们来看看 API 函数列表以及字符串列表。

由于 OK 按钮不可用,所以我们不能通过单击 OK 按钮来获取错误提示是什么,嘿嘿。

我们运行起来,然后打开注册窗口,我们运用一些方法来攻击这种保护。

我们输入用户名,假设该程序对用户名没有限制,接在我们输入 6 个字母的序列号。例如:WMYXSZ。首先单击 W。

接着按 M 键。

现在我们在内存中搜索刚刚输入的两个字母。

我们单击工具栏中的 M 按钮,打开内存窗口,查找 WM 字符串。

这里,我们勾选上区分大小写。

找到了一个,我们继续按 CTRL+L 查找看看还有没有其他地方有该字符串。提示未找到其他条目,说明这就是我们刚刚输入的序列号。

我们在数据窗口中定位到给字符串。

我们输入刚刚找到的这个地址,由于该地址是字母 c 开头,所以我们要在前面加上 0,不然 OD 不认识。

可以用户输入的序列号就保存在这里,我们输入“WMYXSZ”接下来一个字母 Y。

继续转到数据窗口查看,发现字母 Y 加被保存进来了。然后对 0C35DF9 开始的连续六个字节内存单元设置内存访问断点。

现在运行起来。

输入字母’X’。

现在将保存该字母了。

这里如果按 F8 键,ESI 将保存到 EDI 中。

这里拷贝我们前面输入的 4 个字节。

按 F8 键,这 4 个字节将被拷贝到 12E79C 起始的内存单元中。

既然我们已经设置过内存访问断点,那我们就来设置硬件访问断点。

我们继续跟,就可以看到我们输入的用户名也被保存到了堆栈中。

我们输入的用户名长度为 0E,与 0 做比较。

如果用户名长度不为零,程序将继续执行。

然后判断是不是黑名单中的名称,也就是说不能是 TNO,afdad 等,嘿嘿。

继续运行。

断在了比较指令处,我们可以看到是我们输入的序列号在与另一个字符串进行比较。

我们可以看到”354910”就是正确的序列号,我们删除所有断点。

输入正确的序列号以后,OK 按钮就变为可用状态了,嘿嘿。两一种解决方法这里就不再赘述了,也不是很复杂,就利用我们每按下一个键就发产生 WM_KEYUP 消息,显得比较麻烦,但也很直接。

好了,我们休息一下,下一章,我们来看看别的例子。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文