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
Trang 1004C219C | 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:
Trang 2003528FE | 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
Trang 3003511C0 |> |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
Trang 4Lệ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
Trang 50035145C | |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
Trang 6Cò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