Thứ Sáu, 22 tháng 3, 2013

Tổng quan về PE

Một vài khái niệm trong bài viết
- VxDs là một mô hình device driver được sử dụng trong Microsoft Windows/386, các mode 386 tăng cường của Windows 3.x và Windows 9.x và một vài mở rộng bởi Novell DOS 7, OPEN DOS 7.01 và DR DOS 7.02 multitasker. VxDs có truy nhập đến bộ nhớ của kernel và các running process cũng như có những raw access đên hardware, VxD là viết tắt của "virtual xxx driver", trong đó xxx là một vài class của hardware . Nó xuất phát từ việc hầu hết các drivers có filenames dưới dạng vxxxd.386 trong Windows 3.x. Một vài ví dụ là: vjoyd.386(joystick), vmm.386 (memory management). VxDs thường có filename mở rộng dưới dạng .386 trong Windows 3.x và .vxd trong Windows 95. VxDs được viết trong Windows 3.x có thể sử dụng trong Windows 95 nhưng điều ngược lại là không đúng.
- Shareware: là loại phần mềm người dùng được dùng thử một thời gian (free trial) khi thời hạn dùng thử đã hết người dùng phải trả tiền bản quyền để có thể tiếp tục sử dụng. Đây là một mô hình kinh doanh trong phân phối phần mềm.
- Windows NT: là một họ của hệ điều hành được sản xuất bởi Microsoft, phiên bản đầu tiên được đưa ra vào tháng 6 năm 1993. Nó là một hệ điều hành mạnh mẽ dựa trên ngôn ngữ lập trình bậc cao, processor - independent, multiprocessing, hệ điều hành đa người dùng với các đặc tính được so sánh với Unix. Nó được dự tính bổ sung cho consumer versions của Windows dựa trên MS-DOS. NT là phiên bản 32 bit đầy đủ đầu tiên của Windows, trái với các đối tác hướng người dùng của nó, Windows 3.x và Windows 9.x là hệ điều hành lai 16bit/32bit, Windows 2000, Windows XP, Windows Server 2003, Windows Vista, Windows Home Server, Windows server 2008, Windows 7, Windows Server 2008 R2, Windows 8, Windows Phone 8, Windows RT và Windows Server 2012 là các thành viên của họ Windows NT.
Trước tiên chúng ta cần định nghĩa PE là gì ? PE là định dạng file riêng của Win32. Tất cả các file có thể thực thi trong Win32 (ngoại trừ các tập tin VxDs và các file Dlls 16bit) đều sử dụng định dạng PE. Các file Dlls 32 bit, các file COMs, các điều khiển OCX, các trình ứng dụng nhỏ trong Control Panel (.CPL files) và các ứng dụng .NET tất cả đều là định dạng PE. Thậm chí các chương trình được khiển tại kernel mode của hệ điều hành NT cũng sử dụng định dạng file PE.

Thế tại sao chúng ta cần tìm hiểu về PE? Có hai lý do chính như sau : Thứ nhất, chúng ta muốn thêm code vào trong những file thực thi (Ví dụ kĩ thuật keygen Injection hoặc thêm chức năng) và thứ hai là công việc unpacking bằng tay (manual unpacking ) các file thực thi. Hầu hết mọi sự quan tâm đều dồn về lý do thứ hai, đó là hầu như ngày nay các phần mềm shareware nào cũng được "Packed" với mục đích làm giảm kích thước của file đồng thời cung cấp thêm một lớp bảo vệ cho file.

Ở bên trong một file thực thi đã bị packed thì các bàng import tables thường thường là đã bị thay đổi, làm mất hiệu lực và phần dữ liệu thì luôn luôn bị mã hóa. Các chương trình packer sẽ chèn thêm mã lệnh để unpack file trong bộ nhớ vào lúc thực thi và sau đó nhảy tới OEP (original entry point) (Đây là nơi chương trình gốc thực sự bắt đầu thực thi, thi hành.). Nếu chúng ta tìm đươc cách để dump (kết xuất) sau khi chương trình packer hoàn tất được quá trình unpacking file thực thi, đồng thời thêm vào đó chúng ta cũng cần chỉnh sửa lại Section và import tables trước khi mà ứng dụng của chúng ta sẽ run. Làm thế nào chúng ta có thể làm được điều này nếu không có một tí tẹo hiểu biết nào về PE file ?

Chương trình thực thi được tôi sử dụng trong suốt bài viết này là BASECALC.EXE một chương trình rất hữu ích từ trang web của Fravia, nó cho phép tính toán và chuyển đổi giữa các hệ số decimal, hexa, binary và octal. Chương trình này được tác giả của nó coded bằng ngôn ngữ Borland Delphi 2.0, chính vì thế nó là một file lý tưởng để tôi lấy làm mình họa cho việc làm thế nào trình biên dich Borland để cho OriginalFirst Thunks null

Không có nhận xét nào:

Đăng nhận xét