>>> >>> Giai đoạn mã hoá thứ ba : QUOTE >>> Chuyển giá trị cuối cùng vào lưu ở EAX 00401159 |> \8BC2 MOV EAX,EDX >>> Làm sạch EDX để chuẩn bị cho quá trình kế tiếp. Chứa phần dư của phép chia 0040115B |. 33D2 XOR EDX,EDX >>> Gán ECX = 02225h 0040115D |. B9 25220000 MOV ECX,2225 >>> Làm sạch EBX cho quá trình xử lý chuỗi. 00401162 |. 33DB XOR EBX,EBX >>> Lấy EAX chia cho ECX. Phần nguyên của phép chia đươc lưu ở EAX, phần dư được lưu ở EDX 00401164 |. F7F1 DIV ECX >>> Làm sạch ESI, để chuẩn bị cho câu lệnh bên dưới. 00401166 |. 33F6 XOR ESI,ESI >>> Là một quá trình kiể tra giá trị của vòng lặp. EDI là chiều dài chuỗi nhập. 00401168 |. 3BFB CMP EDI,EBX 0040116A |. 7E 21 JLE SHORT keygenme.0040118D >>> Quá trình xử lý này cũng tương tự như hai giai đoạn trên. 0040116C |> 8A4435 94 /MOV AL,BYTE PTR SS:[EBP+ESI-6C] 00401170 |. 0FBEC8 |MOVSX ECX,AL 00401173 |. 03D1 |ADD EDX,ECX < ==== EDX = EDX + ECX 00401175 |. 3C 54 |CMP AL,54 < ==== so sánh với 054h 00401177 |. 7C 07 |JL SHORT keygenme.00401180 00401179 |. 0FAFCA |IMUL ECX,EDX < === ECX = ECX * EDX 0040117C |. 8BD1 |MOV EDX,ECX < === EDX = ECX 0040117E |. EB 08 |JMP SHORT keygenme.00401188 00401180 |> 0FAFCA |IMUL ECX,EDX < === ECX = ECX * EDX >>> Đây chẳng qua chỉ là một phép toán tổng hợp < == > EDX = ECX + ECX * 2 00401183 |. 8D1449 |LEA EDX,DWORD PTR DS:[ECX+ECX*2] 00401186 |. D1E2 |SHL EDX,1 < ==== EDX = EDX * 2 00401188 |> 46 |INC ESI 00401189 |. 3BF7 |CMP ESI,EDI 0040118B |.^ 7C DF \JL SHORT keygenme.0040116C >>> Giá trị cuối cùng của giai đoạn này được lưu ở EDX. >>> >>> Giai đoạn mã hoá thứ tư : QUOTE >>> Làm sạch ESI 0040118D |> \33F6 XOR ESI,ESI >>> EDI là chiều dài chuỗi nhập. 0040118F |. 3BFB CMP EDI,EBX 00401191 |. 7E 1F JLE SHORT keygenme.004011B2 >>> Quá trình xử lý này cũng tương tự như giai đoạn trên. 00401193 |> 8A4435 94 /MOV AL,BYTE PTR SS:[EBP+ESI-6C] 00401197 |. 0FBEC8 |MOVSX ECX,AL 0040119A |. 03D1 |ADD EDX,ECX < === EDX = EDX + ECX 0040119C |. 3C 4A |CMP AL,4A < === So sánh với 04Ah 0040119E |. 7C 07 |JL SHORT keygenme.004011A7 < === Nhảy nếu nhỏ hơn 004011A0 |. 0FAFCA |IMUL ECX,EDX < === ECX = ECX * EDX 004011A3 |. 8BD1 |MOV EDX,ECX < === EDX = ECX 004011A5 |. EB 06 |JMP SHORT keygenme.004011AD 004011A7 |> 0FAFCA |IMUL ECX,EDX < === ECX = ECX = ECX * EDX 004011AA |. 8D1489 |LEA EDX,DWORD PTR DS:[ECX+ECX*4] 004011AD |> 46 |INC ESI < === ESI ++ 004011AE |. 3BF7 |CMP ESI,EDI 004011B0 |.^ 7C E1 \JL SHORT keygenme.00401193 >>> Giá trị cuối cùng của vòng lặp được lưu ở EDX. >>> >>> Giai đoạn mã hoá thứ năm : cũng tương tự như các giai đoạn trên QUOTE 004011B2 |> \8BC2 MOV EAX,EDX < ==== EAX = EDX 004011B4 |. 33D2 XOR EDX,EDX < === EDX = 00h 004011B6 |. B9 342E0000 MOV ECX,2E34 < === ECX = 02E34h 004011BB |. 33F6 XOR ESI,ESI < ==== ESI = 00h >>> Lấy EAX chia cho ECX. Phần nguyên được lưu ở EAX và phần dư được lưu ở EDX 004011BD |. F7F1 DIV ECX 004011BF |. 3BFB CMP EDI,EBX 004011C1 |. 7E 20 JLE SHORT keygenme.004011E3 004011C3 |> 8A4C35 94 /MOV CL,BYTE PTR SS:[EBP+ESI-6C] 004011C7 |. 0FBEC1 |MOVSX EAX,CL 004011CA |. 03D0 |ADD EDX,EAX < === EDX = EAX + EDX 004011CC |. 80F9 40 |CMP CL,40 < === So sánh với 040h 004011CF |. 7C 05 |JL SHORT keygenme.004011D6 < === Nhảy nếu nhỏ hơn. 004011D1 |. 0FAFC2 |IMUL EAX,EDX < ==== EAX = EAX * EDX 004011D4 |. EB 06 |JMP SHORT keygenme.004011DC 004011D6 |> 0FAFC2 |IMUL EAX,EDX < === EAX = EAX * EDX 004011D9 |. 6BC0 07 |IMUL EAX,EAX,7 < === EAX = EAX * EAX * 7 004011DC |> 46 |INC ESI 004011DD |. 8BD0 |MOV EDX,EAX < === EDX = EAX. 004011DF |. 3BF7 |CMP ESI,EDI 004011E1 |.^ 7C E0 \JL SHORT keygenme.004011C3 >>> Giá trị cuối cùng của vòng lặp được lưu ở EDX. Đây cũng là gí trị cuối cùng. >>> >>> Giai đọan tạo chuỗi : QUOTE >>> Chuỗi được chuyển thành số dạnh thập phân. 004011E3 |> \52 PUSH EDX ; /<%lu> >>> Chuỗi được giữ nguyên định dạng ở dạnh số hex 004011E4 |. 52 PUSH EDX ; |<%X> >>> Chuỗi kết hợ có dạng : HEXDEC. 004011E5 |. 8D85 CCFEFFFF LEA EAX,DWORD PTR SS:[EBP- 134] ; | 004011EB |. 68 30504000 PUSH keygenme.00405030 ; |Format = "%X%lu" 004011F0 |. 50 PUSH EAX ; |s 004011F1 |. FF15 B0404000 CALL DWORD PTR DS:[<&USER32.wsprintfA>] ; \wsprintfA >>> Chuỗi được lưu ở địa chỉ : 0012F944 0012F960 >>>>>>>> Kết luận : QUOTE 1- U và S nhập phải có tối thiểu 3 ký tự. 2- Kết quả của giai đoạn trước là giá trị cho giai đoạn sau. 3- Nếu gặp |<%X> === > Chuỗi giữ nguyên định dạng. 4- Nếu gặp /<%lu> === > Chuỗi được chuyển sang dạng số thập phân. >>>>>>>> Vậy : QUOTE User : Moonbaby Serial : 7003BEDF1879293663 User : HVA-CrAcKeRtEaM Serial : 7E299EDB2116656859 QUOTE . 00 4 01 1 E5 |. 8D85 CCFEFFFF LEA EAX,DWORD PTR SS:[EBP- 13 4] ; | 00 4 01 1 EB |. 68 305 0 400 0 PUSH keygenme .00 405 0 30 ; |Format = "%X%lu" 00 4 01 1 F0 |. 50 PUSH EAX ; |s 00 4 01 1 F1 |. FF15 B0 404 000 . 04 0h 00 4 01 1 CF |. 7C 05 |JL SHORT keygenme .00 4 01 1 D6 < === Nhảy nếu nhỏ hơn. 00 4 01 1 D1 |. 0FAFC2 |IMUL EAX,EDX < ==== EAX = EAX * EDX 00 4 01 1 D4 |. EB 06 |JMP SHORT keygenme .00 4 01 1 DC 00 4 01 1 D6. 00 4 01 1 70 |. 0FBEC8 |MOVSX ECX,AL 00 4 01 1 73 |. 03 D1 |ADD EDX,ECX < ==== EDX = EDX + ECX 00 4 01 1 75 |. 3C 54 |CMP AL,54 < ==== so sánh với 05 4h 00 4 01 1 77 |. 7C 07 |JL SHORT keygenme .00 4 01 1 80