Kỹ thuật anti debugging

Một phần của tài liệu CƠ SỞ AN TOÀN THÔNG TIN TÌM HIỂU VỀ DỊCH NGƯỢC VÀ CÔNG CỤ OLLYDBG (Trang 27 - 32)

Kỹ thuật này đòi hỏi người ghỡ rối phần mềm có kiên thức nâng cao, kinh nghiệm về phần mềm, về các kỹ thuật chống ghỡ lỗi phần mềm. Mỗi phương pháp chống ghỡ lỗi phần mềm thì có cách vượt qua là khác nhau. Như đã trình bày ở phần kỹ thuật

debugging, nếu một chương trình được chống ghỡ rối bằng phương pháp sử dụng các hàm thư viện liên kết động của windows thì ta có thể dễ dàng vượt qua bằng cách cố tình che giấu kết quả trả về hoặc cấu trúc nhân dữ liệu của hệ điều hành. Hoặc kỹ thuật chống ghỡ rối khi sử dụng các ngăt mềm có thể bị vượt qua bằng phương pháp nhảy byte.

Các kỹ thuật chống gỡ rối thường được sử dụng đó là:

• Sử dụng các hàm thư viện liên kết động nhằm phát hiện gỡ rối, có thể kể đến như hàm FindWindow trong thư viện user32.dll của windows, hoặc sử dụng hàm

IsDebuggerPresent.

• Phát hiện trực tiếp dựa tiến trình và luồng.

• Phát hiện dựa trên phần cứng và các thanh ghi.

• Phát hiện dựa trên độ trễ thời gian.

• Phát hiện mã sửa đổi.

• Phát hiện dựa trên các ngoại lệ.

2.3. Phần mềm OllyDbg

OllyDBG hay còn gọi tắt là Olly là công cụ debug rất phổ biến. Nhờ giao diện trực quan và dễ sử dụng nên Olly phù hợp với người dùng ở mọi trình độ khác nhau.

Có thể download phần mềm tại địa chỉ: http://www.ollydbg.de/ Hiện tại thì chúng ta vẫn đang thường sử dụng OllyDBG v1.10. Việc sử dụng OllyDBG cũng không có gì phức tạp, sau khi hoàn thành việc download, giải nén và chạy chương trình OLLYDBG.EXE mà không cần phải cài đặt.

Để mở 1 file .exe ta vào File -> Open hoặc ấn phím F3. Sau đó chọn đúng file .exe cần dùng.

Ta có các thông tin OllyDBG hiển thị ra như sau:

Cửa sổ OllyDBG được chia ra làm 5 cửa sổ con :

Disassembler window: Các đoạn mã của chương trình dưới dạng code assembly và các comment tại các dòng code đó. Đây là cửa sổ rất quan trọng, chúng ta sẽ làm việc rất nhiều trên cửa sổ này. Khi bạn muốn debug một chương trình, bạn load file thực thi của chương trình đó vào trong Olly. Các chương trình mà bạn load vào Olly là những chương trình có thể được code bằng những ngôn ngữ khác nhau như :VB, VC++, Borland Delphi hay MASM nhưng tại cửa sổ này toàn bộ code của chương trình sẽ được list ra dưới dạng các mã ASM. Theo mặc định của Olly thì bất cứ chương trình nào mà bạn load vào Olly sẽ được Olly tiến hành phân tích toàn bộ code chính của chương trình đó và đưa ra các comment thích hợp.

Register window: Đây là cửa số chứa thông tin chi tiết về các thanh ghi như eax, ebx, ecx v….v…..Các cờ trạng thái cũng được quản lý tại cửa sổ này.

Tip window: Các thông tin bổ sung cho 1 dòng code. Các thông tin này khá hữu ích trong quá trình debug. Khi ta đang ở tại một dòng code nào đó trong quá trình debug, Olly sẽ cho thấy thông tin chi tiết về dòng code đó. Lấy ví dụ đơn giản như sau : nếu ta debug tới dòng lệnh “ mov eax , dword ptr [123]”. Thì cửa sổ này sẽ cho ta biết được giá trị hay con số nào đang được lưu giữ tại [123].

