You are on page 1of 3

THỰC HÀNH

KIẾN THỨC NỀN TẢNG CHO KHAI THÁC LỖ HỔNG PHẦN MỀM

1. Yêu cầu chung


Khi làm bài tập, sinh viên cần đọc kỹ tài liệu hướng dẫn để hiểu được bản chất
vấn đề, chứ không chỉ gõ lại đoạn mã trong tài liệu (càng không copy-paste).
Khi chương trình đã chạy, hãy dịch ngược lại (disassemble) để kiểm tra sự
tương ứng giữa mã dịch ngược với mã ban đầu. Để dịch ngược, có thể sử dụng gdb
hoặc IDA.
2. Lập trình sử dụng Linux syscall
Bài 1. Hello world
Làm bài tập số 1 và số 2 ở đây: https://asmtutor.com/#lesson1
Hãy cho biết tại sao khi chương trình số 1 kết thúc thì lại có thông báo lỗi
‘Segmentation Fault’?
Bài 2. Subroutine
Làm bài tập số 3 và số 4 ở đây: https://asmtutor.com/#lesson3
Viết lại bài số 4 theo quy ước gọi hàm cdecl
Bài 3. In số nguyên
Tham khảo bài tập số 11 ở đây: https://asmtutor.com/#lesson11 (và các bài
trước đó), hãy viết chương trình in ra các số nguyên dương trên đoạn [a, b]
Yêu cầu viết các hàm theo quy ước gọi hàm cdel
Bài 4. Gọi chương trình
Làm bài tập số 19 ở đây: https://asmtutor.com/#lesson19
Bài 5. Socket (Nâng cao)
Làm các bài tập từ 29-35 ở đây: https://asmtutor.com/#lesson29
3. Lập trình sử dụng libc
Bài 6. Hello world với libc
Viết chương trình “Hello world” sử dụng libc theo hướng dẫn ở đây:
http://www.cs.lmu.edu/~ray/notes/nasmexamples/, hoặc ở đây:
https://stackoverflow.com/a/1023600/6153759.
Lưu ý: sử dụng gcc để link
nasm –f win32 <source ASM file name>
gcc <object file> [-o <output EXE file name>]
Yêu cầu thực hiện cả trên Linux và trên Windows; tuân thủ quy ước cdecl
khi gọi hàm libc.
Bài 7. Nhập xuất với libc
Căn cứ vào chương trình ở bài trước, hãy viết chương trình nhập vào một số
nguyên và in ra màn hình số đã nhập.

4. Sử dụng WinAPI
Bài 8. Hello world với WinAPI
Viết chương trình “Hello world” sử dụng hàm WinAPI theo hướng dẫn ở đây:
https://stackoverflow.com/a/1029093/6153759
nasm -f win32 <source file>
link /subsystem:console /entry:main <object file> kernel32.Lib
Lưu ý: Để biên dịch, cần sử dụng link.exe và thư viện kernel32.lib.
Bản thân link.exe lại phụ thuộc vào một dll (tùy phiên bản). Có thể sử dụng
các công cụ đó trong file nhúng dưới đây

linker.rar
Yêu cầu đọc tài liệu tra cứu để hiểu cú pháp của các hàm WinAPI được sử
dụng trong chương trình.
Bài 9. Hello world với WinAPI sử dụng GoLink
Viết chương trình “hello world” cho Windows theo hướng dẫn ở đây:
https://stackoverflow.com/a/12575061/6153759.
Lưu ý: tải GoLink ở đây: http://www.godevtool.com
So sánh kết quả dịch ngược (bằng IDA Pro) chương trình (file EXE) thu được
ở đây với kết quả dịch ngược chương trình thu được ở bài trước, từ đó rút ra kết luận
về cách thức gọi hàm WinAPI của link.exe và golink.exe.

You might also like