Posted by: moonbaby Dec 29 2003, 05:24 AM QUOTE Homepage : http://crackme.de CrackMe : haque-evd2.zip ( evdcm2.exe ) Coder : giveme5 ( Nothing Found ) 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 tại hai điểm sau : QUOTE 0040120E . E8 79000000 CALL <JMP.&USER32.GetDlgItemTextA> ; \GetDlgItemTextA 00401255 . E8 A6FDFFFF CALL evdcm2.00401000 >>>>>>>> Trace thẳng vào lệnh CALL trên, ta đến đoạn mã hoá và so sánh : QUOTE 00401000 $ 807D 00 01 CMP BYTE PTR SS:[EBP],1 00401004 . 74 22 JE SHORT evdcm2.00401028 >>> Trace tiếp. Ta nhảy đến đây : >>> Kiểm tra quá trình nhập chuỗi U, nếu không nhập thì chuyển đến thông báo sai 00401028 > \833D F7204000>CMP DWORD PTR DS:[4020F7],0 0040102F . 74 60 JE SHORT evdcm2.00401091 < === Nhảy đến NAG sai >>> ECX chứa chiều dài của chuỗi nhập. 00401031 . 8B0D F7204000 MOV ECX,DWORD PTR DS:[4020F7] >>> Đưa chuỗi U nhập vài ESI. 00401037 . BE 0E204000 MOV ESI,evdcm2.0040200E ; ASCII "Moonbaby" >>> Làm sạch EAX. 0040103C . 33C0 XOR EAX,EAX >>> Gán EDI = 0CCCCCCCh. ( giá trị mặc định ). 0040103E . BF 03214000 MOV EDI,evdcm2.00402103 >>> LODS : nạp từng phần tử của chuỗi U được lưu ở ESI vào AL ( EAX ) 00401043 > AC LODS BYTE PTR DS:[ESI] >>> Cộng vào EAX giá trị được lưu ở địa chỉ bằng giá trị hiện thời của EDI và lưu kết quả ở đây. 00401044 . 0107 ADD DWORD PTR DS:[EDI],EAX >>> Cộng thêm 2Fh cho giá trị được lưu ở đây. 00401046 . 8307 2F ADD DWORD PTR DS:[EDI],2F >>> Tiếp tục vòng lặp cho đến hết chuỗi. Giá trị cuỗi cùng của chuỗi lặp được lưu ở địa chỉ EDI ( 402103 ) 00401049 .^ E2 F8 LOOPD SHORT evdcm2.00401043 >>> Làm sạch EDX 0040104B . 33D2 XOR EDX,EDX >>> Đưa giá trị tính được lưu ở địa chỉ EDI vào EAX ( hay nói cách khác hiện giờ EAX chứa giá trị của vòng lặp trên ) 0040104D . 8B07 MOV EAX,DWORD PTR DS:[EDI] >>> Lưu lại giá trị này tại địa chỉ ==== > 0012FB18 0040104F . 50 PUSH EAX >>> EAX = EAX + 1A0Bh ( giá trị mặc định ) ==== > Kết quả được lưu ở EAX. 00401050 . 05 0B1A0000 ADD EAX,1A0B >>> Địa chỉ mới của EDI sẽ là 00402107 00401055 . BF 07214000 MOV EDI,evdcm2.00402107 >>> Đưa giá trị của EAX vào lưu ở địa chỉ này. 0040105A . 8907 MOV DWORD PTR DS:[EDI],EAX >>> Lấy giá trị của EAX trước khi cộng với 1A0Bh (ở địa chỉ 00401050) ra và chứa ở EAX. 0040105C . 58 POP EAX >>> Nhân EAX với EAX ==== > Kết quả được lưu ở EAX. 0040105D . F7E8 IMUL EAX >>> Địa chỉ mới của EDI để lưu giá trị của EAX mới là 0040210B 0040105F . BF 0B214000 MOV EDI,evdcm2.0040210B >>> Lưu giá trị của EAX vào địa chỉ này. 00401064 . 8907 MOV DWORD PTR DS:[EDI],EAX >>> Tăng giá trị tại địa chỉ này lên 1 ==== > EAX sẽ không tăng theo. 00401066 . FF07 INC DWORD PTR DS:[EDI] >>> Tăng giá trị tại địa chỉ này lên 1 ==== > EAX sẽ không tăng theo. 00401068 . FF07 INC DWORD PTR DS:[EDI] >>> Lấy giá trị của EAX sau khi cộng với 1A0Bh và được lưu ở 00402107 ra và lưu vào EAX. 0040106A . BF 07214000 MOV EDI,evdcm2.00402107 0040106F . 8B07 MOV EAX,DWORD PTR DS:[EDI] >>> Lấy giá trị của EAX được lưu ở 0040210B ( sau khi đã công thêm hai lần 1 dơn vị ) ra lưu ở ESI 00401071 . BE 0B214000 MOV ESI,evdcm2.0040210B >>> Xor hai giá trị này với nhau và kết quả được lưu ở địa chỉ của ESI. 00401076 . 3106 XOR DWORD PTR DS:[ESI],EAX >>> Trừ kết quả tại địa chỉ này cho 309h 00401078 . 812E 09030000 SUB DWORD PTR DS:[ESI],309 >>> Tăng giá trị này lên 1. và tiếp tục lưu ở ESI 0040107E . FF06 INC DWORD PTR DS:[ESI] >>> Đưa kết quả cuối cùng vào lưu ở EDX. 00401080 . 8B16 MOV EDX,DWORD PTR DS:[ESI] >>> Làm sạch EAX. 00401082 . 33C0 XOR EAX,EAX >>> ESI sẽ là chỗ chứa giá trị của chuỗi S nhập vào được chuyển sang hệ HEX. 00401084 . 8906 MOV DWORD PTR DS:[ESI],EAX 00401086 . 68 FF204000 PUSH evdcm2.004020FF 0040108B . 5E POP ESI < === Lấy S nhập ra lưu ở ESI >>> So sánh hai chuỗi với nhau. 0040108C . 3B16 CMP EDX,DWORD PTR DS:[ESI] >>> Nếu không bằng thì nhảy đến thông báo sai. 0040108E . 75 01 JNZ SHORT evdcm2.00401091 >>>>>>>> Kết luận : QUOTE 1- Thay vì đặt BreakPoint tại địa chỉ này 0040120E ta có thể đặt thẳng ngay ở đây 00401255 2- U phải nhập tối thiểu 1 ký tự. >>>>>>>> Vậy : QUOTE User : Moonbaby Serial : 1437201 User : HVA-CrAcKeRtEaM Serial : 3734897 QUOTE . > Kết quả được lưu ở EAX. 00 4 01 0 50 . 05 0B1A 000 0 ADD EAX,1A0B >>> Địa chỉ mới của EDI sẽ là 00 40 2 10 7 00 4 01 0 55 . BF 07 214 00 0 MOV EDI,evdcm2 .00 40 2 10 7 >>> Đưa giá trị của. 833D F7 204 000 >CMP DWORD PTR DS:[ 402 0F7] ,0 00 4 01 0 2F . 74 60 JE SHORT evdcm2 .00 4 01 0 91 < === Nhảy đến NAG sai >>> ECX chứa chiều dài của chuỗi nhập. 00 4 01 0 31 . 8B0D F7 204 000 MOV. 00 4 01 0 84 . 8 906 MOV DWORD PTR DS:[ESI],EAX 00 4 01 0 86 . 68 FF 204 000 PUSH evdcm2 .00 402 0FF 00 4 01 0 8B . 5E POP ESI < === Lấy S nhập ra lưu ở ESI >>> So sánh hai chuỗi với nhau. 00 4 01 0 8C