1. Trang chủ
  2. » Công Nghệ Thông Tin

Cracker Handbook 1.0 part 114 pot

8 104 1

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 8
Dung lượng 85,15 KB

Nội dung

Posted by: moonbaby Dec 11 2003, 02:17 PM Homepage : http://crackme.de CrackMe : ceycey.zip ( ceycey.exe ) Coder : Ceycey ( Borland Delphi 4.0 - 5.0 ) Type : Serial Packed : UPX 0.89.6 - 1.02 / 1.05 - 1.24 (Delphi) stub -> Markus & Laszlo Crack Tool : OllyDbg 1.09d Unpack Tool : UPXUnpack Request : Correct Serial Rule : N/A Note : N/A >>>> Set BreakPoint tại đây: 00457615 |. 8B83 D4020000 MOV EAX,DWORD PTR DS:[EBX+2D4] >>>> Đây là quá trình gọi chuỗi và so sánh hai chuỗi. 00457615 |. 8B83 D4020000 MOV EAX,DWORD PTR DS:[EBX+2D4] 0045761B |. E8 E8C9FCFF CALL Un-ceyce.00424008 00457620 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] 00457623 |. BA 6C764500 MOV EDX,Un-ceyce.0045766C ; ASCII "ULTRADMA " 00457628 |. E8 5FC6FAFF CALL Un-ceyce.00403C8C 0045762D |. 75 13 JNZ SHORT Un-ceyce.00457642 < === Patch ở đây nếu muốn >> Chuỗi nhập vào được chứa ở đây 00457620 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] >> Chuỗi UL… được chứa ở đây. 00457623 |. BA 6C764500 MOV EDX,Un-ceyce.0045766C ; ASCII "ULTRADMA " >> Ở đây ta đặt ra một câu hỏi là chuỗi này là chuỗi gì, chỉ có hai trường hợp là chuỗi Magic hoặc chuỗi S thực. >>>> Quá trình này gọi một chuỗi lệnh xử lý và so sánh, vậy CALL ở đây bao gồm quá trình xử lý và so sánh, cuối cùng cho ra kết quả để thực hiện lệnh nhảy. 00457628 |. E8 5FC6FAFF CALL Un-ceyce.00403C8C 0045762D |. 75 13 JNZ SHORT Un-ceyce.00457642 >> Trace thẳng vào trong lệnh gọi này, ta thấy câu lệnh sau 00403C93 39D0 CMP EAX,EDX ; Un-ceyce.0045766C >> Trong khi đó, như ở trên ta đã nói, vậy ta kết luận ngay được chuỗi chứa trong EDX là chuỗi S thực. Ở đây, các dấu (.) nằm sau chữ ULTRADMA là dấu chấm, theo hệ hex là 2E. >>>> Vậy Serial : ULTRADMA Posted by: moonbaby Dec 11 2003, 02:19 PM Homepage : http://crackme.de CrackMe : cosh2.zip (crackme2.exe ) Coder : CoSH (Microsoft Visual C++ 6.0) Type : Serial Packed : N / A Crack Tool : OllyDbg 1.09d Unpack Tool : N / A Request : Correct Serial Rule : N/A Note : N/A >>>> Chương trình này rất lạ, nếu cứ đi tìm các điểm đặt BreakPoint mà không lưu ý đến đoạn mã nằm ngay bên thông báo sai có thể làm mất rất nhiều thời gian: >> Quá trình kiểm tra chuỗi U nhập vào, nếu chuỗi dưới 5 ký tự sẽ nhảy đến thông báo sai 004014D6 . E8 6F030000 CALL <JMP.&MFC42.#3876> 004014DB . 8B1D FC214000 MOV EBX,DWORD PTR DS:[<&USER32.PostQuitM>; USER32.PostQuitMessage 004014E1 . 83F8 05 CMP EAX,5 004014E4 . /7E 50 JLE SHORT crackme2.00401536 >> Quá trình kiểm tra chuỗi S nhập vào, nếu chuỗi dưới 5 ký tự sẽ nhảy đến thông báo sai 004014EB . E8 5A030000 CALL <JMP.&MFC42.#3876> 004014F0 . 83F8 05 CMP EAX,5 004014E4 . /7E 50 JLE SHORT crackme2.00401536 >>>> Quan sát đọan mã nằm ngay trên thông báo sai. Ta thấy ở đây bao gồm một lọat quá trình so sánh và sau đó là nhảy đến thông báo sai, nên đây chính là chuỗi S thực được lưu trong chương trình dưới dạng từng ký tự tách rời. 00401511 . 8B07 MOV EAX,DWORD PTR DS:[EDI] 00401513 . 8038 36 CMP BYTE PTR DS:[EAX],36 < ==== ASCII “6” 00401516 . 75 1E JNZ SHORT crackme2.00401536 00401518 . 8078 01 32 CMP BYTE PTR DS:[EAX+1],32 < ==== ASCII “2” 0040151C . 75 18 JNZ SHORT crackme2.00401536 0040151E . 8078 02 38 CMP BYTE PTR DS:[EAX+2],38 < ==== ASCII “8” 00401522 . 75 12 JNZ SHORT crackme2.00401536 00401524 . 8078 03 37 CMP BYTE PTR DS:[EAX+3],37 < ==== ASCII “7” 00401528 . 75 0C JNZ SHORT crackme2.00401536 0040152A . 8078 04 2D CMP BYTE PTR DS:[EAX+4],2D < ==== ASCII “-” 0040152E . 75 06 JNZ SHORT crackme2.00401536 00401530 . 8078 05 41 CMP BYTE PTR DS:[EAX+5],41 < ==== ASCII “A” 00401534 . 74 17 JE SHORT crackme2.0040154D Chương trình này không quan tâm đến U nhập là gì mà chỉ cần tìm đúng S mà thôi. ( U phải có từ 5 ký tự ) >>>> Vậy Serial : 6287-A Posted by: moonbaby Dec 11 2003 , 02:21 PM Homepage : http://crackme.de CrackMe : cosh3.zip (crackme3.exe ) Coder : CoSH (Microsoft Visual C++ 6.0) Type : Serial Packed : N / A Crack Tool : OllyDbg 1.09d Unpack Tool : N / A Request : Correct Serial Rule : N/A Note : N/A >>>> Set BreakPoint tại đây: 00401570 |. 33C0 XOR EAX,EAX >>>> Đây là quá trình mã hoá chuỗi đầu tiên, mã hoá chuỗi U nhập vào. 00401576 |. B9 01000000 MOV ECX,1 0040157B |. 33D2 XOR EDX,EDX 0040157D |. 8B45 E4 MOV EAX,DWORD PTR SS:[EBP-1C] 00401580 |> 8A18 /MOV BL,BYTE PTR DS:[EAX] 00401582 |. 32D9 |XOR BL,CL 00401584 |. 8818 |MOV BYTE PTR DS:[EAX],BL 00401586 |. 41 |INC ECX 00401587 |. 40 |INC EAX 00401588 |. 8038 00 |CMP BYTE PTR DS:[EAX],0 0040158B |.^ 75 F3 \JNZ SHORT crackme3.00401580 Gán cho ECX giá trị 1, đây là biến rất quan trọng trong quá trình xử lý chuỗi. 00401576 |. B9 01000000 MOV ECX,1 Đưa giá trị của chuỗi U nhập vào EAX 0040157D |. 8B45 E4 MOV EAX,DWORD PTR SS:[EBP-1C] Đưa từng ký tự của U được chứa trong EAX vào BL. Ở đây hơi đặc biệt tí, BL chính là giá trị thấp của EBX ( xem EBX chia làm hai giá trị cao BH và giá trị thấp BL ), nhưng có thể nói nôm na là đưa từng ký tự của chuỗi U ở EAX vào EBX để tiến hành mã hoá. 00401580 |> 8A18 /MOV BL,BYTE PTR DS:[EAX] Tiến hành phép toán EBX xor ECX ( CL là giá trí cao của ECX, ở đây ta coi là ECX ). 00401582 |. 32D9 |XOR BL,CL Đưa giá trị vào lưu ở địa chỉ của EAX tức là thay thế ký tự đầu tiên của U bằng một ký tự mới mã hoá. 00401584 |. 8818 |MOV BYTE PTR DS:[EAX],BL Tăng ECX lên 1 đơn vị, có nghĩa ECX = 2h . 00401586 |. 41 |INC ECX Chuyển đến ký tự thứ hai. 00401587 |. 40 |INC EAX Kiểm tra xem đã hết chuỗi chưa, nếu chưa thì tiếp tục, còn không thì qua giai đoạn khác. 00401588 |. 8038 00 |CMP BYTE PTR DS:[EAX],0 0040158B |.^ 75 F3 \JNZ SHORT crackme3.00401580 Quá trình này cứ lặp cho đến hết chuỗi. Ở đây ta chú ý ba điểm : 1- Giá trị của từng ký tự của U thay đổi . 2- Giá trị của biến đếm ECX tăng theo môic vòng lặp. Vì thế giá trị của nó với từng ký tự của chuỗi nhập sẽ thay đổi cho dù ký tự chuỗi nhập có giống nhau đi nữa. 3- Chuỗi mới được mã hoá sẽ thay thế hoàn toàn chuỗi U nhập và được lưu ở cùng một địa chỉ. Quá trình mã hoá thứ hai, mã hoá chuỗi S nhập vào. 00401593 |. B9 0A000000 MOV ECX,0A 00401598 |. 33D2 XOR EDX,EDX 0040159A |. 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10] 0040159D |> 8A18 /MOV BL,BYTE PTR DS:[EAX] 0040159F |. 32D9 |XOR BL,CL 004015A1 |. 8818 |MOV BYTE PTR DS:[EAX],BL 004015A3 |. 41 |INC ECX 004015A4 |. 40 |INC EAX 004015A5 |. 8038 00 |CMP BYTE PTR DS:[EAX],0 004015A8 |.^ 75 F3 \JNZ SHORT crackme3.0040159D Ở đây biến ECX cũng lại là biến chính, nhưng ban đầu được gán giá trị là Ah = 10 00401593 |. B9 0A000000 MOV ECX,0A Quá trình ma hoá chuỗi ở đây hoàn toàn giống quá trình mã hoá chuỗi đầu tiên. Sau mỗi vòng lặp, giá trị của ECX lại tăng thêm một, quá trình xảy ra đến hết chuỗi S. Va gí trị chuỗi S mã hoá thay thế chuỗi S nhập tại cùng địa chỉ lưu. Quá trình so sánh hai chuỗi mã hoá. 004015AA |. 8B45 E4 MOV EAX,DWORD PTR SS:[EBP-1C] 004015AD |. 8B55 F0 MOV EDX,DWORD PTR SS:[EBP-10] 004015B0 |> 33C9 /XOR ECX,ECX 004015B2 |. 8A18 |MOV BL,BYTE PTR DS:[EAX] 004015B4 |. 8A0A |MOV CL,BYTE PTR DS:[EDX] 004015B6 |. 3AD9 |CMP BL,CL 004015B8 |. 75 09 |JNZ SHORT crackme3.004015C3 004015BA |. 40 |INC EAX 004015BB |. 42 |INC EDX 004015BC |. 8038 00 |CMP BYTE PTR DS:[EAX],0 004015BF |.^ 75 EF \JNZ SHORT crackme3.004015B0 Đưa chuỗi U mã hoá vào EAX. 004015AA |. 8B45 E4 MOV EAX,DWORD PTR SS:[EBP-1C] Đưa chuỗi S mã hoá vào EDX. 004015AD |. 8B55 F0 MOV EDX,DWORD PTR SS:[EBP-10] Dọn sạch trước khi đưa từng ký tự vào so sánh 004015B0 |> 33C9 /XOR ECX,ECX Đưa từng ký tự của U mã hoá vào EBX và S mã hoá vàp ECX. 004015B2 |. 8A18 |MOV BL,BYTE PTR DS:[EAX] 004015B4 |. 8A0A |MOV CL,BYTE PTR DS:[EDX] So sánh hai ký tự với nhau, nếu không bằng là nhảy thông báo sai ngay, không cần xét tiếp 004015B6 |. 3AD9 |CMP BL,CL 004015B8 |. 75 09 |JNZ SHORT crackme3.004015C3 Nếu bằng thì chuyển sáng ký tự kế tiếp, và tiến hành cho đến hết chuỗi. 004015BA |. 40 |INC EAX 004015BB |. 42 |INC EDX 004015BC |. 8038 00 |CMP BYTE PTR DS:[EAX],0 004015BF |.^ 75 EF \JNZ SHORT crackme3.004015B0 Vậy để tính được giá trị đúng của S tương ứng vơi U nhập vào thì ta làm như sau : 1- Mã hoá chuỗi U theo quá trình mã hoá chuỗi U nhập vào 2- Lấy chuỗi U mã hoá, mã hoá theo quá trình mã hoá chuỗi S nhập vào. >>>> Vậy User : Moonbaby Serial : Ff`gihu` . nhập vào. 00 4 01 5 93 |. B9 0A 000 000 MOV ECX,0A 00 4 01 5 98 |. 33D2 XOR EDX,EDX 00 4 01 5 9A |. 8B45 F0 MOV EAX,DWORD PTR SS:[EBP - 10 ] 00 4 01 5 9D |> 8A18 /MOV BL,BYTE PTR DS:[EAX] 00 4 01 5 9F |. 32D9. BL,CL 00 4 01 5 A1 |. 8 818 |MOV BYTE PTR DS:[EAX],BL 00 4 01 5 A3 |. 41 |INC ECX 00 4 01 5 A4 |. 40 |INC EAX 00 4 01 5 A5 |. 803 8 00 |CMP BYTE PTR DS:[EAX] ,0 00 4 01 5 A8 |.^ 75 F3 JNZ SHORT crackme3 .00 4 01 5 9D. tách rời. 00 4 01 5 11 . 8B07 MOV EAX,DWORD PTR DS:[EDI] 00 4 01 5 13 . 803 8 36 CMP BYTE PTR DS:[EAX],36 < ==== ASCII “6” 00 4 01 5 16 . 75 1E JNZ SHORT crackme2 .00 4 01 5 36 00 4 01 5 18 . 807 8 01 32 CMP BYTE

Ngày đăng: 03/07/2014, 17:20

TỪ KHÓA LIÊN QUAN