• 标 题:用ollydbg找eBook Edit Pro v3.21的注册码
  • 作 者:ol
  • 时 间:2003/02/12 06:18pm
  • 链 接:http://bbs.pediy.com

用ollydbg找eBook Edit Pro v3.21的注册码

今日股市大涨,可惜俺的股票没有涨:(    坐庄俺股票的机构,你们是不是都“死”了,没看见人家都涨停板了吗?你们…………唉,不说了,太伤心了:(郁闷之际,就拿它开刀,以解我心中的怨气(要是破解不了,我可真成了衰人,呵呵)

进入正题,用ollydbg下断点bpx getwindowtxeta ,然后运行软件输入名:ol 码:123456 ,按确定…………我靠,真给我添堵,居然没有拦住,而且程序也不显示任何信息。我日!@#$%^&*……(骂了N小时,嘻嘻)唉,现在破个软件怎么这么费劲啊,那些个程序员怎么不编个“真正”的共享版啊,那样不就不用“麻烦”我们了吗?想个办法吧,对了,运行注册表监测程序看看能不能发现什么……………………YES!它把我输入的注册信息都写在了注册表里,如下

[HKEY_CURRENT_USER\Software\Cybershare\Registration]
"USER"="ol"  ---------------我的名字
"KEY"="123456"--------------我输入的假注册码
"URL"=""
"AFFID"=""

原来俺还有机会啊:)看来,程序是在比较完注册码后,才把我输入的信息写到注册表的(你问我为什么会知道?我有灵感嘛,看雪老大就说过,cracker需要灵感加幸运,看来我是有的,你没有吗?那我可给不了你了…………)既然如此,LET’GO:

下断点bpx advapi32.RegCreateKeyExA,重新载入程序填写注册信息,按确定,ok,断下来了,由于上面的原因,所以要想找到比较注册码的核心,就要向上寻找突破口,先跳出向注册表写信息这段程序,然后再一步步确定核心的位置,具体如下:

00495F46  |. E8 F515F7FF    CALL <JMP.&advapi32.RegCreateKeyExA>     ; \RegCreateKeyExA←------------------首次在这里中断
00495F4B  |. 85C0           TEST EAX,EAX
                      ·
                      ·
                      ·
                      ·
00495FA4   . 8A45 FE        MOV AL,BYTE PTR SS:[EBP-2]
00495FA7   . 5E             POP ESI
00495FA8   . 5B             POP EBX
00495FA9   . 8BE5           MOV ESP,EBP
00495FAB   . 5D             POP EBP
00495FAC   . C3             RETN        ←------------------运行到这里返回到调用处


004D223F  |. 8BCB           MOV ECX,EBX   ←------------------出来后我们在这里,现在还没有跳出去,所以继续GO
004D2241  |. 8B55 FC        MOV EDX,DWORD PTR SS:[EBP-4]
004D2244  |. 8B45 F8        MOV EAX,DWORD PTR SS:[EBP-8]
                      ·
                      ·
                      ·
004D2286   . 5B             POP EBX
004D2287   . 59             POP ECX
004D2288   . 59             POP ECX
004D2289   . 5D             POP EBP
004D228A   . C3             RETN                      ←------------------运行到这里返回到调用处

004D9DE8  /. 55             PUSH EBP                 ←------------------在这里下断点,然后一步步小心跟踪
004D9DE9  |. 8BEC           MOV EBP,ESP
004D9DEB  |. 33C9           XOR ECX,ECX
004D9DED  |. 51             PUSH ECX
004D9DEE  |. 51             PUSH ECX
004D9DEF  |. 51             PUSH ECX
004D9DF0  |. 51             PUSH ECX
004D9DF1  |. 53             PUSH EBX
004D9DF2  |. 8BD8           MOV EBX,EAX
004D9DF4  |. 33C0           XOR EAX,EAX
004D9DF6  |. 55             PUSH EBP
004D9DF7  |. 68 8A9E4D00    PUSH UNPACKED.004D9E8A
004D9DFC  |. 64:FF30        PUSH DWORD PTR FS:[EAX]
004D9DFF  |. 64:8920        MOV DWORD PTR FS:[EAX],ESP
004D9E02  |. 8D55 FC        LEA EDX,DWORD PTR SS:[EBP-4]
004D9E05  |. 8B83 F8020000  MOV EAX,DWORD PTR DS:[EBX+2F8]
004D9E0B  |. E8 D8F4F9FF    CALL UNPACKED.004792E8 ←------------------进入这个call后,发现它是用函数GetKeyboardState来获得信息                                                      难怪我断不下来,真狡猾………………(不敢确定,请高手指教)
004D9E10  |. 8B55 FC        MOV EDX,DWORD PTR SS:[EBP-4]  ←------------------这里出现我的名字
004D9E13  |. 8BC3           MOV EAX,EBX
004D9E15  |. E8 AAFFFFFF    CALL UNPACKED.004D9DC4
004D9E1A  |. 8D55 F8        LEA EDX,DWORD PTR SS:[EBP-8]
004D9E1D  |. 8B83 FC020000  MOV EAX,DWORD PTR DS:[EBX+2FC]
004D9E23  |. E8 C0F4F9FF    CALL UNPACKED.004792E8
004D9E28  |. 8B55 F8        MOV EDX,DWORD PTR SS:[EBP-8]  ←------------------这里出现我输入的假注册码
004D9E2B  |. 8BC3           MOV EAX,EBX
004D9E2D  |. E8 AEFEFFFF    CALL UNPACKED.004D9CE0
004D9E32  |. 8BC3           MOV EAX,EBX
004D9E34  |. E8 CBFEFFFF    CALL UNPACKED.004D9D04       ←---------------------关键call,切入进去
004D9E39  |. 8D55 F4        LEA EDX,DWORD PTR SS:[EBP-C]
004D9E3C  |. 8B83 14030000  MOV EAX,DWORD PTR DS:[EBX+314]
004D9E42  |. E8 A1F4F9FF    CALL UNPACKED.004792E8
004D9E47  |. 8B55 F4        MOV EDX,DWORD PTR SS:[EBP-C]
004D9E4A  |. A1 F48C5000    MOV EAX,DWORD PTR DS:[508CF4]
004D9E4F  |. E8 98A0F2FF    CALL UNPACKED.00403EEC
004D9E54  |. 8D55 F0        LEA EDX,DWORD PTR SS:[EBP-10]
004D9E57  |. 8BC3           MOV EAX,EBX
004D9E59  |. E8 226B0000    CALL UNPACKED.004E0980
004D9E5E  |. 8B55 F0        MOV EDX,DWORD PTR SS:[EBP-10]
004D9E61  |. 8BC3           MOV EAX,EBX
004D9E63  |. E8 306B0000    CALL UNPACKED.004E0998
004D9E68  |. 8BC3           MOV EAX,EBX
004D9E6A  |. E8 3D080000    CALL UNPACKED.004DA6AC←------------------在这里调用写注册表程序
004D9E6F  |. 33C0           XOR EAX,EAX ←------------------在004D228A出来后在这里,现在终于跳出来了,向上看,乖乖,这么多call啊
004D9E71  |. 5A             POP EDX                   ,看来核心很可能就在这些call当中了,关掉第一个断点,下第二个断点在004D9DE8
004D9E72  |. 59             POP ECX                         重新载入程序再次输入注册信息,按确定,现在中断在004D9DE8了
004D9E73  |. 59             POP ECX
004D9E74  |. 64:8910        MOV DWORD PTR FS:[EAX],EDX
004D9E77  |. 68 919E4D00    PUSH UNPACKED.004D9E91
004D9E7C  |> 8D45 F0        LEA EAX,DWORD PTR SS:[EBP-10]
004D9E7F  |. BA 04000000    MOV EDX,4
004D9E84  |. E8 33A0F2FF    CALL UNPACKED.00403EBC
004D9E89  \. C3             RETN


进入关键call  CALL 004D9D04后,来到:

004D9D04  /$ 55             PUSH EBP
004D9D05  |. 8BEC           MOV EBP,ESP
004D9D07  |. 6A 00          PUSH 0
004D9D09  |. 6A 00          PUSH 0
004D9D0B  |. 53             PUSH EBX
004D9D0C  |. 8BD8           MOV EBX,EAX
004D9D0E  |. 33C0           XOR EAX,EAX
004D9D10  |. 55             PUSH EBP
004D9D11  |. 68 679D4D00    PUSH UNPACKED.004D9D67
004D9D16  |. 64:FF30        PUSH DWORD PTR FS:[EAX]
004D9D19  |. 64:8920        MOV DWORD PTR FS:[EAX],ESP
004D9D1C  |. 6A 00          PUSH 0
004D9D1E  |. 8D55 FC        LEA EDX,DWORD PTR SS:[EBP-4]
004D9D21  |. 8BC3           MOV EAX,EBX
004D9D23  |. E8 A4FFFFFF    CALL UNPACKED.004D9CCC
004D9D28  |. 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]
004D9D2B  |. 50             PUSH EAX
004D9D2C  |. 8D55 F8        LEA EDX,DWORD PTR SS:[EBP-8]
004D9D2F  |. 8BC3           MOV EAX,EBX
004D9D31  |. E8 7A000000    CALL UNPACKED.004D9DB0
004D9D36  |. 8B45 F8        MOV EAX,DWORD PTR SS:[EBP-8]
004D9D39  |. B9 7C9D4D00    MOV ECX,UNPACKED.004D9D7C          
004D9D3E  |. 5A             POP EDX
004D9D3F  |. E8 3C81FFFF    CALL UNPACKED.004D1E80         ←------------------从这里进去
004D9D44  |. 8B15 98875000  MOV EDX,DWORD PTR DS:[508798]        
004D9D4A  |. 8802           MOV BYTE PTR DS:[EDX],AL
004D9D4C  |. 33C0           XOR EAX,EAX
004D9D4E  |. 5A             POP EDX
004D9D4F  |. 59             POP ECX
004D9D50  |. 59             POP ECX
004D9D51  |. 64:8910        MOV DWORD PTR FS:[EAX],EDX
004D9D54  |. 68 6E9D4D00    PUSH UNPACKED.004D9D6E
004D9D59  |> 8D45 F8        LEA EAX,DWORD PTR SS:[EBP-8]
004D9D5C  |. BA 02000000    MOV EDX,2
004D9D61  |. E8 56A1F2FF    CALL UNPACKED.00403EBC
004D9D66  \. C3             RETN


