houjingyi 发表于 2017-2-22 22:14

翻译XXXX逆向系列教程-“SerialFishing a correct serial” by XOR06

本帖最后由 姐又寡闻了 于 2019-6-6 22:29 编辑

这是R4ndom破解教程翻译计划的第三篇。
第一篇:翻译R4ndom逆向系列教程-CrackMe by XOR6
第二篇:翻译R4ndom逆向系列教程-Cracking driverfinder XOR06
R4ndom破解教程全文翻译(For新手)导航帖提供的网盘中有一些英文材料,本文即为本人翻译自其中的“其他教程”中的Serialfishing_a_correct_serial_XOR06,未来会翻译更多的教程。用到的工具可以在爱盘下载,文末提供英文原文和源文件下载。这一次图片没有重新截直接用的原文中的,作者破解的是Iconlover Version 5.31,我去官网http://www.aha-soft.com/iconlover/下载了最新版Iconlover Version 5.46自己跟着做了一遍,可能在做的过程中一些地址略有不同,但是思路是完全相同的,所以请大家不必担心软件版本的问题。
在本教程中,我们不会去patch一个程序,我们甚至一个字节都不会改。我们会研究代码并找到正确的序列号输入。我将说得很详细来帮助你理解。
我假设你知道Olly和如何改变标志位以及设置断点这些基本的知识。我想感谢nwokiller的校对和伟大的支持。 我不得不说:“这只是为了学习,如果你喜欢它,付钱!”
记住,最好的学习方法是尝试自己先找到序列号,如果你不成功(或者如果你想看看另一种方法)那么阅读本教程。玩的开心!
打开这个软件你会看见这个NAG窗口。

然后你会看见它。

我们有三十天的试用期!我们可以试试注册,所以点击Register按钮。

我已经输入了我的数据(当你试图寻找注册码时输入一串连续的序列总是一个很好的主意,这样很容易看到目标正在处理的字符。如果你输入像66666666序列的你分不清楚程序在处理第一个字符还是最后一个字符),所以我准备好点击OK,然后我们看到这个。

在Olly中运行这个程序,然后看看字符串。让我们搜索提示失败的字符串:“Please reenter key”。第一处命中在这里。

我们可以看到这不是所有的提示失败的字符串,看起来应该是由很多字符串粘贴起来的。我们先在反汇编窗口中跟踪一下这个字符串。

这里并没有太多的信息,在提示注册失败之前没有条件跳转或者函数调用。它肯定会被检测序列号的函数调用,我们看看是从哪里调用的。在00641E10处单击, 看看下面窗口中的信息。

有四处调用这个函数,我们在这4处调用都设下断点。(点击00641E10, 点击“find reference to”选择命令。在新的窗口中右击然后选择“set bp on every command”)。现在在Olly中运行程序。来到注册的对话框然后输入注册码(长度为10,我稍后会解释为什么)然后点击“Ok”。现在Olly停在这里。

你可以看到我已经加上了注释“bad call”因为我们知道它们会调用弹出注册失败的函数。我在00641F20和00641F68处也加上了同样的注释,为了能看得更清楚。好的,现在到哪里去找正确的注册码呢?在命中断点之前有一处bad call,为什么没有断在那里呢?看一下00641F17处的条件跳转-它跳过了bad call,所以我们在这里必须跳转,但是为什么呢?看看jge上面那一行:“CMP EAX,0A”。16进制中的A=10进制中的10,我已经在注释中写了,这里的比较检查注册码长度是不是10。因为我输入的是1234567890刚好长度为10,所以我们在这里执行了跳转。我怎么知道EAX等于序列号的长度呢?我在这里下了个断点然后试着改变序列号的长度,EAX中的值也跟着改变。(当然,我进入这个调用搞清楚了怎么回事)。
好的,我们现在知道序列号长10了…这是第一步。我们回到00641F44,Olly断下的地方。我们总是会在调用注册失败的位置之前寻找条件跳转,比如00641F3D处。它是由前面00641F3B处TEST EAX,EAX决定的,如果我们再更仔细地分析一下代码,会发现00641F36处的调用设置EAX的值。所以现在我们来看看这个调用。

这个调用你可以只是简单地patch掉,但是既然我们是来找序列号的,我们需要分析地更深入一些。你能看见006417AE处的循环么? 它看起来像是某种检查,所以我们来看看这个循环(如果你去研究其它两个跳转你将会得不到任何结果)。

这有两个很简单的调用,一个调用Kernel32.sleep一个调用00641520。我们不想跳出我们分析的文件(如果你去看Kernel32里面的调用你只会发现它的作用就像它名字那样:使程序休眠)。我们只有一个调用需要研究,所以让我们看看006417B1处的调用。


