004C219C |. 8D55 F0 LEA EDX,DWORD PTR SS:[EBP-10] 004C219F |. A1 D8EE4C00 MOV EAX,DWORD PTR DS:[4CEED8] 004C21A4 |. 8B00 MOV EAX,DWORD PTR DS:[EAX] Tại 4C2193 là một hàm CALL với đối số EAX. Trong đó EAX = Length(YourName). Nếu textbox YourName rỗng thì bắn nag. Như vậy chúng ta đã giải quyết xong EXE Scope 6.41. Thông tin đăng ký sẽ được lưu vào file "eXeScope.ini". Bây giờ thì edit thoải mái nó cũng không kêu ca phàn nàn gì nữa đâu. D: :D Ha Viet Hung(REA) GameHouse Keygen & Keygen Bundled. How 2 !? Cũng như cũ. Muốn làm Bundled thì phải xứ lý được vài em để có cách nhìn khái quát thuật toán của nó đã. Zom lấy rnd một số Games. SCRABBLE Bước phân tích tìm & set breakpoints Zom xin được pass qua vì nó là điều cơ bản, mà khi bạn đã làm Bundled tức là đã có một khả năng tương đối gòi. Code: 003528C3 |. 6A 7F PUSH 7F ; /Count = 7F (127.) 003528C5 |. 8D4C24 44 LEA ECX, DWORD PTR SS:[ESP+44] ; | 003528C9 |. 51 PUSH ECX ; |Buffer 003528CA |. 68 E8030000 PUSH 3E8 ; |ControlID = 3E8 (1000.) 003528CF |. 56 PUSH ESI ; |hWnd 003528D0 |. FFD7 CALL NEAR EDI ; \GetDlgItemTextA 003528D2 |. 6A 18 PUSH 18 ; /Count = 18 (24.) 003528D4 |. 8D5424 28 LEA EDX, DWORD PTR SS:[ESP+28] ; | 003528D8 |. 52 PUSH EDX ; |Buffer 003528D9 |. 68 E9030000 PUSH 3E9 ; |ControlID = 3E9 (1001.) 003528DE |. 56 PUSH ESI ; |hWnd 003528DF |. FFD7 CALL NEAR EDI ; \GetDlgItemTextA Nhận Name & Serials. Code: 003528FE |. E8 7DE8FFFF CALL scrabb_1.00351180 ; Check Length (Only Alphabe & Number) Xem nào. Xem thử trong hàm này nó làm gì đây. Code: 00351180 /$ 8B4C24 04 MOV ECX, DWORD PTR SS:[ESP+4] 00351184 |. 8A01 MOV AL, BYTE PTR DS:[ECX] < Gán AL = Kí tự đầu tiên của fSerials. 00351186 |. 33D2 XOR EDX, EDX 00351188 |. 84C0 TEST AL, AL 0035118A |. 7E 10 JLE SHORT scrabb_1.0035119C 0035118C |. 8D6424 00 LEA ESP, DWORD PTR SS:[ESP] 00351190 |> 3C 20 /CMP AL, 20 00351192 |. 7F 08 |JG SHORT scrabb_1.0035119C 00351194 |. 8A41 01 |MOV AL, BYTE PTR DS:[ECX+1] 00351197 |. 41 |INC ECX 00351198 |. 84C0 |TEST AL, AL 0035119A |.^ 7F F4 \JG SHORT scrabb_1.00351190 Không có gì. Chỉ là bước đầu tiên kiểm tra & loại bỏ các kí tự " " ở đầu chuỗi fSerials. Code: 003511A2 |> /41 /INC ECX 003511A3 |. |3C 2D |CMP AL, 2D 003511A5 |. |74 19 |JE SHORT scrabb_1.003511C0 003511A7 |. |3C 61 |CMP AL, 61 003511A9 |. |7C 04 |JL SHORT scrabb_1.003511AF 003511AB |. |3C 7A |CMP AL, 7A 003511AD |. |7E 10 |JLE SHORT scrabb_1.003511BF 003511AF |> |3C 41 |CMP AL, 41 003511B1 |. |7C 04 |JL SHORT scrabb_1.003511B7 003511B3 |. |3C 5A |CMP AL, 5A 003511B5 |. |7E 08 |JLE SHORT scrabb_1.003511BF 003511B7 |> |3C 30 |CMP AL, 30 003511B9 |. |7C 0B |JL SHORT scrabb_1.003511C6 003511BB |. |3C 39 |CMP AL, 39 003511BD |. |7F 07 |JG SHORT scrabb_1.003511C6 003511BF |> |42 |INC EDX 003511C0 |> |8A01 |MOV AL, BYTE PTR DS:[ECX] 003511C2 |. |84C0 |TEST AL, AL 003511C4 |.^\75 DC \JNZ SHORT scrabb_1.003511A2 Nhìn thì khá phức tạp nhỉ. Tuy nhiên xem kĩ thì. 61 = a 7A = z 41 = A 5A = Z 30 - 39 = 0 - 9 Vậy nó làm gì nhỉ ? - Đầu tiên kiểm tra nếu = 2D ("-") thì nhảy đến cuối Loop gán AL là kí tự tiếp theo. EDX không tăng. - Code: 003511A7 |. 3C 61 |CMP AL, 61 003511A9 |. /7C 04 |JL SHORT scrabb_1.003511AF 003511AB |. |3C 7A |CMP AL, 7A 003511AD |. |7E 10 |JLE SHORT scrabb_1.003511BF . Nếu AL nằm trong khoảng 61 < AL < 7A ( a<AL<z ) thì nhảy đến 003511BF tức là lệnh INC EDX. - Tương tự với 2 cặp 41 - 5A & 30 - 39. Nếu kí tự nằm trong các khoảng này thì EDX tăng 1 đơn vị. - Tóm lại là đếm các kí tự Alphabe (LCase & UPCase & Numberic). EDX là biến lưu giữ đếm các kí tự này. Code: 003511C6 |> \33C0 XOR EAX, EAX 003511C8 |. 83FA 0F CMP EDX, 0F 003511CB |. 0F94C0 SETE AL 003511CE \. C3 RET - Clear EAX = 0 hén. - CMP EDX, 0F. EDX là biến lưu các kí tự đã đếm ở trên. - Quote: SETE/SETZ ZF = 1 Set if Equal/Zero Lệnh SETE gán toán hạng đích = 1 nếu ZF =1. - Trong trường hợp này nếu EDX = 0F thì ZF = 1 thi đó SETE sẽ set AL = 1 Ra khỏi Function này. Code: 00352906 |. 85C0 TEST EAX, EAX 00352908 |. 75 23 JNZ SHORT scrabb_1.0035292D Khà Đúng hông. Nếu EAX = 0 coi như em nó tiêu với các Nag chà pá gòi. Đến đây ta có thể biết là fSerials.Length = F với các kí Alphabe (UCase & LCase) & Numberic. Vậy tạm gán fSerials = 1234567890ABCDE. Rite !. Tiếp. Code: 0035292D |> \6A 01 PUSH 1 0035292F |. 8D5424 28 LEA EDX, DWORD PTR SS:[ESP+28] 00352933 |. 52 PUSH EDX 00352934 |. 8D4424 48 LEA EAX, DWORD PTR SS:[ESP+48] 00352938 |. 50 PUSH EAX 00352939 |. 8D8C24 CC0000>LEA ECX, DWORD PTR SS:[ESP+CC] 00352940 |. 51 PUSH ECX 00352941 |. E8 EAEAFFFF CALL scrabb_1.00351430 ; KeyGen ? Làm trỏ khỉ gì mà nó PUSH Name & Serials ta Có khả năng đây là Function Keygen ? Vô xem thử coi sao. (Thực tế nó chính la Function Gen & Check Serials). Code: 00351447 |> /81F9 FF000000 /CMP ECX, 0FF 0035144D |. |7D 36 |JGE SHORT scrabb_1.00351485 ; Jump If ECX >= FF 0035144F |. |3C 61 |CMP AL, 61 00351451 |. |7C 13 |JL SHORT scrabb_1.00351466 00351453 |. |3C 7A |CMP AL, 7A 00351455 |. |7F 0F |JG SHORT scrabb_1.00351466 00351457 |. |0FBEF0 |MOVSX ESI, AL ; Case 61h < Char < 7Ah (a-z) 0035145A |. |8BD9 |MOV EBX, ECX ; EBX = ECX 0035145C |. |03DE |ADD EBX, ESI ; EBX = EBX + ESI 0035145E |. |8D7CBB E0 |LEA EDI, DWORD PTR DS:[EBX+EDI*4-20] ; EDI = EBX+EDI*4-20 00351462 |. |2C 20 |SUB AL, 20 ; AL = UCase 00351464 |. |EB 12 |JMP SHORT scrabb_1.00351478 00351466 |> |3C 41 |CMP AL, 41 00351468 |. |7C 13 |JL SHORT scrabb_1.0035147D 0035146A |. |3C 5A |CMP AL, 5A 0035146C |. |7F 0F |JG SHORT scrabb_1.0035147D 0035146E |. |0FBEF0 |MOVSX ESI, AL ; Case 41h < Char < 5Ah (A-Z) 00351471 |. |8BD9 |MOV EBX, ECX 00351473 |. |03DE |ADD EBX, ESI ; EBX = EBX + ESI (ESI=Char) 00351475 |. |8D3CBB |LEA EDI, DWORD PTR DS:[EBX+EDI*4] ; EDI = EBX+EDI*4 00351478 |> |88440C 10 |MOV BYTE PTR SS:[ESP+ECX+10], AL 0035147C |. |41 |INC ECX 0035147D |> |8A42 01 |MOV AL, BYTE PTR DS:[EDX+1] ; AL = Next Char 00351480 |. |42 |INC EDX 00351481 |. |84C0 |TEST AL, AL ; End Of Name ? 00351483 |.^\75 C2 \JNZ SHORT scrabb_1.00351447 Code gì mà tè le Nhìn phát chán Đúng hông Hey But nhìn kĩ xem sao. Code: 0035144F |. 3C 61 |CMP AL, 61 00351451 |. 7C 13 |JL SHORT scrabb_1.00351466 00351453 |. 3C 7A |CMP AL, 7A 00351455 |. 7F 0F |JG SHORT scrabb_1.00351466 Đoạn code này wen chứ nhỉ. Nó là lọc ra kí tự trong khoảng 61 - 7A (a-z). Code: 00351466 |> \3C 41 |CMP AL, 41 00351468 |. 7C 13 |JL SHORT scrabb_1.0035147D 0035146A |. 3C 5A |CMP AL, 5A 0035146C |. 7F 0F |JG SHORT scrabb_1.0035147D Còn đoạn này Lọc kí tự trong khoảng 41 - 5A (A-Z). Như vậy nghĩa là nó chỉ tính toán xử lý với các kí tự Alphabe (L & UCase) thôi. Còn các kí tự khác thì Dẹp tiệm há. Code: 00351457 |. 0FBEF0 |MOVSX ESI, AL ; Case 61h < Char < 7Ah (a-z) 0035145A |. 8BD9 |MOV EBX, ECX ; EBX = ECX 0035145C |. 03DE |ADD EBX, ESI ; EBX = EBX + ESI . 00 3 511 A2 |> / 41 /INC ECX 00 3 511 A3 |. |3C 2D |CMP AL, 2D 00 3 511 A5 |. |74 19 |JE SHORT scrabb _1. 00 3 511 C0 00 3 511 A7 |. |3C 61 |CMP AL, 61 00 3 511 A9 |. |7C 04 |JL SHORT scrabb _1. 00 3 511 AF 00 3 511 AB. AL, 5A 00 3 511 B5 |. |7E 08 |JLE SHORT scrabb _1. 00 3 511 BF 00 3 511 B7 |> |3C 30 |CMP AL, 30 00 3 511 B9 |. |7C 0B |JL SHORT scrabb _1. 00 3 511 C6 00 3 511 BB |. |3C 39 |CMP AL, 39 00 3 511 BD |. |7F 07 |JG. scrabb _1. 00 3 511 AF 00 3 511 AB |. |3C 7A |CMP AL, 7A 00 3 511 AD |. |7E 10 |JLE SHORT scrabb _1. 00 3 511 BF 00 3 511 AF |> |3C 41 |CMP AL, 41 00 3 511 B1 |. |7C 04 |JL SHORT scrabb _1. 00 3 511 B7 00 3 511 B3 |. |3C 5A