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 AL được gán là kí tự của Name Mặc kệ máy khúc kia đi. Sau đó ESI gán = AL. Sau đó ESI lại gán vào EBX. Vậy hiểu đơn giản là EBX lúc này là kí tự Name đang xử lý. Code: EBX+EDI*4-20 viết lại tí là : EBX - 20 + EDI*4. (hi vọng toán lớp 1 của Zom phép hoán đổi phép +- của Zom không bad :D). EBX - 20: Ta cũng biết là 1 kí tự LCase - 20h đồng nghĩa là kí tự đó được. UCase lên ! Rite Vậy chẳng khác nào ta UCase kí tự đó gòi đưa vào tính EBX + EDI*7=4 (bỏ -20 đi sau khi UCase). Còn đoạn code ở loc A-Z Code: 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 Code: EBX+EDI*4 . Y chang khúc trên Khà Vậy cả vòng Loop này ta viết lại đơn giản như sau Name = Name.UCase Code: Do 00351447 |> /81F9 FF000000 /CMP ECX, 0FF 0035144D |. /7D 36 |JGE SHORT scrabb_1.00351485 ; Jump If ECX >= FF 00351457 |. 0FBEF0 |MOVSX ESI, AL 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 ? Loop Until AL = 0 Hay nói cách khác là Code: Do IF ECX > 0 then Exit Loop EBX = ECX EBX = EBX + Name.SubString(EDX,1) ECX = ECX + 1 EDX = EDX + 1 Loop Until EDX = Name.Length (End of Name) Tạm gọi là Public Function NameCalc2Number(ByVal in_strName As String) hén. Code: 00351485 |> \81E7 FFFFFF7F AND EDI, 7FFFFFFF 0035148B |. 75 14 JNZ SHORT scrabb_1.003514A1 Trong trường hợp này EDI của Zom là C1A6DC8B. Để xem tại sao nó cần AND EDI vậy ta Code: C1A6DC8B = 1100 0001 1010 0110 1101 1100 1000 1011 AND 7FFFFFFF = 0111 1111 1111 1111 1111 1111 1111 1111 Như ta biết bit msb (bit cuối cùng bên trái) là bit dấu. Vậy lệnh AND với 7FFFFFFF này tạm có thể hiểu là để loại bit dấu ra, hay còn có thể nói là đảo nếu âm thì thành dương. Nếu không lầm thì nó là phép bù ? Sorry không nhớ chính xác. Ngại tra lại doc wóa. uhm By Anyways trong code ta cứ thêm vào là AND 7FFFFFFF. Nói dài dòng cũng chĩ là để hiểu tí thêm về AND và các bits thôi. Code: 0035148B |. /75 14 JNZ SHORT scrabb_1.003514A1 Lớn > 0 thì OK. Else DIE Code: 003514A1 |> \8B9424 1C0100>MOV EDX, DWORD PTR SS:[ESP+11C] 003514A8 |. C6440C 10 00 MOV BYTE PTR SS:[ESP+ECX+10], 0 003514AD |. 8B8C24 200100>MOV ECX, DWORD PTR SS:[ESP+120] 003514B4 |. 51 PUSH ECX 003514B5 |. 52 PUSH EDX 003514B6 |. 8D4424 18 LEA EAX, DWORD PTR SS:[ESP+18] 003514BA |. 50 PUSH EAX 003514BB |. E8 B0FDFFFF CALL scrabb_1.00351270 ; Check Online 003514C0 |. 83C4 0C ADD ESP, 0C 003514C3 |. 85C0 TEST EAX, EAX 003514C5 |. 74 1D JE SHORT scrabb_1.003514E4 003514C7 |. 8B8C24 140100>MOV ECX, DWORD PTR SS:[ESP+114] 003514CE |. 68 A8523500 PUSH scrabb_1.003552A8 ; /String2 = "HACKER" 003514D3 |. 51 PUSH ECX ; |String1 003514D4 |. FF15 40503500 CALL NEAR DWORD PTR DS:[<&KERNEL32.lstrc>; \lstrcpyA 003514DA |. 5F POP EDI 003514DB |. 5E POP ESI 003514DC |. 5B POP EBX 003514DD |. 81C4 04010000 ADD ESP, 104 003514E3 |. C3 RET Khúc này Zom tạm pass wa. Nó chỉ là check Online và Server sẽ trả về String "HACKER" nếu phát hiện User Name là blocked. Khi đó nó sẽ đánh 1 block vào Registry. Với Block này thì nhập User / Serials cỡ nào cũng teo :D. Tiếp Code: 00351500 |> /3B1D 08603500 /CMP EBX, DWORD PTR DS:[356008] 00351506 |. |7C 06 |JL SHORT scrabb_1.0035150E 00351508 |. |FF15 4C503500 |CALL NEAR DWORD PTR DS:[<&KERNEL32.Debu>; [DebugBreak 0035150E |> |8B9424 200100>|MOV EDX, DWORD PTR SS:[ESP+120] 00351515 |. |56 |PUSH ESI 00351516 |. |52 |PUSH EDX 00351517 |. |E8 B4FCFFFF |CALL scrabb_1.003511D0 0035151C |. |83C4 08 |ADD ESP, 8 0035151F |. |85C0 |TEST EAX, EAX 00351521 |. |75 0E |JNZ SHORT scrabb_1.00351531 00351523 |. |56 |PUSH ESI 00351524 |. |FFD5 |CALL NEAR EBP 00351526 |. |8D7406 01 |LEA ESI, DWORD PTR DS:[ESI+EAX+1] 0035152A |. |8A06 |MOV AL, BYTE PTR DS:[ESI] 0035152C |. |43 |INC EBX 0035152D |. |84C0 |TEST AL, AL 0035152F |.^\75 CF \JNZ SHORT scrabb_1.00351500 Tạm thời bạn không cần quan tậm EDX là gì há. Trace Into vào Code: 0035150E |> \8B9424 200100>|MOV EDX, DWORD PTR SS:[ESP+120] 00351515 |. 56 |PUSH ESI 00351516 |. 52 |PUSH EDX 00351517 |. E8 B4FCFFFF |CALL scrabb_1.003511D0 Mà khoang Trước khi Trace nhìn kĩ các biến số đã. ESI là 1 chuỗi lạ EDX = fSerials. Nếu muốn thì thử Follow in DUMP ESI sẽ cho ta đến vùng nhớ mà ở đó ta thấy rất nhiều chuỗi lạ. (Sau này wen bạn có thể dùng Hex Workshop để lấy trực tiếp các giá trị này trong File EXE). Code: HVAOCUCXKX WFUKNZVRME AHVFVPVAJD GATRZLFCOZ VAWNSAIPHZ TSLGYNKQXC ZXUKODBKAF NQRUXDBJPB VGSGPIVBVZ PZKERFSQNP PDPBQDJVSR BCOLRTVGNQ PVPBASSCYE LLQETIWQFN WBESBHWVVV CMCGUXAVZW AXMBMXTDTO DCECSLYAFQ NMYWVXSSGM YTROWBWGPB DDCDXMJEWC EHOJBYZVEH CRXZMQERXP HIRKQIEGFG VEADJQTCMI TAJMGAROKL VWLRGWHTAT EDRZBWCCQZ KPMPIFFIUK ZKTUSGPXIA JRGJLNMQLY YPJVCFFZWU QSTPSJVPUM KYGCJOMPQQ LJGKVGJCYW SLNIVIHNWJ WGVSUUMCXO PYQDAXXVAY IMHJYQKLHS MQKDOSCCRU LEZOJWTCUT PMBRVUIGTC KHZQFPBYJC NFCOUKHUQR UQDRYMUHQQ ZZVHHPQFQI OWVBODYZFJ ZDUKWTLSYI BICLALQERU RSGPRCAZSC GXQRECTNIB THIEBBIVGW HHKVNHNMIH GDZQVTAFOQ QCXLCTCRRD ZPGVNSANAM RTUKXKIRUW GNGEUMMQFB UWPHLIUJPI NNASKDUXSA HODKUNLLQS WWATZJSAXA CGSBSLYDNI PDTBUCKWKG BVHMGOTRGW PSSKWIEGCW OSFPDPNDPT ILZZGJXCBD UBKRCZFQUG IQBQCRTZVL HJMLMTHSZE NKYPJDNMZK TAWSDAKVIM OBZNIAUCAP ZONQCJZJCT SEFQEZBGHV ZEWFMTUCRH ZHSDHJDSWX XQOENMDPDZ NJDSFRJQZY YYDUTIVWDW EWBKAVHQRO XEEYBXZWVZ YSCJUOYZQO LGCIVOKFOK ZXGOIVQBHW XSNEAYYCVJ PPOBHNJRFF BQSWEBIMNJ BVYJTZSFDK GPOXFJJSVH LEQIOPOWCP CBAAKPYDLI RMTFQMTVXT ASVNUQLWNW ALKMCXAPCB . tại sao nó cần AND EDI vậy ta Code: C1A6DC8B = 11 00 00 01 1 01 0 01 1 0 11 01 1 10 0 10 00 10 11 AND 7FFFFFFF = 01 1 1 11 11 111 1 11 11 111 1 11 11 111 1 11 11 Như ta biết bit msb (bit cuối cùng bên trái). 00 3 515 16 |. |52 |PUSH EDX 00 3 515 17 |. |E8 B4FCFFFF |CALL scrabb _1. 00 3 511 D0 00 3 515 1C |. |83C4 08 |ADD ESP, 8 00 3 515 1F |. |85C0 |TEST EAX, EAX 00 3 515 21 |. |75 0E |JNZ SHORT scrabb _1. 00 3 515 31. PUSH EAX 00 3 514 BB |. E8 B0FDFFFF CALL scrabb _1. 00 3 512 70 ; Check Online 00 3 514 C0 |. 83C4 0C ADD ESP, 0C 00 3 514 C3 |. 85C0 TEST EAX, EAX 00 3 514 C5 |. 74 1D JE SHORT scrabb _1. 00 3 514 E4 00 3 514 C7 |.