进入CALL UNPACKED.004D1E80后,我们来到:


004D1E80  /$ 55             PUSH EBP
004D1E81  |. 8BEC           MOV EBP,ESP
004D1E83  |. 81C4 FCFEFFFF  ADD ESP,-104
004D1E89  |. 53             PUSH EBX
004D1E8A  |. 56             PUSH ESI
004D1E8B  |. 57             PUSH EDI
004D1E8C  |. 33DB           XOR EBX,EBX
004D1E8E  |. 895D FC        MOV DWORD PTR SS:[EBP-4],EBX
004D1E91  |. 8BF9           MOV EDI,ECX
004D1E93  |. 8BF2           MOV ESI,EDX
004D1E95  |. 8BD8           MOV EBX,EAX
004D1E97  |. 8B45 08        MOV EAX,DWORD PTR SS:[EBP+8]
004D1E9A  |. E8 2D24F3FF    CALL UNPACKED.004042CC
004D1E9F  |. 33C0           XOR EAX,EAX
004D1EA1  |. 55             PUSH EBP
004D1EA2  |. 68 FB1E4D00    PUSH UNPACKED.004D1EFB
004D1EA7  |. 64:FF30        PUSH DWORD PTR FS:[EAX]
004D1EAA  |. 64:8920        MOV DWORD PTR FS:[EAX],ESP
004D1EAD  |. 8D85 FCFEFFFF  LEA EAX,DWORD PTR SS:[EBP-104]
004D1EB3  |. 50             PUSH EAX
004D1EB4  |. 8B4D 08        MOV ECX,DWORD PTR SS:[EBP+8]
004D1EB7  |. 8BD7           MOV EDX,EDI
004D1EB9  |. 8BC3           MOV EAX,EBX
004D1EBB  |. E8 10FEFFFF    CALL UNPACKED.004D1CD0          ←------------------这里是计算注册码的call,不过我可看不懂:)
004D1EC0  |. 8D95 FCFEFFFF  LEA EDX,DWORD PTR SS:[EBP-104]  ←------------------走到这里可以看到计算后的注册码
004D1EC6  |. 8D45 FC        LEA EAX,DWORD PTR SS:[EBP-4]
004D1EC9  |. E8 EE21F3FF    CALL UNPACKED.004040BC
004D1ECE  |. 8B45 FC        MOV EAX,DWORD PTR SS:[EBP-4]
004D1ED1  |. 8BD6           MOV EDX,ESI
004D1ED3  |. E8 5023F3FF    CALL UNPACKED.00404228           ←------------------在这里进行比较,想暴力破解的话就进去修改
004D1ED8  |. 0F94C0         SETE AL
004D1EDB  |. 8BD8           MOV EBX,EAX
004D1EDD  |. 33C0           XOR EAX,EAX
004D1EDF  |. 5A             POP EDX
004D1EE0  |. 59             POP ECX
004D1EE1  |. 59             POP ECX
004D1EE2  |. 64:8910        MOV DWORD PTR FS:[EAX],EDX
004D1EE5  |. 68 021F4D00    PUSH UNPACKED.004D1F02
004D1EEA  |> 8D45 FC        LEA EAX,DWORD PTR SS:[EBP-4]
004D1EED  |. E8 A61FF3FF    CALL UNPACKED.00403E98
004D1EF2  |. 8D45 08        LEA EAX,DWORD PTR SS:[EBP+8]
004D1EF5  |. E8 9E1FF3FF    CALL UNPACKED.00403E98
004D1EFA  \. C3             RETN


