SlideShare a Scribd company logo
1 of 46
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 Path
Plugin 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 1
 Phân tích chương trình
Page 42
OLLYDBG, DEMO – Bài 2
 Phân tích chương trình
 Code C++ demo
Page 43
CHEAT ENGINE 6.2
CHEAT ENGINE 6.2 – Giới
thiệu Phân tích chương trình
 Code C++ demo
Page 45
Page 46

More Related Content

What's hot

Bài Giảng Vi Xử Lý ICTU
Bài Giảng Vi Xử Lý ICTUBài Giảng Vi Xử Lý ICTU
Bài Giảng Vi Xử Lý ICTUNgô Doãn Tình
 
Họ vi xử lí 8086 intel
Họ vi xử lí 8086 intelHọ vi xử lí 8086 intel
Họ vi xử lí 8086 inteldark_valley
 
Kien truc bo_lenh_mips
Kien truc bo_lenh_mipsKien truc bo_lenh_mips
Kien truc bo_lenh_mipsVN Phan
 
Lập trình C cho VĐK 8051
Lập trình C cho VĐK 8051Lập trình C cho VĐK 8051
Lập trình C cho VĐK 8051Mr Giap
 
Đề tài giáo trình: Lập trình hệ thống và điều khiển thiết bị từ xa
Đề tài giáo trình: Lập trình hệ thống và điều khiển thiết bị từ xaĐề tài giáo trình: Lập trình hệ thống và điều khiển thiết bị từ xa
Đề tài giáo trình: Lập trình hệ thống và điều khiển thiết bị từ xaViết thuê trọn gói ZALO 0934573149
 
KTMT Lý Thuyết Tổng Quát
KTMT Lý Thuyết Tổng QuátKTMT Lý Thuyết Tổng Quát
KTMT Lý Thuyết Tổng QuátDavid Nguyen
 
Kiến trúc máy tính và hợp ngữ bài 07
Kiến trúc máy tính và hợp ngữ bài 07Kiến trúc máy tính và hợp ngữ bài 07
Kiến trúc máy tính và hợp ngữ bài 07Nhóc Nhóc
 
Ngân hàng câu hỏi kiến trúc máy tính
Ngân hàng câu hỏi kiến trúc máy tínhNgân hàng câu hỏi kiến trúc máy tính
Ngân hàng câu hỏi kiến trúc máy tínhCao Toa
 
Thực hành lập trình led đơn codientu.info--
Thực hành lập trình led đơn   codientu.info--Thực hành lập trình led đơn   codientu.info--
Thực hành lập trình led đơn codientu.info--trungnb22
 
Chuong10
Chuong10Chuong10
Chuong10na
 
Cau hoi thi ktmt&h h
Cau hoi thi ktmt&h hCau hoi thi ktmt&h h
Cau hoi thi ktmt&h hĐức Sky
 
2 kien truc phan mem
2 kien truc phan mem2 kien truc phan mem
2 kien truc phan memLy hai
 

What's hot (20)

Bài Giảng Vi Xử Lý ICTU
Bài Giảng Vi Xử Lý ICTUBài Giảng Vi Xử Lý ICTU
Bài Giảng Vi Xử Lý ICTU
 
Họ vi xử lí 8086 intel
Họ vi xử lí 8086 intelHọ vi xử lí 8086 intel
Họ vi xử lí 8086 intel
 
Chuong 3
Chuong 3Chuong 3
Chuong 3
 
Hop ngu mips
Hop ngu mipsHop ngu mips
Hop ngu mips
 
Kien truc bo_lenh_mips
Kien truc bo_lenh_mipsKien truc bo_lenh_mips
Kien truc bo_lenh_mips
 
Vdk 8051
Vdk 8051 Vdk 8051
Vdk 8051
 
Lập trình C cho VĐK 8051
Lập trình C cho VĐK 8051Lập trình C cho VĐK 8051
Lập trình C cho VĐK 8051
 
Ktmt chuong 3
Ktmt chuong 3Ktmt chuong 3
Ktmt chuong 3
 
Đề tài giáo trình: Lập trình hệ thống và điều khiển thiết bị từ xa
Đề tài giáo trình: Lập trình hệ thống và điều khiển thiết bị từ xaĐề tài giáo trình: Lập trình hệ thống và điều khiển thiết bị từ xa
Đề tài giáo trình: Lập trình hệ thống và điều khiển thiết bị từ xa
 
