Đăng ký Đăng nhập
Trang chủ Công nghệ thông tin An ninh bảo mật Xemtailieu tim hieu ky thuat dich nguoc ma nguon...

Tài liệu Xemtailieu tim hieu ky thuat dich nguoc ma nguon

.DOC
46
610
141

Mô tả:

Đề tài tìm hiểu kỹ thuật dịch ngược mã nguồn được thực hiện bao gồm các nội dung chính sau: 1. Tìm hiểu tổng quan về dịch ngược mã nguồn (khái niệm dịch ngược mã nguồn, mục đích dịch ngược mã nguồn…), ứng dụng của dịch ngược mã nguồn: dịch ngược bảo mật, dịch ngược giải thuật mã hóa, dịch ngược dung trong cracking. 2. Tìm hiểu cụ thể về dịch ngược mã nguồn trong phần mềm. Các kỹ thuật dịch ngược mã nguồn phần mềm trong môi trường windows, file và cấu trúc file thực thi trong môi trường windows; các công cụ phổ biến cho dịch ngược mã nguồn phần mềm.
Tìm hiểu kỹ thuật dịch ngược mã nguồn HỌC VIỆN KỸ THUẬT MẬT Mà KHOA AN TOÀN THÔNG TIN ----™ ˜ ---- BÁO CÁO BÀI TẬP LỚN Môn: Cơ sở an toàn thông tin Đề tài: tìm hiểu kỹ thuật dịch ngược mã nguồn Giảng viên: Vũ Thị Vân Nhóm thực hiện: 1. Trần Văn Dũng 2. Bùi Đức Thuận Nhóm 3 – AT8B Hà Nội, 10/2014 Lớp: AT8B Lớp: AT8B 2 Tìm hiểu kỹ thuật dịch ngược mã nguồn PHÂN CÔNG CÔNG VIỆC 1. Trần Văn Dũng : - Chương 3: Demo + dịch tài liệu. - Các kỹ thuật dịch ngược mã nguồn phần mềm - Làm báo cáo bản .doc - Các công cụ dịch ngược mã nguồn - Các kỹ thuật dịch ngược mã nguồn phần mềm. 2. Bùi Đức Thuận : - Chương 1: Tổng quan dịch ngược mã nguồn, ứng dụng dịch ngược mã nguồn. - Cấu trúc PEfile trong windows. - Các công cụ dịch ngược phần mềm. - Làm báo cáo bản slide. Nhóm 3 – AT8B 3 Tìm hiểu kỹ thuật dịch ngược mã nguồn MỤC LỤC PHÂN CÔNG CÔNG VIỆC......................................................................3 MỤC LỤC...................................................................................................4 DANH MỤC CÁC HÌNH VẼ....................................................................6 TÓM TẮT NỘI DUNG ĐỀ TÀI................................................................7 LỜI MỞ ĐẦU.............................................................................................8 CHƯƠNG I: DỊCH NGƯỢC Mà NGUỒN.............................................9 I.1. Tổng quan về dịch ngược mã nguồn...................................................9 I.2. Ứng dụng của dịch ngược mã nguồn................................................11 I.2.1. Dịch ngược – Bảo mật.................................................................11 I.2.2. Malicious Software.....................................................................11 I.2.3. Dịch ngược giải thuật mã hóa.....................................................12 I.2.4. Cracking......................................................................................13 CHƯƠNG II: DỊCH NGƯỢC Mà NGUỒN PHẦN MỀM..................15 II.1. Cấu trúc PE file trong windows.......................................................15 II.1.1. DOS MZ header.........................................................................16 II.1.2. PE Header..................................................................................18 II.1.3. Section Table..............................................................................21 II.2. Các kỹ thuật dịch ngược mã nguồn.................................................22 II.2.1. Kỹ thuật pack, unpack file.........................................................22 II.2.2. Kỹ thuật disassembly.................................................................27 II.2.3. Kỹ thuật Debugging...................................................................31 II.2.4. Kỹ thuật anti anti-disassembly...................................................33 II.2.5. Kỹ thuật anti anti-debugging.....................................................36 II.3. Các phần mềm dịch ngược mã nguồn..............................................36 II.3.1. Disassembler và Debugger........................................................36 II.3.1.1. IDA Pro................................................................................36 II.3.1.2. OllyDbg...............................................................................38 II.3.2. Định dạng PE file.......................................................................43 Nhóm 3 – AT8B 4 Tìm hiểu kỹ thuật dịch ngược mã nguồn II.3.2.1. PEBrowse............................................................................43 II.3.2.2. Peid......................................................................................43 II.3.2.3. LordPE.................................................................................44 KẾT LUẬN................................................................................................45 CHƯƠNG III: DEMO..............................................................................46 TÀI LIỆU THAM KHẢO..........................................................................47 Nhóm 3 – AT8B 5 Tìm hiểu kỹ thuật dịch ngược mã nguồn DANH MỤC CÁC HÌNH VẼ Hình 1: Cấu trúc cơ bản của PE..............................................................................15 Hình 2: Cấu trúc DOS Header.................................................................................17 Hình 3: Cấu trúc Dos MZ header............................................................................18 Hình 4: Cấu trúc IMAGE_NT_HEADERS............................................................18 Hình 5: Trường NumberOfSections........................................................................19 Hình 6: Danh sách các trường trong OptionalHeader.............................................20 Hình 7: Cấu trúc IMAGE_SECTION_HEADER...................................................21 Hình 8: Packed file..................................................................................................23 Hình 9. File thực thi ban đầu. chưa được đóng gói.................................................25 Hình 10: File thực thi sau khi bị nén.......................................................................26 Hình 11: File thực thi sau khi giải nén và nạp vào bộ nhớ......................................26 Hình 12: File thực thi đầy đủ khi được giải nén thành công...................................26 Hình 13: Các cửa sổ chính IDA..............................................................................37 Hình 14: Công cụ IDA pro......................................................................................38 Hình 15: Cửa sổ chính OllyDBG............................................................................39 Hình 16: Các nút chức năng trong ollydbg.............................................................41 Hình 17: Các chức năng chính phục vụ debug........................................................42 Hình 18: Phần mềm LordPE..................................................................................44 Nhóm 3 – AT8B 6 Tìm hiểu kỹ thuật dịch ngược mã nguồn TÓM TẮT NỘI DUNG ĐỀ TÀI Đề tài tìm hiểu kỹ thuật dịch ngược mã nguồn được thực hiện bao gồm các nội dung chính sau: 1. Tìm hiểu tổng quan về dịch ngược mã nguồn (khái niệm dịch ngược mã nguồn, mục đích dịch ngược mã nguồn…), ứng dụng của dịch ngược mã nguồn: dịch ngược bảo mật, dịch ngược giải thuật mã hóa, dịch ngược dung trong cracking. 2. Tìm hiểu cụ thể về dịch ngược mã nguồn trong phần mềm. Các kỹ thuật dịch ngược mã nguồn phần mềm trong môi trường windows, file và cấu trúc file thực thi trong môi trường windows; các công cụ phổ biến cho dịch ngược mã nguồn phần mềm. 3. Demo dịch ngược mã nguồn một phần mềm đơn giản. Mục đích là biết cách sử dụng một số phần mềm dịch ngược, hiểu cơ bản về dịch ngược mã nguồn nói chung và dịch ngược mã nguồn phần mềm nói riêng. Nhóm 3 – AT8B 7 Tìm hiểu kỹ thuật dịch ngược mã nguồn LỜI MỞ ĐẦU Kể từ khi máy tính ra đời, nó đã làm thay đổi từng ngày, từng giờ cuộc sống con người chúng ta. Ngày nay, các hệ thống máy tính có mặt trên mọi ngành, mọi gia đình, mọi quốc gia và giữ một vai trò vô cùng quan trọng. Để đáp ứng nhu cầu ngày càng cao về khoa học máy tính và công nghệ thông tin, ngày càng có nhiều phần mềm, chương trình… cả có hại và có lợi cho người sử dụng vi tính. Để hiểu rõ và kiểm soát chúng, chúng ta cần phải tìm hiểu bản chất phần mềm, chương trình cho máy tính của chúng ta để kịp nâng cấp, chỉnh sửa chúng hay kiểm soát ảnh hưởng của chúng, hạn chế tác động có hại với hệ thống của ta. Với đa số các chương trình phần mềm hiện nay chúng ta đều không có mã nguồn nên công việc trên thực sự rất khó, từ đó kỹ thuật dịch ngược mã nguồn ra đời, trợ giúp rất mạnh mẽ trong việc giải quyết các vấn đề trên. Trong bài báo cáo này chúng em xin trình bày những tìm hiểu về kỹ thuật dịch ngược mã nguồn. Nội dung báo cáo bao gồm 3 chương lớn: Chương 1: Tổng quan về dịch ngược mã nguồn Chương 2: Tìm hiểu dịch ngược mã nguồn phần mềm Chương 3: Demo dịch ngược mã nguồn Nhóm 3 – AT8B 8 Tìm hiểu kỹ thuật dịch ngược mã nguồn CHƯƠNG I: DỊCH NGƯỢC Mà NGUỒN I.1. Tổng quan về dịch ngược mã nguồn Kĩ thuật dịch ngược là quá trình tìm kiếm thông tin từ kiến thức hoặc thiết kế blue-print từ tất cả những gì do con người làm ra. Định nghĩa này ra đời rất lâu trước khi máy tính, hoặc những công nghệ hiện đại khác ra đời, nó có từ cuộc cách mạng công nhiệp - reverse engineering với ý nghĩa đi ngược lại quá trình chế tạo để tìm hiểu cơ chế hoạt động. Tương tự như nghiên cứu khoa học, người nghiên cứu phải làm việc ngoài “blueprint” của nguyên tử hoặc là trí óc con người. Điểm khác biệt giữa dịch ngược và các môn khoa học tự nhiên khác khác là dịch ngược nghiên cứu về những gì do con người tạo ra, chứ không phải những hiện tượng tự nhiên. Kĩ thuật dịch ngược chỉ ra cách để tìm ra những tri thức chưa đầy đủ, những ý tưởng, và cách thiết kế khi những thông tin trên ta không có. Trong một 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ị mất hay phá hủy. Không lâu về trước, dịch ngược đã thực sự là một sở thích, được thực hiện bởi rất nhiều người (mặc dù nó không được cho là kỹ thuật dịch ngược). Hãy nhớ cách mà nhiều người trong những ngày đầu của những thiết bị điện tử, đã rất thích thú tháo những appliances như radio hay tivi ra để xem nó gồm những gì và cái gì đang xảy ra bên trong? Đó chính là dịch ngược. Tất nhiên, sự phát triển của các thiết bị điện tử đã làm cho việc này trở nên không còn thiết thực. Những thiết bị số hiện đại quá bé nhỏ nên ngày nay bạn gần như không thể thấy những thứ thú vị chỉ bằng cách open the box. Nhóm 3 – AT8B 9 Tìm hiểu kỹ thuật dịch ngược mã nguồn Trong khái hơn ta xét tới, đó là dịch ngược trong ngành công nghệ thông tin hiện nay. Như chúng ta đã biết, máy tính không thể hiểu được các ngôn ngữ tự nhiên, ngôn ngữ bậc cao (pascal, C, C++, Java…) mà đều phải được biên dịch hoặc thông dịch ra một ngôn ngữ bậc thấp mà máy có thể hiểu được. Quá trình đó được gọi như là “dịch xuôi”. Kỹ thuật dịch ngược là quá trình lấy một biên dịch nhị phân và cố gắng để tái tạo lại (hay hiểu) cách chương trình ban đầu hoạt động. Một lập trình viên ban đầu viết một chương trình, thường là trong một ngôn ngữ cấp cao như C ++ hoặc Visual Basic (hoặc God Forbid, Delphi). Bởi vì máy tính không vốn hiểu những ngôn ngữ đó, mà các đoạn mã do các lập trình viên viết được lắp ráp thành một định dạng cụ thể, một trong những ngôn ngữ một máy tính có thể hiểu. Mã này ban đầu được gọi là ngôn ngữ máy. Loại mã này rất không phải là rất thân thiện với con người, và thường lần đòi hỏi rất nhiều kiến thức và tư duy để tìm ra chính xác những gì các lập trình viên đã nghi và viết. Ngày nay, các phần mềm, các file, tài liệu và đặc biệt là các phần mềm, để đảm bảo tính bí mật, tính toàn vẹn, gọn nhẹ hay vấn đề bản quyền… chúng đều được che giấu (đóng gói hay mã hóa) thành một định dạng khác để người sử dụng không thể biết mã nguồn. Nên việc dịch ngược tìm lại mã nguồn trở thành công nghệ rất quan trọng đối với mục đích riêng của mỗi reverser. Đôi khi ta có thể tìm kiếm lỗ hổng bảo mật, mã độc, đôi khi bạn tò mò cách làm việc của bảo vệ chống sao chép, hay để tìm cách phá hoại chen malware, virus… hoặc đơn giản là tìm cách để sử dụng một phần mềm miễn phí v.v Nhóm 3 – AT8B 10 Tìm hiểu kỹ thuật dịch ngược mã nguồn I.2. Ứng dụng của dịch ngược mã nguồn Kỹ thuật đảo ngược có thể được áp dụng cho rất nhiều lĩnh vực khoa học máy tính, nhưng đây là một vài loại chung: I.2.1. Dịch ngược – Bảo mật Với một số người gắn liền bảo mật và dịch ngược có thể hơi khó hình dung. Dịch ngược liên quan đến một vài khía cạnh khác của bảo mật. Như là, dịch ngược được dùng trong nghiên cứu mã hóa - một người nghiên cứu dịch ngược một sản phẩm và đánh giá mức độ bảo mật của nó. Dịch ngược còn được sử dụng nhiều trong việc hình dung hoạt động của các malware, ở cả hai đầu chiến tuyến : bởi cả người phát triển malware và người chống lại nó. Cuối cùng, dịch ngược rất phổ biến với cracker, những người dùng nó để phân tích và cả phá bỏ những phương thức bảo vệ phần mềm. I.2.2. Malicious Software Internet đã thay đổi hoàn toàn nền công nghiệp máy tính về tổng thể lẫn riêng về khía cạnh bảo mật máy tính. Malicious software, như virus, worm, bùng nổ quá nhanh trong thế giới nơi mà hàng tỷ người đang kết nối Internet và sử dụng e-mail. Khoảng 10 năm trước, một virus thường copy nó vào đĩa mềm và đĩa mềm sẽ load nó vào một máy tính khác để lây nhiễm. Quá trình lây nhiễm thường rất chậm, và sự chống đỡ cũng đơn giản hơn nhiều bởi cách thức chúng lây nhiễm khá quen thuộc và cần có sự tác động của con người. Đó là câu chuyện cũ trong lịch sử. Internet đã tạo ra một liên kết ảo giữa hầu như tất cả các máy tính trên thế giới. Ngày nay, rất nhiều loại worm có thể lây một cách tự động tới hàng tỉ máy tính mà không cần có bất cứ sự tác động nào của con người. Dịch ngược được dùng rộng rãi ở cả hai mặt trong đường dây của malware. Những người phát triển malware thường dùng reversing để xác Nhóm 3 – AT8B 11 Tìm hiểu kỹ thuật dịch ngược mã nguồn định lỗi trong hệ điều hành hoặc trong các phần mềm khác. Những lỗi có thể được sử dụng để thâm nhập vào phần bảo vệ của hệ thống và chấp nhận sự nhiễm độc - thường là trên Internet. Bên cạnh sự lây nhiễm, tội phạm thỉnh thoảng mượn kĩ thuật dịch ngược để xác định lỗi có thể chấp nhận malware thực hiện một kết nối tối những thông tin nhạy cảm hoặc hơn nữa có thể điều khiển toàn bộ hệ thống. Ở chiến tuyến đối nghịch, những người phát triển antivirus software khảo sát và phân tích tất cả malware mà họ có được. Họ dùng reversing để theo dõi từng bước mà chương trình làm và quyết định tổn thất có thể xảy ra, mức độ nguy hiểm, và làm cách nào để remove chũng khỏi những hệ thống bị nhiễm độc, và những lây nhiễm nào có thể tránh. I.2.3. Dịch ngược giải thuật mã hóa Mã hóa luôn được cho là công cụ cơ bản của bảo mật: Alice gửi cho Bob một tin nhắn, và mã hóa tin nhắn đó sử dụng một bí mật chỉ được biết bởi Bob và cô ấy. Giải thuật mã hóa có thể chia ra 2 kiểu: giải thuật hạn chế và giải thuật dựa trên key. Giải thuật hạn chế giống như là một vài đứa trẻ chơi với nhau, viết thư cho bạn bằng cách dịch mỗi chữ cái lên hoặc xuống. Bí mật của giải thuật hạn chế là chính bản thân nó. Một khi quy luật được tìm ra, nó không còn là bí mật nữa. Giải thuật hạn chế cung cấp rất ít sự bảo vệ bởi kỹ thuật dịch ngược làm cho nó trở nên khó bảo vệ được bí mật giải thuật. Một khi reversers có trong tay cách mã hóa hoặc giải mã, điều còn lại chỉ là thời gian trước khi giải thuật bị khám phá. Bởi giải thuật là bí mật, reversing có thể xem là một 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 trên key, bí mật nằm ở key, một vài giá trị được dùng bởi giải thuật để mã hóa và giải mã thông tin. Trong giải thuật dựa trên key, người dùng mã hóa thông tin bằng key và giữ nó (và một vài divulged để legitimate recipient, dựa trên giải thuật). Nhóm 3 – AT8B 12 Tìm hiểu kỹ thuật dịch ngược mã nguồn Nó hầu như làm reversing pointless bởi giải thuật coi như đã biết. Để decipher một thông tin như vậy, chúng ta có thể : - Tìm kiếm key. - Thử tất cả các phép so sánh có thể cho đến khi có được key. - Tìm một kẽ hở trong giải thuật có thể sử dụng để tìm ra key hoặc thông tin ban đầu. Tuy vậy, vẫn có những trường hợp cần reverse, như là nhữ phương pháp hiện thực giải thuật mã hóa dựa trên key không công khai. Mặc dù hầu hết các giải thuật mã hóa dựa trên key đều phổ biến, chi tiết của một phương pháp đặc biệt thường có tác động không ngờ trong mức độ bảo mật tổng thể của một chương trình. Giải thuật mã hóa thường mỏng manh, và một lỗi nhỏ trong quá trình mã hóa có thể làm mất đi tính bảo mật được bảo vệ bởi giải thuật đó. Con đường duy nhất để thực sự biết chắc khi nào một sản phẩm được mã hóa hoàn thiện là xem toàn bộ source code hoặc, reverse nó. I.2.4. Cracking Có hai xu hướng công nghệ hiện nay trong lĩnh vực phần mềm, đó là các phần mềm mã nguồn mở, tức là những deverlopers cung cấp cho mọi người phần mềm và đồng thời cung cấp luôn mã nguồn của phần mềm đó. Mọi người đều có thể sử dụng, chỉnh sửa cho phù hợp với nhu cầu sử dụng của mình, miễn là sao cho phải phù hợp với giấy phép của mã nguồn đó. Xu hướng thứ hai, phần mềm cung cấp độc quyền, được nhà sản xuất nghiên cứu và phân phối, người sử dụng muốn sử dụng các phần mềm như vậy buộc phải trả phí bản quyền. Mã nguồn của chương trình sẽ không được công khai. Và đôi khi phí bản quyền của các nhà deverlopers thật không dễ chịu với tất cả mọi người sử dụng. Vậy làm sao để có thể không Nhóm 3 – AT8B 13 Tìm hiểu kỹ thuật dịch ngược mã nguồn cần “trả phí” mà vẫn được sử dụng những phần mềm như vậy. Kỹ thuật dịch ngược mã nguồn giúp các cracker có thể “bẻ khóa” các chương trình, hay tìm ra được thuật toán sinh key cho phần mềm để sinh ra các keygen. Nhóm 3 – AT8B 14 Tìm hiểu kỹ thuật dịch ngược mã nguồn CHƯƠNG II: DỊCH NGƯỢC Mà NGUỒN PHẦN MỀM II.1. Cấu trúc PE file trong windows PE là định dạng riêng của Win32. Hầu hết các file thực thi trên Win32 đều thuộc dạng PE (Trừ các tập tin VxDs và các file DLL 16 bít). Để có thể thực thi trên máy tính, nội dung file PE được chia thành các thành phần và có mối liên hệ mật thiết với nhau. Nắm rõ cấu trúc PE sẽ giúp chúng ta hiểu được cơ chế thực thi của một chương trình, từ việc tổ chức tới việc load lên bộ nhớ, các tài nguyên sử dụng…. Hơn nữa khi chúng ta muốn sửa đổi một file, ví dụ như thêm vào một số đoạn mã, chỉnh sửa một số thành phần nhưng vẫn muốn chương trình thực thi bình thường. Do đó, cần phải nắm rõ cấu trúc PE file, mối liên hệ giữa các thành phần trong file để có thể nhanh chóng thay đổi file và thoả mãn yêu cầu đề ra. Hình 1: Cấu trúc cơ bản của PE. Nhóm 3 – AT8B 15 Tìm hiểu kỹ thuật dịch ngược mã nguồn Từ hình vẽ trên, chúng ta thấy cấu trúc PE có thể gồm nhiều section, trong đó tối thiểu cần 2 section: data và code. Một số section thông dụng hay được gặp ở các chương trình: Executable Code Section, có tên là .text (Micro$oft) hoc là CODE (Borland). Data Sections, có nhng tên nh .data, .rdata hoc .bss (Micro$oft) hay DATA (Borland) Resources Section, có tên là .rsrc Export Data Section, có tên là .edata Import Data Section. có tên là .idata Debug Information Section, có tên là .debug Cấu trúc các section trên bộ nhớ và trên ổ đĩa là như nhau, tuy nhiên khi được nạp lên bộ nhớ, các Windows loader sẽ quyết định thứ tự và vị trí nạp các phần, do đó vị trí các phần trên ổ đĩa và trên bộ nhớ sẽ có sự khác biệt. Tiếp theo chúng ta sẽ đi chi tiết hơn về các phần cụ thể trong PE: DOS MZ header, DOS stub, PE header, Section table. II.1.1. DOS MZ header Tất cả các file PE bắt đầu bằng DOS Header, vùng này chiếm 64 bytes đầu tiên của files. Vùng này được dùng trong trường hợp chương trình chạy trên nền DOS, hệ điều hành DOS nhận biết đây là một file thực thi hợp lệ và sẽ thực thi nội dung trong phần DOS stub. DOS Header là một cấu trúc được định nghĩa trong file windows.inc hoặc winnt.h. Cấu trúc này gồm 19 thành phần. Nhóm 3 – AT8B 16 Tìm hiểu kỹ thuật dịch ngược mã nguồn Hình 2: Cấu trúc DOS Header. Trong đó chúng ta cần quan tâm tới hai trường: e_magic: Chữ ký của PE file, giá trị: 4Dh, 5Ah (Ký tự “MZ”, tên của người sáng lập MS-DOS: Mark Zbikowsky). Giá trị này đánh dấu một DOS Header hợp lệ và được phép thực thi tiếp. e_lfanew: là một DWORD nằm ở cuối cùng của DOS Header, là trường chứa offset của PE Header so với vị trí đầu file. Nhóm 3 – AT8B 17 Tìm hiểu kỹ thuật dịch ngược mã nguồn Hình 3: Cấu trúc Dos MZ header II.1.2. PE Header PE Header thực chất là cấu trúc IMAGE_NT_HEADERS bao gồm các thông tin cần thiết cho quá trình loader load file lên bộ nhớ. Cấu trúc này gồm 3 phần được định nghĩa trong windows.inc Hình 4: Cấu trúc IMAGE_NT_HEADERS. Signature: là 1 DWORD bắt đầu PE Header chứa chữ ký PE: 50h, 45h, 00h, 00h FileHeader: bao gồm 20 bytes tiếp theo của PE Header, phần này chứa thông tin về sơ đồ bố trí vật lý và các đặc tính của file. Trong trường này chúng ta cần chú ý tới trường NumberOfSections, đây là trường chứa số section của file. Nếu muốn thêm/xoá section trong PE file, ta cần thay đổi tương ứng trường này. Nhóm 3 – AT8B 18 Tìm hiểu kỹ thuật dịch ngược mã nguồn Hình 5: Trường NumberOfSections OptionalHeader: bao gồm 224 bytes tiếp theo sau FileHeader. Cấu trúc này được định nghĩa trong windows.inc, đây là phần chứa thông tin về sơ đồ logic trong PE file. Dưới đây là danh sách các trường trong cấu trúc này, đồng thời sẽ đưa ra một số chỉ dẫn về thông tin của một số trường cần quan tâm khi muốn chỉnh sửa file. Nhóm 3 – AT8B 19 Tìm hiểu kỹ thuật dịch ngược mã nguồn Hình 6: Danh sách các trường trong OptionalHeader AddressOfEntryPoint (RVA): địa chỉ ảo tương đối của câu lệnh đầu tiên sẽ được thực thi. Nếu muốn chương trình bắt đầu từ một địa chỉ khác (để thực thi câu lệnh với mục đích khác) thì cần thay đổi địa chỉ này về địa chỉ tương đối của câu lệnh muốn thực thi. ImageBase: Địa chỉ được ưu tiên nạp cho PE file. SectionAlignment: Phần liên kết các section trong bộ nhớ, tức là một section luôn luôn được bắt đầu bằng bội số của sectionAlignment. Ví dụ: sectionAlignment là 1000h, section đầu tiên bắt đầu ở vị trí 401000h và kích thước là 10h, section tiếp theo sẽ bắt đầu tại địa chỉ 402000h. FileAlignment: Phần liên kết các section trong file. Tương tự như SectionAlignment nhưng áp dụng với file. SizeOfImage: Toàn bộ kích thước PE file trong bộ nhớ, là tổng của tất cả các headers và sections được liên kết tới SectionAlignment. SizeOfHeaders: Kích thước của tất cả headers và section table, bằng kích thước file trừ đi tổng kích thước của các section trong file. DataDirectory: là một mảng gồm 16 cấu trúc IMAGE_DATA_DIRECTORY, mỗi cấu trúc liên quan tới 1 cấu trúc dữ liệu trong PE file. II.1.3. Section Table Section Table là thành phần ngày sau PE Header, bao gồm một mảng những cấu trúc IMAGE_SECTION_HEADER, mỗi phần tử chứa thông tin về một section trong PE file. Cấu trúc này được định nghĩa trong file windows.inc như hình dưới đây: Nhóm 3 – AT8B 20 Tìm hiểu kỹ thuật dịch ngược mã nguồn Hình 7: Cấu trúc IMAGE_SECTION_HEADER Thông tin về một số trường quan trọng: VirtualSize: Kích thước thật sự của dữ liệu trên section tính theo byte, giá trị này có thể nhỏ hơn kích thước trên ổ đĩa (SizeOfRawData) VirtualAddress: RVA của section, là giá trị để ánh xạ khi section được load lên bộ nhớ SizeOfRawData: Kích thước section data trên ổ đĩa. PointerToRawData: là offset từ vị trí đầu file tới section data. Characteristics: đặc tính của section: thực thi, dữ liệu khởi tạo … II.2. Các kỹ thuật dịch ngược mã nguồn II.2.1. Kỹ thuật pack, unpack file Pack file là để che giấu hay nén một tập tin thực thi, các trình nén chương trình sẽ đóng gói chúng lại thành một tập tin thực thi khác. File thực thi này cũng có thể lại được được đóng gói thành một file thực thi khác nữa. Chúng ta có thể liên tưởng tới búp bê Matryoshka của nước Nga, kỹ thuật pack file cũng là như vậy. Một file thực thi bị “đóng gói” vào một file thực thi khác. Khi ta thực thi file, file thực thi “ngoài” sẽ giải nén (unpack) mọi nội dung file Nhóm 3 – AT8B 21
- Xem thêm -

Tài liệu liên quan