吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 2606|回复: 5

[转载技术] 第十八章-序列号生成算法分析-Part3

[复制链接]
Shark恒 发表于 2015-1-20 16:17 | 显示全部楼层 |阅读模式

                    第十八章-序列号生成算法分析-Part3
本章,我们将讨论Stzwei’em提供的CrackMe,名字叫”crackme_4stz”。
用OD加载它。
image002.jpg
我们断在了入口点处,我们首先看一下API函数列表。
image004.jpg
程序中使用的字符串列表如下:
image006.jpg
貌似没有什么我们感兴趣的字符串,我们再来看看API函数列表。
image008.jpg
image010.jpg
哇,这么多...好吧,我们运行起来,出现了主窗口,可以输入序列号。
image012.jpg
我们可以看到没有注册按钮,我们随便输入一个用户名。
image014.jpg
我们需要给TranslateMessage这个API函数设置条件记录断点,首先给该函数设置一个普通断点。
image016.jpg
我们回到CrackMe的主窗口,继续编辑断点的条件。
image018.jpg
如果你不知道要拦截什么的消息的话,那就先单击工具栏中W按钮打开窗口列表吧。
image020.jpg
我们找到CrackMe的主窗口这行,在上面单击鼠标右键。
image022.jpg
出现了消息断点窗口,我们打开Messages消息下拉框。
image024.jpg
我们找到WM_KEYUP消息。
image026.jpg
我们可以看到WM_KEYUP的值为101,所以我们关闭该窗口,打开TranslateMessage断点所对应的条件记录断点窗口。
image028.jpg
这里,我们设置条件为MSG== 101(注意是双等号),如果我们没有找到这个值的话,我们写成MSG== WM_KEYUP同样可以。
但是我更喜欢写成MSG==101这样形式,按照的自己的习惯来就行了。
单击OK以后TranslateMessage函数入口处的断点就会变成粉红色。
image030.jpg
我们运行起来,输入错误序列号的第一个字母。
image032.jpg
马上就触发刚刚设置的条件断点了。
image034.jpg
我们可以看到堆栈中TranslateMessage的参数情况,12FF78指向的结构中保存key值等于39(十六进制),该ASCII值正好对应的得我们刚刚输入的字符’9’。
我们在该参数上面单击鼠标右键选择-Follow in Dump在数据窗口中定位到内存单元。
image036.jpg
image038.jpg
我们可能会想到对该字节设置内存访问断点,让程序在读取该字节与正确的序列号进行比较的时候断下来,但是该CrackMe是个Delphi的程序,Delphi程序是经过深度封装的程序,可能在与正确的序列号进行比较之前,12FF80对应内存单元中序列号已经经过了很多次的内存的中拷贝了,所以直接对该字节设置内存访问断点是不可取的。我们可以采用上一章使用的方法,先在内存中搜索我们输入的序列号,定位到以后再对区域设置内存访问断点可能更方便一些。
运行起来。
image040.jpg
我们输入9898,然后回到OD中,通过单击工具栏中M按钮查看所有内存。
image042.jpg
单击鼠标右键选择-Search。
image044.jpg
查找9898。
image046.jpg
我们继续CTRL+L查看看看还有没有其他内存中有该字符串。
直到OD底部显示黄色的”Itemnot found”的字样,这个区段就查找完毕了,我们继续回到内存列表窗口中。
image048.jpg
我们再次CTRL+L。
image050.jpg
找到了该区段的第一处,我们继续CTRL+L看该区段还有没有其他地方有。
image052.jpg
继续查找没有了,我们可以看到上方有一个418507可能是正确的序列号,我们对我们输入的错误序列号设置内存访问断点,看看程序是否会取该序列号来进行比较。
image054.jpg
运行起来。
image056.jpg
这里,我们可以看到正在拷贝我们输入的用户名。
image058.jpg
我们可以看到错误序列号的内存单元将被覆盖为我们输入的用户名。那我们可以对下面可能是正确序列号的字符串设置内存访问断点。
image060.jpg
可以看到断下来了,正在进行比较。
image062.jpg
这里,我们可以看到,ESI,EDI分别指向了正确和错误的序列号。
image064.jpg
每次比较四个字节,我们验证一下该序列号是否正确。
image066.jpg
提示序列号正确。
可以看到,这个的CrackMe还是有一点小难度的,不过我们还是可以在一个合适的时间点跟踪到我们输入的错误序列号的位置,并且通过设置内存访问断点来定位到正确的序列号。
另一种方法可以从内存写入断点切入。
image068.jpg
我们输入第5个字节。
image070.jpg
我们对下一个字节可能会写入的内存单元设置内存写入断点。
image072.jpg
为了输入下一个字符,我们运行起来。
image074.jpg
这里可能是正确的序列号。
image076.jpg
继续运行。
image078.jpg
断在了拷贝错误序列号处,我们可以继续设置内存断点定位到序列号比较代码处。
image080.jpg
可以看到,这种方式稍微复杂一点。
好了,留下CrueHead’a的第二个CrackMe给大家练习。

本系列文章汉化版转载看雪论坛

感谢原作者:RicardoNarvaja(西班牙人)
原作者个人主页:http://www.ricardonarvaja.info/

感谢热心翻译的朋友:
1~3章译者:BGCoder
4~58章译者:安于此生

全集配套程序下载地址:
链接: http://pan.baidu.com/s/1eQzTWfo 密码: vytv



评分

参与人数 10HB +7 THX +4 收起 理由
Jawon + 1
一路走来不容易 + 1
Soul1999 + 1
消逝的过去 + 1
l278785481 + 1
成丰羽 + 1 [吾爱汇编论坛52HB.COM]-感谢楼主热心分享,小小评分不成敬意!
hackysh + 1
jaunic + 2
hnymsh + 1
lies + 1

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
hackysh 发表于 2022-2-8 16:27 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
头像被屏蔽
别管我了行 发表于 2022-3-1 03:36 | 显示全部楼层

提示: 作者被禁止或删除 内容自动屏蔽
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
曾经沧海 发表于 2022-11-19 17:30 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
曾经沧海 发表于 2023-4-4 10:11 | 显示全部楼层

这可是太秀了
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
一生逍遥 发表于 2023-4-20 10:42 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表