- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第十八章-序列号生成算法分析-Part3
本章,我们将讨论Stzwei’em提供的Crack
Me,名字叫”crackme_4stz”。
用OD加载它。
我们断在了入口点处,我们首先看一下API
函数列表。
程序中使用的字符串列表如下:
貌似没有什么我们感兴趣的字符串,我们
再来看看API函数列表。
哇,这么多...好吧,我们运行起来,出现了
主窗口,可以输入序列号。
我们可以看到没有注册按钮,我们随便输
入一个用户名。
我们需要给TranslateMessage这个API函
数设置条件记录断点,首先给该函数设置
一个普通断点。
我们回到CrackMe的主窗口,继续编辑断点
的条件。
如果你不知道要拦截什么的消息的话,那
就先单击工具栏中W按钮打开窗口列表吧
。
我们找到CrackMe的主窗口这行,在上面单
击鼠标右键。
出现了消息断点窗口,我们打开Messages
消息下拉框。
我们找到WM_KEYUP消息。
我们可以看到WM_KEYUP的值为101,所以我
们关闭该窗口,打开TranslateMessage断
点所对应的条件记录断点窗口。
这里,我们设置条件为MSG 101(注意是
双等号),如果我们没有找到这个值的话,
我们写成MSG WM_KEYUP同样可以。
但是我更喜欢写成MSG 101这样形式,按
照的自己的习惯来就行了。
单击OK以后TranslateMessage函数入口处
的断点就会变成粉红色。
我们运行起来,输入错误序列号的第一个
字母。
马上就触发刚刚设置的条件断点了。
我们可以看到堆栈中TranslateMessage的
参数情况,12FF78指向的结构中保存key值
等于39 (十六进制),该ASCII值正好对应的
得我们刚刚输入的字符’9’。
我们在该参数上面单击鼠标右键选择-Fol
low in Dump在数据窗口中定位到内存单
元。
我们可能会想到对该字节设置内存访问断
点,让程序在读取该字节与正确的序列号
进行比较的时候断下来,但是该CrackMe是
个Delphi的程序,Delphi程序是经过深度
封装的程序,可能在与正确的序列号进行
比较之前,12FF80对应内存单元中序列号
已经经过了很多次的内存的中拷贝了,所
以直接对该字节设置内存访问断点是不可
取的。我们可以采用上一章使用的方法,
先在内存中搜索我们输入的序列号,定位
到以后再对区域设置内存访问断点可能更
方便一些。
运行起来。
我们输入9898,然后回到OD中,通过单击工
具栏中M按钮查看所有内存。
单击鼠标右键选择-Search。
查找9898。
我们继续CTRL+L查看看看还有没有其他内
存中有该字符串。
直到OD底部显示黄色的”Item not found
”的字样,这个区段就查找完毕了,我们继
续回到内存列表窗口中。
我们再次CTRL+L。
找到了该区段的第一处,我们继续CTRL+L
看该区段还有没有其他地方有。
继续查找没有了,我们可以看到上方有一
个418507可能是正确的序列号,我们对我
们输入的错误序列号设置内存访问断点,
看看程序是否会取该序列号来进行比较。
运行起来。
这里,我们可以看到正在拷贝我们输入的
用户名。
我们可以看到错误序列号的内存单元将被
覆盖为我们输入的用户名。那我们可以对
下面可能是正确序列号的字符串设置内存
访问断点。
可以看到断下来了,正在进行比较。
这里,我们可以看到,ESI,EDI分别指向了
正确和错误的序列号。
每次比较四个字节,我们验证一下该序列
号是否正确。
提示序列号正确。
可以看到,这个的CrackMe还是有一点小难
度的,不过我们还是可以在一个合适的时
间点跟踪到我们输入的错误序列号的位置
,并且通过设置内存访问断点来定位到正
确的序列号。
另一种方法可以从内存写入断点切入。
我们输入第5个字节。
我们对下一个字节可能会写入的内存单元
设置内存写入断点。
为了输入下一个字符,我们运行起来。
这里可能是正确的序列号。
继续运行。
断在了拷贝错误序列号处,我们可以继续
设置内存断点定位到序列号比较代码处。
可以看到,这种方式稍微复杂一点。
好了,留下CrueHead’a的第二个CrackMe
给大家练习。
您可能关注的文档
- 糖尿病教育-01-糖尿病基础知识.pptx
- 糖尿病教育-02-从关键指标看糖尿病的诊断与治疗.pptx
- 糖尿病教育-05-糖尿病降糖药物的选择.ppt
- 糖尿病教育-08-HbA1c测试介绍.pptx
- 糖尿病教育-09-糖尿病与并发症.pptx
- 糖尿病教育-11-关注下肢血管病变和糖尿病足.pptx
- 糖尿病教育-12-β细胞功能知多少.pptx
- 糖尿病教育-16-体重控制.pptx
- 糖尿病教育-17-肥胖糖尿病患者的治疗与管理.pptx
- 人工神经元网络模型.pptx
- 使用OllyDbg从零开始Cracking-19第十九章-OllyDbg反调试之IsDebuggerPresent.pdf
- 使用OllyDbg从零开始Cracking-20第二十章-OllyDbg反调试之检测OD进程名.pdf
- 使用OllyDbg从零开始Cracking-21第二十一章-OllyDbg反调试之检测OD进程名,窗口类名,窗口标题名.pdf
- 使用OllyDbg从零开始Cracking-22第二十二章-OllyDbg反调试之UnhandledExceptionFilter,ZwQueryInformationProcess.pdf
- 使用OllyDbg从零开始Cracking-23第二十三章-OllyDbg反调试之ProcessHeap,NTGlobalFlag,OutputDebugStringA.pdf
- 使用OllyDbg从零开始Cracking-24第二十四章-OllyDbg反调试之综合CrackMe.pdf
- 使用OllyDbg从零开始Cracking-25第二十五章-异常处理.pdf
- 使用OllyDbg从零开始Cracking-26第二十六章-Visual Basic程序的破解-Part1.pdf
- 使用OllyDbg从零开始Cracking-27第二十七章-Visual Basic程序的破解-Part2.pdf
- 使用OllyDbg从零开始Cracking-28第二十八章-Visual Basic程序的破解-Part3.pdf
原创力文档


文档评论(0)