1. Trang chủ
  2. » Công Nghệ Thông Tin

Cracker Handbook 1.0 part 253 pdf

6 143 1
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Cracker Handbook 1.0 Part 253
Trường học University of Information Technology
Chuyên ngành Computer Science
Thể loại Bài luận
Năm xuất bản 2023
Thành phố Ho Chi Minh City
Định dạng
Số trang 6
Dung lượng 85,18 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 1

007D22E3 |> /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 2

Tiế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 3

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

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 4

Code:

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 5

Tiế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 6

007D236E | 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

Ngày đăng: 03/07/2014, 17:21

TỪ KHÓA LIÊN QUAN