Archive for the ‘IDA Tutorials’ Category


Qua các bài viết trước, các bạn cũng đã biết CANARY là gì rồi, nó là một giá trị ngẫu nhiên được lưu vào bộ nhớ (biến) trên Stack, ngay phía trên giá trị của EBP (old frame) và địa chỉ trở về. Vì vậy, khi thực hiện overflow để ghi đè lên địa chỉ trở về thì giá trị này cũng sẽ bị ghi đè. Lúc đó, cuối chương trình sẽ có đoạn code thực hiện kiểm tra lại giá trị của CANARY, nếu như vẫn là giá trị ban đầu đã lưu thì chương trình sẽ tiếp tục thực thi bình thường, còn ngược lại nếu là một giá trị khác giá trị ban đầu thì chương trình sẽ chặn việc thực thi mã.

Gửi kèm theo bài viết này là ví dụ CANARY_sin_DEP.exe (hay CANARY_without_DEP) do thầy Ricardo Narvaja biên soạn để tôi và các bạn thực hành. Trong phần sau, chúng ta sẽ thực hành với một ví dụ có DEP và phải xây dựng ROP để vượt qua được CANARY. Code trong hai ví dụ là giống nhau, khác nhau chỉ là ở chỗ có cơ chế Stack CANARY được thêm vào nhằm ngăn không cho nó bị khai thác bằng cách ghi đè lên địa chỉ trở về.

Ta sẽ sử dụng lại script đã viết cho file NO_DEP.exephần 34 để trace code và xem tại sao script đó lại không áp dụng được với CANARY_sin_DEP.exe, từ đó cố gắng tìm hiểu cách thức để vượt qua cơ chế bảo vệ CANARY.

(more…)

Ở phần 36 này, tôi sẽ thực hiện lại ví dụ trong phần trước nhưng sẽ sử dụng mona đã tích hợp với Windbg. Do mona không hoạt động trong IDA được nên chúng ta sẽ sử dụng WinDbg riêng mà không sử dụng tích hợp với IDA.

Từ màn hình console, tôi chạy DEP.exe kèm theo một tham số truyền vào cho chương trình, nó sẽ dừng lại và đợi thông tin chúng ta nhập vào từ bàn phím:

Ta hoàn toàn có thể thực thi chương trình từ WinDbg, mục đích đơn giản là để dừng sự thực thi ở đâu đó khi mà DLL sẽ sử dụng làm ROP được nạp vào bộ nhớ. Cũng không quan trọng ngay cả khi chương trình bị crash. Trong trường hợp này, tôi đang ở bên trong hàm gets_s()Mypepe.dll đã được nạp vào bộ nhớ. Mở WinDbg (x86) và nhấn F6 để thực hiện Attach process:

(more…)

Lời tựa: Con người là loại động vật cấp cao và cũng đầy lòng trắc ẩn. Tôi không muốn một ngày nào đó, có người còm vào blog của tôi để hỏi đại loại: “Tiền anh được donate anh đã làm gì…?“. Kiểu như bài này: https://vtc.vn/hoai-linh-chua-chuyen-13-ty-dong-keu-goi-ung-ho-mien-trung-ar613537.html. Sáng nay đọc bài báo này https://vtc.vn/bo-la-benh-nhan-covid-19-vua-qua-doi-hai-con-nho-tu-cham-nhau-trong-khu-cach-ly-ar613273.html, tôi quyết định dùng số tiền mà những bạn đã donate cho tôi để ủng hộ hai cháu nhỏ.

Tiếp tục với phần 35, chúng ta sẽ làm việc với phiên bản có DEP. Như các bạn đã biết, code của ví dụ này tương tự như ở NO_DEP. Vậy điều gì sẽ xảy ra nếu tôi sử dụng lại script đã tạo cho file không có DEP ở phần trước?

Thay đổi lại tên file trong script để trỏ tới DEP.exe.

(more…)

Năm hết, tết đến… Màn hình điện thoại vụt sáng. Mở máy thấy tài khoản mốc được + xèng kèm theo lời chúc của một bạn sinh viên đến từ KMA. Rất cảm ơn em, lâu lâu mới thấy số dư TK thay đổi 🙂 . Năm mới anh cũng chúc gia đình em mạnh khỏe, vạn sự như ý, chúc em học tập tốt và sớm tìm được công việc phù hợp trong ngành InfoSec.

Trong phần 34 này, thầy Ricardo cung cấp hai ví dụ đã được ông biên dịch sẵn, một có sử dụng DEP và một không. Hai ví dụ đều có mã nguồn giống nhau, nhưng trong trường hợp này, thay vì thay đổi thông qua trình biên dịch thì thầy đã sử dụng API SetProcessDEPPolicy trực tiếp trong code của chương trình. Một với tham số là 0 (DEP off) và một với tham số là 1 (DEP on).

(more…)

Trong các phần trước, tôi đã cùng với các bạn cài đặt và chuẩn bị môi trường để làm việc giữa IDAWinDbg. Ở phần 33 này, chúng ta sẽ bắt đầu tìm hiểu quá trình thực hiện khai thác chương trình và thực thi mã nếu có thể. Tất nhiên, để có thể làm được thì cần phải trang bị các kiến thức cơ bản liên quan đến các cơ chế giảm thiểu và bảo vệ được áp dụng trên hệ điều hành Windows, từ đó tìm các cách thức để vượt qua. Đôi khi chúng ta có thể vượt qua được và cũng có lúc là không 🙂 . Điều này hoàn toàn bình thường! Như mục tiêu ban đầu của loạt bài viết này, đó là chúng ta sẽ đi thật chậm, từng chút một bằng cách nghiên cứu chúng. Trước tiên, hãy xem xét một số định nghĩa quan trọng.

(more…)