Dump window: Cho phép người sử dụng xem và chỉnh sửa các giá trị trong bộ nhớ của chương trình đang được debug. Ta có thể chọn nhiều định dạng khác nhau để biểu diễn nội dung của memory trong cửa số này : byte, text, integer, float, address, disassembly hoặc PE Header. Cửa sổ này cho phép chúng ta tìm kiếm cũng như thực hiện các chức năng chỉnh sửa, thiết lập các Break points v.v...

Stack window: Thông tin về stack của chương trình. Trước tiên chúng ta sẽ đi tìm hiểu sơ qua về Stack. Đây là nơi lưu trữ tạm thời các dữ liệu và địa chỉ, nó là một cấu trúc dữ liệu một chiều. Các phần tử được cất vào và lấy ra từ một đầu của cấu trúc này, tức là nó được xử lý theo phương thức “vào trước, ra sau”(LIFO: Last In First Out). Phần tử được cất vào cuối cùng gọi là đỉnh của Stack. Các bạn có thể hình dung Stack như là một chồng đĩa, chiếc đĩa được đặt lên cuối cùng sẽ nằm trên đỉnh và chỉ có nó mới có thể được lấy ra đầu tiên. Hai thanh ghi chính làm việc với Stack là ESP và EBP.

Ngoài 5 cửa sổ trên thì Olly còn có một số cửa sổ khác. Để ý trên thanh menu có các chức năng:

Nút L: để mở cửa sổ Log của Olly, cửa sổ này cho chúng ta thấy những thông tin mà Olly ghi lại. Theo mặc định thì cửa số này sẽ lưu các thông tin về các module, import library hoặc các Plugins được load cùng chương trình tại thời điểm đầu tiên khi ta load chương trình vào Olly. Bên cạnh đó cửa sổ này cũng ghi lạicác thông tin về các Break

points mà chúng ta đặt trong chương trình. Một tính năng nữa của cửa sổ này là khi chúng ta mu ốn lưu lại nhưng thông tin về Log cửa số này cũng cung cấp cho chúng ta khả năng ghi ra file.

Nút E: dùng để mở cửa sổ Executables, cửa sổ này sẽ đưa ra danh sách những file có khả năng thực thi được chương trình sử dụng như file exe, dlls, ocxs, v.v..

Nút M: ta thấy cửa sổ Memory Map, chứa thông tin về bộ nhớ được chương trình của ta sử dụng. Tại cửa sổ này chúng ta cũng có thể sử dụng tính năng Search để tìm kiếm thông tin về các strings, các đoạn hexa cụ thể hay unicode v..v.. thêm vào đó nó còn cung cấp cho chúng ta những kiểu thiết lập Break points khác nhau tại các Sections. Việc thiết lập các BPs là tùy thuộc vào yêu cầu và mục đích của chúng ta.

Nút T: là cửa sổ Threads, liệt kê các thread của chương trình.

Nút W: là Window.

Nút H: là cửa sổ Handles.

Nút /: là Patches, cửa sổ chứa các thông tin về những câu lệnh ta đã sửa ở trong chương trình.

Nút K: là cửa sổ Call Stack, hiển thị một danh sách các lệnh call mà chương trình của chúng ta đã thực hiện khi chúng ta Run bằng F9 và dùng F12 để tạm dừng chương trình.

Nút B: là cửa sổ Breakpoints, để mở cửa sổ Break Points, cửa sổ này sẽ hiển thị tất cả các BPs mà chúng ta đặt trong chương trình. Tuy nhiên nó chỉ hiện thị các BPs được set bằng cách nhấn F2 thôi, còn các dạng BPs khác như : hardware breakpoint hoặc memory breakpoints thì không được liệt kê ra ở đây.

Nút R – References : chứa thông tin về kết quả cho chức năng tìm kiếm trong Olly. Những chức năng không thể thiếu đó là các chức năng phục vụ cho công việc debug:

• Đặt Breakpoint: F2 • Run: F9 • Step into: F7 • Step over: F8 • Restart: Ctrl + F2 CHƯƠNG 3: THỰC NGHIỆM Hình 17.Các chức năng chính phục vụ debug

Một phần của tài liệu CƠ SỞ AN TOÀN THÔNG TIN TÌM HIỂU VỀ DỊCH NGƯỢC VÀ CÔNG CỤ OLLYDBG (Trang 27 - 32)

Tải bản đầy đủ (DOCX)

(32 trang)
w