mfd5095 发表于 2013-7-30 17:57

注册码的五种追踪思路总结

本帖最后由 mfd5095 于 2014-8-9 09:04 编辑

---------------------------------------------------------------------------------
思路:根据软件的注册提示信息再利用工具查找相应的文本字符串,然后在根据相应的文本字符串查找关键跳和关键CALL,在关键CALL下断F9运行,输入假码,就可以看到真假码的比较了。
注意删除断点,有时候查看的断点没有成功删除会影响我们调试,解决方法是到查看断点里删除.禁用全部断点。
---------------------------------------------------------------------------------
其实这个crackme是很简单的,它采用的是明码比较。要追踪它的注册码是非常容易的。做这个教程的目的就是为了给大家一个破解的思路,希望能够起到抛砖引玉的作用。

下面请看我的操作

第一步:查壳,使用PEID或是是FI都可以。用PEID查到。。是Microsoft Visual C++ 6.0 写的程序,无壳!
第二步:试运行,看能够不能够找到破解的入口点。。输入431134,提示“incorrect try again!!”很好~要的就是它了!


思路一:

首先用OD载入。

00401B70 c>/$55          push ebp                                        //停在这里
00401B71   |.8BEC      mov ebp,esp
00401B73   |.6A FF       push -1
00401B75   |.68 08254000 push chap201.00402508
00401B7A   |.68 F61C4000 push <jmp.&MSVCRT._except_handler3>    ;SE handler installation


我们使用OD自带的"ULtra字符串参考"插件---->"查找ASCII"(一般VB的程序就用UNICODE!非VB的就用ASCII了),发现了“incorrect try again!!”呵呵~看到了没?双击它

