yysniper 发表于 2015-4-27 20:41

【翻译】R4ndom破解教程全文翻译(For新手):第九章

http://attach.52pojie.cn/album/201504/27/201812bh5ad5461e1dhw5t.jpg

翻译说明:
1、本教程在52破解论坛及看雪论坛全球同步首发!
2、本教程翻译自国外的The Legend of Random的系列教程,英文原文地址:http://thelegendofrandom.com/blog/sample-page。本翻译教程只是为了给不愿看英文教程以及英文水平不好的人提供方便,同时也是自己的学习过程。该教程对英文水平要求不是很高,不过个人水平有限,有些地方翻译不准的请批评指正。
3、本翻译教程请勿用于商业用途。另,转载请注明!!!
4、感谢The Legend of Random!

发帖说明:
根据译者的时间安排,快的话2-3天会上传一章,慢的话就不造了。如果有段时间没更新请勿怪,因为译者的工作性质,有时是接触不到网络的。

其他章节:
全系列章节导航帖
第九章:无相关字符串 一、简介 此次教程中我将会向我们的武器库中加入一个新的装备。如果搜索二进制文件时发现没有可用的字符串你怎么办?我将会介绍一个新的R.E.T.A.R.D. 规则file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps57DB.tmp.jpg。此次教程(下一章也是)我们将研究“TDC”写的一个crackme叫Crackme6,相关下载里面包含有。总之,它不是一个硬骨头,不过我将会对其进行一些高级分析,好为将来的教程做准备。你可以在教程页下载相关文件以及本教程的PDF版本。那么,咱们开始吧......Olly载入Crackme6:(p1)http://attach.52pojie.cn/album/201504/27/201826w9pu9ouu9wf86fm1.png现在,我们已经知道操作程序了。运行程序看看情况:(p2)http://attach.52pojie.cn/album/201504/27/201836d7xlqh4e685cwsqy.png嗯,看起来挺简单的。我输入了一个密码1212121212,下面就是返回的情况:(p3)http://attach.52pojie.cn/album/201504/27/201843be0uea0m7dognyyn.png   相当直接呀。试试我们拿手的“字符串搜索”,看看有什么:(p4)   http://attach.52pojie.cn/album/201504/27/201855m7izb7olhmbquoq0.png
      http://attach.52pojie.cn/album/201504/27/201904x2hlosuccms9sb68.png搞什么鬼这是!!!这些一点用也没有啊。我们可以拿这些字符串干啥!?!?明显,这个crackme将字符串加密了(或者是作者说一种很奇怪的语言:D)。好,是个好时候介绍 R4ndom’s Essential Truths About Reversing Data #3:R4ndom关于逆向数据的必备真理#3: #3.不要依赖二进制文件当前已有的字符串。 不幸的是,在你开始研究真正的二进制文件(比如商业产品)时,它们中的大部分被以某种方式打包 以及/或 保护。干扰逆向工程师的一个最明显的方法是加密字符串。坦率地说,在逆向工程领域当我第一次研究一个感兴趣的新的二进制文件时,如果我搜索字符串并且搜出来了,我能够假定那个二进制文件很可能没有多少挑战。所以,你不能够依赖于那些东西(如果有当然更好)。 二、模块间的调用 有鉴于此,我向你展示一个新的在没有字符串的情况下的技巧。大部分的Windows应用程序使用一个标准的API集来完成特定的动作。例如,如果需要一个简单的消息框的话就调用MessageBoxA,当程序想要退出的时候就调用TerminateProcess。因为大部分的应用都使用这些相同的API,我们可以用这个获利。例如,有些API可以用于从对话框的输入框(类似用户名和序列号)获取文本。有可以被调用用来比较两个字符串的字符串比较函数(输入的密码和程序中存储的密码相同吗?)。有读写注册表的API(存储和读取你的注册状态)。Olly提供了一种搜索所有被调用的API的方法。在反汇编窗口右键,选择“Search for” -> “All intermodular calls”:(p6)http://attach.52pojie.cn/album/201504/27/201921se5qrtq668q24re5.pngOlly会弹出Found intermodular calls窗口:(p7)http://attach.52pojie.cn/album/201504/27/201924fgckf1kaet6lxgaa.png通常我做的第一件事是点一下“Destination”,将列出的函数按字母顺序进行排序(而不是按地址排序):(p8)http://attach.52pojie.cn/album/201504/27/201925majsxz3kfcf7gtq5.png现在,如果你看第三列的话,你可以看到该crackme调用的所有API:(p9)http://attach.52pojie.cn/album/201504/27/201937monzek8uk854o8kc.png这是一个小程序,所以调用的函数不是那么多。大部分的程序都有数百个。不过通过这个列表,你可以了解到一个二进制文件的很多信息。你可以发现它用一个对话框作为主窗口。它载入了一个自定义的位图。它修改了对话框中的一些颜色。在更大些的应用中,这个窗口的价值更高,因为它能告诉你这些事情:1)是否有注册表相关API被调用用来存储和获取信息?是不是有API呼叫网站来验证我们确实注册了?3)有没有读写一个可能存有注册码文件的API?当我们研究一个加壳的二进制文件时,这个窗口将更加重要(这个后面讨论)。尽管如此,有几个特定API逆向工程师总是会留意,因为这几个在保护机制中用的比较多。包括: DialogBoxParamA                                          GetDlgItem                                                  GetDlgItemInt                                          GetDlgTextA                                          GetWindowTextA                          GetWindowWord                                                 LoadStringAlstrcmpA wsprintfA MessageBeepMessageBoxAMessageBoxExASendMessageASendDlgItemMessageA ReadFileWriteFileCreateFileA GetPrivateProfileIntAWritePrivateProfileStringAGetPrivateProfileStringA 不幸的是,这里没有包括你可能遇到的所有API,不过幸运的是,大部分应用使用下面的其中一个: GetDlgItemTextAGetWindowTextAlstrcmpAGetPrivateProfileStringAGetPrivateProfileIntARegQueryValueExAWritePrivateProfileStringAGetPrivateProfileIntA 如果你专注这8个API的调用,你就可以处理绝大多数的实例。还有别忘了,“Get help on symbolic name”是可以给你提供帮助的。现在,在Olly查找出的crackme的调用列表中往下看,在那个简短的列表中有两个API: GetDlgItem和 GetDlgItemTextA 这两个函数是用来获取输入到对话框中文本框的文本。好吧,在我们的教程中,这只可能说明一件事,获取我们输入的密码。我们想要做的是,不管什么时候只要Olly遇到两者中的一个就暂停。方法是,选中你想要关注的API那行,右键然后选择“Set breakpoint on every call to ____”,这里的____是API的名称(这里是GetDlgItem):(p10)http://attach.52pojie.cn/album/201504/27/201941dlqhetz5t8hl3geh.png现在,我们看到Olly已经在该行设置了一个BP:(p11)http://attach.52pojie.cn/album/201504/27/201947jwhlwlsk9vwogkms.png我们也想在另一个APIGetDlgItemTextA那暂停,那么点击选中它,右键然后和前面一样进行操作:(p12)http://attach.52pojie.cn/album/201504/27/201953zjvmvz5z82xqm5vf.png现在,不管什么时候只要Olly遇到了对这两个API的调用,它都会断下来(在调用被执行前)。咱们来试试看。重启crackme并运行。Olly会断在对GetDlgItem的调用处:(p13)http://attach.52pojie.cn/album/201504/27/201956b9xjbom7xpzmjyy2.png现在,因为我们还没有输入任何内容,我们对GetDlgItem取到了什么东西不感兴趣,好咱们继续(F9):(p14)http://attach.52pojie.cn/album/201504/27/202001v1gbdl9dadq5odod.png现在输入一个密码,然后点“check”:(p15)http://attach.52pojie.cn/album/201504/27/202006dlhonwmtwzmf2a7e.pngOlly会再次断下来,这次是在GetDlgItemTextA:(p16)http://attach.52pojie.cn/album/201504/27/202040zm0tzhfxrtx7wnj4.png如果你看看周围,你会注意到我们已经来到正确的位置。搞笑的是,我们起初搜索字符串的时候,没有一个是这些字符串中的。 三、破解应用 咱们快速浏览下附近的...。我们注意到有一个跳转(JB)跳过了第一个“ACCESS DENIED”,所以我们关注一下它:(p17)http://attach.52pojie.cn/album/201504/27/202043tgw7egw3g53n55tn.png有一个跳转(JNZ)跳过了第二个坏消息,所以我们也将其加入关注名单。然后我们就会直接穿过到达好消息,所以基本上我们想要确保我们跳过了这两个跳转:(p18)http://attach.52pojie.cn/album/201504/27/202048q39wr8pt2gpk3tqr.png咱们试试,看看咱们是不是对的。再一次运行程序,我们应该断在GetDlgItemTextA指令处(记住绕过第一个断点):(p19)http://attach.52pojie.cn/album/201504/27/202053vi9dkk7fjpjiazai.png因为这是一个JB跳转,所以我们需要翻转进位标志位:(p20)http://attach.52pojie.cn/album/201504/27/202055czw49p8f45o0eowf.png这样就会强制跳转。现在我们将做另一个TEST,停在了401280处的跳转那。注意,我们的密码已经出现了注释列:(p21)http://attach.52pojie.cn/album/201504/27/202056ycizr196sxw0xhsm.png我们想要那个跳转实现,因为它跳过了第二个坏消息,所以我们只需要继续单步直到到达40129F的JNZ指令:(p22)http://attach.52pojie.cn/album/201504/27/202058uolitnnbl1on2l7b.png好,这条指令将会跳过我们的好消息,所以我们想要阻止它跳。你知道该怎么做:(p23)http://attach.52pojie.cn/album/201504/27/202059dw410850w15w4ozd.png现在运行程序(F9),看看我们已经成功的破解了程序:(p24)http://attach.52pojie.cn/album/201504/27/202106twvetqt8hn81lgvs.png
