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

Cracker Handbook 1.0 part 149 docx

6 237 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

Định dạng
Số trang 6
Dung lượng 178,12 KB

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

Nội dung

_PTV5online: trunghau Tính offset của lệnh JMP, JX, JNX & CALL --- Lý thuyết Giới thiệu Các loại câu lệnh JUMPS & CALL Tính toán offset Thực hành ---... Trong bài viết này tôi muốn giả

Trang 1

0042DE1D | 43 |INC EBX

0042DE1E |> 43 |INC EBX

0042DE1F |.^EB DE \JMP SHORT pro.0042DDFF

0042DE21 |> 8BC6 MOV EAX,ESI

0042DE23 | 5E POP ESI

0042DE24 | 5B POP EBX

0042DE25 | 5F POP EDI

0042DE26 \ C3 RETN

[/code]

Các bạn tự tìm hiểu thêm nha hacnho chỉ nói qua loa cơ chế tạo sê ri thôi Đầu tiên chương trình sẽ xét name nhập vào, nếu name< 5 thì thoát khỏi bảng đăng ký (may quá, hồi nãy hacnho nhập tới 6 ký tự lận :d.) Sau đó nếu lớn hơn 5 ký tự thì sẽ lấy chiều dài của ký tự (ví dụ 6) trừ cho 4, bằng bao nhiêu, đem xor với EBX (mặc định ban đầu, EBX là 00) Gọi một hàm kiểm tra tại đây, nếu serial nhập vào bằng

số serial sinh ra, thì chương trình cũng thoát, khỏi tính lại Nếu sai thì Xor tiếp 4 bytes đầu của chiều dài lenght mới với một số magic bằng 5DFEE4A4 Tiếp tục TEST BL,40 , nếu quá 40 thì nhảy, còn không thì đưa vào eax Rồi lại tiếp tục vòng lặp cho tới khi hết thì thôi He he, sau đó bắn Real Serial vào memory, để so sánh với serial nhập vào Quá đơn giản phải không bạn :d

Tut đến đây là END Hẹn gặp trong tut sau

-

_Bài viết của hacnho xin vui lòng để lại dòng này khi trích dẫn hoặc đăng tải

VCT - Vietnamese Cracker Team ALways Free For All

Trang 2

Founder: Computer_Angel, LVH, hacnho, hhphong

Super Mod: Infinite, deux

Moderator: anh_surprise, rongchaua, Zombie, tdlan83, Bluebird Greets :

Cracker Group :

_ vncracking: NVH(c), Softcracker_vn, luucorp, tomcrack, tnHuan

_ vicki: DT

_ vietcrack: Pham Thai

_ Others: CVN_cracker, FunnyCracker

Hacker :

_HVA : LeonHart, tykhung, mudres, Leon, TTL, JAL, homethieugia, Viper _VHF: lieumang, CL, bmksc

_WhatVN: CuongLong, White_hat

_HKC: LPTV

_PTV5online: trunghau

Tính offset của lệnh JMP, JX, JNX & CALL -

Lý thuyết Giới thiệu Các loại câu lệnh JUMPS & CALL

Tính toán offset Thực hành -

Trang 3

I Lý thuyết

1 Giới thiệu

Xin chào các bạn! Trong bài viết này tôi muốn giải thích với các bạn cách tính toán offset của các câu lệnh JUMPS và CALL Bạn sẽ thường xuyên tính toán offset của các câu lệnh này trong reverse Đặc biệt, hiểu được cách tính cũng giúp bạn tiếp cận với kĩ thuật làm mù điểm vào host trong virus (EPO - EntryPoint Obscrured) một cách dễ hơn!

2 Các loại câu lệnh JUMPS & CALL

Ở đây tôi chỉ mô tả sự khác biệt của các câu lệnh JUMPS & CALL mà bạn thường gặp!

a) Short Jumps: nhảy ngắn có hoặc không có điều kiện đều là 2 byte Bạn chỉ có thể nhảy tới 127 byte hoặc nhảy lùi 128 byte với các short jumps

b) Long Jumps: nhảy dài, 6 byte cho có điều kiện hoặc 5 byte cho không điều kiện

c) Calls: 5 byte ở dạng short

* Đây là bảng mã máy mô tả sự khác biệt giữa các loại JUMPS & CALLS

Jump Description Short Op-Code Long Op-Code

call procedure call E8xxxxxxxx N/A

jmp unconditional jump EBxx E9xxxxxxxx

ja/jnbe jump if above 77xx 0F87xxxxxxxx

jae/jnb/jnc jump if above or equal 73xx 0F83xxxxxxxx

jb/jc/jnae jump if below 72xx 0F82xxxxxxxx

jbe/jna jump if below or equal 76xx 0F86xxxxxxxx

Trang 4

jcxz/jecxz jump if cx/ecx equals zero E3xx N/A

je/jz jump if equal/zero 74xx 0F84xxxxxxxx