进入CALL UNPACKED.00404228后,我们来到:

00404228  /$ 53             PUSH EBX
00404229  |. 56             PUSH ESI
0040422A  |. 57             PUSH EDI
0040422B  |. 89C6           MOV ESI,EAX
0040422D  |. 89D7           MOV EDI,EDX
0040422F  |. 39D0           CMP EAX,EDX               ←------------------在这里进行比较
00404231  |. 0F84 8F000000  JE UNPACKED.004042C6      ←------------------修改这里程序会出错,所以要暴力破解还得再找恰当的地方      
至此破解完成,由于俺是初学者,所以不能写出注册机(根本就看不懂算法,内存注册机倒是可以的,不过俺就不写了,有机会再补上吧)
当然,俺也是很谦虚的,希望各位前辈高手能够给予解答:对于该软件,如何设置断点才能快速到达比较核心呢?

另外,本人正学习破解具有反跟踪功能的程序,可惜俺不会脱壳,请高手给予帮助,要脱壳的程序正好是该软件的黄金搭档unEbookEdit,写unEbookEdit的人据说可是个编程高手,他写的其它软件也很出名,不过都具有自校验和反跟踪功能,所以希望能够得到前辈们的帮助,或者谁写一篇unEbookEdit的破文也好教俺学学嘛,就写到这里吧,也不知道说明白没有,呵呵。


                                                                                     ol
                                                                                 2003/02/12