四、家庭作业 作为一个挑战,试着给这个crackme打补丁,基于那个我们已经修改的标志位。在将打过补丁的程序保存后,你应该可以运行它,输入任何密码(少于11个数字)它都会提示“Access Granted”。记住有几个补丁可以完成这个任务,所以如果一个不起作用,那就找下一个。 加分题:给crackme打补丁,让它接受任意长的密码。
本文PDF文件下载(已排版):本文相关附件下载地址(国外链接,不是一直好用):包括Crackme6.exe、本文的英文PDF版

q214189912 发表于 2015-4-29 10:47

      谢谢分享

omoc 发表于 2015-4-29 22:01

感谢分享!辛苦了!

lacool 发表于 2015-5-3 09:28

这个不错,有些软件找不到字符串

歪啵猪 发表于 2015-5-26 13:37

支持翻译 辛苦了!

荣誉王座 发表于 2016-1-28 13:17

学些前,回复{:1_918:}

荣誉王座 发表于 2016-1-28 15:01

下载之前 回复一下。。。

shenxue008 发表于 2016-6-21 18:28

本帖最后由 shenxue008 于 2016-6-21 18:31 编辑

为什么我到第二个getdlgitemtexta下面还是显示的加密字符呢,并没有denied这些字符file:///C:\Users\Administrator\AppData\Roaming\Tencent\Users\954116868\QQ\WinTemp\RichOle\Q)HD)CQ)DKZT@)0}`C68A5R.pngfile:///C:\Users\Administrator\AppData\Roaming\Tencent\Users\954116868\QQ\WinTemp\RichOle\Q)HD)CQ)DKZT@)0}`C68A5R.png
页: [1]
查看完整版本: 【翻译】R4ndom破解教程全文翻译(For新手):第九章