Archive for the ‘OllyDbg tut_11’ Category

OllyDbg_tut11

Posted: September 22, 2008 in OllyDbg Tutorials, OllyDbg tut_11

Một cái đầu lạnh để vững vàng, một trái tim đỏ lửa để yêu và làm việc hết mình!

I. Giới thiệu chung

Chào các bạn, chúng ta lại gặp nhau trong phần 11 của loạt bài viết về OllyDbg. Lần trước, khi release phần 10 trên hai site : REA(reaonline.net)HVA(hvaonline.net) nhận thấy lượng download rất nhiều, chứng tỏ rằng các bài viết của tôi vẫn được các bạn quan tâm và ủng hộ. Đó chính là nguồn động viên lớn cho tôi để tôi tiếp tục viết tiếp các phần tiếp theo.Tiện đây tôi cũng xin lan man một chút, trước đây tôi cũng đã từng có một thời gian tham gia việc training và được quen biết với những đồng nghiệp mà sau này vẫn là những anh em tốt của tôi, lúc đó mặc dù công việc của chúng tôi là giảng dạy kiến thức cho người khác nhưng người sếp (người anh cả của chúng tôi) đã định hướng cho chúng tôi rằng: “Chúng ta đứng trên bục giảng không có nghĩa chúng ta tự coi mình là thầy của người khác, không có nghĩa chúng ta là người hiểu biết hơn những người đang ngồi nghe chúng ta nói, mà chúng ta chỉ là những người truyền đạt lại những kiến thức mà chúng ta biết, khơi gợi cho học viên khả năng tự tìm tòi và tự nghiên cứu.Quan hệ giữa học viên và giảng viên là quan hệ hoàn toàn bình đẳng, mọi vấn đề được đem ra trao đổi thẳng thắn theo phương pháp phản biện như thế mới tạo tâm lý thoải mái cho người học, khiến cho buổi học không phải là nơi truyền đạt kiến thức theo kiểu một chiều như những gì chúng ta thấy trên các trường lớp ở Việt Nam”.

Qua loạt tuts này cũng vậy, kiến thức tôi truyền tải cho các bạn chưa chắc đã đúng 100%, đó chỉ là những gì cá nhân tôi tích lũy được và truyền tải lại cho các bạn, cho nên nếu trong quá trình các bạn đọc thấy có những kiến thức nào tôi viết sai hoặc chưa đúng thì cứ góp ý thẳng thắn, vì như thế mới chứng tỏ các bạn thật sự quan tâm tới bộ tài liệu này. Ở phần trước tôi đã giới thiệu sơ qua về cách thiết lập BP, các thao tác thông qua command bar để đặt các bp với các lệnh BP và BPX, cung cấp thông tin về việc đặt memory bp và cách xử lý để có thể đặt bp nếu như chương trình sử dụng cơ chế anti-bp. Trong phần 11 này các bạn sẽ tìm hiểu thêm về các dạng Break Points khác như Hardware Breakpoints, ConditionalMessage BreakPoints, những điều thú vị đang nằm ở phía trước…. N0w….L3t’s G0!!!!!!!!!

II. BreakPoints in OllyDbg

1.Hardware Breakpoints :

Hardware Breakpoint là gì nhỉ? Tự nhiên nếu có ai hỏi tôi một câu hỏi như vậy chắc tôi cũng không biết phải giải thích thế nào. Ngay cả trong bài viết của lão làng Ricardo Navarja cũng không giải thích chi tiết về nó. Vậy là phải tự mình tìm hiểu rồi, đọc trong help file của Olly thì chỉ nhận được một chút thông tin như sau :

Hardware breakpoint (available only when running Debugger under Windows ME, NT, 2000 or XP). 80×86-compatible processors allow you to set 4 hardware breakpoints. Unlike memory breakpoint, hardware breakpoints do not slow down the execution speed, but cover only up to 4 bytes. OllyDbg can use hardware breakpoints instead of INT3 when stepping or tracing through the code.

Điều đầu tiên ta thu thập được qua đoạn này là Hardware breakpoint (viết tắt HWBP) không thể sử dụng được nếu như bạn dùng Olly trên môi trường Windows 98. Điều thứ hai là chúng ta được phép thiết lập tới 4 HWBP, so với Memory BP là quá đã rồi vì như ta đã biết tại một thời điểm Olly chỉ cho phép có duy nhất một memory bp. Thêm vào đó HWBP không làm châm quá trình thực thi của chương trình. Điều cuối cùng ta nhận được là HWBP không sử dụng INT3, vậy thì nó sử dụng lệnh gì để dừng sự thực thi của chương trình?? Chúng ta tiếp tục tìm hiểu thêm vậy J. Đi lòng vòng một hồi tôi cũng có thêm được một chút thông tin: HWBP được hỗ trợ trực tiếp bởi CPU, sử dụng một số thanh ghi đặc biệt hay còn được gọi là debug registers. Có bốn thanh ghi đó là : DR0, DR1, DR2, DR3, bốn thanh ghi này sẽ được sử dụng để lưu giữ những địa chỉ mà ta thiết lập HWBP. Điều kiện của mỗi break points để cho dừng sự thực thi của chương trình lại được lưu trong một thanh ghi đặc biệt khác là CPU register, đó là thanh ghi DR7. Khi bất kì một điều kiện nào thỏa mãn (TRUE) thì processor sẽ quăng một exception là INT1 (khà khà vậy là nó dùng INT1 nhé) và quyền điều khiển lúc này sẽ được trả về cho trình Debug của chúng ta. Có bốn khả năng để dừng sự thực thi của một chương trình :

  1. Khi một câu lệnh được thực thi.
  2. Khi nội dung của memory có thay đổi (modified).
  3. Khi một ví trí memory được đọc ra hoặc được cập nhật(updated).
  4. Khi một input-output port được tham chiếu tới. (cái này tôi cũng chưa tìm hiểu).

Khả năng của tôi cũng chỉ biết giải thích đến như thế, các bạn muốn tìm hiểu thêm vui lòng tìm đọc các tài liệu khác. Bây giờ là phần thực hành, mở Olly lên và load crackme vào nào :

Download toàn bộ bài viết tại đây :

ollydbg_tut11

Best Regards

kienmanowar