EDI là chiều dài chuỗi nhập... Đây cũng là gí trị cuối cùng... 2- Kết quả của giai đoạn trước là giá trị cho giai đoạn sau.
Trang 1>>> >>> 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
Trang 200401183 | 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
Trang 3004011AA | 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
Trang 4004011D9 | 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
Trang 5>>>>>>>> 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