43 |INC EBX Zom tạm gọi đoạn code trên là nhằm fix Name.Length cho đủ Ah chars, nếu không thì lần lượt thêm kí tự có mã ASCII = 21h và cộng 1 cho kí tự kế tiếp.. Và đây là Function đó Zo
Trang 1007D22E3 |> /8D45 EC /LEA EAX, [LOCAL.5]
007D22E6 | |8BD3 |MOV EDX, EBX ; EDX = EBX
(StartIndex)
007D22E8 | |E8 0F39C3FF |CALL dumped_.00405BFC
007D22ED | |8B55 EC |MOV EDX, [LOCAL.5]
007D22F0 | |8D45 FC |LEA EAX, [LOCAL.1]
007D22F3 | |E8 103AC3FF |CALL dumped_.00405D08 ; Name = Name & Char(EDX)
Sau đó tăng EBX:
Code:
007D22F8 | 43 |INC EBX
Zom tạm gọi đoạn code trên là nhằm fix Name.Length cho đủ Ah chars, nếu không thì lần lượt thêm kí tự có mã ASCII = 21h và cộng 1 cho kí tự kế tiếp
Và đây là Function đó Zom viết lại bằng Visual Basic NET
Code:
Shared Function FixNameLength(ByVal in_strName As String, _
Optional ByVal in_byteStart4CrypName As Byte = &H21) As String
Dim intIndex As Integer = in_byteStart4CrypName
If in_strName.Length <= 0 Then
Return ""
Else
Do While in_strName.Length < &HA
in_strName = in_strName & Chr(intIndex)
intIndex = intIndex + 1
Loop '
End If
Return in_strName
End Function
Lý do Zom sử dụng Optional cho byteStart4CrypName (Default=21h) là vì thấy
nó gán EBX = 21h Với Optional này giả sử một trường hợp nào đó nó cũng sử dụng chính đoạn code trên nhưng thay EBX = một giá trị <> 21h thì khi đó ta cũng linh động sử dụng lại được Function trên, chỉ cần truyền Parameter giá trị cho EBX
Trang 2Tiếp
Code:
007D2306 | 8D55 E8 LEA EDX, [LOCAL.6]
007D2309 | 8B45 FC MOV EAX, [LOCAL.1]
007D230C | E8 E38FC3FF CALL dumped_.0040B2F4 ;
Name.UCase
UCase Name thôi Không có gì quan trọng lắm (nhưng cũng phải nhớ code vào keyen nóa )
Code:
007D231F | E8 DC39C3FF CALL dumped_.00405D00 ; Check Name.Length
007D2324 | 8BF0 MOV ESI, EAX
007D2326 | 85F6 TEST ESI, ESI
007D2328 | 7E 5E JLE SHORT dumped_.007D2388
Ở đây có thể thấy nó check lại Name.Length của mình Nếu như TEST ESI mà xảy ra (tức Name.Length <=0) thì Jump đến
Code:
dumped_.007D2388
Ở
Code:
dumped_.007D2388
không quan trọng lắm (vì sure là ta entered User rồi đúng không ?) Nhưng để cho
đủ or wởn thì ta tạm set SF = 1 để cho nó Jump đến thử xem sao ?
Zom cũng nói luôn đoạn code ở đó đơn thuần chỉ là lần lượt thêm kí tự 1, 2,
3 9 rồi quay lại 1 cho đến khi User đủ 14h Mà thôi chả sao ai rãnh viết khúc
đó cũng được coi như cho đủ bộ Zom thì lười lém nên passed Nhưng NOTE lại luôn nhá !
ặc check lại System Time tới giờ đón mami
To be continue :D
hix Bị mami cấm cung hix bùn Viết tiếp
Đến đâu rùi ta òh giờ mần tiếp đoạn Loop tiếp theo xem nó làm khỉ gì
Code:
Trang 3007D232F |> /8B45 FC /MOV EAX, [LOCAL.1]
007D2332 | |0FB64418 FF |MOVZX EAX, BYTE PTR DS:[EAX+EBX-1] ; MOVZX EAX = Name.SubString(EBX-1,1)
007D2337 | |8B55 0C |MOV EDX, [ARG.2] ; EDX = 1A (Const)
007D233A | |83C2 46 |ADD EDX, 46 ; EDX = EDX + 46 007D233D | |3BC2 |CMP EAX, EDX
007D233F | |7E 22 |JLE SHORT dumped_.007D2363 ; If EAX (Name.SubString) <= EDX Then Jump
007D2341 | |8B45 FC |MOV EAX, [LOCAL.1]
007D2344 | |0FB64418 FF |MOVZX EAX, BYTE PTR DS:[EAX+EBX-1] 007D2349 | |8D143B |LEA EDX, DWORD PTR DS:[EBX+EDI]
007D234C | |2BC2 |SUB EAX, EDX
007D234E | |8D55 E4 |LEA EDX, [LOCAL.7]
007D2351 | |E8 FA9AC3FF |CALL dumped_.0040BE50
007D2356 | |8B55 E4 |MOV EDX, [LOCAL.7]
007D2359 | |8D45 F4 |LEA EAX, [LOCAL.3]
007D235C | |E8 A739C3FF |CALL dumped_.00405D08
007D2361 | |EB 20 |JMP SHORT dumped_.007D2383
007D2363 |> |8B45 FC |MOV EAX, [LOCAL.1] ; EAX =
NameEncrypted
007D2366 | |0FB64418 FF |MOVZX EAX, BYTE PTR DS:[EAX+EBX-1] ; EAX = Name.SubString(EBX-1,1)
007D236B | |8D143B |LEA EDX, DWORD PTR DS:[EBX+EDI] ; EDX = EBX + EDI
007D236E | |03C2 |ADD EAX, EDX ; EAX = EAX + EDX
007D2370 | |8D55 E0 |LEA EDX, [LOCAL.8]
007D2373 | |E8 D89AC3FF |CALL dumped_.0040BE50 ; Convert 2 HexString
007D2378 | |8B55 E0 |MOV EDX, [LOCAL.8]
007D237B | |8D45 F4 |LEA EAX, [LOCAL.3]
007D237E | |E8 8539C3FF |CALL dumped_.00405D08
007D2383 |> |47 |INC EDI
007D2384 | |43 |INC EBX
007D2385 | |4E |DEC ESI
007D2386 |.^\75 A7 \JNZ SHORT dumped_.007D232F ; Encrytp Name
Ở đây Zom xin nhắc lại 1 chút về ở đầu chỗ Select Case (mọi người còn nhớ chứ)
Trang 4Code:
007D275B |> \56 PUSH ESI ; Case 9 of switch
007D2677
007D275C | 57 PUSH EDI
007D275D | 8BCB MOV ECX, EBX
007D275F | BA 26000000 MOV EDX, 26
007D2764 | 8B45 FC MOV EAX, [LOCAL.1]
007D2767 | E8 3CFBFFFF CALL dumped_.007D22A8
Xem nào
Code:
PUSH ESI
Mà ESI ở
Code:
007D266A | BE 1A000000 MOV ESI, 1A
đã gán 1A rồi OK ?
PUSH đầu tiên nghĩa là sẽ được lấy ra sau OK ?
Rồi quay lại vòng Loop
Code:
007D232F |> /8B45 FC /MOV EAX, [LOCAL.1]
007D2332 | |0FB64418 FF |MOVZX EAX, BYTE PTR DS:[EAX+EBX-1] ; MOVZX EAX = Name.SubString(EBX-1,1)
007D2337 | |8B55 0C |MOV EDX, [ARG.2] ; EDX = 1A (Const)
007D233A | |83C2 46 |ADD EDX, 46 ; EDX = EDX + 46 007D233D | |3BC2 |CMP EAX, EDX
007D233F | |7E 22 |JLE SHORT dumped_.007D2363 ; If EAX (Name.SubString) <= EDX Then Jump
Đầu tiên là gán EAX là kí tự tại trong Name tại vị trí EBX-1
Code:
007D232A | BB 01000000 MOV EBX, 1
EBX đã được khởi tạo = 1 nên có thể hiểu là vòng Loop đầu sẽ lấy kí tự đầu tiên trong Name
Trang 5Tiếp gán EDX = ARG.2 nhớ rùi hén Đối số thứ 2 tức là đối số được truyền vào thứ 1 :D tức là giá trị ESI = 1Ah OK ??
Code:
007D233A | 83C2 46 |ADD EDX, 46 ; EDX = EDX + 46 EDX = EDX + 46h No prob tiếp
Code:
007D233D | 3BC2 |CMP EAX, EDX
007D233F | 7E 22 |JLE SHORT dumped_.007D2363 ; If EAX (Name.SubString) <= EDX Then Jump
Nếu mã ASCII kí tự vừa lấy trong Name <= EDX thì JUMP OK
Code:
007D2366 | 0FB64418 FF |MOVZX EAX, BYTE PTR DS:[EAX+EBX-1] ; EAX = Name.SubString(EBX-1,1)
No prob Lấy char thôi tương tự
Code:
007D236B | 8D143B |LEA EDX, DWORD PTR DS:[EBX+EDI] ; EDX = EBX + EDI
007D236E | 03C2 |ADD EAX, EDX ; EAX = EAX + EDX
Khúc này để ý tí hén
EDX = EBX + EDI
Mà EDI nhớ gì hun ??
Code:
007D22C1 | 8BFA MOV EDI, EDX ; EDI = EDX
(StartEDI 4 Encryption) = 26h
Cái Zom NOTE lần trước á OK ?
Nghĩa là EDI sẽ bằng 26h trong trường hợp này
EBX thì bằng số lần Loop để lấy Chars trong Name (khởi tạo EBX = 1)
Nên EDX = EBX + EDI = 1 + 26h = 27h
Code:
Trang 6007D236E | 03C2 |ADD EAX, EDX ; EAX = EAX + EDX
Cộng dồn vào EAX
Code:
007D2373 | E8 D89AC3FF |CALL dumped_.0040BE50 ; Convert 2 HexString
Convert giá trị đó sang kí tự mã Hex
Code:
007D237E | E8 8539C3FF |CALL dumped_.00405D08