Cách AntiDebug chương trình

Sau vài hôm ngẫm nghĩ về bài học AntiDebug một chương trình thì đã hiểu ra được bài target của lão sinok, cái chương trình này lão đã sử dụng một antidebug nhằm để bảo vệ chương trình tránh khỏi crack. Hôm nay mình xin thực hành vấn đề này. Ok Let go

À quên những ai chưa hiểu về cách antidebug thì có thể tham khảo link này : RE6: AntiDebug | WhiteHat.vn

1 Khởi động cho nóng khi lâm trận

Tôi load target vào và kiểm tra xem nó có pack gì không, nếu như pack thì giải quyết nó trước đã rồi tính sau nhé 🙂

Có vẻ như nó không bị pack, cái chương trình này của lão sinok được code bằng c++ và biên dịch trên dev-c, bây giờ tui load vào x64 dbg xem có gì trong này.

vào màn hình tại tab CPU -> cilck phải chọn serachfor -> Chọn Current region -> string

Có vẻ như đến đây tôi nhìn nó rất là mê li không thấy mặt trời vẻ như ta đang không có chút gì ở đây cả nhưng đây tôi thấy một chuỗi là OnlyDBG hmm không biết có gì ở đây hay, nhưng tôi thử click vào chuỗi đó.

Tới được đây

00401587 | C70424 00104400 | mov dword ptr ss:[esp],crackme.441 | 441000:”OllyDBG”

có vẻ từ địa chỉ 0x 00401587 đến 004015D8 là phần bị antidebug , khi tôi cố găng debug nó như thường thì nó sẽ thoát chương trình có thể đoán chương trình này đã cài debug rồi xem ta có thể giải quyết xem nó bằng cách nào

Như ta có thấy thì chỗ địa chỉ 40157A thì có lời gọi tại địa chỉ 4015a6 có nghĩa sẽ là đoạn ở trên nữa

ta train tới 0x401546 xem

Như nó giống hệt dưới cũng có thêm một lời gọi hàm nữa ta thử train tiếp xem

Train tiếp cũng gặp y chang vậy bây giờ ta train tiếp cho đến khi nào tới entrypoint

Điểm cuôi cùng đến entrypoint rồi, đây là nơi chương trình thực thi.

lệnh move eax drword ptr ds:[444014] lệnh này có nghĩa tại vùng nhớ 0x444014 chứa được password ta nhập vào tiếp

lệnh lea edx , dword ptr ds[eax+eax] có lẽ tính toán gia trị ta nhập vào là bao nhiêu sẽ lưu vào edx

Ở đây tôi nhập 123 vào trong thanh ghi edx của tôi là 7b nghĩa là 0x7b là 123

Train tới lệnh so sánh thì nó so sánh cmp so sánh 2 thành ghi là edx và eax

edx=F6 ‘ö’ // đây là sau khi tính toán bởi lệnh eax + eax lưu vào edx

eax=5BA3BCE // đây là gia trị tạo vùng nhớ 440000

Và ta thấy pass fake này làm cho lệnh nhảy này nhảy vậy làm thế nào để không nhảy ok ta có công thức để giải mã crackme của lão sinok này

số 123 pass fake đổi sang hệ hex là 0x 7b + 0x7b = 0xf6 x 2 = 0x1ec

Vậy nếu tính pass thật sẽ là

pass_x = hex_x x 2 = giá trị thanh ghi eax = 5ba3bce

hex_x = 5ba3bce / 2 = 2DD 1DE7

Ok ta đổi cái hex_x ra xem sao có phải là pass không đổi ra thập phân

Ok đã xong được cách tìm pass rồi

Categories: RE

Leave a comment