RE6: AntiDebug

zDiv

Super Moderator
12/02/2014
21
12 bài viết
RE6: AntiDebug
I. Giới thiệu về AntiDebug

1. AntiDebug là gì?


AntiDebug là các kỹ thuật được sử dụng để vô hiệu hóa các Debugger, nhằm mục đích gây khó khăn cho công việc Reverse, làm tiêu tốn nhiều thời gian hơn khi thực hiện phân tích một mẫu.

AntiDebug.png

Các AntiDebug có thể tác động đến một số Debugger như OllyDBG, SoftICE hay các công cụ phân tích tĩnh như IDA.

2. Một số AntiDebug

a. Làm rối code


Một biện pháp đơn giản nhất được sử dụng để AntiDebug đó là làm rối code. Cách này được sử dụng để chống lại cả các Debugger và các Disassembler.

Có thể thay đổi tên các hàm, các biến thành những cái tên tối nghĩa hoặc tên được sinh ra ngẫu nhiên. Sử dụng nhiều lệnh jump tạo thành những vòng luẩn quẩn. Mã hóa các chuỗi được sử dụng.

Tất cả những biện pháp trên khiến công việc đọc đoạn code sau khi disassembly trở nên khó khăn hơn rất nhiều.

b. Mã hóa code

Biện pháp biển đổi code ở mức độ cao hơn đó là mã hóa code và sau đó giải mã rồi thực thi trong quá trình chạy chương trình. Ta chỉ có thể đọc được đoạn code thực sự thực thi công việc cụ thể khi sử dụng các debugger và đọc trong quá trình chương trình thực thi.

Kỹ thuật này thường được sử dụng bởi virus và malware.

c. Nhận diện Debugger

Một kỹ thuật AntiDebug khác đó là sử dụng các biện pháp mà hệ điều hành kiểm soát quá trình debug. Bao gồm việc sử dụng các API cung cấp thông tin về một chương trình có bị debug hay không, kiểm tra các breakpoint được đặt trong đoạn code thực thi, loại bỏ các hardware breakpoint và sử dụng các lỗi đã biết của debugger để gây crash.

Sau đây bài viết sẽ đề cập đến 1 AntiDebug cụ thể, đó là kỹ thuật Anti-Debug sử dụng IsDebuggerPresent.

II. IsDebuggerPresent – AntiDebug

Ở đây ta cùng tìm hiểu mẫu Crackme1 của Ty123
Link

Đầu tiên ta thử mở file .exe với Olly và run.

Kết quả thu được như sau:

7.png

Tiến trình đã bị terminated.

Như đã giới thiệu ở trên ta sẽ tìm hiểu về AntiDebug IsDebuggerPresent, vậy ta cùng tìm hàm IsDebuggerPresent được gọi đến trong chương trình Crackme1.exe

Ta Search all Name (label) in current module

1.png

Tiếp đó tìm kiếm IsDebuggerPresent. Và kết quả như sau:

2.png

Lựa chọn IsDebuggerPresent và ấn Enter, kết quả ta có được vị trí lời gọi hàm API IsDebuggerPresent.

3.png

Đặt breakpoint tại vị trí trên.

4.png

Chạy lại chương trình, và nhảy qua lệnh gọi hàm.

5.png

Chú ý giá trị của EAX.

Và bây giờ cùng tìm hiểu xem hàm IsDebuggerPresent trả về các giá trị mang ý nghĩa như thế nào.
Sau khi tham khảo tại đây thì ta biết được, hàm IsDebuggerPresent sẽ trả về giá trị 0 nếu như chương trình đang không bị debug, và ngược lại, trả về giá trị khác 0 nếu chương trình đang bị debug.

Như vậy ta cần sửa giá trị EAX = 0 để chương trình hiểu rằng nó đang không bị debug.

Sau khi sửa và F9, ta có kết quả như sau:

6.png

Chương trình đã chạy bình thường.

Như vậy, ta đã biết 1 cách để vượt qua IsDebuggerPresent AntiDebug.

Tìm hiểu sâu hơn vào hàm IsDebuggerPresent, ta thấy nó sẽ kiểm tra byte BeingDebugged trong PEB. link

Từ đó ta có thể có một cách khác để vượt qua AntiDebug này mà không cần phải chỉnh sửa giá trị trả về của hàm IsDebuggerPresent tại mỗi lần gọi hàm. Đó là sửa byte offset+2 trong PEB structure.

Ta có thể sử dụng Plugin của Olly để thực hiện tự động công việc này. Có thể tham khảo việc sử dụng Hide Debugger hoặc IsDebuggerPresent.
 
Chỉnh sửa lần cuối bởi người điều hành:
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
  • Thích
Reactions: Cord
Re: RE6: AntiDebug

An example: Flare-On challenge level 7.
 
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Comment
Re: RE6: AntiDebug

Có thể tham kháo thêm một số Anti-Debug khác ở đây.
 
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Comment
Re: RE6: AntiDebug

Không có link crackme à mod, click vào không thấy gì -_-
 
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Comment
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Comment
Re: RE6: AntiDebug

Có lẽ nhầm crackme rồi mod. nó có bi antiDebug đâu!!!
chạy oke mà
 
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Comment
Re: RE6: AntiDebug

meonha02;18715 đã viết:
Có lẽ nhầm crackme rồi mod. nó có bi antiDebug đâu!!!
chạy oke mà
Muốn down được file trên bài viết em phải đăng ký thành viên link đó.
dưới là link từ MF em down nhé anh vừa up lại.
https://www.mediafire.com/?ids7x5d2165r2cq
 
Chỉnh sửa lần cuối bởi người điều hành:
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Comment
Re: RE6: AntiDebug

Cảm ơn anh về loạt tut =)
 
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Comment
cho mình xin code crackme đc k?
 
Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
Comment
Thẻ
antidebug
Bên trên