如果你看看下面窗口中的信息你会发现这个函数被两个地方调用。这是一个很大的函数,但是只要我们记住我们在找什么那就会比看上去的简单很多。我们仍然需要寻找某种形式的比较,输入的序列号或者其中的一部分和正确的序列号。在这个函数的开头设置断点然后取消掉其它所有断点,我们现在只研究这个函数。在Olly中重新启动目标程序,在注册的对话框处输入我们的注册码(记住长度为10位,我喜欢1234567890)。点击ok然后Olly会在这个断点处停下。既然我们的目标是某个比较,所以一直单步下去直到0064156B处第一次比较。

如果你看看Olly,你不会发现什么有用的信息,所以我们继续单步直到006415B4处的下一次比较,然后看看窗口中的信息。

这里检查我们输入的9是否等于k,当然不等于。但是它告诉我们9应该是k,所以我们现在知道注册码不是1234567890而是12345678k0。在这里下一个断点并移除原来的。如果你现在在Olly中运行程序它每次都会断在这里,并且窗口中的信息是相同的。按下F9直到Olly不再停下,然后在注册的窗口中填上新的序列号(12345678k0)然后点击ok。Olly停下然后你会在窗口中看到这样的信息。

好的,按下F9直到Olly不在断点处停下(需要10次)你会看见这个。


嗯…仍然提示了错误信息。我们需要再研究研究。点击OK,在注册窗口点击ok然后Olly会再次在这里被断下。

让我们看看,在这个函数中发生了什么(RETN命令之后)。按下Ctrl+F9(执行直到返回)。

当单步时,使用F8因为PUSH @ 006415C5,我们没有回到我们来的地方,7次之后来到return @ 006415EA然后返回到了这里。

我们需要知道在执行这个函数之后发生了什么,所以按下Ctrl+F9(执行直到返回)然后同样7次之后(因为push @ 006417CA)。现在我们又来到这里了,记得么?

再单步一次你会看到跳过了调用显示注册失败的00641F44处。继续单步到00641F5A然后进入这个函数,就像上次一样。

这可能看上去像是最后的代码但是它不是-向下翻翻以得到一个总体的概览。

这一行看起来熟悉么?在这里下个断点然后再向下看看。

同样在这里下个断点然后在Olly中运行程序直到断下,看一下窗口中的信息。

现在我们知道了3应该是h。按下F9你会看见这个。

2应该是n。按下F9你会看见这个。

所以现在我们找到的序列号应该是1nh45678k0。在注册窗口输入它然后点击Ok。现在Olly会在我们下的第一个断点处断下。

看看窗口中的信息,现在显示k应该是p??好吧,那我们就按它说的来吧,把我们的序列号改成1nh45678p0。让Olly运行,输入新的序列号,点击Ok。现在Olly停在这里。

看看窗口中的信息,它把我们的p和p进行比较,所以按下F9…10次(为什么10次?我们只想到下一个检查序列号的地方,这需要10次F9)。

看看窗口中的信息,它把我们的h和h进行比较,所以按下F9。

看看窗口中的信息,它把我们的n和n进行比较,所以按下F9。你会看见这个。

我们成功了!这不是最简单的办法,但是我们找到了一组正确的序列号1nh45678p0。
通常情况下我会只是简单地patch掉但是我希望你知道,如果你熟悉汇编语言,你可以像这样一次一个字母地凑出正确的序列号-即使你不懂所有的代码。如果你对代码再研究深入一些,你还可以做个注册机。同样,这会在这个公司的所有产品上都有效,但是如果你喜欢请买正版。希望你享受破解并能学到东西。
希望我继续翻译的请支持!!!(就像我开头提到的,上传到百度网盘的附件中包括英文原文和5.46版本的,和原文中的版本不一样,但是对破解过程没有什么影响,你也可以去官网下载)
附件下载:http://pan.baidu.com/s/1nvExThR

等待记忆中 发表于 2017-2-22 22:40

前排顶贴

mancong122 发表于 2017-2-22 22:40

先马克一下,

gouqingyuan 发表于 2017-2-22 23:19

真多 简直是太多了

sunfly 发表于 2017-2-23 08:06

收藏慢慢学习

xiaoxi2011 发表于 2017-2-23 08:52

学习了,谢谢分享

andyblack 发表于 2017-2-23 10:08

好东西,收藏了!~

yu逍遥 发表于 2017-2-23 15:18

谢谢楼主分享

971029 发表于 2017-2-23 16:35

学习学习

校2012 发表于 2017-2-23 18:01

不错啊看看吧
页: [1] 2
查看完整版本: 翻译XXXX逆向系列教程-“SerialFishing a correct serial” by XOR06