Assembly v1.0
-
Upload
huu-vi -
Category
Technology
-
view
26 -
download
2
Transcript of Assembly v1.0
ASSEMBLYhttp://learn-tech-tips.blogspot.com
MỤC TIÊU
Giúp các bạn có một cái nhìn tổng quan về ngôn ngữ Assembly
Áp dụng một số phương pháp để phân tích chương trình bằng tool Olly
Hiểu được phương pháp lấy BaseAddress bằng tool Cheat Engine
Page 2
NỘI DUNG• Giới thiệu màn hình• Cấu hình chương trinh và cài đặt plugin cần thiết• 5 cửa sổ chính• Các cửa sổ khác
Giới thiệu tool Ollydbg v1.1
• Thanh ghi dữ liệu• Thanh ghi con trỏ• Cờ trạng thái• Cú pháp hợp ngữ• Các lệnh liên quan đến stack• Các lệnh lưu trữ dữ liệu• Các lệnh dùng cho tính toán• Các lệnh logic• Các lệnh so sánh• Các lệnh nhảy có điều kiện, không điều kiện
Hợp ngữ - Assembly
• Bài 1 Debug search thông tin cần thiết• Bài 2
• Reverse engine tìm CD.Key• Code C++ demo
Chương trinh demo
• Giới thiệu màn hình• Chương trình demo• Code C++ demo
Hướng dẫn sử dụng tool Cheat Engine 6.2
Page 3
OLLYDBG V1.1
OLLYDBG V1.1 – Giới thiệu
Ollydbg gọi tắt là Olly, là một chương trình dùng để debug bộ nhớ dễ sử dụng, trực quan.
Hiện nay đã có phiên bản 2.0, phiên bản này đang bị lỗi font và định dạng
Page 5
OLLYDBG V1.1 – Cài đặt và cấu hình Olly
Download trên link: http://www.ollydbg.de/ Appearance Directories
UDD PathPlugin Path
Page 6
OLLYDBG V1.1 – 5 cửa sổ Chính
Màn hình chính của Olly chia thành 5 cửa sổ chính (nhấn Tab/shift-Tab để chuyển đổi các cửa sổ với nhau).
Page 7
OLLYDBG V1.1 – 5 cửa sổ chính
The Disassembler window: xem code của chương trình ở dạng ngôn ngữ ASM
The Registers window: cửa sổ chứa thông tin chi tiết các thanh ghi: EAX, EBX, ECX, EDX,… các cờ trạng thái
The Dump window: xem dữ liệu bộ nhớ ở hai dạng hex và ascii
The Stack window: cho phép xem dữ liệu trước khi được thực hiện phải được nạp vào stack.
The Tip window: cho xem thông tin chi tiết về các dòng code.
Page 8
OLLYDBG V1.1 – Registers Window
The Registers window
Page 9
OLLYDBG V1.1 – Stack Window
The Stack window Nơi lưu trữ tạm thời các dữ liệu và địa chỉ Là cấu trúc dữ liệu một chiều (các phần tử được cất vào và lấy ra từ
một đầu của cấu trúc này) Cơ chế xử lý: LIFO (Last In First Out)
Page 10
OLLYDBG V1.1 – Dump Window The Dump window
Cửa sổ hiện thị nội dung bộ nhớ hay file. Cho phép tìm kiếm cũng như thực hiện các chức năng chỉnh sửa, thiết
lập Break points
Page 11
OLLYDBG V1.1 – cửa sổ khác (1)
Các cửa sổ khác L: mở cửa sổ log của Olly E: mở cửa sổ Executables, cửa sổ đưa ra danh sách những file có khả
năng thực thi được chương trình sử dụng như file exe, dlls, ocsx,… M: mở cửa sổ Memory, cho biết thông tin về bộ nhớ đang sử dụng bởi
chương trình. T: mở cửa sổ Thread, liệt kê các Threads của chương trình W: mở cửa sổ windows H: mở cửa sổ Handles
Page 12
OLLYDBG V1.1–cửa sổ khác (2) C: mở cửa sổ CPU.
/: mở cửa sổ Patches, cửa sổ này sẽ cho chúng ta các thông tin về những gì mà chúng ta đã edit trong chương trình
K: mở cửa sổ call stack, hiển thị một danh sách các lệnh call mà chương trình chúng ta thực hiện
B: mở cửa sổ Break Points R: mở cửa sổ References, cửa sổ này là kết quả cho những gì chúng ta
thực hiện chức năng search trong Olly
Page 13
ASSEMBLY LANGUAGE
ASSEMBLY – Thanh ghi dữ liệu (1)
Thanh ghi dữ liệu (32 bit) EAX: thường sử dụng trong các lệnh số học và chuyển dữ liệu. EBX: thanh ghi địa chỉ, chỉ đến vị trí ô nhớ. ECX: xác định số lần lặp của một lệnh. EDX: lưu kết quả của phép “*” hoặt “/’.
Thanh ghi dữ liệu (16 bit) AX = AH + AL (H: High; L: Low) BX = BH + BL CX = CH + CL DX = DH + DL
Page 15
ASSEMBLY – Thanh ghi dữ liệu (2)
Ví dụ: EAX = 0x12345678H (32 bits)
AH = 0x56H (8 bits) AX = 0x5678H
AL = 0x78H (8 bits)
Các thanh ghi khác cũng được phân tách tương tự như thanh ghi EAX
Page 16
ASSEMBLY – Thanh ghi con trỏ
Thanh ghi ESP Trỏ tới đỉnh hiện thời của ngăn xếp
Thanh ghi EBP Truy xuất dữ liệu trong ngăn xếp
Thanh ghi EIP Không bị tác động trực tiếp bởi các lệnh Cho biết địa chỉ của câu lệnh tiếp theo sẽ được thực hiện
Page 17
ASSEMBLY – Cờ trạng thái
CF (Carry Flag): Cờ nhớ – Bật khi phép tính vừa thực hiện có sử dụng bit nhớ
AF (Auxiliary Carry Flag): cờ nhớ phụ– Bật khi phép tính vừa thực hiện có sử dụng bit nhớ phụ
PF (Parity Flag): Cờ chẵn lẻ– Bật khi kết quả của phép tính vừa thực hiện có chẵn bit 1
ZF (Zero Flag): Cờ Zero– Bật khi kết quả của phép tính vừa thực hiện = 0
SF (Sign Flag): Cờ dấu– Bật khi kết quả của phép tính có bit cao nhất được bật
OF (Overflow Flag): Cờ tràn– Bật khi phép tính vừa thực hiện gây ra tràn số
Page 18
ASSEMBLY – Cú pháp
Câu lệnh hợp ngữ có cú pháp sau:Tên Toán hạng đích Toán hạng nguồn
Ví dụ:MOV EAX, 0x12; MOV EAX, DWORD PTR [401000];
Page 19
ASSEMBLY–lệnh liên quan Stack (1)
PUSH– Dùng để cất / thêm dữ liệu vào trong ngăn xếp
– Ví dụ:
Page 20
ASSEMBLY–lệnh liên quan Stack (2)
POP– Lấy giá trị từ đỉnh stack vào một nơi mà chúng ta chỉ định để nhận giá trị
được lấy ra
– Ví dụ:
POP Eax; // lấy giá trị từ đỉnh stack và lưu nó vào thanh ghi EAX
Page 21
ASSEMBLY–lệnh lưu trữ dữ liệu (1)
MOV– Gán dữ liệu hay số vào thanh ghi bộ nhớ
– Ví dụ:
Page 22
ASSEMBLY–lệnh lưu trữ dữ liệu (2)
MOVSX– Thực hiện sao chép nội dung của toán hạng nguồn, có thể là thanh ghi
hay ô nhớ (với điều kiện toán hạng nguồn phải có độ dài nhỏ hơn toán hạng đích) vào toán hạng đích đồng thời sẽ điền đầy các bit bên trái bằng bít có trọng số cao nhất (số 1 hay F)
– Ví dụ:
Page 23
ASSEMBLY–lệnh lưu trữ dữ liệu (3)
XCHG– Trao đổi nội dung của hai toán hạng. – Ví dụ:
Page 24
ASSEMBLY–lệnh lưu trữ dữ liệu (4)
NOP– Lệnh này không thực hiện một công việc gì cả ngoại trừ việc tăng nội
dung của thanh ghi EIP (không gây ra bất kỳ thay đổi nào trong thanh ghi, stack hay memory).
– Dùng vào việc hủy bỏ bất kỳ câu lệnh nào
Page 25
ASSEMBLY–lệnh cho tính toán (1)
INC– Cộng thêm 1 vào nội dung của thanh ghi hay một ô nhớ
DEC – Trừ thêm 1 vào nội dung của thanh ghi hay một ô nhớ– Ví dụ:
Page 26
ASSEMBLY–lệnh cho tính toán (2)
ADD– Lệnh này được sử dụng để cộng nội dung
Giữa hai thanh ghi, Một thanh ghi và một ô nhớ Cộng một số với một thanh ghi Cộng một số với một ô nhớ
Lệnh sau tương đương ADD EAX, 1 <==> INC EAX
Page 27
ASSEMBLY–lệnh cho tính toán (3)
SUB– Lệnh này được sử dụng để trừ hai nội dung
Giữa hai thanh ghi, Một thanh ghi và một ô nhớ Trừ một số với một thanh ghi Trừ một số với một ô nhớ
Lệnh sau tương đương SUB EAX, 1 <==> DEC EAX
Page 28
ASSEMBLY–lệnh cho tính toán (4)
MUL Cú pháp: MUL Toán hạng gốc
– Nhân số không dấu, trong trường hợp này toán hạng gốc là số nhân. Tùy theo độ dài của toán hạng gốc mà ta có ba trường hợp để tổ chức phép nhân,
– Nếu gốc là số 8 bit: AL * Gốc• Số bị nhân phải là số 8 bit để trong AL• Kết quả sau khi nhân lưu trong : AX
– Nếu gốc là số 16 bit: AX * Gốc• Số bị nhân phải là số 16 bit để trong AX• Kết quả sau khi nhân lưu trong DX, AX
– Nếu gốc là số 32 bit: EAX * Gốc• Số bị nhân phải là số 32 bit để trong EAX• Kết quả sau khi nhân lưu trong EDX, EAX
Page 29
ASSEMBLY–lệnh cho tính toán (5)
– Ví dụ (MUL):MUL ECX thực hiện nhân ECX với EAX, kết quả sẽ được lưu vào EDX:EAX
EAX: lưu trữ kết quả phép nhân EDX: lưu trữ phần dư
Page 30
ASSEMBLY–lệnh cho tính toán (6)
IMUL Cú pháp: MUL Toán hạng gốc
– Nhân số có dấu, trong trường hợp này toán hạng gốc là số nhân. Tùy theo độ dài của toán hạng gốc mà ta có ba trường hợp để tổ chức phép nhân,
– Nếu gốc là số 8 bit: AL * Gốc• Số bị nhân phải là số 8 bit để trong AL• Kết quả sau khi nhân lưu trong : AX
– Nếu gốc là số 16 bit: AX * Gốc• Số bị nhân phải là số 16 bit để trong AX• Kết quả sau khi nhân lưu trong DX, AX
– Nếu gốc là số 32 bit: EAX * Gốc• Số bị nhân phải là số 32 bit để trong EAX• Kết quả sau khi nhân lưu trong EDX, EAX
Page 31
ASSEMBLY–lệnh dùng tính toán (7)
DIV Cú pháp: DIV Toán hạng gốc
– Chia số không dấu, trong trường hợp này toán hạng gốc là số chia. Tùy theo độ dài của toán hạng gốc mà ta có hai trường hợp để tổ chức phép chia,
– Nếu số 16 bits chia cho gốc là số 8 bit: AX / Gốc• Số dư lưu trong AH• Thương lưu trong AL
– Nếu số 32 bits chia cho gốc là số 16 bit: EAX / Gốc• Số dư lưu trong DX• Thương lưu trong AX
Page 32
ASSEMBLY–lệnh dùng tính toán (8)
IDIV Cú pháp: IDIV Toán hạng gốc
– Chia số có dấu, trong trường hợp này toán hạng gốc là số chia. Tùy theo độ dài của toán hạng gốc mà ta có hai trường hợp để tổ chức phép chia,
– Nếu số 16 bits chia cho gốc là số 8 bit: AX / Gốc• Số dư lưu trong AH• Thương lưu trong AL
– Nếu số 32 bits chia cho gốc là số 16 bit: EAX / Gốc• Số dư lưu trong DX• Thương lưu trong AX
Page 33
ASSEMBLY–lệnh cho tính toán (9)
XADD– Thực hiện hai lệnh XCHG, ADD
NEG– Thực hiện bù hai của một toán hạng hay còn gọi là đảo dấu của một
toán hạng ( bù hai đảo bit của toán hạng và cộng thêm 1)– Ví dụ
Page 34
ASSEMBLY – Các lệnh logic
Page 35
ASSEMBLY – lệnh so sánh (1)
CMP– Cú pháp: CMP Toán hạng đich, Toán hạng nguồn– Mục đích dùng để so sanh hai toán hạng với nhau– Tác dụng chủ yếu lên cờ – Bảng công thức
Page 36
ASSEMBLY – lệnh so sánh (2)
TEST– Cú pháp: TEST Toán hạng đich, Toán hạng nguồn– Công thức
Toán hạng nguồn = Toán hạng đích ZF = 1 Toán hạng nguồn khác toán hạng đích ZF = 0
Page 37
ASSEMBLY – Các lệnh nhảy (1)
Lệnh nhảy không điều kiện– Cú pháp: JMP <Vị trí nhảy đến>– Chương trình gặp lệnh này sẽ nhảy ngay lập tức – Ví dụ:
• JMP [401000];
Page 38
ASSEMBLY – Các lệnh nhảy (2)
Lệnh nhảy có điều kiện
Page 39
ASSEMBLY – Các lệnh nhảy (3)
Page 40
DEMO
OLLYDBG, DEMO – Bài 1Phân tích chương trình
Page 42
OLLYDBG, DEMO – Bài 2Phân tích chương trìnhCode C++ demo
Page 43
CHEAT ENGINE 6.2
CHEAT ENGINE 6.2 – Giới thiệuPhân tích chương trình
Code C++ demo
Page 45
Thank you
Page 46
• http://learn-tech-tips.blogspot.com