C-Free4.1專(zhuān)業(yè)版注冊碼破解 收藏
運行C-Free主程序時(shí)點(diǎn)擊“關(guān)于”菜單會(huì )看到未注冊字樣,如果運行超過(guò)試用期會(huì )在啟動(dòng)時(shí)彈出要求注冊的對話(huà)框,禁止調試等功能。
選擇“注冊”菜單,輸入用戶(hù)名、郵箱、注冊碼(錯誤的),點(diǎn)擊確定后程序要求重新啟動(dòng)以驗證。
當我們重新啟動(dòng),發(fā)現剛才輸入的用戶(hù)名和郵箱自動(dòng)載入,說(shuō)明剛才存入了注冊表,注冊碼也存入注冊表,而注冊碼因為是錯誤的,所以現在要求重新輸入。
打開(kāi)注冊表,在HKEY_CURRENT_USER\Software\C-Free\4下找到以下項:
Email
RegistryCode
UserName
說(shuō)明程序啟動(dòng)時(shí)會(huì )讀寫(xiě)注冊表項值,用OLLYICE載入程序,下API斷點(diǎn),函數名稱(chēng)為:RegQueryValueExA
運行,在此005218E4處中斷:
005218E4 /$ 55 PUSH EBP
005218E5 |. 8BEC MOV EBP,ESP
005218E7 |. 83C4 F0 ADD ESP,-10
005218EA |. 53 PUSH EBX
005218EB |. 56 PUSH ESI
005218EC |. 57 PUSH EDI
005218ED |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8];輸入的注冊碼
005218F0 |. 8B4D 0C MOV ECX,DWORD PTR SS:[EBP+C]
005218F3 |. 8B55 14 MOV EDX,DWORD PTR SS:[EBP+14]
005218F6 |. 807C08 FF 00 CMP BYTE PTR DS:[EAX+ECX-1],0;注冊碼長(cháng)度
005218FB |. 75 03 JNZ SHORT CppIDE.00521900
005218FD |. FF4D 0C DEC DWORD PTR SS:[EBP+C]
00521900 837D 10 00 CMP DWORD PTR SS:[EBP+10],0
00521904 75 4C JNZ SHORT CppIDE.00521952
00521906 837D 0C 03 CMP DWORD PTR SS:[EBP+C],3
0052190A |. 7D 07 JGE SHORT CppIDE.00521913
0052190C |. 33C0 XOR EAX,EAX
0052190E |. E9 19010000 JMP CppIDE.00521A2C
00521913 |> 33D2 XOR EDX,EDX
00521915 |. 8B4D 0C MOV ECX,DWORD PTR SS:[EBP+C]
00521918 |. 0FBE4C08 FE MOVSX ECX,BYTE PTR DS:[EAX+ECX-2]
0052191D |. 83F9 3D CMP ECX,3D
00521920 |. 75 07 JNZ SHORT CppIDE.00521929
00521922 |. BA 02000000 MOV EDX,2
00521927 |. EB 12 JMP SHORT CppIDE.0052193B
00521929 |> 8B4D 0C MOV ECX,DWORD PTR SS:[EBP+C]
0052192C |. 0FBE4408 FF MOVSX EAX,BYTE PTR DS:[EAX+ECX-1]
00521931 |. 83F8 3D CMP EAX,3D
00521934 |. 75 05 JNZ SHORT CppIDE.0052193B
00521936 |. BA 01000000 MOV EDX,1
0052193B |> 8B45 0C MOV EAX,DWORD PTR SS:[EBP+C]
0052193E |. 85C0 TEST EAX,EAX
00521940 |. 79 03 JNS SHORT CppIDE.00521945
00521942 |. 83C0 03 ADD EAX,3
00521945 |> C1F8 02 SAR EAX,2
00521948 |. 8D0440 LEA EAX,DWORD PTR DS:[EAX+EAX*2]
0052194B |. 2BC2 SUB EAX,EDX
0052194D |. E9 DA000000 JMP CppIDE.00521A2C
00521952 |> 85D2 TEST EDX,EDX
00521954 |. 75 09 JNZ SHORT CppIDE.0052195F
00521956 |. C745 FC 03456>MOV DWORD PTR SS:[EBP-4],CppIDE.006E4503
0052195D |. EB 03 JMP SHORT CppIDE.00521962
0052195F |> 8955 FC MOV DWORD PTR SS:[EBP-4],EDX
00521962 |> 33D2 XOR EDX,EDX
00521964 |. 8955 F4 MOV DWORD PTR SS:[EBP-C],EDX
00521967 |. 8BD0 MOV EDX,EAX
00521969 |. 8B45 10 MOV EAX,DWORD PTR SS:[EBP+10]
0052196C |. 8945 F0 MOV DWORD PTR SS:[EBP-10],EAX;保存注冊碼轉換后的值的位置
0052196F |. E9 A2000000 JMP CppIDE.00521A16
00521974 |> 3C 7B /CMP AL,7B
00521976 |. 0F83 AA000000 |JNB CppIDE.00521A26
0052197C |. C745 F8 03000>|MOV DWORD PTR SS:[EBP-8],3
00521983 |. 33DB |XOR EBX,EBX
00521985 |. 33C0 |XOR EAX,EAX
00521987 |> C1E3 06 |/SHL EBX,6
0052198A |. 8A0A ||MOV CL,BYTE PTR DS:[EDX]
0052198C |. 80F9 3D ||CMP CL,3D
0052198F |. 75 15 ||JNZ SHORT CppIDE.005219A6
00521991 |. 81E1 FF000000 ||AND ECX,0FF
00521997 |. 0FBE89 88446E>||MOVSX ECX,BYTE PTR DS:[ECX+6E4488]
0052199E |. 0BD9 ||OR EBX,ECX
005219A0 |. 48 ||DEC EAX
005219A1 |. 8945 F8 ||MOV DWORD PTR SS:[EBP-8],EAX
005219A4 |. EB 22 ||JMP SHORT CppIDE.005219C8
005219A6 |> 837D 0C 00 ||CMP DWORD PTR SS:[EBP+C],0
005219AA |. 7E 16 ||JLE SHORT CppIDE.005219C2
005219AC |. 803A 7B ||CMP BYTE PTR DS:[EDX],7B
005219AF |. 73 11 ||JNB SHORT CppIDE.005219C2
005219B1 |. 33C9 ||XOR ECX,ECX
005219B3 |. 8A0A ||MOV CL,BYTE PTR DS:[EDX]
005219B5 |. 0FBE89 88446E>||MOVSX ECX,BYTE PTR DS:[ECX+6E4488];6E4488存有注冊碼字符對應的替換表,從表中可知輸入的密碼的許可字符是哪些
005219BC |. 0BD9 ||OR EBX,ECX ;將替換后的值異或運算
005219BE |. 42 ||INC EDX
005219BF |. FF4D 0C ||DEC DWORD PTR SS:[EBP+C]
005219C2 |> 40 ||INC EAX
005219C3 |. 83F8 04 ||CMP EAX,4 ;注冊碼長(cháng)度必須為4的倍數,這里是4個(gè)一組進(jìn)行先替換再異或運算
005219C6 |.^ 7C BF |\JL SHORT CppIDE.00521987
005219C8 |> 837D F8 01 |CMP DWORD PTR SS:[EBP-8],1
005219CC |. 75 03 |JNZ SHORT CppIDE.005219D1
005219CE |. C1E3 06 |SHL EBX,6
005219D1 |> 81E3 FFFFFF00 |AND EBX,0FFFFFF
005219D7 |. 33C0 |XOR EAX,EAX
005219D9 |. 3B45 F8 |CMP EAX,DWORD PTR SS:[EBP-8]
005219DC |. 7D 38 |JGE SHORT CppIDE.00521A16
005219DE |> B9 02000000 |/MOV ECX,2
005219E3 |. 8BF3 ||MOV ESI,EBX ;上面運算得到的異或結果
005219E5 |. 2BC8 ||SUB ECX,EAX
005219E7 |. 8B7D F4 ||MOV EDI,DWORD PTR SS:[EBP-C]
005219EA |. C1E1 03 ||SHL ECX,3
005219ED |. D3FE ||SAR ESI,CL
005219EF |. 8BCE ||MOV ECX,ESI
005219F1 |. 8B75 FC ||MOV ESI,DWORD PTR SS:[EBP-4];ESI保存異或表,值為B8 BB C4 EA 用于循環(huán)的異或運算
005219F4 |. 80E1 FF ||AND CL,0FF
005219F7 |. 320C3E ||XOR CL,BYTE PTR DS:[ESI+EDI] ;和異或表的值進(jìn)行異或運算
005219FA |. 8B75 F0 ||MOV ESI,DWORD PTR SS:[EBP-10] ;保存異或結果
005219FD |. 880E ||MOV BYTE PTR DS:[ESI],CL
005219FF |. FF45 F4 ||INC DWORD PTR SS:[EBP-C]
00521A02 |. FF45 F0 ||INC DWORD PTR SS:[EBP-10]
00521A05 |. 837D F4 04 ||CMP DWORD PTR SS:[EBP-C],4
00521A09 |. 75 05 ||JNZ SHORT CppIDE.00521A10
00521A0B |. 33C9 ||XOR ECX,ECX
00521A0D |. 894D F4 ||MOV DWORD PTR SS:[EBP-C],ECX
00521A10 |> 40 ||INC EAX
00521A11 |. 3B45 F8 ||CMP EAX,DWORD PTR SS:[EBP-8] ;每輪運算3次
00521A14 |.^ 7C C8 |\JL SHORT CppIDE.005219DE
00521A16 |> 8A02 MOV AL,BYTE PTR DS:[EDX]
00521A18 |. 3C 3D |CMP AL,3D
00521A1A |. 74 0A |JE SHORT CppIDE.00521A26
00521A1C |. 837D 0C 00 |CMP DWORD PTR SS:[EBP+C],0 ;注冊碼轉換后的長(cháng)度是否>0,注冊碼轉換后的長(cháng)度計算公式:注冊碼長(cháng)度/4*3
00521A20 |.^ 0F8F 4EFFFFFF \JG CppIDE.00521974
00521A26 |> 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
00521A29 |. 2B45 10 SUB EAX,DWORD PTR SS:[EBP+10]
00521A2C |> 5F POP EDI
00521A2D |. 5E POP ESI
00521A2E |. 5B POP EBX
00521A2F |. 8BE5 MOV ESP,EBP
00521A31 |. 5D POP EBP
00521A32 \. C3 RETN
這是注冊碼驗證的核心,共中斷兩次,第二次中斷是重點(diǎn),不可走跑。
一直運行到00521A32,單步運行到
0042F10E . E8 69962100 CALL CppIDE.0064877C ;讀入剛才輸入的用戶(hù)名和郵箱
0042F113 . FF85 E8F9FFFF INC DWORD PTR SS:[EBP-618]
0042F119 . 8B10 MOV EDX,DWORD PTR DS:[EAX]
0042F11B . 8B85 ACFBFFFF MOV EAX,DWORD PTR SS:[EBP-454]
0042F121 . E8 F2CC1700 CALL CppIDE.005ABE18 ;上面驗證算法的結果和郵箱用戶(hù)名連接的字串進(jìn)行長(cháng)度和內容的比較
0042F126 . 85C0 TEST EAX,EAX ;測試是否成功,即值是否為0,如果不成功,程序每次啟動(dòng)時(shí)要求注冊
如何確定輸入的注冊碼字符是否有效呢?可以實(shí)時(shí)觀(guān)察此處的結果:
005219FA |. 8B75 F0 ||MOV ESI,DWORD PTR SS:[EBP-10] ;保存異或結果
用d ESI 觀(guān)察,結果一定要求是上面替換表中允許的字符,否則在啟動(dòng)驗證時(shí)字串長(cháng)度不對,如果不是可顯字符,調整注冊表項RegistryCode對應字符的值。
全部通過(guò)后,可以用這個(gè)轉換結果字串替換注冊表項UserName 和 Email
UserName可取為:UNi^cfp7jp