重起验证,搞不下去了
一个软件需要重起验证.壳已经脱了.Borland Delphi 6.0 - 7.0写的.用DEDE找到注册按钮的RAV在OD中下断,断在这里,代码如下:004C3498/.55 push ebp
004C3499|.8BEC mov ebp, esp
004C349B|.6A 00 push 0
004C349D|.6A 00 push 0
004C349F|.53 push ebx
004C34A0|.56 push esi
004C34A1|.8BF0 mov esi, eax
004C34A3|.33C0 xor eax, eax
004C34A5|.55 push ebp
004C34A6|.68 59354C00 push 004C3559
004C34AB|.64:FF30 push dword ptr fs:
004C34AE|.64:8920 mov dword ptr fs:, esp
004C34B1|.B2 01 mov dl, 1
004C34B3|.A1 ECB54600 mov eax, dword ptr
004C34B8|.E8 2F82FAFF call 0046B6EC
004C34BD|.8BD8 mov ebx, eax
004C34BF|.BA 01000080 mov edx, 80000001
004C34C4|.8BC3 mov eax, ebx
004C34C6|.E8 C182FAFF call 0046B78C
004C34CB|.B1 01 mov cl, 1
004C34CD|.BA 70354C00 mov edx, 004C3570 ;ASCII "Software\FileRen"
004C34D2|.8BC3 mov eax, ebx
004C34D4|.E8 1783FAFF call 0046B7F0
004C34D9|.8D55 FC lea edx, dword ptr
004C34DC|.8B86 38030000 mov eax, dword ptr
004C34E2|.E8 1921F8FF call 00445600
004C34E7|.8B4D FC mov ecx, dword ptr ;用户名长度送ECX
004C34EA|.BA 8C354C00 mov edx, 004C358C ;ASCII "RegUser"
004C34EF|.8BC3 mov eax, ebx
004C34F1|.E8 9684FAFF call 0046B98C
004C34F6|.8D55 F8 lea edx, dword ptr
004C34F9|.8B86 3C030000 mov eax, dword ptr
004C34FF|.E8 FC20F8FF call 00445600
004C3504|.8B4D F8 mov ecx, dword ptr ;假码长度送ECX
004C3507|.BA 9C354C00 mov edx, 004C359C ;ASCII "RegNo"
004C350C|.8BC3 mov eax, ebx
004C350E|.E8 7984FAFF call 0046B98C
004C3513|.8BC3 mov eax, ebx
004C3515|.E8 C200F4FF call 004035DC
004C351A|.6A 40 push 40
004C351C|.B9 A4354C00 mov ecx, 004C35A4
004C3521|.BA AC354C00 mov edx, 004C35AC ;如果004C359C是RegNo,那么这里难道是:RegYes?(纯属个人猜测)
004C3526|.A1 E8964C00 mov eax, dword ptr
004C352B|.8B00 mov eax, dword ptr
004C352D|.E8 462EFAFF call 00466378 ;重起验证(运行到这里提示需要重起程序验证)
004C3532|.A1 E8964C00 mov eax, dword ptr
004C3537|.8B00 mov eax, dword ptr
004C3539|.E8 962DFAFF call 004662D4
004C353E|.33C0 xor eax, eax
004C3540|.5A pop edx
004C3541|.59 pop ecx
004C3542|.59 pop ecx
004C3543|.64:8910 mov dword ptr fs:, edx
004C3546|.68 60354C00 push 004C3560
004C354B|>8D45 F8 lea eax, dword ptr
004C354E|.BA 02000000 mov edx, 2
004C3553|.E8 340EF4FF call 0040438C
004C3558\.C3 retn
不知道那个重起验证的CALL分析的对不对?如果对的话,F7跟入call 00466378 代码如下:
00466378/$55 push ebp
00466379|.8BEC mov ebp, esp
0046637B|.83C4 AC add esp, -54
0046637E|.53 push ebx
0046637F|.56 push esi
00466380|.57 push edi
00466381|.8BF9 mov edi, ecx
00466383|.8BF2 mov esi, edx
00466385|.8945 FC mov dword ptr , eax
00466388|.8B5D 08 mov ebx, dword ptr
0046638B|.E8 100CFAFF call <jmp.&user32.GetActiveWindow> ; [GetActiveWindow
00466390|.8945 F4 mov dword ptr , eax
00466393|.6A 02 push 2
00466395|.8B45 F4 mov eax, dword ptr
00466398|.50 push eax
00466399|.A1 18964C00 mov eax, dword ptr
0046639E|.8B00 mov eax, dword ptr
004663A0|.FFD0 call eax
004663A2|.8945 EC mov dword ptr , eax
004663A5|.6A 02 push 2
004663A7|.8B45 FC mov eax, dword ptr
004663AA|.8B40 30 mov eax, dword ptr
004663AD|.50 push eax
004663AE|.A1 18964C00 mov eax, dword ptr
004663B3|.8B00 mov eax, dword ptr
004663B5|.FFD0 call eax
004663B7|.8945 E8 mov dword ptr , eax
004663BA|.8B45 EC mov eax, dword ptr
004663BD|.3B45 E8 cmp eax, dword ptr
004663C0 74 60 je short 00466422
004663C2|.C745 BC 28000>mov dword ptr , 28
004663C9|.8D45 BC lea eax, dword ptr
004663CC|.50 push eax
004663CD|.8B45 EC mov eax, dword ptr
004663D0|.50 push eax
004663D1|.A1 6C954C00 mov eax, dword ptr
004663D6|.8B00 mov eax, dword ptr
004663D8|.FFD0 call eax
004663DA|.8D45 AC lea eax, dword ptr
004663DD|.50 push eax ; /pRect
004663DE|.8B45 FC mov eax, dword ptr ; |
004663E1|.8B40 30 mov eax, dword ptr ; |
004663E4|.50 push eax ; |hWnd
004663E5|.E8 3E0DFAFF call <jmp.&user32.GetWindowRect> ; \GetWindowRect
004663EA|.6A 1D push 1D
004663EC|.6A 00 push 0
004663EE|.6A 00 push 0
004663F0|.8B4D CC mov ecx, dword ptr
004663F3|.8B55 C4 mov edx, dword ptr
004663F6|.2BCA sub ecx, edx
004663F8|.D1F9 sar ecx, 1
004663FA|.79 03 jns short 004663FF
004663FC|.83D1 00 adc ecx, 0
004663FF|>03CA add ecx, edx
00466401|.51 push ecx
00466402|.8B55 C8 mov edx, dword ptr
00466405|.8B45 C0 mov eax, dword ptr
00466408|.2BD0 sub edx, eax
0046640A|.D1FA sar edx, 1
0046640C|.79 03 jns short 00466411
0046640E|.83D2 00 adc edx, 0
00466411|>03D0 add edx, eax ; |
00466413|.52 push edx ; |X
00466414|.6A 00 push 0 ; |InsertAfter = HWND_TOP
00466416|.8B45 FC mov eax, dword ptr ; |
00466419|.8B40 30 mov eax, dword ptr ; |
0046641C|.50 push eax ; |hWnd
0046641D|.E8 260FFAFF call <jmp.&user32.SetWindowPos> ; \SetWindowPos
00466422|>33C0 xor eax, eax
00466424|.E8 2B6AFFFF call 0045CE54
00466429|.8945 F0 mov dword ptr , eax
0046642C|.E8 3F69FFFF call 0045CD70
00466431|.8945 E4 mov dword ptr , eax
00466434|.8B45 FC mov eax, dword ptr
00466437|.E8 78EEFFFF call 004652B4
0046643C|.84C0 test al, al
0046643E|.74 06 je short 00466446
00466440|.81CB 00001000 or ebx, 100000
00466446|>33C9 xor ecx, ecx
00466448|.55 push ebp
00466449|.68 CD644600 push 004664CD
0046644E|.64:FF31 push dword ptr fs:
00466451|.64:8921 mov dword ptr fs:, esp
00466454|.53 push ebx ; /Style
00466455|.57 push edi ; |Title
00466456|.56 push esi ; |Text
00466457|.8B45 FC mov eax, dword ptr ; |
0046645A|.8B40 30 mov eax, dword ptr ; |
0046645D|.50 push eax ; |hOwner
0046645E|.E8 B50DFAFF call <jmp.&user32.MessageBoxA> ; \MessageBoxA
00466463|.8945 F8 mov dword ptr , eax
00466466|.33C0 xor eax, eax
00466468|.5A pop edx
00466469|.59 pop ecx
0046646A|.59 pop ecx
0046646B|.64:8910 mov dword ptr fs:, edx
0046646E|.68 D4644600 push 004664D4
00466473|>8B45 EC mov eax, dword ptr
00466476|.3B45 E8 cmp eax, dword ptr
00466479|.74 38 je short 004664B3
0046647B|.6A 1D push 1D
0046647D|.6A 00 push 0
0046647F|.6A 00 push 0
00466481|.8B4D B8 mov ecx, dword ptr
00466484|.8B55 B0 mov edx, dword ptr
00466487|.2BCA sub ecx, edx
00466489|.D1F9 sar ecx, 1
0046648B|.79 03 jns short 00466490
0046648D|.83D1 00 adc ecx, 0
00466490|>03CA add ecx, edx
00466492|.51 push ecx
00466493|.8B55 B4 mov edx, dword ptr
00466496|.8B45 AC mov eax, dword ptr
00466499|.2BD0 sub edx, eax
0046649B|.D1FA sar edx, 1
0046649D|.79 03 jns short 004664A2
0046649F|.83D2 00 adc edx, 0
004664A2|>03D0 add edx, eax ; |
004664A4|.52 push edx ; |X
004664A5|.6A 00 push 0 ; |InsertAfter = HWND_TOP
004664A7|.8B45 FC mov eax, dword ptr ; |
004664AA|.8B40 30 mov eax, dword ptr ; |
004664AD|.50 push eax ; |hWnd
004664AE|.E8 950EFAFF call <jmp.&user32.SetWindowPos> ; \SetWindowPos
004664B3|>8B45 F0 mov eax, dword ptr
004664B6|.E8 4D6AFFFF call 0045CF08
004664BB|.8B45 F4 mov eax, dword ptr
004664BE|.50 push eax ; /hWnd
004664BF|.E8 F40DFAFF call <jmp.&user32.SetActiveWindow> ; \SetActiveWindow
004664C4|.8B45 E4 mov eax, dword ptr
004664C7|.E8 AC68FFFF call 0045CD78
004664CC\.C3 retn
以上的代码就看不懂了.如何爆破?最好能把算法也详细的写一下.不胜感激 兄弟也许还没有搞清楚重启验证的流程:
你这个提示重启验证的CALL,实际只是保存信息,然后再在软件下次启动时读出信息进行验证。
用拦截注册表的函数看能不能断下来 楼上所言及是,对于重启验证,首先你要知道
1、输入假码后,注册码保存到什么地方去了
2、知道第一后,如果是保存在文里那么再次重载程序后,就拦载此文件 上面的代码仅将用户名、注册(假)码写入注册表而已,从字面看注册码保存在:
\Software\FileRen或者\Software\FileRen
RegUser 中写有用户名
RegNo中写有注册(假)码 004C3521|.BA AC354C00 mov edx, 004C35AC ;如果004C359C是RegNo,那么这里难道是:RegYes?(纯属个人猜测)
大哥,你是理解错了,regno是一个键值,存放的是注册码,No并不是“不是”的意思,而是number的缩写,是数字,密码的意思 呵呵,LS的兄弟们真是强啊.谢谢指教.还是给个完整的破文来看看~ 你把软件给发过来,不然没办法给你写破文 软件下载地址:http://member.skycn.com/soft/20550.html(文件批量更名大师 V2.95) RegUser 中写有用户名
RegNo中写有注册(假)码
在这里下断点 应该能找到吧 004C547A|.BA 7C554C00 MOV EDX,FileRen_.004C557C ;reguser
004C547F|.8BC3 MOV EAX,EBX
004C5481|.E8 8667FAFF CALL FileRen_.0046BC0C
004C5486|.8B55 FC MOV EDX,DWORD PTR SS:
004C5489|.B8 24B14C00 MOV EAX,FileRen_.004CB124
004C548E|.E8 75F0F3FF CALL FileRen_.00404508
004C5493|.8D4D F8 LEA ECX,DWORD PTR SS:
004C5496|.BA 8C554C00 MOV EDX,FileRen_.004C558C ;regno
004C549B|.8BC3 MOV EAX,EBX
004C549D|.E8 6A67FAFF CALL FileRen_.0046BC0C
004C54A2|.8B45 F8 MOV EAX,DWORD PTR SS:
004C54A5|.50 PUSH EAX
004C54A6|.8D4D F4 LEA ECX,DWORD PTR SS:
004C54A9|.BA 9C554C00 MOV EDX,FileRen_.004C559C ;filerenchina
004C54AE|.A1 24B14C00 MOV EAX,DWORD PTR DS:
004C54B3|.E8 58F1FFFF CALL FileRen_.004C4610
004C54B8|.8B55 F4 MOV EDX,DWORD PTR SS:
004C54BB|.58 POP EAX 这里出现真码和假码
004C54BC|.E8 EFF3F3FF CALL FileRen_.004048B0
这里是关键
[ 本帖最后由 千里之外 于 2007-7-6 15:49 编辑 ]