本帖最后由 wang1234561211 于 2015-9-14 18:48 编辑
写在前面:1. 经测试本教程方法适用于该网站大部分软件。(我刚刚测试了四五款,验证流程都是一样的)
2. 本教程,其实非常简单,只是作为新人尽量写的足够详细。所以别以为太长都看不懂了,其实不会的。
3. 作为新手写的,如有违规,不合要求的地方,随时提醒,随时改正哈。如有纰漏,在所难免,往大神们指点一二。
还是那句话,本教程不奢望任何CB和热心,只为帮助像我一样的新人,仅此而已。同时也为了记录下自己的学习过程。
在原创区看到有人发这个软件,一直想着自己试试能破解不,也摸索了好几次(之前一直想着爆破,没找到方法,今天换了个思路)。才找到方法,论坛搜索了下没这个软件的破解教程,就打算写出来,分享下。
本文仅仅新手教程,是我自己今天上午接手这个软件一点点分析的思路。而不是自己分析好之后,直接找关键的地方,找到注册码。感觉这样帮助不了像我一样迷茫的新人。
1. 下载原版软件
官方下载地址。https://pan.sohu.net/s/NDA1ODMsbWJxdWs.htm
2. 下载安装。查壳
3. 分析软件
首先运行软件分析下注册流程,方便后面的工作。打开软件注册,输入15个a。然后选择不联网注册。(还是喜欢本地验证,怕联网验证搞不定,就没尝试。)
在新打开的页面,左下角输入验证码。我输入的是22222-22222。然后点击注册。看错误提示,记录下(注册失败,请核实注册码,机器码和验证码),记得留意下机器码,别随后分析把机器码当成了注册码(我之前都烦了这个错误)
4.OD载入分析
F9运行程序。按chtl+G,输入00401000。来到代码段。(也可以,按alt+E,然后选择C:\kaozhen\Windows7\Windows7.exe ,双击即可)。右键-中文搜索引擎-智能搜索-ctrl+F。输入 (注册失败),然后找到这个地方。
双击进入,来到如下代码。
[Asm] 纯文本查看 复制代码 004A77A0 |. 50 push eax
004A77A1 |. E8 E1931C00 call Windows7.00670B87
004A77A6 |. 83C4 08 add esp,0x8
004A77A9 |. 68 60CA6D00 push Windows7.006DCA60 ; <div class="import_maintext">注册失败,请核实注册码,机器码和验证码!</div>\r\n
004A77AE |. 68 060C0000 push 0xC06
004A77B3 |. 8D8D E4F3FFFF lea ecx,[local.775]
004A77B9 |. 51 push ecx
004A77BA |. E8 54951C00 call Windows7.00670D13
然后F2下断。输入我们刚刚分析软件用的假码,点击注册。发现程序断下来了,证明这个地方是咱们要找的了。然后上下找找有没关键跳,可以跳过这里的,发现也并没有。然后想着会不会这是个子call,我们先出这个call。分析下,按ctrl+F9执行到返回(这个call的结尾,出call).接着F8,出这个cal。来到了这里。(我们在上面的call注释下)如图
[Asm] 纯文本查看 复制代码 00494953 |. 8B8D 7CE3FFFF mov ecx,[local.1825]
00494959 |. E8 23051C00 call Windows7.00654E81
0049495E |. 8B8D 7CE3FFFF mov ecx,[local.1825]
00494964 |. E8 17250100 call Windows7.004A6E80 ; 错误call1
00494969 |. 8D8D 80E3FFFF lea ecx,[local.1824]
0049496F |. E8 5C40F7FF call Windows7.004089D0
00494974 |. 8D85 80E3FFFF lea eax,[local.1824]
往下找,发现有两个两个地方跳过了错误call。
我们先分析第一个。右键下面的信息,然后跳转到跳过失败call的来源。
我们来到了这里。
[Asm] 纯文本查看 复制代码 0049488D |. 8D8D A0E3FFFF lea ecx,[local.1816]
00494893 |. E8 A810F7FF call Windows7.00405940
00494898 |. E9 7A010000 jmp Windows7.00494A17
0049489D |> 68 C0010000 push 0x1C0
004948A2 |. E8 79CDF6FF call Windows7.00401620
004948A7 |. 8985 00E3FFFF mov [local.1856],eax ; Windows7.007C12F4
发现是个无条件跳转。跳过了错误,可为什么无条件跳转没实现,我们分析下。发现这个jmp下面有个从上面跳转过来的,我们按照上面同样的方法跟随过去。
来到了这个地方
[Asm] 纯文本查看 复制代码 00493FF6 |. C645 FC 00 mov byte ptr ss:[ebp-0x4],0x0
00493FFA |. 8D8D 6CE3FFFF lea ecx,[local.1829]
00494000 |. E8 3B19F7FF call Windows7.00405940
00494005 |. 833D D05F7B00>cmp dword ptr ds:[0x7B5FD0],0x1
0049400C |. 0F84 8B080000 je Windows7.0049489D
00494012 |. E8 3999F7FF call Windows7.0040D950
00494017 |. 8BC8 mov ecx,eax ; Windows7.007C12F4
00494019 |. E8 42140600 call Windows7.004F5460
0049401E |. 68 90E06C00 push Windows7.006CE090 ; 注册信息.txt
00494023 |. E8 D8F7F8FF call Windows7.00423800
00494028 |. 50 push eax ; Windows7.007C12F4
我们先下断。
然后分析刚刚上面这个位置,下面的跳转是哪里跳过失败的。
我们发现有两个跳转跳到了同一个地方。
挨着跟随过去,第一个,直接来到了这个地方。JMP下面 F2下断 (看上面的注释会发现,上面是判断输入注册码的位数的,所以不用句首下断了)
[Asm] 纯文本查看 复制代码 00493E1B |. 8D4D F0 lea ecx,[local.4]
00493E1E |. E8 1D1BF7FF call Windows7.00405940
00493E23 |. 8B85 74E3FFFF mov eax,[local.1827]
00493E29 |. E9 080C0000 jmp Windows7.00494A36
00493E2E |> 8B85 F4E2FFFF mov eax,[local.1859]
往上稍微看下,发现到了断首。
结果回去,再跟随另外的跳转看看
来到这里。
[Asm] 纯文本查看 复制代码 0049419C |. 8D4D F0 lea ecx,[local.4]
0049419F |. E8 9C17F7FF call Windows7.00405940
004941A4 |. 8B85 4CE3FFFF mov eax,[local.1837]
004941AA |. E9 87080000 jmp Windows7.00494A36
004941AF |> 8D45 E4 lea eax,[local.7]
004941B2 |. 50 push eax ; Windows7.007C12F4
同样发现,jmp下面有个跳转跳过了他,跟随上去,F2下断。
5. 追码
跳过错误call的地方都下断了,然后我们F9然程序运行。重新输入注册信息。点击注册,发现程序停下来了。然后我们F8单步,同时留意寄存器窗口,先出现了我们输入的验证码(假码)
继续单步分析,然后出现了机器码。到这里都要小心点了,估计要出关键了。
继续单步,会发现之前输入的注册码,也出现了。
刚好发现下面有个call。我们进F7跟进去看看。发现右下角,已经记录我们的刚刚假注册码、假验证码和机器码了。
继续单步,寄存器出现如下,再猜测会不会再比较验证码呢。我们先把它给复制下,放到txt文档里,留着以后用。继续单步
又发现了这个地方。同样复制下来。(也要怀疑下,都这么比较会不会不是验证码呢。我们接着下面分析即可)
(中间其实出现了关键call,给单步过去了,关键call再算验证码,不过第一次分析,不会知道的,而且那里那么多call,所以就一路单步即可了,如果有看到这里的朋友,可以留意下call,进去之后会发现验证码在里面一步步的生成,每循环一次出一个数字,循环了10次,刚好和我们的验证码数位一样。)
继续单步会发现,又出现可疑了。同时出现了验证码和新出来的什么东西,我们也保存下。
继续发现寄存器,又出现了可疑的,继续保存下来。(其实这个代码也是在一个call里面算出来的。只是一开始给单步过去了,)
再单步都出call了
然后我们重新运行输入我们刚刚收集的可以信息。
注册码,当然还是要送aaaaaaa等15个了。
发现我们刚刚记录的10位数字居然都有效的验证码。(软件作者好坑爹啊,搞这么多正确的验证码干嘛)
至此,教程接受,附上激活后的截图。
本文仅仅用于研究分析,不提供任何下载。
总结:(其实大神们只看下面都会秒懂的)
1. 其实整个流畅走下来,会发现并不那么麻烦。
2. 搜索(注册失败)字符串;
3. 然后在断尾(retn处)下F2断点,输入我们的假码注册;
4. 然后F8出call;
5. 往上找到段首F2断点;
6. 重新输入假码注册,然后断在低5步。单步F8,寄存器会以此出现假验证码、机器码、和假注册码。等出现完整的假注册码的时候,进call。
7. 然后一路F8,记录寄存器的10位数字。均为正确的验证码。(除10位的机器码外)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
其他图文教程(不定期可能更新)
|