Ktmt chuong 4
Ktmt chuong 4Ktmt chuong 4
Ktmt chuong 4
 
KTMT Lý Thuyết Tổng Quát
KTMT Lý Thuyết Tổng QuátKTMT Lý Thuyết Tổng Quát
KTMT Lý Thuyết Tổng Quát
 
Kiến trúc máy tính và hợp ngữ bài 07
Kiến trúc máy tính và hợp ngữ bài 07Kiến trúc máy tính và hợp ngữ bài 07
Kiến trúc máy tính và hợp ngữ bài 07
 
Bao cao full
Bao cao fullBao cao full
Bao cao full
 
Ktmt chuong 6
Ktmt chuong 6Ktmt chuong 6
Ktmt chuong 6
 
Ngân hàng câu hỏi kiến trúc máy tính
Ngân hàng câu hỏi kiến trúc máy tínhNgân hàng câu hỏi kiến trúc máy tính
Ngân hàng câu hỏi kiến trúc máy tính
 
Thực hành lập trình led đơn codientu.info--
Thực hành lập trình led đơn   codientu.info--Thực hành lập trình led đơn   codientu.info--
Thực hành lập trình led đơn codientu.info--
 
Chuong10
Chuong10Chuong10
Chuong10
 
Chuong6 hoạt động ngắt
Chuong6 hoạt động ngắtChuong6 hoạt động ngắt
Chuong6 hoạt động ngắt
 
Cau hoi thi ktmt&h h
Cau hoi thi ktmt&h hCau hoi thi ktmt&h h
Cau hoi thi ktmt&h h
 
2 kien truc phan mem
2 kien truc phan mem2 kien truc phan mem
2 kien truc phan mem
 

Viewers also liked

Применение трехмерного лазерного сканирования при модернизации гидротехничес...
Применение трехмерного  лазерного сканирования при модернизации гидротехничес...Применение трехмерного  лазерного сканирования при модернизации гидротехничес...
Применение трехмерного лазерного сканирования при модернизации гидротехничес...SAPR-Peterburg
 
Revolusi Bisnes 2015
Revolusi Bisnes 2015Revolusi Bisnes 2015
Revolusi Bisnes 2015Che Man
 
3D-визуализация как необходимый этап развития проекта
3D-визуализация как необходимый этап развития проекта3D-визуализация как необходимый этап развития проекта
3D-визуализация как необходимый этап развития проектаSAPR-Peterburg
 
RESUME of Engineer Ahmed R . Aziz _EEE 2016
RESUME of Engineer Ahmed R . Aziz _EEE 2016RESUME of Engineer Ahmed R . Aziz _EEE 2016
RESUME of Engineer Ahmed R . Aziz _EEE 2016Ahmed Aziz
 
Cache GitHub Continous Integration
Cache GitHub  Continous IntegrationCache GitHub  Continous Integration
Cache GitHub Continous IntegrationEduard Lebedyuk
 
Alan H Goldsmith Resume 2015
Alan H Goldsmith Resume 2015Alan H Goldsmith Resume 2015
Alan H Goldsmith Resume 2015ALAN H GOLDSMITH
 
Построение систем электронного архива и систем управления инженерными данными
Построение систем электронного архива и систем управления инженерными даннымиПостроение систем электронного архива и систем управления инженерными данными
Построение систем электронного архива и систем управления инженерными даннымиSAPR-Peterburg
 
서울시 미세먼지 데이터 분석
서울시 미세먼지 데이터 분석서울시 미세먼지 데이터 분석
서울시 미세먼지 데이터 분석SKKU
 

Viewers also liked (17)

Bài giảng Assembly
Bài giảng AssemblyBài giảng Assembly
Bài giảng Assembly
 
Применение трехмерного лазерного сканирования при модернизации гидротехничес...
Применение трехмерного  лазерного сканирования при модернизации гидротехничес...Применение трехмерного  лазерного сканирования при модернизации гидротехничес...
Применение трехмерного лазерного сканирования при модернизации гидротехничес...
 
Revolusi Bisnes 2015
Revolusi Bisnes 2015Revolusi Bisnes 2015
Revolusi Bisnes 2015
 
3D-визуализация как необходимый этап развития проекта
3D-визуализация как необходимый этап развития проекта3D-визуализация как необходимый этап развития проекта
3D-визуализация как необходимый этап развития проекта
 
E commerce
E commerce E commerce
E commerce
 
