REVERSING WITH IDA FROM SCRATCH (P31)

Posted: September 25, 2020 in IDA Tutorials, REVERSING WITH IDA FROM SCRATCH (P31)
Tags: ,

Phần 31 này sẽ đề cập tới việc cài đặt Windbg để làm việc với IDA. Như các bạn đã biết (hoặc có thể chưa biết), Windbg là một trình debugger mạnh, hàng chính hãng của M$. Trình debugger nổi tiếng này có thể được quản lý từ giao diện của IDA và nó là công cụ không thể thiếu đối với những ai đang tìm hiểu hoặc làm việc trong lĩnh vực tìm kiếm và khai thác lỗ hổng phần mềm (nhưng thú thật tôi cũng ít khi dùng tới nó 😦 ). Điểm bất tiện có lẽ nằm ở giao diện sử dụng của trình debugger này, gần như tất cả các thao tác làm việc với nó đều thông qua các lệnh dạng console và khá phức tạp để nắm được cũng như sử dụng thành thạo các câu lệnh này. Với những ai đã quen dùng OllyDbg/x64dbg, khi chuyển qua dùng thử Windbg chắc đều có chung cảm giác là khó dùng.

Tuy nhiên, chúng ta có thể sử dụng giao diện debug của IDA, kết hợp với sự hỗ trợ nền bên dưới là engine của Windbg. Sự kết hợp này vô cùng hữu ích khi bạn muốn thực hiện debug kernel, hoặc sử dụng để lấy thông tin về trạng thái của heap trong trường hợp muốn khai thác các lỗi như heap overflowhoặc after free mà tôi và các bạn sẽ cùng nhau tìm hiểu ở các bài viết tiếp theo.

Có rất nhiều cách để cài đặt WinDbg. Tuy nhiên, mỗi cách lại một kiểu và bạn sẽ phải tự tìm một cách cài đặt hiệu quả với máy của mình. Như tôi đang sử dụng Windows 10, tôi sẽ tải Windows 10 SDK từ website của Microsoft:

Sau khi download thành công, ta sẽ tiến hành cài đặt. Khi các tùy chọn xuất hiện, lựa chọn để cài đặt công cụ Debugging Tools for Windows như hình dưới đây:

Do ta chỉ cần cài đặt mỗi Windbg nên bỏ qua các tùy chọn khác. Vì mỗi hệ điều hành Windows lại có bộ SDK dành riêng, cho nên bạn có thể làm tương tự trên các bản Windows khác để cài đặt thành phần tương ứng.

Sau khi cài đặt thành công, tìm đến thư mục cfg trong thư mục cài đặt của IDA. Tại đó, tìm file ida.cfg:

Sửa file này và cấu hình đường dẫn nơi cài đặt của WinDbg x64 (do tôi đang cấu hình cho bản IDA 7; còn nếu bạn sử dụng IDA 6.8 thì sử dụng đường dẫn của WinDbg x86) cho thông số DBGTOOLS. Trên máy tôi, đường dẫn tới WinDbg x64 như sau:

Do vậy, trong tập tin ida.cfg, tìm tới chỗ cấu hình DBGTOOLS và sửa lại như sau:

Chỉnh lại đường dẫn chính xác và nhớ sử dụng \\ thay vì \ để phân tách giữa các thư mục. Lưu lại những gì đã thay đổi. Sau đó mở bất kỳ tệp thực thi nào và tiến hành đặt một break-point:

Tiếp theo, cấu hình thay đổi trình debugger trên IDA thành Windbg debugger:

Sau đó, cho thực thi chương trình. Nếu bạn nhận được thông báo IDA không tìm thấy Windbg thì hãy kiểm tra lại xem đường dẫn đã chính xác chưa, hoặc có vấn đề gì trong quá trình cài đặt hay không? (tham khảo thêm link sau). Nếu thành công ta sẽ có được kết quả tương tự như hình dưới đây:

Ta thấy, chương trình đã dừng lại tại break-point đã đặt. Lúc này, có cảm giác chương trình dừng lại bởi trình gỡ lỗi Win32 local debugger của IDA như các bạn đã quen ở các phần trước. Tuy nhiên, nếu để ý trên hình, bạn sẽ thấy bên dưới, nơi thường là thanh Python thì giờ đây là WINDBG xuất hiện (nếu như không xuất hiện thì bạn nên kiểm tra lại). Bằng việc nhấn vào chữ WINDBG, ta có thể chuyển lại về thanh Python nếu cần:

Như vậy, có nghĩa là tính đến thời điểm này mọi thứ đang diễn ra tốt đẹp, việc cài đặt và cấu hình đã chuẩn. Chúng ta có thể đồng thời sử dụng giao diện của IDA và câu lệnh để tương tác với Windbg. Hãy thử một số lệnh xem kết quả thế nào:

