UPX Pack và Unpack

firey522

W-------
13/10/2014
8
17 bài viết
UPX Pack và Unpack
Trên thực tế, việc Pack các file thực thi (Executable) được thực hiện nhằm mục đích ngăn chặn phân tích hay tạo ra một tập tin nhẹ hơn giúp công việc tải về được dễ dàng hơn. Nếu file thực thi được Pack, việc kiểm tra các chương trình gốc sẽ gặp khó khăn và ngăn chặn việc phân tích tĩnh các hoạt động của file này.

UPX Pack và Unpack.png

Trong số các phần mềm Pack (Packer) thì UPX được coi là một phần mềm cơ bản, có ưu điểm xử lý nhanh với hiệu suất tốt. Trong bài viết này chúng ta hãy cùng tìm hiểu về UPX và cách Unpack nó với Olly Debugger

1.png

Trước khi bắt đầu, hãy tìm hiểu một chút về UPX. Khi chúng ta pack một file thực thi với UPX tất cả các phân vùng (text, data …) đều được nén lại. Sau đó một phần code sẽ được đưa vào cuối file để thực hiện giải nén dữ liệu gốc trước khi file thực sự được thực thi. Cụ thể một file được Pack bằng UPX khi thực thi sẽ hoạt động như sau:

- File sẽ được thực thi ở một OEP (Original Entry Point) mới ( đoạn code được đưa vào cuối file khi Pack)
- Nó sẽ lưu lại trạng thái của các thanh ghi hiện tại bằng lệnh PUSHAD.
- Toàn bộ nội dung được Pack sẽ được giải nén.
- “Import table” sẽ được sửa lại cho đúng với file thực thi ban đầu
- Giá trị các thanh ghi được lưu lại trước đó sẽ được khôi phục bằng lệnh POPAD.
- EIP nhảy đến OEP của file trước khi Pack, lúc này chương trình sẽ chính thức được thực thi.

Như vậy chúng ta đã hiểu được cách thức làm việc của UPX, ở phần tiếp theo hãy cũng xem cách giải nén một file đã được Pack bằng UPX bằng công cụ Olly Debugger.
Trong ví dụ này ta có một file thực thi tên là DemoUPX.exe được pack bằng UPX

2.png

Bây giờ chúng ta hãy load nó vào Olly và công việc đầu tiên cần thực hiện là debug để tìm là OEP thực sự của nó.
Như đã trình bày ở trên, đầu tiên UPX sẽ dùng lệnh PUSHAD để lưu lại trạng thái của các thanh ghi hiện tại. Do đó ta sẽ tìm lệnh PUSHAD này mà đặt một breakpoint ở đầu stack. Việc này sẽ khiến cho chương trình dừng lại khi nó thực hiện lệnh POPAD để khôi phục lại giá trị các thanh ghi từ stack.

3.jpg



4.jpg

Tìm và đặt breakpoint để chương trình dừng lại khi khôi phục trạng thái thanh ghi

Sau đó chúng ta sẽ đi tiếp qua một số lệnh cho tới khi gặp một lệnh JMP, địa chỉ được jump tới chính là OEP của chương trình ban đầu

5.png

Lệnh jump tới OEP thật​

Khi đã ở OEP chúng ta sẽ sử dụng Plugin OllyDump của Olly để dump toàn bộ chương trình (sử dụng thiết lập mặc định), plugin này sẽ tự động sửa lại Import table.

6.png

Dump file với OllyDump

7.png

File thực thi sau khi được dump ra sẽ có dạng

8.jpg

Kiểm tra lại một lần nữa với PEiD thấy rằng file đã được unpack thành công

9.png
 
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
Dạ em xin file DemoUPX.exe được không ạ?
 
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ẻ
unpack upx pack
Bên trên