OllyDbg_tut26

Trong phần trước, tôi đã cùng các bạn tìm hiểu một số kiến thức tổng quan về packer, về layout của PE file sau khi bị pack, tóm lược các bước cơ bản khi thực thi một chương trình bị pack, và quan trọng nhất là chúng ta đã hiểu rõ hơn thuật ngữ OEP – là nơi dòng lệnh đầu tiên của file gốc được thực thi. Thông thường, 99% là OEP sẽ nằm ở section đầu tiên (đó là section .text (code), bên dưới PE header khi quan sát trong cửa sổ Memory map của OllyDBG), tuy nhiên vẫn có những trường hợp ngoại lệ là OEP không nằm tại section đầu tiên. Nhưng về bản chất thì cuối cùng OEP vẫn phải nằm đâu đó thuộc Executable Code Section, có tên là .text (Micro$oft) hoặc là CODE (Borland). Trong phần 26 này tôi sẽ giới thiệu tới các bạn một số phương pháp cơ bản, phổ biến, thường áp dụng khi tìm OEP.

N0w let’s g0……smile

Download here: https://mega.nz/#!7wNwmTwL!pKGhzlWCX4XHSxhwoEqQh262T1JmKaSA1x6H2l3YfhU

Regards,

m4n0w4r

18 thoughts on “OllyDbg_tut26

  1. Tut của bác rất hay, dễ hiểu 😀 Em có điều muốn hỏi là, ở phương pháp “2.7. Phương pháp hàm API được gọi đầu tiên bởi chương trình” thì làm sao để biết được chương trình đó gọi hàm gì đầu tiên thế bác Kiên, phải chăng là chương trình nào cũng gọi GetVersion hoặc GetModuleHandleA ? Và có thể cho chương trình gọi 1 hàm (do coder hoặc do mặc định của máy) bất kỳ nào đó đầu tiên không ? 😀

  2. Bạn có thể tìm đọc tài liệu ExeCryptor 2.2.x – 2.3.x Unpacking tutorial By EvOlUtIoN, trong tài liệu này có phần Appendix A – Standard EP’s and nearest procedures.

    Regards,

  3. Em thử giải quyết file đính kèm trong tut mà bác bảo là bài thực hành của bác Ricardo, em thấy là nếu sử dụng phương pháp tìm hàm chương trình gọi đầu tiên thì nó sẽ breakpoint ở hàm này 2 lần, em nghĩ là lần 1 là do packer gọi, lần 2 là do chương trình gọi sau khi đã unpack. Vậy đó có phải là trick như bác nói ở phần kết luận ?
    Cám ơn bác đã giải đáp câu hỏi trước, năm mới chúc bác nhiều sức khỏe và có nhiều thời gian hơn để viết tut 😀

  4. Câu hỏi trên em hỏi bác giờ em đã biết tại sao, lý do là lần 1, địa chỉ trở về nằm ngoài setion text :))
    Em lại có 1 thắc mắc, phải chăng trick mà bác nói đó là việc sử dụng method pushad cho việc xử lý file đính kèm chứa pass tut 27 không thực hiện được ?

  5. @Mol: Để mở được tut 27 thì sử dụng phương pháp Exceptions để tìm ra OEP. Địa chỉ OEP chính là pass để mở.

    Regards,

  6. Cái đó thì em tìm được rồi, ngoài phương pháp Exception thì phương pháp hàm API được trình packer sử dụng, phương pháp hàm API đầu tiên được load bởi chương trình, dùng SFX của OllyDbg và OllyDbg patch của Ricardo cũng cho ra cùng 1 kết quả. Em thắc mắc là dùng cách PushAd thì lại không được 🙂

  7. anh Kiên cho em hỏi là em đang unpack một phần mềm cũng sử dụng packer UPX, em đã tìm được OEP, dump file thành công check RGD hiển thị “Microsoft Visual C++ 8.0”, fix IAT Get Import hiển thị valid hết mà sao khi fix dump file xong vẫn không chạy được file, nó báo không có hàm “OleSetMenuDescriptor” (trong ole32.dll) trong khi em kiểm tra import của file đã unpack bằng phần mềm PE Explorer vẫn thấy có hàm trên, anh có thể xem giúp em sai chỗ nào được không ạ, xin cảm ơn anh.
    Em đính kèm file : https://mega.nz/#!U0UHgKxZ!Ja9hiR-5TAwpxobjmo1xbkCmqpMJV9-CwOkfqAk1V3s

    1. Chào em,

      Anh cũng đã thử trên Win10 (cũng bị lỗi như em), trên XP (mọi thứ ok như run thì báo floating points ..) :). Anh cũng không có thời gian để tìm hiểu xem bị sao, do vậy trường hợp này em dùng cách cuối cùng là upx -d nhé!

      Regards

  8. Anh ơi link down ở các bài olly tut trước như bài 14,15 bị die, anh có thể fix lại được k ạ.
    Em cảm ơn a rất nhiều ạ

Leave a Reply