RE5: Pack & UnPack

zDiv

Super Moderator
12/02/2014
21
12 bài viết
RE5: Pack & UnPack
I. Giới thiệu về Pack & UnPack
Trong các lĩnh vực nghiên cứu nằm trong chủ đề Reverse Engineering, Pack&UnPack giống như là một câu đố thú vị nhất cần được giải đáp. Trong quá trình tìm kiếm lời giải cho câu đố này, người thực hiện sẽ thu được rất nhiều kiến thức cả về cách thức sử dụng công cụ, các tricks trong RE cùng các kiến thức chuyên sâu về kiến trúc bên trong của hệ điều hành.​
Pack & UnPack.png
Các Packer được tạo ra để bảo vệ các file thực thi trước nguy cơ bị dịch ngược và phân tích. Chúng thường được sử dụng một cách hợp pháp trong các phần mềm thương mại để bảo vệ thông tin, tránh bị xáo trộn và rò rỉ, bị đánh cắp. Tuy nhiên thật không may, các phần mềm nguy hiểm cũng được pack với những lý do tương tương tự nhưng để phục vụ cho mục đích xấu.​
Cùng với sự phát triển của nhiều phần mềm nguy hiểm có sử dụng kỹ thuật Pack, các nhà nghiên cứu và chuyên gia phân tích mã độc đã phát triển các kỹ thuật để unpack và phân tích các mẫu thu thập được.​
Theo thời gian, các kỹ thuật anti-reversing mới được bổ sung vào các packer, gây khó khăn cho quá trình reverse và phân tích, ngăn chăn việc unpack thành công các mẫu mã độc.​
Và một vòng luẩn quẩn xuất hiện – các kỹ thuật anti-reversing được phát triển đồng thời với các công nghệ, công cụ trợ giúp các nhà nghiên cứu vượt qua nó.​

II. Các nội dung cần chú ý
1. OEP
Trước khi tìm hiểu về Original Entry Point(OEP) ta cần biết về Entry Point(EP).​
Để 1 chương trình được thực thi, nó cần được load lên memory, sau khi Windows hoàn thành công việc này, nó sẽ chuyển quyền điều khiển cho file .exe. Địa chỉ trên bộ nhớ của câu lệnh đầu tiên của file .exe được thực thi chính là EP.​
Đối với 1 file đã bị pack, nói đến EP ta sẽ hiểu là Entry Point của file sau khi Pack. Còn OEP là EP của file gốc trước khi bị pack.​
2. IAT
Import Address Table(IAT) chứa các địa chỉ hàm API mà chương trình sử dụng.​
3. Các công cụ thường sử dụng
Các công cụ thương sử dụng cần phải kể đến:​
PEiD, OllyDBG, ImportREC, LordPE,...​
III. Các bước cơ bản trong quá trình UnPack
Trong bài viết này sử dụng mẫu FireWorx Crackme14 – link.​
1. Tìm OEP
Trước khi load file Crackme14.exe vào Olly, ta kiểm tra trước bằng PEiD.​
1.jpg
Như vậy file exe này đã được pack bằng ASPack 1.06b / 1.061b -> Alexey Solodovnikov.​
Load file lên Olly, trả lời No khi được hỏi có Analysis hay không.​
2.jpg
Ta sẽ bắt đầu ở đoạn code sau:​
3.jpg
F8 để thực hiện đến địa chỉ: 0x00451000​
4.jpg
Để ý câu lệnh PUSHAD và POPAD. Thường là 2 câu lệnh bắt đầu và kết thúc công việc giải mã đoạn code thực thi của chương trình gốc.​
Sau lệnh POPAD là lệnh JMP EAX. F8 để thực thi đến câu lệnh này.​
5.jpg
EAX mang giá trị 0x4419F8 chính là OEP.​
Và đây là đoạn code tại 0x4419F8.​
6.jpg
Giữ nguyên cửa sổ Olly và sử dụng OllyDump để dump file thực thi sau khi được giải mã.​
7.jpg
Lưu file dump với tên bất kỳ và đuôi là exe.​
Chúng ta hoàn thành bước đầu tiên của việc Unpack.​
2. Fix IAT
Giữ nguyên Olly và sử dụng ImportREC để chỉnh sửa các thông tin của file dump.​
Load chương trình vào ImportREC và điền OEP vừa tìm được bên trên vào ô OEP và chọn IAT AutoSearch. Sau đó lựa chọn Get Imports, cuối cùng là Fix Dump. Kết quả ta có file dump mới được tạo ra.​
8.jpg
3. Làm sạch và giảm kích thước file sau khi UnPack
Để hoàn thiện và giảm kích thước của file thu được sau khi Fix Dump, ra sử dụng LordPE.​
9.jpg
Chạy LordPE, lựa chọn Rebuild PE và lựa chọn file thu được sau khi Fix Dump.​
Click Ok và hoàn thành quá trình Unpack.​
Kiểm tra lại với PEiD​
10.jpg
 