00401583   |.EB 3C       jmp short chap201.004015C1
00401585   |>8D4D E4   lea ecx,dword ptr ss:
00401588   |.51          push ecx                               ; /String2
00401589   |.8D55 F4   lea edx,dword ptr ss:         ; |
0040158C   |.52          push edx                               ; |String1
0040158D   |.FF15 002040>call dword ptr ds:[<&KERNEL32.lstrcmpA>; \lstrcmpA*****************关键CALL
00401593   |.85C0      test eax,eax
00401595   |.75 16       jnz short chap201.004015AD            /关键跳/
00401597   |.6A 40       push 40
00401599   |.68 50304000 push chap201.00403050                  ;ASCII "CrackMe"
0040159E   |.68 58304000 push chap201.00403058                  ;ASCII "Correct way to go!!"
004015A3   |.8B4D E0   mov ecx,dword ptr ss:
004015A6   |.E8 53050000 call <jmp.&MFC42.#4224>
004015AB   |.EB 14       jmp short chap201.004015C1
004015AD   |>6A 40       push 40
004015AF   |.68 6C304000 push chap201.0040306C                  ;ASCII "CrackMe"
004015B4   |.68 74304000 push chap201.00403074                  ;ASCII "Incorrect try again!!"   //来到了这里
004015B9   |.8B4D E0   mov ecx,dword ptr ss:
004015BC   |.E8 3D050000 call <jmp.&MFC42.#4224>
004015C1   |>8BE5      mov esp,ebp

我们向上看,查找关键CALL,好,我们在0040158D处F2下断(因为它就是关键CALL,不要问我为什么啦~这个不会不明白吧。。。),F9运行,程序运行,我输入431134,点击"check"
程序被断下来了,看看右边的寄存器窗口

EAX 00000005
ECX 0012F8B4 ASCII "<BrD-SoB>"
EDX 0012F8C4 ASCII "431134"
EBX 00000001

还有右下脚的窗口
0012F8A8    0012F8C4      |String1 = "431134"
0012F8AC    0012F8B4      \String2 = "<BrD-SoB>"
0012F8B0    0012FE8C
0012F8B4    4472423C
0012F8B8    426F532D

注册码是不是出来了啊~?就是<BrD-SoB>了~很简单吧~~~



思路二:

用OD载入,我们在这里重新载入就可以啦~

00401B70 c>/$55          push ebp                                          //停在这里
00401B71   |.8BEC      mov ebp,esp
00401B73   |.6A FF       push -1
00401B75   |.68 08254000 push chap201.00402508
00401B7A   |.68 F61C4000 push <jmp.&MSVCRT._except_handler3>    ;SE handler installation

我们按下CTRL+N或者是查找当前模块中的名称(标签)。。看好了~
找到lstrcmpA(按l就可以很快找到了,方便~),在这里我讲一下为什么要找lstrcmpA呢,自己看看吧~
,因为程序是明码比较,这样它需要一个比较函数,就是说程序会利用这个比较函数把你输入的注册码和真正的注册码做比较.还有就是程序是C++编写的,它的比较函数就是lstrcmpA了[里面的字母CMP就是compare(比较)的缩写了],如果是VB编写的程序它的比较函数就是_vbastrcomp了.关于VB的破解思路以后我会讲到,因为大家觉得VB程序的确难搞啊.
好了我们找到了lstrcmpA,按下enter(至于enter是什么意思你在那点右键就可以看到了).我们会来到这里

参考位于chap201:.text 到 KERNEL32.lstrcmpA,项目 0
地址=0040158D
反汇编=call dword ptr ds:[<&KERNEL32.lstrcmpA>]
注释=kernel32.lstrcmpA

大家咋一看~~怎么不一样啊~~其实是一样的~~看~

参考位于crackme:.text 到 KERNEL32.lstrcmpA,项目 0
地址=0040158D
反汇编=call dword ptr ds:[<&KERNEL32.lstrcmpA>]
注释=kernel32.lstrcmpA

呵呵~是一样的吧~~


在这里~按F2下断,F9运行,程序运行,输入431134,check,程序立即被断了下来,看看右边的寄存器内容或者是右下脚的内容,真正的注册码出来了.删除断点~~~



思路三:

首先用W32Dasm(非无极版,因为无极版做了修改,没我们需要的功能,可能有而我没发现*^_^*大家可以告诉我)载入程序,“参考”........>"串式参考"或者是点这个~看。。。。。
发现了incorrect try again!!吧~双击来到代码处.

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401595(C)
|
:004015AD 6A40                  push 00000040

* Possible StringData Ref from Data Obj ->"CrackMe"
                                  |
:004015AF 686C304000            push 0040306C

* Possible StringData Ref from Data Obj ->"Incorrect try again!!"
                                  |
:004015B4 6874304000            push 00403074                   //就是这里了.
:004015B9 8B4DE0                  mov ecx, dword ptr

我们向上面找找,发现是由00401595跳到这里的~OK,那我们就去那看看~呵呵~看到了吧~~
:00401595 7516                  jne 004015AD

如果谈到爆破的话~我们只需要把00401595处的7516改成7416或者改成9090就OK了~但是,我们这里谈的不是爆破.
好接下来,我们向上找关键CALL(一般关键跳上面的一个CALL就是关键CALL了,记好了~另外我说的是“一般”大家要灵活点~),好的~就是这里了

:0040158D FF1500204000            Call dword ptr    //关键CALL,记下先~~

可以关掉W32Dasm了~

接下来用OD载入(接上步~~重载就OK了~)~CTRL+G输入0040158D,在这F4(运行到所选).程序就可以运行了,[其实还可以先F2,再F9],输入431134,立即被断下来了,看看右边......OK,这个完了.



思路四:这个方法比较少见~大家看清楚哈~~

用W32Dasm(非无极版)载入...点击"函数"----"输入",找到lstrcmpA(至于为什么选择它~就不用我再说了吧~),双击.

* Reference To: KERNEL32.lstrcmpA, Ord:02FCh
                                  |
:0040158D FF1500204000            Call dword ptr    //停在了这里
:00401593 85C0                  test eax, eax
:00401595 7516                  jne 004015AD
:00401597 6A40                  push 00000040

接下来,点"调试"----"加载处理(CTRL+L)",框框里面什么都不要填,直接点"载入".这样会跳出很多框框(具体不知道怎么形容了),看动画吧,屏幕小了点~~,这个时候你会发现W32Dasm停在这里了
//******************** Program Entry Point ********
:00401B70 55                      push ebp       //在这里
:00401B71 8BEC                  mov ebp, esp
:00401B73 6AFF                  push FFFFFFFF
[哎,它不听话了~乱跑~我们仍然重新点击"函数"--"输入"--双击"lstrcmpA".让它乖乖的回来(这一点比较重要!!********************强烈注意!这个关系到是否成功!)我这里没有遇到这种情况就不必重新点击"函数"--"输入"--双击"lstrcmpA"这些了]
:0040158D FF1500204000            Call dword ptr    //就是停在了这里啦
:00401593 85C0                  test eax, eax
:00401595 7516                  jne 004015AD
:00401597 6A40                  push 00000040
这时你发现0040158D行加亮了,亮了,我们要的就是这行啊.在这行按下F2,看到了没?按下了F2之后这行前面出现了一个小黄块.说明F2已经生效(这个也是致命的关键了!).然后按下F9,或者是点"运行"[跳出的了很多框框,有个框框上有"运行F9"字样的][或者是在"调试"里面都有这些命令的].OK程序运行,我们输入431134,程序被断了下来~看看这里是不是有我输入的假注册码呀~?我们再一步一步按这个向下的箭头,呵呵~~真的注册码好像出来了(当然有的程序不会这么容易让你按一下就乖乖出来的)多按几下。。。。。这个就到这了
点击右上角的复制按钮就可以复制
- 0012fe50P...
- 4472423c<BrD
- 426f532d-SoB
- 0000003e>...
- 00000006....
- 313133344311
- 0000343334..
- 00040000....
- 0012f818....
- 672540ea.@%g
- 00000000....



思路五:

使用WinHex。
先打开crackme,输入假注册码,431134,提示:incorrect try again!!,千万别点“确定”哈,点了就不能在真假注册码比较的地方定下来,就找不到真正的注册码了。
好再打开winhex,“打开RAM”-----找到“crackme #1876”(一般都是在最下面那一行的)点确定-----“整个内存”点确定
接下来CTRL+F既搜索查找文本,输入431134,确定,呵呵~看到了没?真的注册码就在上面呢。。。。有的时候~注册码不是一下就出来的~这时我们只需要按F3继续查找就OK了~~~

还是来试一下这个注册码对不对咯<BrD-SoB>,呵呵~看到了没~?正确~~!~OK~正确~~


好了,课程已经讲完了,大家感想如何,是不是很简单啊,我们学破解关键是需要一种思路,我在此也是给大家一种思路,大家可以回去领会一下这里讲到的几种思路,这里的思路四一般比较少用到,不过用它来对付VB的程序似乎比较有效,记得哈~VB的函数不是lstrcmpA......是什么......自己看看.......Over。。。谢谢大家观看。。。。关键就是练习理念~~~










注册码的五种追踪思路总结

http://115.com/lb/5lb7ox1e#
第35课注册码的追踪方法2五种思路总结.rar
115网盘礼包码:5lb7ox1e

okman110 发表于 2013-7-30 18:21

非常感谢啊

silent_grief 发表于 2013-7-30 18:22

怎么感觉你这是复制的内容。没有图片,软件的

silent_grief 发表于 2013-7-30 18:23

怎么感觉你这是复制的内容。没有图片,软件的

1354669803 发表于 2013-7-30 18:29

为什么不换百度盘呢

81915619 发表于 2013-7-30 18:43

今天又学习了!!!

gudumuyu 发表于 2013-7-30 18:56

三人行教程直接粘贴来的·!!!

wjl 发表于 2013-7-30 19:16

升级VIP贵宾,马上享受文件打包下载服务
115网盘能下载吗?

kevinjian 发表于 2013-7-30 19:23

好吧。接收了。。。感谢分享

马斯维尔 发表于 2013-7-30 19:43

感觉是篇老文章了。 有年代感。。
页: [1] 2 3 4 5
查看完整版本: 注册码的五种追踪思路总结