Code: 007D24E1 |> /8B45 F4 /MOV EAX, [LOCAL.3] 007D24E4 |. |E8 1738C3FF |CALL dumped_.00405D00 007D24E9 |. |8945 D0 |MOV [LOCAL.12], EAX 007D24EC |. |DB45 D0 |FILD [LOCAL.12] 007D24EF |. |D835 4C267D00 |FDIV DWORD PTR DS:[7D264C] 007D24F5 |. |E8 FA0FC3FF |CALL dumped_.004034F4 007D24FA |. |83C0 03 |ADD EAX, 3 007D24FD |. |83D2 00 |ADC EDX, 0 007D2500 |. |52 |PUSH EDX 007D2501 |. |50 |PUSH EAX 007D2502 |. |8BC3 |MOV EAX, EBX 007D2504 |. |99 |CDQ 007D2505 |. |290424 |SUB DWORD PTR SS:[ESP], EAX 007D2508 |. |195424 04 |SBB DWORD PTR SS:[ESP+4], EDX 007D250C |. |58 |POP EAX 007D250D |. |5A |POP EDX 007D250E |. |8B55 F4 |MOV EDX, [LOCAL.3] 007D2511 |. |8A5402 FF |MOV DL, BYTE PTR DS:[EDX+EAX-1] 007D2515 |. |8D45 D4 |LEA EAX, [LOCAL.11] 007D2518 |. |E8 DF36C3FF |CALL dumped_.00405BFC 007D251D |. |8B55 D4 |MOV EDX, [LOCAL.11] 007D2520 |. |8D45 F0 |LEA EAX, [LOCAL.4] 007D2523 |. |E8 E037C3FF |CALL dumped_.00405D08 007D2528 |. |4B |DEC EBX 007D2529 |. |85DB |TEST EBX, EBX 007D252B |.^\75 B4 \JNZ SHORT dumped_.007D24E1 Part 2 với Prefix là "S6" (S = Standard). No Probs hé Code: 007D24E1 |> /8B45 F4 /MOV EAX, [LOCAL.3] 007D24E4 |. |E8 1738C3FF |CALL dumped_.00405D00 Chưa có gì Chỉ là gán EAX = EncryptedName sau đó lấy Length thôi. Code: 007D24E9 |. 8945 D0 |MOV [LOCAL.12], EAX 007D24EC |. DB45 D0 |FILD [LOCAL.12] 007D24EF |. D835 4C267D00 |FDIV DWORD PTR DS:[7D264C] Gán vào [LOCAL.12] = EncryptedName.Length. Quote: FILD [source] Pushes an integer from the source to the top of the FPU Stack. Chỉ thị FILD đẩy một giá trị Integer vào Stack. Quote: FDIV [operand] Divide the value on the top of the FPU Stack with the operand and store the result on the top of FPU Stack. FDIV là chia giá trị đang chứa trong Stack với [operand] truyền vào. Ở đây [operand] truyền vào là 2. Như vậy tóm lại đoạn code trên có nhiệm vụ lấy EncrytedName.Lenth \ 2. Lấy phần nguyên. Sau đó đẩy giá trị kết quả vào EAX, tiếp theo là Code: 007D24FA |. 83C0 03 |ADD EAX, 3 No Probs. Code: 007D24FD |. 83D2 00 |ADC EDX, 0 Quote: ADC Instruction Purpose: Cartage addition Syntax: ADC destiny, source It carries out the addition of two operators and adds one to the result in case the CF flag is activated, this is in case there is carried. The result is stored on the destiny operator. Uhm Thật ra cũng không ảnh hưởng gì đến hòa bình thế giới Coi để bít thoai . Code: 007D2501 |. 50 |PUSH EAX 007D2502 |. 8BC3 |MOV EAX, EBX Tống EAX lên Stack sau đó gán EAX = EBX (ở đầu Loop EBX đã được khởi tạo = 3) Code: 007D2505 |. 290424 |SUB DWORD PTR SS:[ESP], EAX Code: PTR SS:[ESP] đang trỏ tới địa chỉ Stack mà vừa tống EAX lên. Giờ đây nó được dùng để làm phép trừ với EAX (EAX được gán = EBX rồi nhá). Khúc này ta hiểu đơn giản là EAX = EAX - EBX luôn cũng được :D Code: 007D2511 |. 8A5402 FF |MOV DL, BYTE PTR DS:[EDX+EAX-1] 007D2515 |. 8D45 D4 |LEA EAX, [LOCAL.11] 007D2518 |. E8 DF36C3FF |CALL dumped_.00405BFC 007D251D |. 8B55 D4 |MOV EDX, [LOCAL.11] 007D2520 |. 8D45 F0 |LEA EAX, [LOCAL.4] 007D2523 |. E8 E037C3FF |CALL dumped_.00405D08 Lấy 1 Char trong chuỗi EncryptedName ở vị trí EAX-1 ra. Sau đó dồn tiếp vào Part 2. Code: 007D2528 |. 4B |DEC EBX 007D2529 |. 85DB |TEST EBX, EBX 007D252B |.^ 75 B4 \JNZ SHORT dumped_.007D24E1 Loop đủ 3 vòng Loop của EBX là xong Code: 007D252D |. 8D45 F0 LEA EAX, [LOCAL.4] 007D2530 |. BA C4257D00 MOV EDX, dumped_.007D25C4 007D2535 |. E8 CE37C3FF CALL dumped_.00405D08 Vậy giờ Serials là gì nào : xxxxxx-S6xxx. Tạm Code lại Part 2 như sau: Code: Shared Function Part2(ByVal in_strEncryptedName As String, ByVal in_strPrefix As String) As String If (in_strEncryptedName = "") Then Return "" Else Dim intEBX = in_strEncryptedName.Length Dim out_strPart2 As String Dim intEAX As Integer out_strPart2 = in_strPrefix Do intEAX = (in_strEncryptedName.Length \ 2) + &H3 intEAX = intEAX - intEBX out_strPart2 = out_strPart2 & in_strEncryptedName.Substring(intEAX - 1, 1) intEBX = intEBX - 1 Loop Until intEBX = 0 Return out_strPart2 End If End Function Insert "-" chuẩn bị tiếp Part 3 nào Code: 007D253A |. 8B45 F4 MOV EAX, [LOCAL.3] 007D253D |. E8 BE37C3FF CALL dumped_.00405D00 007D2542 |. 8BD8 MOV EBX, EAX 007D2544 |. 8B45 F4 MOV EAX, [LOCAL.3] 007D2547 |. E8 B437C3FF CALL dumped_.00405D00 007D254C |. 8BF0 MOV ESI, EAX EBX = EAX = Name.Length ESI = EAX = EncryptedName.Length OK ? Code: 007D254E |. 83EE 09 SUB ESI, 9 007D2551 |. 2BF3 SUB ESI, EBX 007D2553 |. 7F 1F JG SHORT dumped_.007D2574 ESI = ESI - 9 Sau đó lại trừ cho EBX Chẳng khác nào: ESI = EncryptedName.Length - 9 - EncryptedName.Length. Nếu > 0 thì Jump uhm Lấy 1 số - 9 rồi trừ chính số đó thì sure luôn < 0 Vậy khi nào mới có vụ Jump xảy ra ??? Thôi kệ Nhức đầu tiếp Code: 007D2555 |. 4E DEC ESI 007D2556 |> 8D45 CC /LEA EAX, [LOCAL.13] 007D2559 |. 8B55 F4 |MOV EDX, [LOCAL.3] 007D255C |. 8A541A FF |MOV DL, BYTE PTR DS:[EDX+EBX-1] 007D2560 |. E8 9736C3FF |CALL dumped_.00405BFC 007D2565 |. 8B55 CC |MOV EDX, [LOCAL.13] 007D2568 |. 8D45 F0 |LEA EAX, [LOCAL.4] 007D256B |. E8 9837C3FF |CALL dumped_.00405D08 007D2570 |. 4B |DEC EBX 007D2571 |. 46 |INC ESI 007D2572 |.^ 75 E2 \JNZ SHORT dumped_.007D2556 ESI lại được - 1 nữa ặc Trò gì chời ??? Code: 007D255C |. 8A541A FF |MOV DL, BYTE PTR DS:[EDX+EBX-1] DL = Char lấy từ EBX - 1 (Lưu ý EBX khởi tạo = EncrytpedName.Length). Như vậy có nghĩa là lấy Char ngược từ phải wa trái. Code: . 4C267D 00 |FDIV DWORD PTR DS:[7D264C] 00 7D24F5 |. |E8 FA0FC3FF |CALL dumped_ .00 403 4F4 00 7D24FA |. |83C0 03 |ADD EAX, 3 00 7D24FD |. |83D2 00 |ADC EDX, 0 00 7D2 500 |. |52 |PUSH EDX 00 7D25 01 |. | 50. 00 7D2 511 |. 8A5 402 FF |MOV DL, BYTE PTR DS:[EDX+EAX -1] 00 7D2 515 |. 8D45 D4 |LEA EAX, [LOCAL .11 ] 00 7D2 518 |. E8 DF36C3FF |CALL dumped_ .00 405 BFC 00 7D251D |. 8B55 D4 |MOV EDX, [LOCAL .11 ] 00 7D25 20. |CALL dumped_ .00 405 BFC 00 7D251D |. |8B55 D4 |MOV EDX, [LOCAL .11 ] 00 7D25 20 |. |8D45 F0 |LEA EAX, [LOCAL.4] 00 7D2523 |. |E8 E037C3FF |CALL dumped_ .00 405 D08 00 7D2528 |. |4B |DEC EBX 00 7D2529 |.