Posted by: moonbaby Jan 7 2004, 01:59 AM QUOTE Homepage : http://crackme.de CrackMe : bengaly-crkme.zip (Crackme1.exe) Coder : bengaly (MASM32 / TASM32) Type : Name / Serial Packed : N / A Crack Tool : OllyDbg 1.09d Unpack Tool : N / A Request : Correct Serial Rule : N/A Note : N/A >>>>>>>> Đặt BreakPoint : QUOTE Trace tiếp ta đến đây 004011E4 |. E8 62000000 CALL CRACKME1.0040124B ; \CRACKME1.0040124B Trace thẳng vào trong ta đến đây : 0040124B /$ 55 PUSH EBP Trace tiếp ta đến đoạn mã hoá chuỗi : Chuẩn bị EDX để lưu kết quả tính toán 00401254 |. 33D2 XOR EDX,EDX ESI lưu chuỗi U nhập vào 00401256 |. 8B75 08 MOV ESI,DWORD PTR SS:[EBP+8] ECX chứ chiều dài chuỗi U nhập 00401259 |. 8B4D 0C MOV ECX,DWORD PTR SS:[EBP+C] Bắt đầu quá trình tính chuỗi . ECX = ECX - 1 0040125C |. 49 DEC ECX Đưa từng ký tự của chuỗi U nhập được lưu ở ESI vào EAX 0040125D |> 0FBE06 MOVSX EAX,BYTE PTR DS:[ESI] EAX trừ cho giá trị được lưu ở địa chỉ 403000 ( mặc định là 02Ah ) < === Lưu kết quả ở EAX 00401260 |. 2B05 00304000 SUB EAX,DWORD PTR DS:[403000] Đưa ký tự kế của chuỗi U nhập vào EBX 00401266 |. 0FBE5E 01 MOVSX EBX,BYTE PTR DS:[ESI+1] EBX trừ đi giá trị đươc lưu ở địa chỉ 403004 ( mặc định là 041h ) < === Lưu kết quả ở EBX 0040126A |. 2B1D 04304000 SUB EBX,DWORD PTR DS:[403004] EAX = EAX * EBX 00401270 |. 0FAFC3 IMUL EAX,EBX EDX = EDX + EAX ( đầu tiên EDX = 00h ) 00401273 |. 03D0 ADD EDX,EAX Con trỏ chuyển đến ký tự kế tiếp của chuỗi U nhập vào. 00401275 |. 46 INC ESI Lập lại quá trình cho đến khi ECX = 00h 00401276 |.^ E2 E5 LOOPD SHORT CRACKME1.0040125D >>>>>>>> Vậy : QUOTE 1- Quá trình mã hoá chuỗi được viết gọn lại : C.0i – ký tự thứ i của chuỗi U nhập i = 0 EDX = {(C.00 – 02Ah ) * ( C.01 – 041h )} + {(C.01 – 02Ah ) * ( C.02 – 041h )} + 2- Giá trị của chuỗi được chuyển sang dạng số thập phân 3- Và đây chính là số Serial thực tương ứng với chuỗi U nhập. >>>>>>>> Vậy : QUOTE User : Moonbaby Serial : 16876 User : HVA-CrAcKeRtEaM Serial : 8804 Posted by: moonbaby Jan 7 2004, 02:03 AM QUOTE Homepage : http://crackme.de CrackMe : orion_crackme2.zip (CrackMe2.exe) Coder : Diablo (Borland C++) Type : Name / Serial Packed : N / A Crack Tool : OllyDbg 1.09d Unpack Tool : N / A Request : Correct Serial Rule : N/A Note : N/A >>>>>>>> Đặt BreakPoint : QUOTE 00401710 |. E8 43B40600 CALL CRACKME2.0046CB58 >>>>>>>> Qúa trình xử lý chuỗi : QUOTE >>>> Lấy giá trị được lưu ở địa chỉ SS:[EBP-54] nhân với 0B7h và lưu kết quả ở ECX . Giá trị ở SS:[EBP-54] chính là chiều dài của chuỗi U nhập. 0040171B |. 694D AC B7000>IMUL ECX,DWORD PTR SS:[EBP- 54],0B7 >>>> ECX = ECX + 07594h 00401722 |. 81C1 94750000 ADD ECX,7594 >>>> Trace tiếp ta đến : 00401756 |. E8 B9B30600 CALL CRACKME2.0046CB14 >>>> Trace thẳng vào trong ta đến : 0046CB14 /$ 55 PUSH EBP >>>>>>>> Trace tiếp ta đến : >>>> Giá trị của chỗi sau khi được tính toán 0046CB37 |. 53 PUSH EBX ; /Arg3 = 00007B4C >>>> Chuyển sang dạng số thập phân. Số này chính là số Serial của ta. 0046CB38 |. 68 632D4700 PUSH CRACKME2.00472D63 ; |Arg2 = 00472D63 ASCII "%i" >>>>>>>> Vậy : QUOTE 1- Quá trình mã hoá chuỗi rất đơn giản : ( Chiều dài chuỗi * 0B7h ) + 07594h 2- Giá trị này ở dạng thập phân chính là số Serial thực. 3- Cái khó của chương trình này là tìm ra đoạn mã này nằm ở đâu và đặt đúng BreakPoint. >>>>>>>> Vậy : QUOTE User : Moonbaby Serial : 31564 User : HVA-CrAcKeRtEaM Serial : 32845 . định là 02 Ah ) < === Lưu kết quả ở EAX 00 4 01 2 60 |. 2B05 00 304 000 SUB EAX,DWORD PTR DS:[ 403 000 ] Đưa ký tự kế của chuỗi U nhập vào EBX 00 4 01 2 66 |. 0FBE5E 01 MOVSX EBX,BYTE PTR DS:[ESI +1] EBX. trị đươc lưu ở địa chỉ 403 004 ( mặc định là 04 1h ) < === Lưu kết quả ở EBX 00 4 01 2 6A |. 2B1D 04 304 000 SUB EBX,DWORD PTR DS:[ 403 004 ] EAX = EAX * EBX 00 4 01 2 70 |. 0FAFC3 IMUL EAX,EBX EDX. nhập. 00 4 01 7 1B |. 694D AC B 700 0>IMUL ECX,DWORD PTR SS:[EBP- 54],0B7 >>>> ECX = ECX + 07 594h 00 4 01 7 22 |. 81C1 947 500 00 ADD ECX,7594 >>>> Trace tiếp ta đến : 00 4 01 7 56