Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 32 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
32
Dung lượng
1,24 MB
Nội dung
HỌC VIỆN KỸ THUẬT MẬT MÃ AN TỒN THƠNG TIN CƠ SỞ AN TỒN THƠNG TIN TÌM HIỂU VỀ DỊCH NGƯỢC VÀ CÔNG CỤ OLLYDBG MỤC LỤC CHƯƠNG 1: TỔNG QUAN VỀ DỊCH NGƯỢC .5 1.1 Giới thiệu 1.2 Ứng dụng dịch ngược 1.2.1 Phân tích mã độc .6 1.2.2 Dịch ngược giải thuật mã hóa 1.2.3 Cracking CHƯƠNG 2: CÁC KỸ THUẬT TRONG DỊCH NGƯỢC MÃ NGUỒN .9 2.1 Cấu trúc PE file windows 2.1.1 DOS MZ header 11 2.1.2 PE Header 12 2.1.3 Section Table 15 2.2 Các kỹ thuật dịch ngược mã nguồn 16 2.2.1 Kỹ thuật pack, unpack file .16 2.2.3 Kỹ thuật disassembly anti disassembly .21 2.2.4 Kỹ thuật debugging anti debugging 26 2.3 Phần mềm OllyDbg 29 CHƯƠNG 3: THỰC NGHIỆM .33 DANH MỤC HÌNH VẼ Hình cấu trúc PE .10 Hình 2.Cấu trúc DOS Header 12 Hình 3.Cấu trúc Dos MZ header 12 Hình 4.Cấu trúc IMAGE_NT_HEADERS .13 Hình 5.Trường NumberOfSections 14 Hình 6.Danh sách trường OptionalHeader 15 Hình 7.Cấu trúc IMAGE_SECTION_HEADER 16 Hình 8.Packed file 17 Hình 9.File thực thi ban đầu chưa đóng gói 20 Hình 10.File thực thi sau bị nén .20 Hình 11.File thực thi sau giải nén nạp vào nhớ 20 Hình 12.File thực thi đầy đủ giải nén thành công 21 Hình 13.Linear sweep disassembler recursive disassembler 24 Hình 14.Quá trình Debugging 28 Hình 15.Cửa sổ OllyDBG 31 Hình 16.Các nút chức ollydbg 32 Hình 17.Các chức phục vụ debug 34 CHƯƠNG 1: TỔNG QUAN VỀ DỊCH NGƯỢC 1.1 Giới thiệu Kĩ thuật dịch ngược trình tìm kiếm thơng tin từ kiến thức thiết kế blueprint từ tất người làm Định nghĩa đời lâu trước máy tính, cơng nghệ đại 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 ngồi “blueprint” ngun 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 ra, 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 khơng có 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 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 trong? Đó 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 cịn 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 Trong khái ta xét tới, dịch ngược ngành công nghệ thông tin Như biết, máy tính khơng thể hiểu ngôn ngữ tự nhiên, ngôn ngữ bậc cao (pascal, C, C++, Java…) mà phải biên dịch thông dịch ngôn ngữ bậc thấp mà máy hiểu Q trình gọi “dịch xuôi” Kỹ thuật dịch ngược trình lấy biên dịch nhị phân 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 chương trình, thường ngơn ngữ cấp cao C ++ Visual Basic (hoặc God Forbid, Delphi) Bởi máy tính khơng vốn hiểu ngơn ngữ đó, mà đoạn mã lập trình viên viết lắp ráp thành định dạng cụ thể, ngơn ngữ máy tính hiểu Mã ban đầu gọi ngôn ngữ máy Loại mã rất thân thiện với người, thường lần đòi hỏi nhiều kiến thức tư để tìm xác lập trình viên nghi viết Ngày nay, phần mềm, file, tài liệu đặc biệt phần mềm, để đảm bảo tính bí mật, tính tồn vẹn, gọn nhẹ hay vấn đề quyền… chúng che giấu (đóng gói hay mã hóa) thành định dạng khác để người sử dụng 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ệ quan trọng mục đích riêng reverser Đơi ta tìm kiếm lỗ hổng bảo mật, mã độc, đơi bạn tị mị cách làm việc bảo vệ chống chép, hay để tìm cách phá hoại chen malware, virus… đơn giản tìm cách để sử dụng phần mềm miễn phí v.v 1.2 Ứng dụng dịch ngược 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 cịn 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 cùng, 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 Kỹ thuật đảo ngược áp dụng cho nhiều lĩnh vực khoa học máy tính, vài loại chung: 1.2.1 Phân tích mã độc Internet thay đổi hồn tồ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ĩ 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 1.2.2 Dịch ngược giải thuật mã hóa Mã hóa ln 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 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 Một quy luật tìm ra, khơng cịn bí mật 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 cịn 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ữ (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 vậy, : 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, 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ương trình Giải thuật mã hóa thường mỏng manh, lỗi nhỏ q 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 hồn thiện xem tồn source code hoặc, reverse 1.2.3 Cracking Có hai xu hướng cơng nghệ lĩnh vực phần mềm, phần mềm mã nguồn mở, tức deverlopers cung cấp cho người phần mềm đồng thời cung cấp mã nguồn phần mềm Mọi người sử dụng, chỉnh sửa cho phù hợp với nhu cầu sử dụng mình, cho phải phù hợp với giấy phép mã nguồn Xu hướng thứ hai, phần mềm cung cấp độc quyền, nhà sản xuất nghiên cứu phân phối, người sử dụng muốn sử dụng phần mềm buộc phải trả phí quyền Mã nguồn chương trình khơng cơng khai Và đơi phí quyền nhà deverlopers thật không dễ chịu với tất người sử dụng Vậy để khơng cần “trả phí” mà sử dụng phần mềm Kỹ thuật dịch ngược mã nguồn giúp cracker “bẻ khóa” chương trình, hay tìm thuật tốn sinh key cho phần mềm để sinh keygen CHƯƠNG 2: CÁC KỸ THUẬT TRONG DỊCH NGƯỢC MÃ NGUỒN 2.1 Cấu trúc PE file windows PE định dạng riêng Win32 Hầu hết file thực thi Win32 thuộc dạng PE (Trừ tập tin VxDs file DLL 16 bít) Để thực thi máy tính, nội dung file PE chia thành thành phần có mối liên hệ mật thiết với Nắm rõ cấu trúc PE giúp hiểu chế thực thi chương trình, từ việc tổ chức tới việc load lên nhớ, tài nguyên sử dụng… Hơn muốn sửa đổi file, ví dụ thêm vào số đoạn mã, chỉnh sửa số thành phầ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ệ thành phần file để nhanh chóng thay đổi file thoả mãn yêu cầu đề Hình 1: cấu trúc PE Từ hình vẽ trên, thấy cấu trúc PE gồm nhiều section, tối thiểu cần section: data code Một số section thơng dụng hay gặp chương trình: Executable Code Section,có tên text (Micro$oft) hoc CODE (Borland) Data Sections, có nhng tên nh data, rdata hoc bss (Micro$oft) hay DATA (Borland) Resources Section, có tên rsrc Export Data Section, có tên edata Import Data Section có tên idata Debug Information Section, có tên debug Cấu trúc section nhớ ổ đĩa nhau, nhiên nạp lên nhớ, Windows loader định thứ tự vị trí nạp phần, vị trí phần ổ đĩa nhớ có khác biệt Tiếp theo chi tiết phần cụ thể PE: DOS MZ header, DOS stub, PE header, Section table 2.1.1 DOS MZ header Tất file PE bắt đầu DOS Header, vùng chiếm 64 bytes files Vùng dùng trường hợp chương trình chạy DOS, hệ điều hành DOS nhận biết file thực thi hợp lệ thực thi nội dung phần DOS stub DOS Header cấu trúc định nghĩa file windows.inc winnt.h Cấu trúc gồm 19 thành phần Hình 2.Cấu trúc DOS Header Hình 2: Cấu trúc DOS Header Hình 9.File thực thi ban đầu chưa đóng gói Hình 10.File thực thi sau bị nén Hình 11.File thực thi sau giải nén nạp vào nhớ Hình 12.File thực thi đầy đủ giải nén thành cơng Hình 9: File trước nén Các header sections nhìn thấy, điểm bắt đầu thiết lập để tới OEP Hình 10: cho thấy thực thi đóng gói tồn đĩa Tất nhìn thấy tiêu đề mới, Phần Unpacking Stub Packed Original Code Hình 11: cho thấy file thực thi đóng gói nạp vào nhớ Phần Unpacking Stub giải nén mã ban đầu, text hợp lệ phần data nhìn thấy Điểm khởi đầu cho việc thực thi tới Phần Unpacking Stub, bảng khai báo thường khơng có giá trị giai đoạn Hình 12: cho thấy thực thi đầy đủ sau giải nén Bảng nhập xây dựng lại, điểm khởi đầu chỉnh sửa để trỏ đến OEP Lưu ý chương trình giải nén cuối khác so với chương trình ban đầu Chương trình giải nén cịn phần Unpacking Stub Chương trình giải nén có PE Header tái tạo trình giải nén khơng xác giống chương trình ban đầu 2.2.3 Kỹ thuật disassembly anti disassembly 2.2.3.1 Kỹ thuật disassembly Disassembly trình phục hồi lại liên tục câu lệnh chương trình mã assembly hay ngơn ngữ mà người đọc hiểu Có hai phương pháp thường dùng để disassembly chương trình disassembly tĩnh (static disassembly), tập tin disassembly trình disassembler khơng thực thi suốt q trình ta disassembly; phương pháp thứ hai disassembly động (dynamic disassembly, tập tin disassembly phương pháp thực thi máy tính phân tích (có thể thực thi phần chương trình ) theo dõi cơng cụ (thường debuger – chương trình gỡ lỗi) để đồng tập lệnh Kỹ thuật disassembly tĩnh có ưu điểm ta thực thi tất tiến trình tập tin thực thi lần disassembly động ta thực thi phần, tập lệnh mà thực thi đánh dấu vào vị trí sử dụng Một ưu điểm disassembly tĩnh thời gian để thực chương trình tỷ lệ thuận với kích thước chương trình đó, thời gian thực disassembly động thường tỷ lệ thuận với số lượng câu lệnh thực thi chương trình, thời gian chạy disassembly tĩnh có xu hướng đáng kể so với kỹ thuật lại, điều làm cho disassembly tĩnh có hiểu đáng kể 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 kiến thức người phân tích cao so với kỹ thuật disassembly động (kiến thức hợp ngữ, cấu trúc tập tin, giao tiếp với máy tính v.v.) Linear sweep Các thuật tốn qt tuyến tính bắt đầu tháo gỡ byte thực thi chương trình đầu vào, đơn giản quét qua toàn phần tập lệnh disassembly gặp phải Phương pháp sử dụng chương trình tiện ích objdump GNU số tối ưu hóa công cụ liên kết thời gian (link-time optization) Điểm