Nó đã hoạt động rồi :). Ta có thể thấy danh sách các modules được liệt kê sau khi gõ lệnh “lm” tại thanh Windbg. Tại giao diện của IDA, ta cũng có thể truy vấn danh sách các modules bằng cách truy cập:

Kết quả có được như hình dưới đây:

Một điều quan trọng khác trong việc debug với Windbg đó là cài đặt đúng symbols cho hệ thống được debug. Symbols sẽ hỗ trợ cho phép debugger kết hợp đúng địa chỉ trong file đang debug với tên biến, tên hàm hoặc mã nguồn và dòng lệnh chính xác. Ta thử thiết lập cấu hình symbols cho Windbg, gõ lệnh sau tại thanh Windbg: .reload

Nhận được thông báo lỗi như trên hình là do tôi chưa cấu hình vị trí để lưu các tập tin symbols. Tiến hành tạo một thư mục tại ổ C với tên là symbols (C:\symbols) (nhớ là luôn phải chạy IDA ở quyền admin, nếu không thì các symbols sẽ không thể lưu được vào thư mục đã tạo). Sau khi tạo thư mục xong, truy cập phần thiết lập Environment Variables của hệ điều hành:

Tại user variables, chúng ta thêm một biến môi trường mới _NT_SYMBOL_PATH như sau:

Sau khi thiết lập xong, sử dụng cmd.exe và gõ lệnh set. Nếu kết quả như hình dưới đây là ok:

Ngoài ra, trên máy tôi phải cài đặt thêm Redistribuable Microsoft Visual C++ 2008:

Sau đó, bạn có thể phải khởi động lại máy hoặc là khởi động lại tiến trình Windows Explorer (explorer.exe). Tiếp theo, chạy lại IDA (nhớ là ở quyền admin), nạp lại file và thực hiện debug bằng Windbg, ta thấy nó sẽ tải về các symbols file từ M$ như hình dưới đây:

Kiểm tra thư mục symbols các bạn sẽ thấy một loạt danh sách các symbols đã được tải về máy:

Sử dụng câu lệnh lm để liệt kê các modules, sẽ thấy đường dẫn tới thư mục symbols mà ta cấu hình xuất hiện kèm theo các file pdb đã tải về như đã thấy ở hình trên:

Nếu trên máy các bạn cũng có kết quả tương tự như trên hình thì chúc mừng các bạn, môi trường làm việc đã sẵn sàng. Để kiểm tra các symbols, ta sử dụng lệnh “x”:

Ví dụ như sau:

Ngoài ra, ta có thể lọc để thu gọn khoảng tìm kiếm bằng cách sử dụng các ký tự đại diện, ví dụ:

Tại cửa số liệt kê danh sách các modules trong IDA, ta có thể nhấn chuột phải vào module cần nạp và chọn Load debug symbols. Ví dụ:

Ta sẽ có được thông tin trong giao diện IDA:

Ta cũng có thể đặt breakpoint từ giao diện IDA như chúng ta vẫn thường làm với phím F2. Nhưng ở đây, ta sẽ thực hiện bằng các lệnh từ thanh Windbg, ví dụ:

Sử dụng lệnh “bl” để liệt kê danh sách các breakpoint đã thiết lập của Windbg (break-point này sẽ không được quản lý tại cửa sổ Breakpoints của IDA):

Như trên hình, trong Windbg tất cả các breakpoints đều được liệt kê, trong khi tại IDA chỉ xuất hiện nhưng bp mà ta thiết lập thông qua giao diện của IDA.

Ok, phần 31 xin phép được dừng lại ở đây. Qua phần này tôi và các bạn đã hoàn thành việc cài đặt và thiết lập được một môi trường tương tác giữa IDA và WinDbg. Trong các phần tiếp theo chúng ta sẽ tiếp tục tìm hiểu thêm thông qua các ví dụ minh họa.

See the source image
Source: https://www.youtube.com/watch?v=hM2Zvsak3GM

Hẹn gặp các bạn ở phần 32!

Xin gửi lời cảm ơn chân thành tới thầy Ricardo Narvaja!

m4n0w4r

Ủng hộ tác giả

Nếu bạn cảm thấy những gì tôi chia sẻ trong bài viết là hữu ích, bạn có thể ủng hộ bằng “bỉm sữa” hoặc “quân huy” qua địa chỉ:

Tên tài khoản: TRAN TRUNG KIEN
Số tài khoản: 0021001560963
Ngân hàng: Vietcombank

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.