Vậy hiểu đơn giản là EBX lúc này là kí tự Name đang xử lý.. 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
Trang 10035145E | 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
Trang 20035144D | /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
Trang 37FFFFFFF = 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
Trang 4"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:
Trang 5HVAOCUCXKX 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
Trang 6MQKDOSCCRU 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
Trang 7XQOENMDPDZ NJDSFRJQZY YYDUTIVWDW EWBKAVHQRO XEEYBXZWVZ YSCJUOYZQO LGCIVOKFOK ZXGOIVQBHW XSNEAYYCVJ PPOBHNJRFF BQSWEBIMNJ BVYJTZSFDK GPOXFJJSVH LEQIOPOWCP CBAAKPYDLI RMTFQMTVXT ASVNUQLWNW ALKMCXAPCB