Series tutorials: PE files – Part 1: Giới thiệu về PE file
Kiến thức về PE rất cần thiết để chúng ta vươn cao hơn nữa, nhưng thật sự nó thật khô khan và khó nhai. Đọc các tài liệu về PE thì ko biết đường đâu mà mò. Tùm lum chi địa. Bởi vậy , tui viết bài này, ko phải là một bài tut mà chỉ để chúng ta cùng học và cùng thảo luận. Nếu sai sót gì các bạn chỉ giáo. Còn nếu những điều viết dưới đây đúng thì “lạy chúa”, con đi đúng đừơng.
Như các bạn thấy, trên 4rum chúng ta có rất nhiều câu hỏi về unpack như : EP là gì, OEP là gì, RVA, IAT là gì.... Nhưng ko ai nói, ko ai giải thích, và hình như ít ai quan tâm. Có thể có người hiểu thấu đáo, nhưng cũng có các bạn ko có khái niệm gì. Nghe như vịt nghe sấm. Mà cụ thể là tui (hihi). Ko gì phải mắc cỡ, kiến thức kém thì bổ xung thêm. Ko ai chỉ thì tự hoc. Con kiến tha hòai cũng đầy tổ. Nước chảy đá mòn. Đọc hòai cũng hiểu.Vì vậy tui bắt đầu bắt tay ngâm cứu cái gọi là PE mà các bạn thấy nhan nhản trong các 4rum về crack nhưng trong đầu của chúng ta chỉ có vài khái niệm mơ hồ về nó (giống như tui vậy). Tut này chỉ là một chuyến khám phá “đảo châu báo này”.
Kiến thức về PE rất cần thiết để chúng ta vươn cao hơn nữa, nhưng thật sự nó thật khô khan và khó nhai. Đọc các tài liệu về PE thì ko biết đường đâu mà mò. Tùm lum chi địa. Bởi vậy , tui viết bài này, ko phải là một bài tut mà chỉ để chúng ta cùng học và cùng thảo luận. Nếu sai sót gì các bạn chỉ giáo. Còn nếu những điều viết dưới đây đúng thì “lạy chúa”, con đi đúng đừơng.
Các bạn sẽ hỏi: tại sao crack mà cần học về PE?. Học để làm gì vậy trời?. Umh, khi học unpack bằng tay,hay chống các anti-crack, các bạn sẽ cần những kiến thức này các bạn ạ. Và nó còn ứng dụng rất nhiều, gian tà có, chính quy có. Nói tóm lại, theo Benina thì bổ dưỡng nhiều hơn. Biết về nó thì chắc chắn 1 điều là các bạn đã bước vào thế giới huyền bí của máy tính.
Một điều nữa, Benina sẽ dùng 1 số từ tiếng Anh kỹ thuật trong TUT này. Ko dịch ra tiếng Việt để các bạn có thể đọc các TUT về PE files = tiếng Anh cho dễ dàng.
Bây giờ bắt đầu.
PE file là gì?.
PE là từ viết tắt của Portable Executable. Nó là quy định định dạng (format) file của Win32. Hay nói rõ hơn nó là format của các chương trình binary (exe, dll, sys, scr) cho MS windows NT, windows 95 và win32s. Nó có thể cũng được dùng cho các file object ( bpl, dpl, cpl, ocx, acm, ax). Định dạng này được thiết kế bởi Microsoft vào năm 1993 được tiêu chuẩn hóa bới Tool Interface Standard Committee (Microsoft, Intel, Borland, Watcom, IBM and others). Dựa trên nền tản "common object file format" (COFF) được sử dụng cho các file object và executables (thực thi) trên riêng hệ điều hành UNIX và VMS.
"Portable Executable" được chọn lựa là vì mục đích phải có một định dạng file phổ biến (common file format)cho hầu hết các lọai hệ điều hành Windows, hầu hết các lọai CPUs hổ trợ Windows khi chạy. Nó giành được sự ủng hộ tối đa vì nó là một format tương tự như khi sử dụng trong hệ điều hành Windows NT, Windows 95 ,Windows CE và các “con cháu” của nó.
Có nhiều cách dễ hình dung về PE files như : một cấu trúc dữ liệu trên disk của file PE giống như cấu trúc data của nó trong memory. Tải 1 file thực thi như file exe (1 dạng file PE) vào memory trước tiên, phần chính là vùng nào đó của file PE được mapping (xếp đặt) vào vùng không gian address của memory. Vì vậy, một data structure là giống nhau trên disk và memory. Điểm mấu chốt là nếu bạn muốn tìm gì đó trong file PE, bạn có thể đương nhiên là tìm được những thông tin giống như thế sau khi file được load vào trong vùng nhớ. Chú ý quan trọng là PE files ko được mapped tòan thể vào trong vùng nhớ giống như file được mapped vào vùng nhớ một cách đơn giản như là copy từ chổ này đến chổ khác . Thay vào đó, Win32 loader (khi Windows muốn mapping 1 file PE, nó sẽ dùng 1 tiến trình gọi là Win32 Loader hay còn gọi là Windows Loader hoặc PE Loader) nhìn vào file PE và quyết định xem phần nào cần mapping vào trong vùng nhớ. Việc mapping này sẽ là sự xếp đặt thích hợp các “higher offsets” trong file vào “higher memory addresses” tương ứng trong memory. Offset của 1 item trong disk file có thể ko giống offset của nó được tải vào trong vùng nhớ . Tuy nhiên, hầu hết thông tin thể hiện cho phép bạn tạo một chuyển đổi từ offset trên disk thành offset trên memory.
Một module trong memory miêu tả code, data, và resource từ một file exe, nó cần thiết cho một tiến trình. Các phần khác của một file PE có thể được read, nhưng ko được xếp (mapping) vào vùng nhớ (for instance, relocations). Vài phần có thể ko được mapped vào trong memory hòan tòan, ví dụ, khi thông tin gỡ rối được đặt tại cuối một file. Một vùng trong PE header nói cho hệ thống biết cần bao nhiêu memory để set dự trữ cho việc sắp xếp exe vào memory. Dữ liệu ko được mapped vào memory được đặt cuối file, phần trước dữ liệu đó sẽ được mapped vào trong.
Trên đây là tòan bộ những thông tin là Benina thu thập được trên Net. Bây giờ chúng ta tóm tắt lại như sau:
Nói tóm lại:
Một điều nữa, Benina sẽ dùng 1 số từ tiếng Anh kỹ thuật trong TUT này. Ko dịch ra tiếng Việt để các bạn có thể đọc các TUT về PE files = tiếng Anh cho dễ dàng.
Bây giờ bắt đầu.
PE file là gì?.
PE là từ viết tắt của Portable Executable. Nó là quy định định dạng (format) file của Win32. Hay nói rõ hơn nó là format của các chương trình binary (exe, dll, sys, scr) cho MS windows NT, windows 95 và win32s. Nó có thể cũng được dùng cho các file object ( bpl, dpl, cpl, ocx, acm, ax). Định dạng này được thiết kế bởi Microsoft vào năm 1993 được tiêu chuẩn hóa bới Tool Interface Standard Committee (Microsoft, Intel, Borland, Watcom, IBM and others). Dựa trên nền tản "common object file format" (COFF) được sử dụng cho các file object và executables (thực thi) trên riêng hệ điều hành UNIX và VMS.
"Portable Executable" được chọn lựa là vì mục đích phải có một định dạng file phổ biến (common file format)cho hầu hết các lọai hệ điều hành Windows, hầu hết các lọai CPUs hổ trợ Windows khi chạy. Nó giành được sự ủng hộ tối đa vì nó là một format tương tự như khi sử dụng trong hệ điều hành Windows NT, Windows 95 ,Windows CE và các “con cháu” của nó.
Có nhiều cách dễ hình dung về PE files như : một cấu trúc dữ liệu trên disk của file PE giống như cấu trúc data của nó trong memory. Tải 1 file thực thi như file exe (1 dạng file PE) vào memory trước tiên, phần chính là vùng nào đó của file PE được mapping (xếp đặt) vào vùng không gian address của memory. Vì vậy, một data structure là giống nhau trên disk và memory. Điểm mấu chốt là nếu bạn muốn tìm gì đó trong file PE, bạn có thể đương nhiên là tìm được những thông tin giống như thế sau khi file được load vào trong vùng nhớ. Chú ý quan trọng là PE files ko được mapped tòan thể vào trong vùng nhớ giống như file được mapped vào vùng nhớ một cách đơn giản như là copy từ chổ này đến chổ khác . Thay vào đó, Win32 loader (khi Windows muốn mapping 1 file PE, nó sẽ dùng 1 tiến trình gọi là Win32 Loader hay còn gọi là Windows Loader hoặc PE Loader) nhìn vào file PE và quyết định xem phần nào cần mapping vào trong vùng nhớ. Việc mapping này sẽ là sự xếp đặt thích hợp các “higher offsets” trong file vào “higher memory addresses” tương ứng trong memory. Offset của 1 item trong disk file có thể ko giống offset của nó được tải vào trong vùng nhớ . Tuy nhiên, hầu hết thông tin thể hiện cho phép bạn tạo một chuyển đổi từ offset trên disk thành offset trên memory.
Một module trong memory miêu tả code, data, và resource từ một file exe, nó cần thiết cho một tiến trình. Các phần khác của một file PE có thể được read, nhưng ko được xếp (mapping) vào vùng nhớ (for instance, relocations). Vài phần có thể ko được mapped vào trong memory hòan tòan, ví dụ, khi thông tin gỡ rối được đặt tại cuối một file. Một vùng trong PE header nói cho hệ thống biết cần bao nhiêu memory để set dự trữ cho việc sắp xếp exe vào memory. Dữ liệu ko được mapped vào memory được đặt cuối file, phần trước dữ liệu đó sẽ được mapped vào trong.
Trên đây là tòan bộ những thông tin là Benina thu thập được trên Net. Bây giờ chúng ta tóm tắt lại như sau:
Nói tóm lại:
Quote:
PE là định dạng file đã được tiêu chuẩn hóa dùng cho các hệ điều hành Win32. Khi hệ điều hành muốn thực thi 1 file PE , nó sẽ dùng 1 trình gọi là Windows Loader (hay còn gọi là PE Loader) để tải file PE vào vùng nhớ (memory). Việc tải này ko đơn giản như là việc copy y nguyên file vào vùng nhớ, mà nó thực sự là sắp đặt (mapping) dữ liệu file vào vùng nhớ. Tức là có thể có 1 số phần trong file PE trên đĩa (disk) sẽ ko được mapping(sắp đặt) vào vùng nhớ.Và cuối cùng Be cần tổng kết là phần mở rộng file PE (đuôi của file PE) có dạng như sau: exe, dll, sys, scr, bpl, dpl, cpl, ocx, acm, ax.
Author: Benina
|
In bài này