zDiv
Super Moderator
-
12/02/2014
-
21
-
12 bài viết
RE5: Pack & UnPack
I. Giới thiệu về Pack & UnPack
II. Các nội dung cần chú ý
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 UnPackTrong 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.
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.
Ta sẽ bắt đầu ở đoạn code sau:
F8 để thực hiện đến địa chỉ: 0x00451000
Để ý 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.
EAX mang giá trị 0x4419F8 chính là OEP.
Và đây là đoạn code tại 0x4419F8.
Giữ nguyên cửa sổ Olly và sử dụng OllyDump để dump file thực thi sau khi được giải mã.
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.
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.
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
Chỉnh sửa lần cuối bởi người điều hành: