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

REVERSE ENGINEERING BASIC CSAPP SOLUTION

11 387 0

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Lab Assignment của trường CMU – USA. Bomb defusing GameCMU đã xây dựng một trò chơi từ bộ kiến thức trong chương 3 sách CSAPP. Một chương trình đã được lập trình sẵn và có hoạt động như một quả bomb máy tính. Quả bomb này gồm 6 pha, mỗi pha yêu cầu một input riêng để ngắt pha. Nếu input sai, bomb sẽ nổ và trò chơi kết thúc.

BÁO CÁO THỰC HÀNH LAB 03: REVERSE ENGINEERING BASIC Nhóm sinh viên: Nguyễn Cao Hòa 13520287 Huỳnh Ngọc Cảnh 13520067 Pha Sau hoàn thành xong cài đặt làm theo hướng dẫn chạy chương tình tiến hành giải với 6phase - Ở giao diện IDE ta chọn phase ấn F5 chương trình chuyển sang giao diện hình sau: Tiến hành chạy giải phase Giao diện nhập đáp án (phía máy ảo linux) giống hình sau Ta tiến hành phân tích + Ban đầu với biến a1 mà chương trình yêu cầu nhập vào : int result Nó lưu kết mà ta nhập vào sau goi đến hàm strings_not_qual() để tiến hành so sánh giá trị a1 chuỗi vừa nhập chuỗi : “Public speaking is very easy” Nếu giá trị ta nhập vào chuỗi hàm explore_bomp() gọi kết hình sau Pha - Ban đầu để khai báo biến v1 (dùng để duyệt phần tử vòng lặp while), int result kết trả phase mà ta chạy trước Mảng số nguyên v3[6] phần chứa giá trị đáp án mà ta nhập vào - Sau chương tình đọc chuỗi s mà ta nhập vào bàn phím Kết lưu vào v3[6] hàm read_six_number(s, (int)v3) - Mỗi giá trị mang bit có kết result v3[0] * (1 + 1) = * = Phần tử thứ ta phải nhập :2 v1 = => v3[1] * (2 + 1) = * = Phần tử thứ ta phải nhập :6 v1 = => v3[2] * (3 + 1) = * = 24 Phần tử thứ ta phải nhập :24 v1 = => v3[3] * (4 + 1) = 24 * = 120 Phần tử thứ ta phải nhập : 120 v1 = => v3[4] * (5 + 1) = 120 * = 720 Phần tử thứ ta phải nhập : 720 Vậy đáp án phase là: 24 120 720 Pha - Từ phần bôi đỏ ta dự đoán từ khóa gồm ba biến Tiếp theo phân tích phần code bên ta thấy chương trình yêu cầu nhập vào hai biến số để lưu vào eax Ba biến dự đoán có kiểu int char int - Nếu số lượng biến nhập vào nhỏ chương trình gọi đến explode_bomb kích hoạt bom => bomb nổ - Nếu giá trị ta nhập vào quy định chương trình nhảy vào case phía Chương trình chọn case tùy thuộc vào giá trị ta nhập vào - Ở kiểm tra với biến số Chương trình lựa chọn đưa ta cào case số -Ở chương trình tiến hành so sánh biến thứ ba ta nhập vào với 0D6h => có giá trị 214 Nếu giá trị biến thứ ta nhập vào không 214 hàm explore_bomb kích hoạt Ngược lại chương trình so sánh biến thứ hai với giá trị 62h => kí tự b Như từ khóa để phá phase : b 214 Pha Để dễ thực việc giải bom ta debug sang code C - Đầu tiên khai báo biến result biến v2 Ở câu lệnh ta thấy “%d “ => giá trị nhập vào số nguyên Hàm so sánh đầu vào với Nếu đầu vào nhỏ nhảy xuống hàm explode_bomb(); - Sang hàm explode_bomb(); thực việc in việc bom nổ dừng lại - Nếu thoải điều kiện nhập vào thực việc gán biến result = func4(v2); - Ta vào hàm func4(); để xem xét - Lại tiếp tục khai báo biến v1 biến result Ta thấy hàm func4(x) trả kết func4(x-1) + func4(x-2) o func4(1) = o func4(0) = o func4(2) = func4(1) + func4(0) = + = o func4(3) = func4(2) + func4(1) = +1 = o func4(4) = func4(3) + func4(2) = + = o func4(5) = func4(4) + func4(3) = + = o func4(6) = func4(5) + func4(4) = + = 13 o func4(7) = func4(6) + func4(5) = 13 +8 = 21 o func4(8) = func4(7) + func4(6) = 21 +13 = 34 o func4(9) = func4(8) + func4(7) = 34 +21 = 55 - Tại ta lại dừng 55 Vì hàm phase4 ta thấy kết khác 55 gọi lại hàm explode_bomb(); bom nổ hihihi Pha - Khai báo biến result , chuỗi v3, v4 Kiểm tra điều kiện nhập vào phải chuỗi có ký tự Nếu nhiều ký tự Bom nổ - Và để tạo chuỗi v3 phải thực vòng lặp lần để lấy ký tự từ mảng array_123[] - Mảng array_123[] - Ta chuyển từ Hex sang ký tự bảng mã ASCII i 73 72 76 65 61 77 68 6F 62 70 6E 75 74 66 67 s r v e a w h o b p n u t f g - Ta xét ký tự chuỗi giants nằm vị trí : 67 69 61 6E 74 73 Ta thực phép tính toán hàm - Và chuỗi opekma tương ứng Pha - Đầu tiên tiến hành khai báo biến Vào hàm read_six_numbers() để xem xét - Điều kiện nhập vào phải số nguyên Nếu số nguyên Bom nổ - Tiến hành phân tích ta thấy số nguyên phải bé Và số nguyên không trùng Ta thấy tiến hành move esi+8 vào edx, move esi vào eax, sau tiến hành so sánh eax ebx, giá trị ghi edx nhỏ giá trị ghi eax => bomb - Ta tiến hành phân tích nội dung ghi esi esi + 0x8, thấy cấu trúc node node Mỗi node có phần tử Phẩn tử thứ tương ứng với node phần tử thứ trỏ, trỏ tới node Điều tương tự với ghi esi + 0x8 ((esi + 0x8)+0x8) - -

Ngày đăng: 07/06/2017, 15:12

Xem thêm: REVERSE ENGINEERING BASIC CSAPP SOLUTION

TỪ KHÓA LIÊN QUAN

w