AMIP
AMIPAMIP
AMIP
 
Titan_IV
Titan_IVTitan_IV
Titan_IV
 
RESUME of Engineer Ahmed R . Aziz _EEE 2016
RESUME of Engineer Ahmed R . Aziz _EEE 2016RESUME of Engineer Ahmed R . Aziz _EEE 2016
RESUME of Engineer Ahmed R . Aziz _EEE 2016
 
t h a no 2 cv
t h a no 2 cvt h a no 2 cv
t h a no 2 cv
 
Cache GitHub Continous Integration
Cache GitHub  Continous IntegrationCache GitHub  Continous Integration
Cache GitHub Continous Integration
 
ENCRYPT.DOC
ENCRYPT.DOCENCRYPT.DOC
ENCRYPT.DOC
 
INTERPOL
INTERPOLINTERPOL
INTERPOL
 
Alan H Goldsmith Resume 2015
Alan H Goldsmith Resume 2015Alan H Goldsmith Resume 2015
Alan H Goldsmith Resume 2015
 
Построение систем электронного архива и систем управления инженерными данными
Построение систем электронного архива и систем управления инженерными даннымиПостроение систем электронного архива и систем управления инженерными данными
Построение систем электронного архива и систем управления инженерными данными
 
GLOVER_NFFP_04_Tech_Rpt
GLOVER_NFFP_04_Tech_RptGLOVER_NFFP_04_Tech_Rpt
GLOVER_NFFP_04_Tech_Rpt
 
builders logo
builders logobuilders logo
builders logo
 
서울시 미세먼지 데이터 분석
서울시 미세먼지 데이터 분석서울시 미세먼지 데이터 분석
서울시 미세먼지 데이터 분석
 

Similar to Assembly v1.0

Chương 3. Dịch ngược mã độc.pdf
Chương 3.  Dịch ngược mã độc.pdfChương 3.  Dịch ngược mã độc.pdf
Chương 3. Dịch ngược mã độc.pdfdong55
 
Chương 2 CPU và tập lệnh máy tính.ppt
Chương 2 CPU và tập lệnh máy tính.pptChương 2 CPU và tập lệnh máy tính.ppt
Chương 2 CPU và tập lệnh máy tính.pptDuongTranTrong
 
Kiến trúc máy tính và hợp ngữ bài 08
Kiến trúc máy tính và hợp ngữ bài 08Kiến trúc máy tính và hợp ngữ bài 08
Kiến trúc máy tính và hợp ngữ bài 08Nhóc Nhóc
 
Mô phỏng vi điều khiển
Mô phỏng vi điều khiểnMô phỏng vi điều khiển
Mô phỏng vi điều khiểnNguyễn Trung
 
Kiến trúc máy tính và hợp ngữ bài 05
Kiến trúc máy tính và hợp ngữ bài 05Kiến trúc máy tính và hợp ngữ bài 05
Kiến trúc máy tính và hợp ngữ bài 05Nhóc Nhóc
 
