Archive for the ‘IDA Tutorials’ Category


As part of my work at Vincss, I wrote an article about “How to dump PE file from memory with IDA“. You can read here.

Regards,

m4n0w4r


Với những gì tôi và các bạn đã cùng tìm hiểu trong các phần trước thì trong phần này chúng ta sẽ thử phân tích một chương trình thực tế. Ý tưởng chính ở phần này là cung cấp cho các bạn hai phiên bản khác nhau của cùng một chương trình (Ứng dụng xem video: VLC), căn cứ vào phiên bản mới hơn các bạn áp dụng các kĩ thuật diffing để phân tích code của chương trình. Cách thực hiện diffing thì như tôi đã giới thiệu rồi, dựa vào đó các bạn cố gắng xem nếu có lỗi overflow thì sẽ xảy ở đâu, chứ không nhất thiết phải viết mã để khai thác.

Thông tin mô tả CVE của ứng dụng VLC các bạn xem tại đây. Lỗi buffer overflow xảy ra khi bạn mở một tệp có phần mở rộng là .ty trong phiên bản VLC từ 0.9.0 đến 0.9.4, từ đó cho phép kẻ tấn công có thể thực thi mã trái phép. Đây là một lỗi đã cũ, tuy nhiên mục đích của chúng ta là để tìm hiểu và học hỏi.

(more…)

Như thường lệ, xen kẽ với các bài tập thực hành là những nội dung lý thuyết để giúp củng cố kiến thức cũng như hoàn thiện và nâng cao kĩ năng, từ đó có thể tìm hiểu sâu và rộng hơn. Trong phần 28 này, tôi sẽ đề cập tới một số lý thuyết về các chủ đề mà trong quá trình RE ta cần phải biết.

Variable

Khi viết code của một chương trình, các bạn chắc không lạ gì với việc khai báo/ định nghĩa một biến. Ví dụ:

int temp = 4;

Với việc khai báo biến như trên, chương trình sẽ phải dành ra một không gian đủ cho việc lưu trữ, trong trường hợp này sẽ dành ra 4 bytes ở một vị trí bộ nhớ nào đó. Sau đó, khi giá trị 4 được gán vào biến này, ta sẽ có giá trị 4 của temp được lưu tại một địa chỉ bộ nhớ do chương trình chỉ định.

(more…)

Phần 27 này sẽ giải quyết bài tập (IDA_STRUCT.7z – do chính thầy Ricardo Narvaja biên soạn) mà tôi đã gửi kèm ở phần trước. File nén này gồm một file thực thi là ConsoleApplication4.exe và một file pdb đi kèm là ConsoleApplication4.pdb (mục đích để các bạn kiểm tra lại sau khi đã tự reverse code).

Thông thường, khi load chương trình vào IDA, IDA sẽ kiểm tra và phát hiện ra file mà chúng ta đang phân tích có link tới symbol file và hỏi xem có muốn load file này không? Ví dụ như hình dưới đây:

Tuy nhiên, trong các tính huống thực tế thì ta sẽ không có file pdb này. Do vậy, để đúng với thực tế tôi sẽ chọn No để không load kèm file. IDA sau khi phân tích xong sẽ dừng lại tại đây:

(more…)

Trong phần 26 này, chúng ta tiếp tục tìm hiểu thêm về struct. Hãy xem ví dụ bên dưới đây, đó là toàn bộ code của hàm main():

Trong ví dụ trên, tôi có một cấu trúc là MyStruct. Cấu trúc này được khai báo global (toàn cục) thay vì được khai báo local (cục bộ) bên trong thân hàm main(). Việc khai báo như vậy có thể cho phép khả năng xử lý tốt hơn giữa các hàm khi truyền vào biến có kiểu struct. Ta khai báo biến values có kiểu MyStruct. Đây là biến local và được khai báo trong hàm main(), như vậy biến này chỉ xuất hiện trong Stack của hàm main() mà thôi.

Cấu trúc MyStruct được định nghĩa bên ngoài hàm main() cùng với các hàm khác như trong hình dưới đây:

(more…)

Mặt trời là cái bếp lớn, còn tia nắng là than hồng
Mỗi ngày mà ta thức dậy, ta chỉ mong được an lòng
Hoàng hôn là dải lụa, còn màn đêm là tấm chăn
Mỗi đêm ta ngồi ta viết ta chỉ mong không bị cấm ngăn
_Đen_

STRUCTURES

Trong phần tiếp theo này, chúng ta sẽ bắt đầu tìm hiểu cách mà IDA Pro hỗ trợ để reverse các chương trình có sử dụng struct. Phần cuối bài viết sẽ là những giải đáp ngắn gọn về các bài tập IDA3.exeIDA4.exe đã gửi kèm ở phần trước.

Vậy structure là gì?

Nôm na như sau, các bạn đã biết về khái niệm một mảng (array) trong lập trình C, mảng là một tập hoặc một nhóm các phần tử (dữ liệu) có kiểu dữ liệu đồng nhất. Các phần tử của mảng được lưu tại các vùng nhớ liên tiếp. Tương tự như vậy, cấu trúc (structure) trong C cũng là một kiểu dữ liệu do người dùng định nghĩa, nhưng khác mảng, structure cho phép kết hợp các dữ liệu có kiểu khác nhau. Chi tiết hơn các bạn đọc thêm trong các tài liệu về lập trình C/C++.

(more…)

Phần 24 này tôi sẽ thực hành với file IDA2.exe đã gửi kèm ở phần trước. Cách làm với IDA2.exe cũng tương tự như cách đã thực hiện với file IDA1.exe, chỉ khác là trong file này có hai biến cần kiểm tra điều kiện, nếu thỏa mãn cả hai thì chúng ta sẽ tới được đoạn code hiển thị thông báo “you are a winnner man je\n”:

Như trên hình ta thấy biến var_14 được so sánh với giá trị 0x71727374h còn biến var_C được so sánh với giá trị 0x91929394, do đó ta phải tìm cách để có thể thay đổi giá trị các biến này. Trước tiên, tôi sẽ đổi tên chúng thành cookiecookie_2 để dễ dàng nhận biết trong code của chương trình:

(more…)