Chỉnh sửa lần cuối bởi người điều hành:
I. Giới thiệu về Pack & UnPack
Trong các lĩnh vực nghiên cứu nằm trong chủ đề Reverse Engineering, Pack&UnPack giống như là một câu đố thú vị nhất cần được giải đáp. Trong quá trình tìm kiếm lời giải cho câu đố này, người thực hiện sẽ thu được rất nhiều kiến thức cả về cách thức sử dụng công cụ, các tricks trong RE cùng các kiến thức chuyên sâu về kiến trúc bên trong của hệ điều hành.

Các Packer được tạo ra để bảo vệ các file thực thi trước nguy cơ bị dịch ngược và phân tích. Chúng thường được sử dụng một cách hợp pháp trong các phần mềm thương mại để bảo vệ thông tin, tránh bị xáo trộn và rò rỉ, bị đánh cắp. Tuy nhiên thật không may, các phần mềm nguy hiểm cũng được pack với những lý do tương tương tự nhưng để phục vụ cho mục đích xấu.

Cùng với sự phát triển của nhiều phần mềm nguy hiểm có sử dụng kỹ thuật Pack, các nhà nghiên cứu và chuyên gia phân tích mã độc đã phát triển các kỹ thuật để unpack và phân tích các mẫu thu thập được.

Theo thời gian, các kỹ thuật anti-reversing mới được bổ sung vào các packer, gây khó khăn cho quá trình reverse và phân tích, ngăn chăn việc unpack thành công các mẫu mã độc.
Và một vòng luẩn quẩn xuất hiện – các kỹ thuật anti-reversing được phát triển đồng thời với các công nghệ, công cụ trợ giúp các nhà nghiên cứu vượt qua nó.​




II. Các nội dung cần chú ý
1. OEP

Trước khi tìm hiểu về Original Entry Point(OEP) ta cần biết về Entry Point(EP).
Để 1 chương trình được thực thi, nó cần được load lên memory, sau khi Windows hoàn thành công việc này, nó sẽ chuyển quyền điều khiển cho file .exe. Địa chỉ trên bộ nhớ của câu lệnh đầu tiên của file .exe được thực thi chính là EP.
Đối với 1 file đã bị pack, nói đến EP ta sẽ hiểu là Entry Point của file sau khi Pack. Còn OEP là EP của file gốc trước khi bị pack.

2. IAT

Import Address Table(IAT) chứa các địa chỉ hàm API mà chương trình sử dụng.

3. Các công cụ thường sử dụng

Các công cụ thương sử dụng cần phải kể đến:
PEiD, OllyDBG, ImportREC, LordPE,...



III. Các bước cơ bản trong quá trình UnPack
Trong bài viết này sử dụng mẫu FireWorx Crackme14 – link.

1. Tìm OEP


Trước khi load file Crackme14.exe vào Olly, ta kiểm tra trước bằng PEiD.

14908931021.jpg


Như vậy file exe này đã được pack bằng ASPack 1.06b / 1.061b -> Alexey Solodovnikov.

Load file lên Olly, trả lời No khi được hỏi có Analysis hay không.

14908931022.jpg


Ta sẽ bắt đầu ở đoạn code sau:

14908931023.jpg

F8 để thực hiện đến địa chỉ: 0x00451000

14908931024.jpg


Để ý câu lệnh PUSHAD và POPAD. Thường là 2 câu lệnh bắt đầu và kết thúc công việc giải mã đoạn code thực thi của chương trình gốc.
Sau lệnh POPAD là lệnh JMP EAX. F8 để thực thi đến câu lệnh này.
14908931025.jpg

EAX mang giá trị 0x4419F8 chính là OEP.
Và đây là đoạn code tại 0x4419F8.
14908931026.jpg


Giữ nguyên cửa sổ Olly và sử dụng OllyDump để dump file thực thi sau khi được giải mã.
14908931027.jpg


Lưu file dump với tên bất kỳ và đuôi là exe.

Chúng ta hoàn thành bước đầu tiên của việc Unpack.


2. Fix IAT

Giữ nguyên Olly và sử dụng ImportREC để chỉnh sửa các thông tin của file dump.
Load chương trình vào ImportREC và điền OEP vừa tìm được bên trên vào ô OEP và chọn IAT AutoSearch. Sau đó lựa chọn Get Imports, cuối cùng là Fix Dump. Kết quả ta có file dump mới được tạo ra.

14908931028.jpg



3. Làm sạch và giảm kích thước file sau khi UnPack

Để hoàn thiện và giảm kích thước của file thu được sau khi Fix Dump, ra sử dụng LordPE.
14908931029.jpg


Chạy LordPE, lựa chọn Rebuild PE và lựa chọn file thu được sau khi Fix Dump.
Click Ok và hoàn thành quá trình Unpack.

Kiểm tra lại với PEiD
149089310210.jpg
Bạn cập nhật lại link giúp mk vs đc ko ạ/ Link trên bị died rồi ạ. Và phần mềm trên bn làm là gì vậy. Tải về máy dùng như nào vậy ạ. Mong bn chỉ bảo ạ :)
 
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
Bài viết liên quan
Thẻ
pack & unpack reverse engineering
Bên trên