Archive for the ‘IDA Pro section’ Category


Trước khi đi vào nội dung chính của bài viết, tôi xin cảm ơn bạn sinh viên nào đó “cuối tháng” vẫn donate vào tài khoản của tôi! Trân trọng!! Số tiền donate mà tôi nhận được, tôi sẽ dành để làm những công việc thiện nguyện hoặc những việc mà tôi thấy có ích và có giá trị. Đơn cử như góp một phần nhỏ bé (https://www.facebook.com/permalink.php?story_fbid=10158548818576598&id=554051597) để mong cháu sẽ khoẻ mạnh bình thường, được đi học, được trưởng thành và đóng góp cho xã hội!

…. Để gió cuốn đi…..

Để giải quyết bài tập ở phần trước, tôi sẽ giải thích thêm về một số điểm có thể các bạn còn chưa rõ và sau đó chúng ta sẽ tìm cách để xây dựng một PoC. Một trong những điểm chưa rõ ràng là nhiều lúc chúng ta thường chấp nhận độ dài của mảng do IDA gợi ý cho chúng ta và đôi khi chúng ta phải tự đặt nghi vấn và tự phân tích, phán đoán như trong phần trước rồi từ đó khẳng định được mảng sẽ có giá trị lớn hơn so với giá trị mà IDA đã gợi ý.

Như vậy, rõ ràng là để làm được thì sẽ phải phụ thuộc rất nhiều vào kinh nghiệm của từng người. Ở phần này tôi sẽ cố gắng giải thích thêm thông qua một vài ví dụ cụ thể.

Hãy xem ví dụ đơn giản sau đây:

Chương trình yêu cầu nhập một số từ bàn phím và lưu vào biến size. Thực hiện kiểm tra và thoát khỏi chương trình nếu size >= 0x200. Sau đó, sử dụng một vòng lặp để đọc kí tự từ bàn phím và gán vào buffer, với số lần lặp phải thỏa mãn điều kiện (i <= size) && ((ch = getchar()) != EOF) && (ch != ‘\n’). Như vậy, có thể thấy nếu bạn nhập giá trị cho size10 nhưng bạn chỉ nhập vào một kí tự và nhấn enter thì buffer cũng chỉ được gán một kí tự đó mà thôi.

(more…)

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…)