jne/jnz jump if not equal/zero 75xx 0F85xxxxxxxx

jg/jnle jump if greater 7Fxx 0F8Fxxxxxxxx

jge/jnl jump if greater or equal 7Dxx 0F8Dxxxxxxxx

jl/jnge jump if less 7Cxx 0F8Cxxxxxxxx

jle/jng jump if less or equal 7Exx 0F8Exxxxxxxx

jno jump if not overflow 71xx 0F81xxxxxxxx

jnp/jpo jump if no parity/parity odd 7Bxx 0F8Bxxxxxxxx

jns jump if not signed 79xx 0F89xxxxxxxx

jo jump if overflow 70xx 0F80xxxxxxxx

jp/jpe jump if parity/parity even 7Axx 0F8Axxxxxxxx

js jump if sign 78xx 0F88xxxxxxxx

Vấn đề của chúng ta là cần tính các số xx và xxxxxxxx trong mã máy

3 Tính toán offset

* Công thức: OFFSET = địa chỉ của nơi đến - (địa chỉ nơi jumps/calls + kíck thước của câu lệnh jumps/calls)

* Ví dụ:

a) Bạn đang ở tại địa chỉ 40108E Bạn cần đặt một lệnh nhảy đến địa chỉ 4020D0 tại địa chỉ này

:40108E JMP 4020D0

Offset = 4020D0 - [40108E + 5(E9xxxxxxxx có kích thước 5 byte)] = 103D Mã máy

sẽ là E93D100000, trong đó E9 là mã máy của JMP và 3D100000 là số xxxxxxxx mà bạn vừa tính được (0000103D viết ngược lại sẽ là 3D100000)

b) Bạn cần đặt một lệnh CALL đến địa chỉ 401184 tại địa chỉ 40218B

Trang 5

:40218B CALL 401184

Offset = 401184 - [40218B + 5(E8xxxxxxxx có kích thước 5 byte)] = FFFFEFF4 Mã máy sẽ là E8F4EFFFFF, trong đó E8 là mã máy của CALL và F4EFFFFF là số xxxxxxxx

mà bạn vừa tính được (FFFFEFF4 viết ngược lại sẽ là F4EFFFFF)

II Thực hành

Bạn đã dùng Notepad! Mỗi lần mở file có kích thước vượt quá 64KB, Notepad sẽ hiển thi một hộp thông báo "Lỗi: File có kích thước quá lớn Bạn có muốn dùng Bạn đã dùng Notepad! Mỗi lần mở file có kích thước vượt quá 64KB, Notepad sẽ hiển thi một hộp thông báo "Lỗi: File có kích thước quá lớn Bạn có muốn dùng WordPad để đọc file này không?" - Yes | No Nhiệm vụ của chúng ta là patch file notepad.exe để mỗi khi mở file có kích thước lớn hơn 64KB nó sẽ không hiển thị hộp thông báo trên nữa và tự động mở file bằng WordPad cho bạn Trước khi bắt đầu mọi việc, bạn hãy sao lưu file notepad.exe trước đề phòng sự cố! Thật ra thì cũng không cần thiết bởi bạn có thể dùng SFC(System File Checker) của Windows

để restore lại file notepad.exe bất cứ lúc nào Trong ví dụ này tôi dùng bản

Notepad của Windows98SE

1/ Chạy W32Dasm Sau khi dism file xong, bạn vào menu Ref/String Data

References, tìm dòng String Resource ID=00056: "wordpad.exe" và double click lên nó Để xem chúng ta có gì nào?!

* Possible Reference to String Resource ID=00036: "&f"

|

:004033A5 6A24 push 00000024 ; rất quan trọng

:004033A7 A1B4504000 mov eax, dword ptr [004050B4]

:004033AC 56 push esi

:004033AD 50 push eax

:004033AE FF7508 push [ebp+08]

Trang 6

* Reference To: USER32.MessageBoxA, Ord:01ACh

|

:004033B1 FF15A8644000 Call dword ptr [004064A8] ; hiện messagebox :004033B7 83F806 cmp eax, 00000006 ; đã chọn YES hay NO? (IDYES=6)

:004033BA 0F85A7000000 jne 00403467 ; NO -> thoát

:004033C0 6804010000 push 00000104 ; YES -> mở file bằng WordPad

:004033C5 8D858CFDFFFF lea eax, dword ptr [ebp+FFFFFD8C]

:004033CB 837D1001 cmp dword ptr [ebp+10], 00000001

:004033CF 1BFF sbb edi, edi

:004033D1 50 push eax

:004033D2 83C737 add edi, 00000037

* Possible Reference to String Resource ID=00056: "wordpad.exe"

|

:004033D5 6A38 push 00000038

:004033D7 FF3540554000 push dword ptr [00405540]

Chúng ta chỉ cần thay PUSH 00000024 tại địa chỉ 4033A5 thành lệnh nhảy ngắn đến địa chỉ 4033C5 Mã

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

TỪ KHÓA LIÊN QUAN