RE2: Hướng dẫn sử dụng OllyDBG

Thảo luận trong 'Exploitation' bắt đầu bởi Mask, 12/02/14, 11:02 AM.

  1. Mask

    Mask Moderator

    Tham gia: 03/07/13, 08:07 AM
    Bài viết: 25
    Đã được thích: 19
    Điểm thành tích:
    18
    Ở bài viết trước chúng ta đã tìm hiểu những nội dung cơ bản của Reverse Engineering (RE) và giới thiệu về một số công cụ thường được sử dụng cho công việc reverse.

    Trong bài viết này, chúng ta sẽ tìm hiểu cách sử dụng một công cụ rất phổ biến và cực kỳ hữu ích - đó là OllyDBG.

    Giới thiệu về OllyDBG
    [HR][/HR]
    Trong bài viết giới thiệu về RE chúng ta đã đề cập tới 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.

    Mọi người có thể download lại địa chỉ: http://www.ollydbg.de/
    Hiện tại thì tôi vẫn đang 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.

    Các chức năng chính[HR][/HR]

    Trong lần chạy đầu tiên, có thể đường dẫn đến thư mục UDD và Plugins bị lỗi :

    [​IMG]

    Để sửa lỗi này bạn vào : Options => Appearance => Directories để sửa lại đường dẫn đến thư mục UDD và Plugins.

    [​IMG]

    Restart lại OllyDBG để những thay đổi của mình có tác dụng.

    Thử mở 1 file .exe với OllyDBG. Ở đây tôi dùng 1 crackme trên trang http://reversing.kr/challenge.php - Easy Crack để minh họa cho những hướng dẫn của mình về OllyDBG.

    Để 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.



    [​IMG]

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

    [​IMG]

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

    1: 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 đó.
    2: Register window: Các thanh ghi và giá trị của chúng.
    3: 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.
    4: 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.
    5: Stack window: Thông tin về stack của chương trình.

    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:

    [​IMG]

    - Click vào nút L ta thấy cửa số Log data của Olly. Chứa các thông tin về các module, các import library và các plugins được load cùng chương trình tại thời điểm chương trình được load vào Olly.
    - Click vào nút E ta thấy cửa sổ Executable modules, danh sách các file thực thi được chương trình sử dụng.
    - Click vào 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.
    - Click vào nút T là cửa sổ Threads, liệt kê các thread của chương trình.
    - Click vào nút W là Windows
    - 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.
    - Nút B là cửa sổ Breakpoints, hiển thị các breakpoint ta đặt trong chương trình.
    - 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:

    [​IMG]

    - Đặt Breakpoint: F2
    - Run: F9
    - Step into: F7
    - Step over: F8
    - Restart: Ctrl + F2


    Thực hành[HR][/HR]

    Bên trên là những thông tin cơ bản về các chức năng của Olly. Bắt tay vào sử dụng ngay thôi nào.

    Quay trở lại với crackme ta đề cập đến ở đầu bài giới thiệu: Easy_CrackMe.exe
    Load lại file Easy_CrackMe.exe vào OllyDBG
    F9 để chạy chương trình.

    [​IMG]


    Làm gì tiếp theo đây??
    Điền bừa cái gì đó rồi bấm nút xem sao.(_ _!)

    [​IMG]

    Sai rồi, chả có lý do gì để lần thử đầu tiên là đúng cả.
    Nhưng vẫn thu được 1 lượng thông tin kha khá. Đó là string thông báo của chương trình là : ”Incorrect Password” và thông báo được đưa ra bởi 1 message box.

    Sử dụng chức năng tìm kiếm của OllyDBG để tìm kiếm tất cả các chuỗi trong chương trình.

    [​IMG]

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

    [​IMG]

    Click double vào chuỗi “Incorrect Password” ta sẽ đến được đoạn code sử dụng chuỗi này.

    [​IMG]

    Ta thấy sẽ có thể có 2 trường hợp xảy ra : 1 trường hợp là thông báo Incorrect Password ta vừa gặp, trường hợp còn lại là “Congratulation !!” – chắc là thông báo password đúng.:))

    Câu lệnh đầu tiên của đoạn code in ra thông báo “Incorrect Password” tại địa chỉ 0x0040113c.

    [​IMG]

    Để ý mũi tên mau đỏ trỏ đến câu lệnh tại địa chỉ 0x0040113c. Ta thấy có 4 lệnh JNZ đến địa chỉ 0x0040113c.
    Goto đến lệnh JNZ đầu tiên.

    [​IMG]

    Để ý đến câu lệnh tại địa chỉ 0x004010AA có comment : GetDlgItemTextA – lấy 1 đoạn dữ liệu từ 1 dialog box. => có thể đây chính là câu lệnh thực hiện nhiệm vụ đọc password ta nhập vào.

    Ấn F2 để đặt 1 breakpoint tại địa chỉ 0x004010AA và chạy lại chương trình. Nhập password rồi ấn nút “??”. Chương trình dùng tại breakpoint 0x004010AA.

    F8 để chạy qua hàm GetDlgItemTextA. Ta có kết quả như sau:

    [​IMG]

    Quan sát Stack, password ta nhập vào “123454321” đã được được vào trong stack bắt đầu tại địa chỉ 0x0012FA18.




    004010B0 CMP BYTE PTR SS:[ESP+5], 61


    Thực hiện câu lệnh so sánh giá trị tại địa chỉ ESP+5 và 0x61.
    Địa chỉ ESP+5 là ký tự thứ 2 trong password ta vừa nhập vào.
    Câu lệnh tiếp theo:




    004010B5 JNZ SHORT Easy_Cra.00401135


    Sau câu lệnh CMP, nếu 2 giá trị được mang ra so sánh mà khác nhau, cờ ZF vẫn mang giá trị 0 và lệnh JNZ được thực hiện, đoạn code thông báo “Incorrect Password” sẽ được thực hiện và bật ra thông báo.
    Như vậy bước kiểm tra đầu tiên để password được chấp nhận thì ký tự thứ 2 cúa password là ký từ có mã ASCII là 0x61 => ký tự “a”.

    Ta có thể sửa password, restart lại chương trình và run lại, nhưng ta có thể sử dụng cách bớt phức tạp hơn là ghi nhớ ký tự thứ 2 của password là “a” rồi sửa cờ ZF để tiếp tục thực hiện chương trình.
    Click double vào giá trị 0 ở cờ ZF, giá trị ZF được set lại giá trị =1.

    [​IMG]

    Quan sát tip window ở bên dưới Assembler window sẽ thấy thông tin




    Jump is NOT taken
    00401135=Easy_Cra.00401135



    F7 để tiếp tục thực hiện chương trình, đến câu lệnh :




    004010C3 CALL Easy_Cra.00401150


    Thì dừng lại và quan sát stack.
    [​IMG]

    2 chuỗi “3454321”, “5y” và giá trị 0x02 được đẩy vào stack trước khi thực hiện lệnh Call 0x00401150
    F7 để thực hiện hàm tại địa chỉ 0x00401150

    Đoạn chương trình thực hiện công việc so sánh 2 ký tự thứ 3 và 4 của password với chuỗi “5y”.
    Như vậy ta đã có 3 ký tự thứ 2,3,4 của password là “a5y”

    Tiếp tục dùng cách sửa cờ ZF để vượt qua câu lệnh




    004010CD JNZ SHORT Easy_Cra.00401135


    Tiếp tục so sánh các ký tự từ thứ 5 trở đi đến hết password với chuỗi “R3versing”

    [​IMG]

    Như vậy ta có password có dạng “xa5yR3versing” với ký tự đầu tiên là ký tự chưa tìm ra.

    Restart lại chương trình và nhập vào password có dạng như trên.

    Dễ dàng vượt qua các bước kiểm tra trên.

    Dừng lại ở câu lệnh:




    0040110D CMP BYTE PTR SS:[ESP+4], 45


    So sánh ký tự đầu tiên của password với ký tự “E”

    Như vậy ta tìm ra password chính xác là “Ea5yR3versing”

    Chạy lại chương trình và nhập password vừa tìm được.

    Ta nhận được kết quả như sau:

    [​IMG]


    Kết luận[HR][/HR]
    Trong bài viết này tôi đã giới thiệu về các chức năng cơ bản của OllyDBG và ví dụ về việc sử dụng Olly để giải quyết 1 Crackme đơn giản.

    Trong bài viết tiếp theo, tôi sẽ giới thiệu về một công cụ khác cũng thường xuyên được sử dụng trong RE - đó là IDA.

    Các bạn quan tâm có thể theo dõi chuyên đề tiếp theo - "RE3: Hướng dẫn sử dụng IDA" từ ngày 19/2/2014
     
    Last edited by a moderator: 15/09/14, 04:09 PM
    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
    Cord thích bài này.
  2. logicalway

    logicalway W-------

    Tham gia: 06/11/13, 07:11 PM
    Bài viết: 2
    Đã được thích: 0
    Điểm thành tích:
    1
    Re: RE2: Hướng dẫn sử dụng OllyDBG

    Cho mình xin file ollydbg.ini của mod được ko, config nhìn màu đẹp quá
     
    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
  3. DiepNV88

    DiepNV88 Super Moderator Thành viên BQT

    Tham gia: 24/09/13, 03:09 AM
    Bài viết: 1,280
    Đã được thích: 208
    Điểm thành tích:
    63
    Re: RE2: Hướng dẫn sử dụng OllyDBG

    Bạn có thể tự sửa file ollydbg.ini theo lựa chọn sau:
    http://www.ollydbg.de/schemes.htm
     
    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
  4. IDG Publicsector

    IDG Publicsector W-------

    Tham gia: 17/02/14, 10:02 AM
    Bài viết: 7
    Đã được thích: 0
    Điểm thành tích:
    6
    Re: RE2: Hướng dẫn sử dụng OllyDBG

    bài viết thật bổ ích :-bd
     
    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
  5. namhoang0326

    namhoang0326 W-------

    Tham gia: 14/05/14, 05:05 PM
    Bài viết: 1
    Đã được thích: 0
    Điểm thành tích:
    1
    Re: RE2: Hướng dẫn sử dụng OllyDBG

    Options => Appearance => Directories để sửa lại đường dẫn đến thư mục UDD và Plugin

    không tìm thấy đường dẫn UDD với Plugin các anh ạ!
    ai giúp e dc không?
     
    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
  6. hackedbymosted

    hackedbymosted W-------

    Tham gia: 08/06/14, 11:06 AM
    Bài viết: 4
    Đã được thích: 0
    Điểm thành tích:
    1
    Re: RE2: Hướng dẫn sử dụng OllyDBG

    Hay quá, viết bài tiếp đi bác ơi!
     
    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
  7. john_cena

    john_cena W-------

    Tham gia: 23/11/13, 03:11 PM
    Bài viết: 3
    Đã được thích: 0
    Điểm thành tích:
    6
    Re: RE2: Hướng dẫn sử dụng OllyDBG

    Em muốn debug file IDM.exe thì sao nhỉ Mod
     
    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
  8. bacminhkiemton

    bacminhkiemton W-------

    Tham gia: 05/01/15, 08:01 PM
    Bài viết: 5
    Đã được thích: 0
    Điểm thành tích:
    6
    Re: RE2: Hướng dẫn sử dụng OllyDBG

    anh MASK có biết web nào ngoài resersing.kr cung cấp bài tập crack o?mình đăng kí nick web đó nhưng o đăng nhập để tai về được
     
    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
  9. DiepNV88

    DiepNV88 Super Moderator Thành viên BQT

    Tham gia: 24/09/13, 03:09 AM
    Bài viết: 1,280
    Đã được thích: 208
    Điểm thành tích:
    63
    Re: RE2: Hướng dẫn sử dụng OllyDBG

    Bạn có thể tham khảo tại những link sau:
    http://wargame.kr
    https://microcorruption.com/login
    http://rootme.org
     
    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
    tranvanhuyhoang thích bài này.
  10. inuyasha

    inuyasha Wh------

    Tham gia: 12/04/15, 01:04 PM
    Bài viết: 39
    Đã được thích: 0
    Điểm thành tích:
    16
    Re: RE2: Hướng dẫn sử dụng OllyDBG

    Không tìm thấy thư mục UDD và Plugins thì làm sao vậy chủ thớt ?
    Nhận tiện cho minh hỏi luôn là làm sao để thêm cái Comment Bar vào ollydbg vậy?
    Thân!
     
    Last edited by a moderator: 31/05/15, 02:05 PM
    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
  11. DiepNV88

    DiepNV88 Super Moderator Thành viên BQT

    Tham gia: 24/09/13, 03:09 AM
    Bài viết: 1,280
    Đã được thích: 208
    Điểm thành tích:
    63
    Re: RE2: Hướng dẫn sử dụng OllyDBG

    Bạn có thể download bản Full plusin tại đây:
    https://whitehat.vn/threads/5423-Ollydbg-2-01-full-plugin.html
     
    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
  12. chlck3n

    chlck3n W-------

    Tham gia: 03/08/16, 11:08 AM
    Bài viết: 12
    Đã được thích: 8
    Điểm thành tích:
    8
    cho mình hỏi làm sao biết
    tại sao nó ko phải là kí tự đầu tiên hay kí tự thứ 3?
     
    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
  13. chlck3n

    chlck3n W-------

    Tham gia: 03/08/16, 11:08 AM
    Bài viết: 12
    Đã được thích: 8
    Điểm thành tích:
    8
    Cho mình hỏi làm sao biết
    tại sao địa chỉ này ko phải là kí tự đầu tiên hay kí tự thứ 3?
     
    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
  14. ngochm

    ngochm W-------

    Tham gia: 07/09/16, 03:09 PM
    Bài viết: 1
    Đã được thích: 2
    Điểm thành tích:
    3
    [​IMG]

    Xem lại hình minh họa:
    phần Registers hiển thị ESP = 0x0012FA14
    xem nội dung vùng nhớ thì thấy pass (123454321) được lưu bắt đầu từ 0x0012FA18
    => ESP + 5 = 0x0012FA14 + 5 = 0x0012FA19 = kí tự thứ 2 trong chuỗi pass nhập vào
     
    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
  15. tranvanhuyhoang

    tranvanhuyhoang New Member

    Tham gia: 20/04/17, 10:04 PM
    Bài viết: 3
    Đã được thích: 0
    Điểm thành tích:
    1
    Các pro giúp em với. Em đã thông các phần trên. Nhưng lúc: [​IMG]
    Em đã restar (Ctl+F2) lại. Xong F9 nhập lại mật khẩu. Nó lại dừng ngay beakpoint lúc đầu đặt. Chứ không phải dừng lại ở câu lệnh "0040110D CMP BYTE PTR SS:[ESP+4], 45" . Bác nào giúp em với. Em bị rối ở đây. Thanks ạ!
     
    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