Tìm hiểu cấu trúc PE file

38 976 2
Tìm hiểu cấu trúc PE file

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

ĐỀ TÀI: TÌM HIỂU CẤU TRÚC PE FILE MỤC LỤC NHÓM THÔNG TEAM – AT8B ĐỀ TÀI: TÌM HIỂU CẤU TRÚC PE FILE LỜI MỞ ĐẦU PE (PORTABLE EXECUTTABLE FILE FORMAT): định dạng file riêng Win32 Tất file có thực thi Win32 (ngoại trừ tập tin VxDs file Dlls 16 bit) sử dụng địng dạng PE Các file Dlls 32 bit, file COMs, điều khiểu OCX, chương trình ứng dụng nhỏ Controll Pannel (.CPL file) ứng dụng NET tất ứng dụng PE Thậm chí chương trình điều khiển Kernel mode hệ điều hành NT sử dụng định dạng PE NHÓM THÔNG TEAM – AT8B ĐỀ TÀI: TÌM HIỂU CẤU TRÚC PE FILE CHƯƠNG I GIỚI THIỆU Cấu trúc (Basic structure) Hình 1.1 Minh họa cấu trúc PE file Ở mức tối thiểu PE file có Section: đoạn mã (code) phần liệu (data) Một chương trình ứng dụng chạy nên tảng Windows NT có section xác định có tên text bss data rdata rsrc idata pdata debug Một số chương trình ứng dụng lại không cần tất section này, chương trình khác lại định nghĩa với nhiều section để phù hợp với riêng biệt chúng Nhứng section mà thời tồn xuất thông dụng file thực thi là: Executable Code Section, có tên text (Microsoft) CODE (Borland) Data Section, có tên data rdata bss (Microsoft) hay DATA (Borland) Resources Section, có tên rsrc Export Data Section, có tên edata Import Data Section, có tên idata NHÓM THÔNG TEAM – AT8B ĐỀ TÀI: TÌM HIỂU CẤU TRÚC PE FILE Debug Information, Section có tên debug Những tên thực không thích hợp chúng bị lờ hệ điều hành (OS) chúng tài liệu phục vụ cho lợi ích lập trình viên Một điểm quan trọng khác cấu trúc PE file đĩa xác, đắn giống hệt nạp vào nhớ bạn xác định thông tin xác file đĩ mà bạn muốn tìm kiếm file nạp vào nhớ Tuy nhiên không chép lại cách xác bên nhớ Các windows loader định phần cần ánh xạ lên đặt phía cuối file sau phần ánh xạ lên nhớ Cũng vị trí mục file đĩa luôn khác biệt với nạp vào nhớ quản lý nhớ ảo dựa trang Windows sử dụng Khi section nạp vào nhớ RAM chúng để khớp với 4KB memory Pages, section bắt đầu Page Một trường PE header thông báo cho hệ thống biết có nhớ cần để riêng cho việc ánh xạ file Bộ nhớ ảo giải thích cho phần Hình 1.2 Thành phần PE file nạp vào nhớ ảo Thuật ngữ nhớ ảo (virtual memory) thay Software truy cập trực tiếp lên nhớ vật lý (physical memory), xử lý hệ điều hành tạo lơp vô hình (invisible layer) giữ chúng Bất kể lần cố gắng tạo để truy cập tới nhớ, vi xử lý tra cứu “page table” để biết xem có Process mà địa nhớ vật lý thực sử dụng Nó sẻ việc làm thiết thực để có table entry cho byte NHÓM THÔNG TEAM – AT8B ĐỀ TÀI: TÌM HIỂU CẤU TRÚC PE FILE nhớ (Page table lớn tổng nhớ vật lý), thay việc vi xử lý phân chia nhớ thành trang có số lợi sau: Nó cho phép tạo thành không gian địa phức tạp Một không gian địa page table được cô lập cho phép truy cập tới nhớ mà thích hợp với chương trình process Nó đảm bảo chương trình cô lập, cách ly hoàn toàn với chương trình khác xảy lỗi khiến cho chương trình bị crash ảnh hưởng, hủy hoại với không gian đia chương trình khác Nó cho phép vi xử lý áp đặt luật lệ việc nhớ bị truy cập Những section đòi hỏi, yêu cầu PE file khu vực khác file đối xử khác biệt chương trình quản lý nhớ module nạp Tại thời điểm nạp, chương trình quản lý nhớ thiết lập quền truy cập lên trang nhớ cho section khác dựa thiết lập chúng Section header Điều định rõ section cho đọc (readable), ghi (witeable) hay thực thi (executable) Điều có nghĩa section phải bắt đầu trang Tuy nhiên, kích thước trang mặc định cho hệ điều hành Windows 4096 bytes (1000h) lãng phí để file thực thi vào ranh giới 4kb Page đĩa mà điều làm cho chúng trở nên lớn mức cần thiết Bởi điều này, PE header có hai trường alignment khác là: Section alignment file alignment Section alignment cách section nhớ nói Còn file alignment (sử dụng 512 bytes hay 200h) cách section file đĩa cà kích thước nhiều sector để tối ưu trình loading Nó cho phép file đánh số trang (paging file) sử dụng ổ cứng để lưu trữ trang cách tạm thời từ nhớ vật lý chúng không sử dụng Lấy ví dụ sau, ứng dụng nạp tình trạng rảnh rỗi, không gian địa đánh trang bên ổ đĩa để tạo khồng gian cho ứng dụng khác cần nạp vào nhớ RAM Nếu tình hình đảo lộn, hệ điều hành nạp cách dễ dàng ứng dụng đầu tiền trở thành nhớ RAM phục hồi lại thi hành nơi mà bị ngừng lại Một ứng dụng sử dụng nhiều nhớ không gian có nhớ vật lý hệ thống sử dụng ổ cứng nơi lưu trữ thứ cấp mà nhớ vật lý không đủ không gian lưu trữ NHÓM THÔNG TEAM – AT8B ĐỀ TÀI: TÌM HIỂU CẤU TRÚC PE FILE Khi PE file nạp vào nhớ boie windows loader, phiên nhớ biết đến module Địa bắt đầu nơi ánh xạ file bắt đầu gọi HMODULE Một module nhớ biểu diễn tất đoạn mã, liệu toàn tài nguyên từ file thực thi mà điều cần thiết cho thi hành mà thuật ngữ Proccess tham chiếu tới không gian địa cô lập mà sử dụng để running module The DOS Header Tất PE bắt đầu DOS Header, vùng chiếm 64 bytes file Nó dùng trường hợp chương trình bạn chạy DOS, nhận biết file thực thi hợp lệ thi hành DOS stub, phần mà lưu trữ trược tiếp sau header Hầu hết DOS stub thường sử dụng hành ngắt 21h để chuỗi ký tự thông báo tương tự sau : “ This program must be run under Micrsioft Windows ” chương trình DOS phát triển mạnh Khi xây dựng ứng dụng phát triển nên tảng Windows, chương trình linker liên kết với stub program mặc định gọi WINSTUB.EXE vào file thực thi bạn Bạn ghi đè, phủ hàm sử dụng chương trình linker mặc định cách thay chương trình MS-DOS-BASED riêng bạn cho WINSTUB sử dụng –STUB: tùy chọn chương trình linker liên kết file thực thi DOS Header cấu trúc định nghĩa file windows.inc winnt.h (Nếu bạn có chương trình dịch hợp ngữ trình biên dịch cài máy, bạn tìm thấy file thư mục \include\) Nó có 19 thành phần mà có thành phần magic lfanew đáng ý NHÓM THÔNG TEAM – AT8B ĐỀ TÀI: TÌM HIỂU CẤU TRÚC PE FILE Hình 2.1 Cấu trúc DOS Header Trong PE file ,phần magic DOS Header chứa giá trí 4Dh, 5Ah, giá trị dấu hiệu thông báo cho biết DOS Header hợp lệ MZ bytes bấu tiên mà bạn nhìn thấy PE file đó, file mở chương trình Hex editor Hình 2.1 bạn thấy phần lfanview giá trị DWORD nằm vị trí cuối DOS Header đằng trước nơi bắt đầu DOS Stub Nó chứa offset PE Header, có liên quan đến phần đầu file (file beginning) Windows loader tìm kiếm offset bỏ qua DOS Stub trực tiếp tới PE Header Như nói trên, DOS Header chiếm 64 bytes bắt đầu tiền file – ví dụ hàng đầu nhìn thấy chương trình Hex Editor hình minh họa dây Giá trị DWORD cuối trước điểm bắt đầu DOS Stub chứa giá trị 00h 01h 00h 00h Để ý đến việc reverse trật tự byte, điều giúp biết 00h 00h 01h 00h offset nơi mà PE Header bắt đầu PE Header bắt đầu với phần signatures 50h, 45h, 00h, 00h Nếu trường Signature PE Header, bạn tìm thấy NE signature PE, Lúc bạn làm việc với file NE Windows 16 bit Cũng tương tự vậy, bận thấy LE nằm Signature field thi có nghĩa cho ta biết trình điều khiển thiết bị ảo Window 3.x (VxD) Còn LX dấu hiệu file cho OS/2 2.0 NHÓM THÔNG TEAM – AT8B ĐỀ TÀI: TÌM HIỂU CẤU TRÚC PE FILE Hình 2.2 Phần DOS header PE header BASECALC.EXE The PE Header PE Header thuật ngữ chung đại diện cho cấu trúc đặt tên IMAGE_NT_HEADER Cấu trúc bao gồm thông tin thiết yếu sử dụng loader IMAGE_NT_HEADER có thành phần định nghĩa file windows.inc hình sau: Hình 3.1 Cấu trúc IMAGE_NT_HEADER • Signature: DWORD chứa giá trị sau 50h, 45h, 00h ( Các kí tự PE kèm giá trị tận 0) • FileHeader: bao gồm 20 byte PE file, chứa thông tin sơ đồ bố trí vật lý đặc tính file Ví dụ: số lượng section • OptionalHeader: luôn diện tạo thành 224 byte Nó chứa thông tin sơ đồ Logic bên file PE Ví dụ: AddressOfEntryPoint Kích thước qui định thành phần FileHeader Cấu trúc thành phần định nghĩa file windows.inc • FileHeader định nghĩa giống hình minh họa : NHÓM THÔNG TEAM – AT8B ĐỀ TÀI: TÌM HIỂU CẤU TRÚC PE FILE Hình 3.2 Cấu trúc FileHeader Hầu hết nhữn thành phần không hữu ích chúg ta phải thay đổi thành phần NumberOfSection muốn thêm xóa section PE File Characteristics bao gồm cờ mà cò xác định thể để biết PE File mà hình HexEditor, tìm thấy NumberOfSection việc đếm DWORD WORD (6 byte) từ chỗ bắt đầu PE Header (Tức giá trị DWORD Signature giá trị WORD Machine) (note: trường NumberOfSection sử dụng viuses nhiều lý khác Lấy ví dụ, trường bị thay đổi cách viruses gia tăng lên để thêm section vào PE image đặt đoạn virus body vào section Các hện thống Windows NT chấp nhận tới 96 section PE file Trên hệ thống sử dụng Win 95 không kiểm tra kĩ phần section number) Xem hình dưới: Hình 3.3 Giá trị NumberOfSection Điều kiểm tra lại cách sử dụng công cụ PE Ví dụ: Công Cụ PEBrowesePro NHÓM THÔNG TEAM – AT8B ĐỀ TÀI: TÌM HIỂU CẤU TRÚC PE FILE Hình 3.4 Công PEBrowesePro NHÓM THÔNG TEAM – AT8B Cụ 10 ĐỀ TÀI: TÌM HIỂU CẤU TRÚC PE FILE Hình 7.4 Như cấu trúc IMAGE_EXPORT_DIRECTORY trỏ tơi mảng bảng chuỗi kí tự ASCII Mảng quan trọng EAT mảng trỏ hàm mà chứa địa exported functions Hai mảng thứ hai chạy song song theo xếp tăng dần dựa tên hàm để phép tìm kiếm nhị phân cho tên hàm thực đưa kết số thứ tự hàm tìm thấy vào mảng khác Số thứ tự đơn giản số bên EAT hàm Hình 7.4 Exporting by Ordinal Only: NumberOfFunctions phải với NumberOfNames Tuy nhiên số trường hợp NumberOfNames lại NumberOfFunctions Khi hàm exported thông qua số thứ tự, NHÓM THÔNG TEAM – AT8B 24 ĐỀ TÀI: TÌM HIỂU CẤU TRÚC PE FILE danh sách hai mảng ENT EOT – không cs tên Những hàm tên exported thông qua số thứ tự Nguowig lập trình rõ số thứ tự bắt đầu def file Export Forwarding: Đôi hàm exported từ file Dll đặc thù thực tế hàm lại nằm file Dll hoàn toan khác Điêu gọi Export Fowarding Ví dụ hệ điều hành WinNT, Win2k WinXP hàm kernel32.dll HeapAlloc forwarded từ hàm RtlAllocHeap Exported ntdll.dll File NTDLL.DLL chứa API bẩm sinh mà tương tác trực tiếp với kernel windows Forwarding thực thời điểm liên kết thông qua câu lệnh đặc biệt Def file The Import Section: Import section bao gồm thông tin tất hàm imported file thực thi từ file Dll Thông tin lưu vài cấu trúc liệu Phần quan section ImportDirectory ImportAddressTable mà nói Trong số file thực thi cũng có directories Bound_Import Delay_Import, Delay_Import directory Trình windows loader chịu trách nghiệm việc nạp tất file Dll mà ứng dụng sử dụng ánh xạ chúng cào địa process Nó phải tìm địa tât imported functions file Dlls khác chúng đặt chúng sẵn sàng để sử dụng cho file thực thi nạp Địa hàm bên file Dll địa tĩnh mà thay đổi phiên cập nhập hoá file Dll released, ứng dụng xây dựng để sử dụng địa hàm hardcoded chế phát triển để chp phép thay đổi mà không cần phải tạ nhiếu thay đổi, chỉnh sửa đoạn mã file thực thi vào lúc chạy Điều hoàn thành thông qua việc sử dụng Import Address Table (IAT) Đây bảng trỏ tới địa hàm mà điền vào trình Windows loader file Dll nạp Bằng việc sử dụng bảng trỏ, trình loader không cẩn phải thay đổi địa imported functions đoạn mã lệnh mà chúng gọi Tất thứ mà phải làm thêm địa xác vào nơi riêng lẻ bảng import công việc hoàn tất The Import Directory: Import Directory thực mảng cấu trúc IMAGE_IMPORT_DESCRIPTOR Mỗi cấu trúc 20 bytes chứa thông tin Dll mà PE file import hàm vào, lấy ví dụ PE file NHÓM THÔNG TEAM – AT8B 25 ĐỀ TÀI: TÌM HIỂU CẤU TRÚC PE FILE import hàm từ 10 file Dll khác có 10 cấu trúc IMAGE_IMPORT_DESCRIPTOR mảng Không có trường hợp cho ta biêt số lượng cấu trúc mảng Để thay thế, cấu trúc cuối có trường điền đầy giá trị Cùng với Export Directory bạn tìm thấy Import Directory đâu việc quan sát Data Directory Trong thành phần cuối quan trọng nhất: Hình 8.1 Cấu trúc IMAGE_IMPORT_DESCRIPTOR Thành phần Export Directory DWORD union, thời điểm tập hợp cờ Tuy nhiên, Microsoft thay đổi ý nghĩa không lo lắng để cập nhập file WINNT.H Trường hợp thực chứa RVA mảng cấu trúc IMAGE_THUNK_DATA Thành phần TimeDateStamp đặt trừ file thực thi giới hạn chứa -1 Thành phần tiếp ForwarderChain sử dụng cho việc liên kết old-style thành phần không đề cập đến Thành phần Namel chứa trỏ tới chuỗi tên ACSII file Dll Thành phần cuối FirstThunk, chưa RVA mảng cấu trúc IMAGE_THUNK_DATA – mảng Nếu hàm miêu tả bound import FirstThunk chứa địa thực hàm thay RVA tới IMAGE_THUNK_DATA Những cấu trúc định nghĩa sau: Hình 8.2 Cấu trúc IMAGE_THUNK_DATA Mỗi IMAGE_THUNK_DATA DWORD union mà thực tế có hai giá trị, file đĩa chứa số thứ tự imported function RVA tới cấu trúc IMAGE_IMPORT_BY_NAME Một NHÓM THÔNG TEAM – AT8B 26 ĐỀ TÀI: TÌM HIỂU CẤU TRÚC PE FILE nạp, cấu trúc trỏ FirsThunk viết đè lên địa hàm imported function, việc trở thành Import Address Table Mỗi cấu trúc IMAGE_IMPORT_BY_NAME định nghĩa sau : Hình 8.3 Cấu trúc IMAGE_IMPORT_BY_NAME Hint: Chứa mục bên Export Address Table file Dll hàm có Trường hợp sử dụng PE Loader tìm kiếm hàm Export Address Table DLL cách nhanh chóng Tên mà mục dùng không tương ứng phép tìm kiếm nhị phân thực để tìm kiếm tên Thông thường giá trị không cần thiết vài trình linker đặt trường Name1: Bao gồm tên imported function Tên null-terminated ASCII string Chú ý kích thước định nghĩa byte thực tế trường có kích thước thay đổi Do phương pháp để biểu diễn trường có kích thước thay đổi cấu trúc Cấu trúc mà cung cấp ban tham chiếu tới thông qua tên miêu tả Những phần quan trọng tên imported Dll mảng cấu trúc IMAGE_THUNK_DATA Mỗi cấu trúc IMAGE_THUNK_DATA tương ứng với imported function từ Dll Các mảng trỏ tới OriginalFirstThunk FirstThunk chạy song song kết thúc Null DWORD Đó cặp phân tách mảng cấu trúc IMAGE_THUNK_DATA cho imported DLL Để sử dụng theo cách khác, có nhiều cấu trúc IMAGE_IMPORT_BY_NAME Bạn tạo hai mảng, sau điền vào hai mảng RVAs cấu trúc IMAGE_IMPORT_BY_NAME, vi hai mảng chứa giá trị giống Bây bạn gán RVA mảng cho OriginalFirstThunk RVA mảng thứ hai cho FirstThunk Số lượng phần tử mảng OriginalFirstThunk FirstThunk phụ thuộc vào số lượng hàm imported từ file Dll Hai mảng song song, tương đương gọi tên khác tên chung Import Address Table Import Name Table hay Import Lookup Table NHÓM THÔNG TEAM – AT8B 27 ĐỀ TÀI: TÌM HIỂU CẤU TRÚC PE FILE Hình 8.4 Các lời gọi tới hàm import xảy thông qua trỏ hàm IAT NHÓM THÔNG TEAM – AT8B 28 ĐỀ TÀI: TÌM HIỂU CẤU TRÚC PE FILE Chương 2: Dịch ngược (RE – Reverse Engineering) Tổng quan RE Kĩ thuật dịch ngược trình tìm kiếm thông tin từ kiến thức thiết kế blue-print từ tất người làm Định nghĩa đời lâu trước máy tính , công nghệ đạ khác đời , có từ cách mạng công nhiệp -reverse engineering với ý nghĩa ngược lại trình chế tạo để tìm hiểu chế hoạt động Tương tự nghiên cứu khoa học , người nghiên cứu phải làm việc “blueprint” nguyên tử trí óc người Điểm khác biệt dịch ngược môn khoa học tự nhiên khác khác dịch ngược nghiên cứu người tạo , tượng tự nhiên Kĩ thuật dịch ngược cách để tìm tri thức chưa đầy đủ , ý tưởng, cách thiết kế thông tin ta Trong vài trường hợp,người chủ thông tin không muốn chia sẻ Trong trường hợp khác, thông tin bị hay phá hủy Theo truyền thống , kĩ thuật dịch ngược dùng để nói thành phần đóng gói sản phẩm mổ xẻ chúng để xem chúng thiết kế , làm cách để sản phẩm tốt Trong nhiều công nghiệp , dịch ngược bao gồm việc examming sản phẩm microscope lấy phần tìm hiểu xem phần làm ? Không lâu trước , dịch ngược thực sở thích , thực nhiều người (mặc dù không cho kỹ thuật dịch ngược) Hãy nhớ cách mà nhiều người ngày đầu thiết bị điện tử, thích thú tháo appliances radio hay tivi để xem gồm xảy bên ? Đó dịch ngược Tất nhiên, phát triển thiết bị điện tử làm cho việc trở nên không thiết thực Những thiết bị số đại bé nhỏ nên ngày bạn gần thấy thứ thú vị cách open the box Dịch ngược phần mềm : Reversing Phần mềm ngày công nghệ phức tạp hấp dẫn xung quanh chúng ta, dịch ngược phần mềm giống ta mở software’s ”box” , nhìn vào Tất nhiên, không cần srewdrivers hành trình Giống software engineering , software reverse engineering tiến trình ảo, bao gồm CPU, trí óc người Dịch ngược phần mềm cần kết hợp kĩ hiểu biết máy tính phát triển phần mềm, chủ đề rộng lớn khác, chuẩn bị cần thiết ham hiểu biết kiên trì học hỏi Dịch ngược phần mềm bao gồm số nghệ thuật khác: code breaking, puzzle solving, programming, and logical analysis NHÓM THÔNG TEAM – AT8B 29 ĐỀ TÀI: TÌM HIỂU CẤU TRÚC PE FILE Dịch ngược sử dụng người khác cho nhiều mục đích khác nhau, nhiều số trình bày sách Ứng dụng dịch ngược Sẽ công nói hầu hết ngành công nghiệp dịch ngược dùng để phát triển hoàn thiện sản phẩm ,và chức tiếng nó.Điều thú vị không thật phổ biến ngành công nghiệp phần mềm với ngành khác Ở có vài lý , lý phần mềm phức tạp nên nhiều trường hợp reverse engineering cho mục đích phức tạp chẳng đem lại lợi ích kinh tế Vậy ứng dụng chủ yếu reversing giới software ? Tổng quan mà nói, có lĩnh vực : liên quan tới bảo mật , liên quan tới phát triển phần mềm Những phần tiếp sau nói ứng dụng hai hướng Dịch ngược – Bảo mật Với số người gắn liền bảo mật dịch ngược khó hình dung Dịch ngược liên quan đến vài khía cạnh khác bảo mật Như là, dịch ngược dùng nghiên cứu mã hóa- người nghiên cứu dịch ngược sản phẩm đánh giá mức độ bảo mật Dịch ngược sử dụng nhiều việc hình dung hoạt động malware , hai đầu chiến tuyến : người phát triển malware người chống lại Cuối , dịch ngược phổ biến với cracker, người dùng để phân tích phá bỏ phương thức bảo vệ phần mềm Tất tiếp tục thảo luận chương sau Malicious Software Internet thay đổi hoàn toàn công nghiệp máy tính tổng thể lẫn riêng khía cạnh bảo mật máy tính Malicious software , virus, worm, bùng nổ nhanh giới nơi mà hàng tỷ người kết nối Internet sử dụng e-mail Khoảng 10 năm trước, virus thường copy vào đĩa mềm đĩa mềm load vào máy tính khác để lây nhiễm Quá trình lây nhiễm thường chậm, chống đỡ đơn giản nhiều cách thức chúng lây nhiễm quen thuộc cần có tác động người Đó câu chuyện cũ lịch sử- Internet tạo liên kết ảo tất máy tính giới Ngày nay, nhiều loại worm lây cách tự động tới hàng tỉ máy tính mà không cần có tác động người Dịch ngược dùng rộng rãi hai mặt đường dây malware.Những người phát triển malware thường dùng reversing để xác định lỗi hệ điều hành phần mềm khác Những lỗi sử dụng để thâm nhập vào phần bảo vệ hệ thống chấp nhận nhiễm độc -thường Internet Bên cạnh lây nhiễm, tội phạm mượn kĩ NHÓM THÔNG TEAM – AT8B 30 ĐỀ TÀI: TÌM HIỂU CẤU TRÚC PE FILE thuật dịch ngược để xác định lỗi chấp nhận malware thực kết nối tối thông tin nhạy cảm điều khiển toàn hệ thống Ở chiến tuyến đối nghịch, người phát triển antivirus software khảo sát phân tích tất malware mà họ có Họ dùng reversing để theo dõi bước mà chương trình làm định tổn thất xảy ra, mức độ nguy hiểm , làm cách để remove chũng khỏi hệ thống bị nhiễm độc, lây nhiễm tránh Dịch ngược giải thuật mã hóa Mã hóa cho công cụ bảo mật : Alice gửi cho Bob tin nhắn , mã hóa tin nhắn sử dụng bí mật biết Bob cô Giải thuật mã hóa chia kiểu : giải thuật hạn chế giải thuật dựa key Giải thuật hạn chế giống vài đứa trẻ chơi với nhau, viết thư cho bạn cách dịch chữ lên xuống Bí mật giải thuật hạn chế thân nó.Một quy luật tìm ra, không bí mật nữa.Giải thuật hạn chế cung cấp bảo vệ kỹ thuật dịch ngược làm cho trở nên khó bảo vệ bí mật giải thuật Một reversers có tay cách mã hóa giải mã , điều lại thời gian trước giải thuật bị khám phá Bởi giải thuật bí mật , reversing xem cách để phá hỏng giải thuật Một cách mã hóa khác, giải thuật mã hóa dựa key, bí mật nằm key , vài giá trị dùng giải thuật để mã hóa giải mã thông tin.Trong giải thuật dựa key, người dùng mã hóa thông tin key giữ nó.(và vài divulged để legitimate recipient, dựa giải thuật) Nó làm reversing pointless giải thuật coi biết Để decipher thông tin , : + Tìm kiếm key + Thử tất phép so sánh có key + Tìm kẽ hở giải thuật sử dụng để tìm key thông tin ban đầu Tuy vậy,vẫn có trường hợp cần reverse, nhữ phương pháp thực giải thuật mã hóa dựa key không công khai Mặc dù hầu hết giải thuật mã hóa dựa key phổ biến, chi tiết phương pháp đặc biệt thường có tác động không ngờ mức độ bảo mật tổng thể chươngtrình Giải thuật mã hóa thường mỏng manh, lỗi nhỏ trình mã hóa làm tính bảo mật bảo vệ giải thuật Con đường để thực biết sản phẩm mã hóa hoàn thiện xem toàn source code hoặc, reverse NHÓM THÔNG TEAM – AT8B 31 ĐỀ TÀI: TÌM HIỂU CẤU TRÚC PE FILE Các phần mềm dịch ngược 2.1 Các phần mềm thường sử dụng OllyDBG: OllyDBG hay gọi tắt Olly công cụ debug phổ biến Nhờ giao diện trực quan dễ sử dụng nên Olly phù hợp với người dùng trình độ khác Net Reflector Nếu ta có Olly để debug chương trình window 32-bit chương trình chạy tảng NET Framework ta có công cụ Net Reflector IDA: IDA công cụ disassembler debuger đa tảng, sử dụng tảng Windows, Linux or Mac OS X Đây tính ưu việt hẳn so với Olly Net Reflector- sử dụng cho tảng định Hex Editor: Trong trình thực công việc Reverse, ta cần đến công cụ Hex Editor để đọc chỉnh sửa file định dạng hex Có nhiều Hex Editor, người thường lựa chọn công cụ phù hợp với điều kiện sử dụng quen tay Có số công cụ đưa để gợi ý cho người như: 010 Hex Editor (phần mềm trả phí), Winhex (phần mềm miễn phí), CFF Explorer VIII (1 chương trình nằm công cụ Explorer Suite) 2.2 OllyDBG OllyDBG hay gọi tắt Olly công cụ debug phổ biến Nhờ giao diện trực quan dễ sử dụng nên Olly phù hợp với người dùng trình độ khác Có thể download phần mềm địa chỉ: http://www.ollydbg.de/ Hiện thường sử dụng OllyDBG v1.10 Việc sử dụng OllyDBG phức tạp, sau hoàn thành việc download, giải nén chạy chương trình OLLYDBG.EXE mà không cần phải cài đặt Để mở file exe ta vào File -> Open ấn phím F3 Sau chọn file exe cần dùng NHÓM THÔNG TEAM – AT8B 32 ĐỀ TÀI: TÌM HIỂU CẤU TRÚC PE FILE Hình 3.2.1 Mở file thực thi OllyDBG Ta có thông tin OllyDBG hiển thị sau: Hình 3.2.2 Giao diện OllyDBG Cửa sổ OllyDBG chia làm cửa sổ con: 1: Disassembler window: Các đoạn mã chương trình dạng code assembly comment dòng code 2: Register window: Các ghi giá trị chúng NHÓM THÔNG TEAM – AT8B 33 ĐỀ TÀI: TÌM HIỂU CẤU TRÚC PE FILE 3: Tip window: Các thông tin bổ sung cho dòng code Các thông tin hữu ích trình debug 4: Dump window: Cho phép người sử dụng xem chỉnh sửa giá trị nhớ chương trình debug 5: Stack window: Thông tin stack chương trình Ngoài cửa sổ Olly có số cửa sổ khác Để ý menu có chức năng: - Click vào nút L ta thấy cửa số Log data Olly Chứa thông tin module, import library plugins load chương trình thời điểm chương trình load vào Olly - Click vào nút E ta thấy cửa sổ Executable modules, danh sách file thực thi chương trình sử dụng - Click vào nút M ta thấy cửa sổ Memory Map, chứa thông tin nhớ chương trình ta sử dụng - Click vào nút T cửa sổ Threads, liệt kê thread chương trình - Click vào nút W Window - Nút H cửa sổ Handles - Nút / Patches, cửa sổ chứa thông tin câu lệnh ta sửa chương trình - Nút K cửa sổ Call Stack - Nút B cửa sổ Breakpoints, hiển thị breakpoint ta đặt chương trình - Nút R - References chứa thông tin kết cho chức tìm kiếm Olly Những chức thiếu chức phục vụ cho công việc debug: NHÓM THÔNG TEAM – AT8B 34 ĐỀ TÀI: TÌM HIỂU CẤU TRÚC PE FILE Hình 3.2.3 Danh sách chức debug - Đặt Breakpoint: F2 - Run: F9 - Step into: F7 - Step over: F8 - Restart: Ctrl + F2 NHÓM THÔNG TEAM – AT8B 35 ĐỀ TÀI: TÌM HIỂU CẤU TRÚC PE FILE Chương DEMO Code demo: 386 model flat,stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\comdlg32.inc include \masm32\include\imgutil.inc include \masm32\include\imagehlp.inc include \masm32\include\excppkg.inc include \masm32\include\user32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\comdlg32.lib data my_file db "E:\a.exe",0 FileNameSave db "E:\PE.c",0 szFormat db "%X",0;%1X in duoi dang Hex szDword dd "%s",0 MessaBox db "MessaBox",0 NumberOfSections db "NumberOfSections:",0 ImageBase db "ImageBase:",0 PointerToEntryPoint db "PointerToEntryPoint:",0 CheckSum db "CheckSum:",0 FileAlignment db "FileAlignment:",0 SizeOfImage db "SizeOfImage:",0 SizeOfHeaders db "SizeOfHeaders",0 SectionAlignment db "SectionAlignment",0 hFile dd ? hMapping dd ? pMapping dd ? pMemory dd ? pSizeMapping dd ? hFileSave dd ? hBuffer db ? hCount dd ? const MEMORYSIZE equ 65535 code start: invoke CreateFile, addr FileNameSave, GENERIC_WRITE , ,NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL mov hFileSave, eax NHÓM THÔNG TEAM – AT8B 36 ĐỀ TÀI: TÌM HIỂU CẤU TRÚC PE FILE ;================================= PUSH PUSH FILE_ATTRIBUTE_NORMAL PUSH OPEN_EXISTING PUSH PUSH FILE_SHARE_READ PUSH GENERIC_READ;0C0000000h PUSH offset my_file CALL CreateFile mov hFile,eax ; ========================================================= == push push push push PAGE_READONLY push push hFile call CreateFileMapping ;======================================================= mov hMapping, eax push push push push FILE_MAP_READ push hMapping Call MapViewOfFile mov pMemory, eax ;lay lenght save vao eax push push hFile call GetFileSize mov pSizeMapping, eax mov esi,pMemory add esi,dword ptr[esi+3ch] ;(e_lanew) mov eax,dword ptr[esi+6h] movsx eax,ax mov hCount,eax invoke wsprintf,addr hBuffer,addr szFormat,eax invoke MessageBox, 0,addr hBuffer,ADDR NumberOfSections, MB_OK ;NumberOfSections invoke wsprintf,addr hBuffer,addr szFormat,dword ptr[esi+28h] invoke MessageBox, 0,addr hBuffer,ADDR SectionAlignment, MB_OK ;SectionAlignment invoke wsprintf,addr hBuffer,addr szFormat,dword ptr[esi+34h] invoke MessageBox, 0,addr hBuffer,ADDR ImageBase, MB_OK ;ImageBase NHÓM THÔNG TEAM – AT8B 37 ĐỀ TÀI: TÌM HIỂU CẤU TRÚC PE FILE invoke wsprintf,addr hBuffer,addr szFormat,dword ptr[esi+3ch] invoke MessageBox, 0,addr hBuffer,ADDR FileAlignment, MB_OK ;FileAlignment invoke wsprintf,addr hBuffer,addr szFormat,dword ptr[esi+50h] invoke MessageBox, 0,addr hBuffer,ADDR SizeOfImage, MB_OK ;SizeOfImage invoke wsprintf,addr hBuffer,addr szFormat,dword ptr[esi+54h] invoke MessageBox, 0,addr hBuffer,ADDR SizeOfHeaders, MB_OK ;SizeOfHeaders push eax call CloseHandle push hMapping Call CloseHandle push hFile call CloseHandle FINISH: invoke ExitProcess,0 end start NHÓM THÔNG TEAM – AT8B 38 [...]... của các cấu trúc IMAGE_IMPORT_DESCRIPTOR Mỗi cấu trúc là 20 bytes và chứa thông tin về một Dll mà PE file của chúng ta import các hàm vào, lấy ví dụ nếu PE file NHÓM THÔNG TEAM – AT8B 25 ĐỀ TÀI: TÌM HIỂU CẤU TRÚC PE FILE của chúng ta import các hàm từ 10 file Dll khác nhau thì sẽ có 10 cấu trúc IMAGE_IMPORT_DESCRIPTOR trong mảng này Không có trường hợp nào chỉ cho ta biêt số lượng của các cấu trúc trong... phần cuối cùng của PE Header IMAGE_NT_HEADER Như chúng ta từng nói, Data Directory là một mảng của 16 cấu trúc IMAGE_DATA_DIRECTORY structures, cứ mỗi 8 bytes thì mỗi phần lại có NHÓM THÔNG TEAM – AT8B 15 ĐỀ TÀI: TÌM HIỂU CẤU TRÚC PE FILE liên quan với một cấu trúc dữ liệu quan trọng trong PE File Mỗi mảnh tham chiếu tới một mục đã được nghĩa trước, ví dụ như là import table Cấu trúc của Dât Directory... của cấu trúc dữ liệu Hình 4.1 Cấu trúc Data Directory VirtualAddress là một địa chỉ ảo tưởng đối của cấu trúc dữ liệu Isize bao gồm kích thước theo byte của cấu trúc dữ liệu, 16 directory mà những cấu trúc này tham chiếu đến, bản thân chúng được định nghĩa trong file windows.inc: Hình 4.2 Danh sách 16 directory Lấy ví dụ chúng ta sử dụng chương trình LordPE Trong LordPE, phần Data Directory cho biết file. .. TÀI: TÌM HIỂU CẤU TRÚC PE FILE Hình 3.7 Cấu trúc PE của BASECALC.EXE Bên cạch các công cụ PE đã được đề cập ở trên, chương trình debug ưu thích là OllyDbg cũng có thể phân tích được PE Header thông qua việc hiển thị thông tin một cách đầy đủ là ý nghĩa Dùng OllyDBg load file Ví dụ của chúng ta vào Olly và nhấn Alt +M hoặc bấm vào nút M để của sổ Memory Map cửa sổ này sẽ cho chúng ta thấy được PE File. .. imported function hoặc là một RVA tới một cấu trúc IMAGE_IMPORT_BY_NAME Một khi đã NHÓM THÔNG TEAM – AT8B 26 ĐỀ TÀI: TÌM HIỂU CẤU TRÚC PE FILE được nạp, một cấu trúc sẽ được trỏ tại bởi FirsThunk được viết đè lên bằng địa chỉ của các hàm imported function, việc này trở thành Import Address Table Mỗi cấu trúc IMAGE_IMPORT_BY_NAME được định nghĩa như sau : Hình 8.3 Cấu trúc IMAGE_IMPORT_BY_NAME Hint: Chứa... được imported từ file Dll Hai mảng song song, tương đương được gọi bởi các tên khác nhau nhưng cái tên chung nhất là Import Address Table và Import Name Table hay Import Lookup Table NHÓM THÔNG TEAM – AT8B 27 ĐỀ TÀI: TÌM HIỂU CẤU TRÚC PE FILE Hình 8.4 Các lời gọi tới các hàm được import xảy ra thông qua một con trỏ hàm trong IAT NHÓM THÔNG TEAM – AT8B 28 ĐỀ TÀI: TÌM HIỂU CẤU TRÚC PE FILE Chương 2: Dịch... thông tin về kết quả cho chức năng tìm kiếm trong Olly Những chức năng không thể thiếu đó là các chức năng phục vụ cho công việc debug: NHÓM THÔNG TEAM – AT8B 34 ĐỀ TÀI: TÌM HIỂU CẤU TRÚC PE FILE Hình 3.2.3 Danh sách các chức năng debug - Đặt Breakpoint: F2 - Run: F9 - Step into: F7 - Step over: F8 - Restart: Ctrl + F2 NHÓM THÔNG TEAM – AT8B 35 ĐỀ TÀI: TÌM HIỂU CẤU TRÚC PE FILE Chương 3 DEMO Code của demo:... trong bộ nhớ Hình 3.8 Phân tích PE header bằng OllyDbg Tiếp theo nhấn chuột phải trên PE Header và chọn Dump in CPU Sau đó trong của sổ Hex Windows lại nhấn chuột phải một lần nữa và chọn Special  PE Header NHÓM THÔNG TEAM – AT8B 14 ĐỀ TÀI: TÌM HIỂU CẤU TRÚC PE FILE Hình 3.9 Phân tích PE header bằng OllyDbg Chúng ta sẽ có được thông tin như sau: Hình 3.10 Phân tích PE header bằng OllyDbg 4 The Data... Table Section Table là thành phần tiếp theo ngay sau PE Header Nó là một mảng của cấu trúc IMAGE_SECTION_HEADER, mỗi phần tử sẽ chứa thông tin về một section trong PE File Ví dụ thuộc tích của nó và offset ảo Số luoch các section chính là thành phần thứ 2 của FileHeader Nếu có 8 section trong PE File thì sẽ có 8 bản sao cấu trúc trong table Mỗi cấu trúc Header là 40 byte và sẽ không có thêm “padding”... Data Directory Nó được định nghĩa giống như hình minh họa dưới đây: NHÓM THÔNG TEAM – AT8B 11 ĐỀ TÀI: TÌM HIỂU CẤU TRÚC PE FILE Hình 3.6 Cấu Data Directory trúc 1 AsddressOfEntrypoint: RVA (địa chỉ ảo tương đối) của câu lênh đầu tiên mà sẽ được thực thi khi chương trình PE loader sẵn sàng để run PE File Nếu như bạn muốn làm thay đổi lại giá trị trong trường này thay mội RVA mới và do đó câu lệnh tại

Ngày đăng: 07/06/2016, 19:33

Từ khóa liên quan

Mục lục

  • LỜI MỞ ĐẦU

  • CHƯƠNG I. GIỚI THIỆU

    • 1. Cấu trúc cơ bản (Basic structure)

    • 2. The DOS Header

    • 3. The PE Header

    • 4. The Data Directory

    • 5. The Section Table

    • 6. The PE File Sections :

    • 7. The Export Sections:

    • 8. The Import Section:

    • Chương 2: Dịch ngược (RE – Reverse Engineering)

      • 1. Tổng quan về RE

      • Ứng dụng của dịch ngược

      • 2. Các phần mềm dịch ngược

      • 2.1 Các phần mềm thường sử dụng

      • 2.2 OllyDBG

      • Chương 3. DEMO

Tài liệu cùng người dùng

Tài liệu liên quan