Tìm hiểu kỹ thuật dịch ngược mã nguồn

46 8,048 62
  • Loading ...
    Loading ...
    Loading ...

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

Tài liệu liên quan

Thông tin tài liệu

Ngày đăng: 27/03/2015, 11:06

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 Lớp: AT8B 2. Bùi Đức Thuận Lớp: AT8B Hà Nội, 10/2014 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 20 II.2. Các kỹ thuật dịch ngược mã nguồn 21 II.2.1. Kỹ thuật pack, unpack file 21 II.2.2. Kỹ thuật disassembly 26 II.2.3. Kỹ thuật Debugging 30 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 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 4 Tìm hiểu kỹ thuật dịch ngược mã nguồn 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Ẽ 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 [...]... 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... mềm sẽ tăng mức độ yêu cầu kỹ năng cần thiết để có thể dịch Nhóm 3 – AT8B 29 Tìm hiểu kỹ thuật dịch ngược mã nguồn ngược thành công mã nguồn của chúng Thời gian của các quá trình phân tích dịch ngược mã nguồn sẽ bị cản trở bởi khả năng hiểu mã nguồn được anti-disassembly và anti-debugging của người phân tích, lấy được thông tin có giá trị, và phát triển các thuật toán giải mã Những lớp bảo vệ bổ sung... 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. .. mục đích dịch ngược mã nguồn chúng ta phải có các kỹ thuật disassembly dù chúng đã được chống disassembly Tuy nhiên, các kỹ thuật này chủ yếu dựa trên thực hiện thủ công và phụ thuộc kiến thức và tầm hiểu biết trong lĩnh vực dịch ngược mã nguồn nói chung và disassembly nói riêng Có nhiều cách để chống lại dịch ngược trong đó cách phổ biến để chống lại disassembly đó là kỹ thuật làm rối mã nguồn Phần... với kỹ thuật còn lại, điều này làm cho disassembly tĩnh có hiểu quả đáng kể hơn so với kỹ thuật disassembly động Tuy nhiên, kỹ thuật phân tích disassembly tĩnh yêu cầu cao hơn về kiến thức của người phân tích cũng cao hơn so với kỹ thuật disassembly động (kiến thức hợp ngữ, cấu trúc tập tin, về giao tiếp với máy tính v.v.) Linear sweep Nhóm 3 – AT8B 27 Tìm hiểu kỹ thuật dịch ngược mã nguồn Các thuật. .. nó quá phổ biến, các mã độc hại sẽ cố gắng để che khuất chức năng này bằng cách sử dụng một lệnh ret hoặc call Thông qua Hình 9 đến 12 minh họa cho quá trình đóng gói và giải nén, như sau: Nhóm 3 – AT8B 24 Tìm hiểu kỹ thuật dịch ngược mã nguồn Hình 9 File thực thi ban đầu chưa được đóng gói Hình 10: File thực thi sau khi bị nén Nhóm 3 – AT8B 25 Tìm hiểu kỹ thuật dịch ngược mã nguồn Hình 11: File... thực tế dịch ngược mã nguồn, ta không có mã nguồn mà phải sử dụng một trình gỡ rối để thực hiện tìm hiểu lỗi không mong muốn, và trong trường hợp này, đa số các tập tin phải gỡ lỗi trong chế độ assembly Trình gỡ rối là những chương trình thông thường được đính kèm với một tiến trình khác và có thể điều khiển toàn bộ nó Trình gỡ lỗi có tính năng Nhóm 3 – AT8B 30 Tìm hiểu kỹ thuật dịch ngược mã nguồn dễ... là một kỹ thuật được làm bởi các tác giả phần mềm bằng cách thủ công, với một công cụ riêng biệt trong xây dựng và triển khai tiến trình hoặc đan xen vào mã nguồn phần mềm của họ Các tác giả của các phần mềm sử dụng các kỹ thuật anti-disassembly để trì hoãn hoặc ngăn chặn phân tích các mã nguồn Bất kỳ mã thực thi nào thành công đều có thể bị dịch ngược, nhưng nếu các mã đó được “bọc” với các kỹ thuật. .. trình Chương trình được chia thành các Nhóm 3 – AT8B 33 Tìm hiểu kỹ thuật dịch ngược mã nguồn chia thành các phần nhỏ hơn (ví dụ, các hàm) và có thể được phân tích liên tiếp Chúng ta phải xác định vị trí địa chỉ bắt đầu của các hàm chức năng, kỹ thuật này chủ yếu sử dụng kỹ năng kinh nghiệm của người dịch ngược Điều này được thực hiện bằng cách tìm kiếm các xâu nhị phân cho các chuỗi byte mà thực hiện... vắt cạn các kỹ năng cấp thấp tại nhiều tổ chức, đòi hỏi phải có các chuyên gia tư vấn, đề tài nghiên cứu lớn mức độ dự án có thể nỗ lực để dịch ngược được mã nguồn Một số kỹ thuật thường được sử dụng để anti-disassembly: - Kỹ thuật làm rối mã nguồn chương trình o Nhiều lệnh thảy tới cùng một mục tiêu o Sử dụng byte dư thừa - “rogue byte” o Sử dụng các lệnh nhảy với điều kiện luôn đúng - Kỹ thuật làm . 47 Nhóm 3 – AT8B 4 Tìm hiểu kỹ thuật dịch ngược mã nguồn 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Ẽ 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. 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ã. 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
- Xem thêm -

Xem thêm: Tìm hiểu kỹ thuật dịch ngược mã nguồn, Tìm hiểu kỹ thuật dịch ngược mã nguồn, Tìm hiểu kỹ thuật dịch ngược mã nguồn, CHƯƠNG I: DỊCH NGƯỢC MÃ NGUỒN, CHƯƠNG II: DỊCH NGƯỢC MÃ NGUỒN PHẦN MỀM