kien-truc-may-tinh-va-hop-ngu_pham-tuan-son_bai05_kien_truc_mips - [cuuduongt...
kien-truc-may-tinh-va-hop-ngu_pham-tuan-son_bai05_kien_truc_mips - [cuuduongt...kien-truc-may-tinh-va-hop-ngu_pham-tuan-son_bai05_kien_truc_mips - [cuuduongt...
kien-truc-may-tinh-va-hop-ngu_pham-tuan-son_bai05_kien_truc_mips - [cuuduongt...ME8M
 
vxl.vdk.TranThanhPhong
vxl.vdk.TranThanhPhongvxl.vdk.TranThanhPhong
vxl.vdk.TranThanhPhongLong Tran Huy
 
LP_TRINH_HP_NG_MIPS_Mc_dich.pdf
LP_TRINH_HP_NG_MIPS_Mc_dich.pdfLP_TRINH_HP_NG_MIPS_Mc_dich.pdf
LP_TRINH_HP_NG_MIPS_Mc_dich.pdfChuong
 
Scilab for Beginners (Vietnamese)
Scilab for Beginners (Vietnamese)Scilab for Beginners (Vietnamese)
Scilab for Beginners (Vietnamese)TBSS Group
 
BGKTMT Ch4 mức vi lập trình
BGKTMT Ch4 mức vi lập trìnhBGKTMT Ch4 mức vi lập trình
BGKTMT Ch4 mức vi lập trìnhCao Toa
 
Khao sat-ung-dung-matlab-trong-dieu-khien-tu-dong
Khao sat-ung-dung-matlab-trong-dieu-khien-tu-dongKhao sat-ung-dung-matlab-trong-dieu-khien-tu-dong
Khao sat-ung-dung-matlab-trong-dieu-khien-tu-dongTuấn Anh Phạm
 
Khao sat-ung-dung-matlab-trong-dieu-khien-tu-dong
Khao sat-ung-dung-matlab-trong-dieu-khien-tu-dongKhao sat-ung-dung-matlab-trong-dieu-khien-tu-dong
Khao sat-ung-dung-matlab-trong-dieu-khien-tu-dongKhoa Pham
 
Lap trinh-c-cho-vdk
Lap trinh-c-cho-vdkLap trinh-c-cho-vdk
Lap trinh-c-cho-vdkHiepsvd Bk
 
Viết Ngôn Ngữ Lập Trình 8051 PIC AVR
Viết Ngôn Ngữ Lập Trình 8051 PIC AVRViết Ngôn Ngữ Lập Trình 8051 PIC AVR
Viết Ngôn Ngữ Lập Trình 8051 PIC AVRMr Giap
 
Bài tập kiến trúc máy tính
Bài tập kiến trúc máy tínhBài tập kiến trúc máy tính
Bài tập kiến trúc máy tínhHa Nguyen
 
Thiết kế đồng hồ thời gian thực sử dụng DS1307, hiển thị trên 6 Led 7 thanh v...
Thiết kế đồng hồ thời gian thực sử dụng DS1307, hiển thị trên 6 Led 7 thanh v...Thiết kế đồng hồ thời gian thực sử dụng DS1307, hiển thị trên 6 Led 7 thanh v...
Thiết kế đồng hồ thời gian thực sử dụng DS1307, hiển thị trên 6 Led 7 thanh v...Thư Viện Số
 
Ngôn ngữ lập trình và ứng dụng B - Bộ môn đo lường điện tử
Ngôn ngữ lập trình và ứng dụng B - Bộ môn đo lường điện tửNgôn ngữ lập trình và ứng dụng B - Bộ môn đo lường điện tử
Ngôn ngữ lập trình và ứng dụng B - Bộ môn đo lường điện tửChia sẻ tài liệu học tập
 

Similar to Assembly v1.0 (20)

Chương 3. Dịch ngược mã độc.pdf
Chương 3.  Dịch ngược mã độc.pdfChương 3.  Dịch ngược mã độc.pdf
Chương 3. Dịch ngược mã độc.pdf
 
Chương 2 CPU và tập lệnh máy tính.ppt
Chương 2 CPU và tập lệnh máy tính.pptChương 2 CPU và tập lệnh máy tính.ppt
Chương 2 CPU và tập lệnh máy tính.ppt
 
Kiến trúc máy tính và hợp ngữ bài 08
Kiến trúc máy tính và hợp ngữ bài 08Kiến trúc máy tính và hợp ngữ bài 08
Kiến trúc máy tính và hợp ngữ bài 08
 
Mô phỏng vi điều khiển
Mô phỏng vi điều khiểnMô phỏng vi điều khiển
Mô phỏng vi điều khiển
 
Kiến trúc máy tính và hợp ngữ bài 05
Kiến trúc máy tính và hợp ngữ bài 05Kiến trúc máy tính và hợp ngữ bài 05
Kiến trúc máy tính và hợp ngữ bài 05
 
kien-truc-may-tinh-va-hop-ngu_pham-tuan-son_bai05_kien_truc_mips - [cuuduongt...
kien-truc-may-tinh-va-hop-ngu_pham-tuan-son_bai05_kien_truc_mips - [cuuduongt...kien-truc-may-tinh-va-hop-ngu_pham-tuan-son_bai05_kien_truc_mips - [cuuduongt...
kien-truc-may-tinh-va-hop-ngu_pham-tuan-son_bai05_kien_truc_mips - [cuuduongt...
 
Chuong2
Chuong2Chuong2
Chuong2
 
Td 2008
Td 2008Td 2008
Td 2008
 
vxl.vdk.TranThanhPhong
vxl.vdk.TranThanhPhongvxl.vdk.TranThanhPhong
vxl.vdk.TranThanhPhong
 
LP_TRINH_HP_NG_MIPS_Mc_dich.pdf
LP_TRINH_HP_NG_MIPS_Mc_dich.pdfLP_TRINH_HP_NG_MIPS_Mc_dich.pdf
LP_TRINH_HP_NG_MIPS_Mc_dich.pdf
 
Scilab for Beginners (Vietnamese)
Scilab for Beginners (Vietnamese)Scilab for Beginners (Vietnamese)
Scilab for Beginners (Vietnamese)
 
BGKTMT Ch4 mức vi lập trình
BGKTMT Ch4 mức vi lập trìnhBGKTMT Ch4 mức vi lập trình
BGKTMT Ch4 mức vi lập trình
 
Khao sat-ung-dung-matlab-trong-dieu-khien-tu-dong
Khao sat-ung-dung-matlab-trong-dieu-khien-tu-dongKhao sat-ung-dung-matlab-trong-dieu-khien-tu-dong
Khao sat-ung-dung-matlab-trong-dieu-khien-tu-dong
 
Khao sat-ung-dung-matlab-trong-dieu-khien-tu-dong
Khao sat-ung-dung-matlab-trong-dieu-khien-tu-dongKhao sat-ung-dung-matlab-trong-dieu-khien-tu-dong
Khao sat-ung-dung-matlab-trong-dieu-khien-tu-dong
 
Ch assembly
Ch assemblyCh assembly
Ch assembly
 
Lap trinh-c-cho-vdk
Lap trinh-c-cho-vdkLap trinh-c-cho-vdk
Lap trinh-c-cho-vdk
 
Viết Ngôn Ngữ Lập Trình 8051 PIC AVR
Viết Ngôn Ngữ Lập Trình 8051 PIC AVRViết Ngôn Ngữ Lập Trình 8051 PIC AVR
Viết Ngôn Ngữ Lập Trình 8051 PIC AVR
 
Bài tập kiến trúc máy tính
Bài tập kiến trúc máy tínhBài tập kiến trúc máy tính
Bài tập kiến trúc máy tính
 
Thiết kế đồng hồ thời gian thực sử dụng DS1307, hiển thị trên 6 Led 7 thanh v...
Thiết kế đồng hồ thời gian thực sử dụng DS1307, hiển thị trên 6 Led 7 thanh v...Thiết kế đồng hồ thời gian thực sử dụng DS1307, hiển thị trên 6 Led 7 thanh v...
Thiết kế đồng hồ thời gian thực sử dụng DS1307, hiển thị trên 6 Led 7 thanh v...
 
Ngôn ngữ lập trình và ứng dụng B - Bộ môn đo lường điện tử
Ngôn ngữ lập trình và ứng dụng B - Bộ môn đo lường điện tửNgôn ngữ lập trình và ứng dụng B - Bộ môn đo lường điện tử
Ngôn ngữ lập trình và ứng dụng B - Bộ môn đo lường điện tử
 

Assembly v1.0

  • 1.
  • 2. 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
  • 3. 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
  • 5. 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
  • 6. OLLYDBG V1.1 – Cài đặt và cấu hình Olly  Download trên link: http://www.ollydbg.de/  Appearance  Directories UDD Path Plugin Path Page 6
  • 7. 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
  • 8. 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
  • 9. OLLYDBG V1.1 – Registers Window  The Registers window Page 9
  • 10. 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
  • 11. 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
  • 12. 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
  • 13. 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
  • 15. 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
  • 16. 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
  • 17. 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
  • 18. 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
  • 19. 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
  • 20. 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
  • 21. 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
  • 22. 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
  • 23. 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
  • 24. 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
  • 25. 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
  • 26. 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
  • 27. 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
  • 28. 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
  • 29. 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
  • 30. 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
  • 31. 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
  • 32. 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
  • 33. 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
  • 34. 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
  • 35. ASSEMBLY – Các lệnh logic Page 35
  • 36. 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
  • 37. 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
  • 38. 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
  • 39. ASSEMBLY – Các lệnh nhảy (2)  Lệnh nhảy có điều kiện Page 39
  • 40. ASSEMBLY – Các lệnh nhảy (3) Page 40
  • 41. DEMO
  • 42. OLLYDBG, DEMO – Bài 1  Phân tích chương trình Page 42
  • 43. OLLYDBG, DEMO – Bài 2  Phân tích chương trình  Code C++ demo Page 43
  • 45. CHEAT ENGINE 6.2 – Giới thiệu Phân tích chương trình  Code C++ demo Page 45