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 Sinh viên thực hiện: • • Ngơ Xn Hà Phan Xn Tính Hà Nội , tháng năm 2021 LỜI MỞ ĐẦU Kể từ máy tính đời, làm thay đổi ngày, sống người Ngày nay, hệ thống máy tính có mặt ngành, gia đình, quốc gia giữ vai trị vơ quan trọng Để đáp ứng nhu cầu ngày cao khoa học máy tính cơng nghệ thơng tin, ngày có nhiều phần mềm, chương trình… có hại có lợi cho người sử dụng vi tính Để hiểu rõ kiểm sốt chúng, cần phải tìm hiểu chất phần mềm, chương trình cho máy tính để kịp nâng cấp, chỉnh sửa chúng hay kiểm soát ảnh hưởng chúng, hạn chế tác động có hại với hệ thống ta Với đa số chương trình phần mềm khơng có mã nguồn nên cơng việc thực khó, từ kỹ thuật dịch ngược mã nguồn đời, trợ giúp mạnh mẽ việc giải vấn đề Trong báo cáo chúng em xin trình bày tìm hiểu kỹ thuật dịch ngược mã nguồn Nội dung báo cáo bao gồm chương lớn: Chương 1: Tổng quan dịch ngược Chương 2: Các kỹ thuật dịch ngược mã nguồn Chương 3: Thực nghiệm MỤC LỤC DANH MỤC HÌNH VẼ CHƯƠNG 1: TỔNG QUAN VỀ DỊCH NGƯỢC 1.1 Giới thiệu Kĩ thuật dịch ngược q 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 “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 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 xi” 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 toà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 Q 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 tồ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 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ỏ 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 toá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 cấu trúcbản Hình 1: cấu1.trúc của PE 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 yếu thuật tốn dễ bị lỗi disassembly sai lệch liệu từ ban đầu chúng nhúng dòng lệnh Recursive Traversal Có vấn đề với thuật tốn linear sweep là, khơng thể kiểm sốt luồng điều khiển chương trình, khơng thể nhận liệu nhúng dòng lệnh, nhầm lẫn diễn giải chúng mã thực thi Kỹ thuật Recursive Traversal kiểm sốt q trình liên tục chương trình disassembly để xác định để disassembly Bằng trực giác, gặp lệnh rẽ nhánh q trình disassembly, xác định kế kiểm sốt chương trình chạy nào, ví dụ, địa câu lệnh tiếp theo, tiến hành disassembly địa Một ưu điểm thuật toán là, cách theo điều khiển thực liên tục hành động chương trình xử lý, nhận biết tránh disassembly liệu nhúng phần văn Điểm yếu thuật tốn giả định quan trọng nó, xác xác định tập hợp kiểm sốt lần chuyển quyền kiểm soát hoạt động chương trình, khơng ln ln kiểm sốt trường hợp nhảy gián tiếp Kỹ thuật Recursive Traversal phân tích xác logic phản ánh chặt chẽ chương trình thực tế không cố gắng disassembly byte phần trình thực liên tục chương trình Hình 13.Linear sweep disassembler recursive disassembler Một số chương trình cao cấp nay, tác giả bảo vệ chương trình họ cách sử dụng kỹ thuật nhằm tránh bị disassembly (anti-disassembly) Các kỹ thuật chủ yếu lợi dụng điểm yếu kỹ thuật disassembly trình disassembly làm rối mã nguồn, nhằm mục đích đánh lừa trình disassembly sai chương trình Anti-disassembly sử dụng mã liệu xây dựng thủ công đặc biệt chương trình để cơng cụ phân tích disassembly phân tích thành chương trình khơng xác Đây kỹ thuật làm tác giả phần mềm cách thủ công, với công cụ riêng biệt xây dựng triển khai tiến trình đan xen vào mã nguồn phần mềm họ Các tác giả phần mềm sử dụng kỹ thuật antidisassembly để trì hỗn ngăn chặn phân tích mã nguồn Bất kỳ mã thực thi thành cơng bị dịch ngược, mã “bọc” với kỹ thuật anti-disassembly anti-debugging, tác giả phần mềm tăng mức độ yêu cầu kỹ cần thiết để dịch ngược thành cơng mã nguồn chúng Thời gian q trình phân tích dịch ngược mã nguồn bị cản trở khả hiểu mã nguồn antidisassembly anti-debugging người phân tích, lấy thơng tin có giá trị, phát triển thuật toán giải mã Những lớp bảo vệ bổ sung làm vắt cạn kỹ cấp thấp nhiều tổ chức, đòi hỏi phải có chuyên gia tư vấn, đề tài nghiên cứu lớn mức độ dự án nỗ lực để dịch ngược mã nguồn 2.2.3.2 Kỹ thuật anti disassembly Như trình bày trên, nhằm bảo vệ phần mềm, chủ sở hữu hay tác giả chương trình kỹ thuật chống disassembly, để disassembly nhằm mục đích dịch ngược mã nguồn phải có kỹ thuật disassembly dù chúng chống disassembly Tuy nhiên, kỹ thuật chủ yếu dựa thực thủ công phụ thuộc kiến thức tầm hiểu biết lĩnh vực dịch ngược mã nguồn nói chung disassembly nói riêng Có nhiều cách để chống lại dịch ngược cách phổ biến để chống lại disassembly kỹ thuật làm rối mã nguồn Phần đề cập tới kỹ thuật disassembly chương trình chống disassenbly Nhận dạng hàm chức Bước disassembly chương trình khó hiểu chia chương trình thực thi cần phân tích thành hàm nhỏ mà sau phân tích cách độc lập Lý cho việc tối ưu thời gian chạy Một phần quan trọng phân tích xây dựng lại luồng điều khiển chương trình Chương trình chia thành chia thành phần nhỏ (ví dụ, hàm) phân tích liên tiếp Chúng ta phải xác định vị trí địa bắt đầu hàm chức năng, kỹ thuật chủ yếu sử dụng kỹ kinh nghiệm người dịch ngược Điều thực cách tìm kiếm xâu nhị phân cho chuỗi byte mà thực hàm chức điển hình ngơn ngữ lập trình Khi hàm gọi, lệnh thường thiết lập khung stack Khung tạo để chứa biến cục để khơi phục lại trạng thái ban đầu ngăn xếp quay trở lại chức Trong việc thực lúc này, quét chuỗi byte chương trình đại diện cho lệnh mà đẩy trỏ vào ngăn xếp lệnh làm tăng kích thước stack cách làm giảm giá trị trỏ ngăn xếp Kỹ thuật hoạt động tốt cho đa số chương trình bình thường cho chương trình bị làm rối Lý công cụ làm rối mã nguồn không cố gắng để che giấu hàm chức Biểu đồ luồng điều khiển bên thủ tục Để tìm tập lệnh quan trọng hàm hay chức năng, cố gắng để tái tạo lại biểu đồ luồng điều khiển bên hàm Một biểu đồ luồng điều khiển (CFG) định nghĩa đồ thị có hướng G=(V,E) đỉnh u, v ϵ V đại diện cho khối cạnh e ϵ E: u→v biểu diễn luồng điều khiển từ u đến v Một khối mô tả chuỗi câu lệnh mà khơng có lệnh nhảy đích nhảy Chính xác hơn, khối định nghĩa chuỗi câu lệnh mà câu lệnh vị trí quan trọng nhất, luôn thực thi trước, tất lệnh khác thực sau khơng có lệnh khác thực hai câu lệnh chuỗi Cạnh khối thể lệnh nhảy luồng điều khiển, tạo lệnh hướng (CTis) lệnh gọi (call), lệnh nhảy có điều kiện hay vơ điều kiện, lệnh gọi lại hàm Phương pháp truyền thống để tái tạo lại biểu đồ luồng điều khiển hàm chức hoạt động tương tự trình disassembly Các phân tích bắt đầu địa bắt đầu hàm lệnh disassembly gặp phải lệnh chuyển hướng Quá trình tiếp tục cách đệ quy tất đích lệnh nhảy thủ tục, trường hợp lệnh gọi hay lệnh nhảy có điều kiện, tiếp tục địa mà lệnh gọi tới Trong trường hợp chương trình bị làm rối, tất nhiên trình disassembly trực tiếp chuyển hướng đến lệnh gọi Ngồi nhiều lệnh nhảy tới địa đích xác định bị chuyển thành lệnh nhảy khơng có đích, hay tới địa nằm ngồi hàm nhằm che luồng điều khiển cục Trong hầu hết trường hợp, phương pháp truyền thống giúp ta tìm biểu đồ luồng điều khiển bao gồm phần nhỏ tập lệnh có giá trị chức phân tích Để khắc phục hạn chế trên, cịn có kỹ thuật khác để tái tạo lại hoàn chỉnh biểu đồ luồng điều khiển Kỹ thuật gồm hai giai đoạn: xác định biểu đồ luồng điều khiển ban đầu (cơ bản), sau bước giải xung đột trường hợp chưa xác định CFG ban đầu bước đầu Bằng thuật tốn ta disassembly chương trình bị chống disassembly cách hoàn chỉnh Hoàn thành khắc phục lỗ hổng Trong biểu đồ hàm lập hồn chỉnh, có nhiều khoảng trống đồ thị chương trình bị làm rối mã nguồn, bước ta xác định khoảng trống đâu byte rác đưa vào để gây rối, đâu khoảng trống hợp lệ với câu lệnh làm cho chương trình chạy khơng Sau dùng thuật tốn để xác định trình tự tập lệnh hàm biểu đồ để disassembly thành cơng chương trình Một số kỹ thuật thường 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 mục tiêu o Sử dụng byte dư thừa - “rogue byte” o Sử dụng lệnh nhảy với điều kiện ln • Kỹ thuật làm rối luồng xử lý chương trình • Kỹ thuật cản trở phân tích hàng đợi 2.2.4 Kỹ thuật debugging anti debugging 2.2.4.1 Kỹ thuật debugging Gỡ lỗi trình tìm kiếm nguyên nhân gây tác động không mong muốn cho chương trình, cần thiết để theo dõi phân tích phần mềm; giúp ta tìm hiểu rõ ràng trình hoạt động chương trình đồng thời tìm kiếm lỗ hổng chương trình Nếu có mã nguồn chương trình, điều giúp ta gỡ rối mạnh mẽ Tuy nhiên, thực tế dịch ngược mã nguồn, ta mã nguồn mà phải sử dụng trình gỡ rối để thực tìm hiểu lỗi khơng mong muốn, trường hợp này, đa số tập tin phải gỡ lỗi chế độ assembly Trình gỡ rối chương trình thơng thường đính kèm với tiến trình khác điều khiển tồn Trình gỡ lỗi có tính dễ cài đặt sử dụng, đơn chương trình chạy hệ thống Hình 14.Quá trình Debugging Các kỹ thuật debugging Phân tích tĩnh: Trong tĩnh phân tích, gọi phân tích dịng liệu tĩnh, mã nguồn phân tích (mã nguồn chương trình disassembly thể dạng hợp ngữ) để có số luồng xử lý quan trọng trọng chương trình Điều cho cho ta phát luồng xử lý chương trình từ tùy thuộc mục đích người dịch ngược mã nguồn định xử lý tìm kiếm thông tin từ luồn Bằng cách phân tích tĩnh ban đầu, ta có nhìn tổng qt chương trình có nhiều thơng tin quan trọng từ bên chương trình Phân tích động: Sau có thơng tin từ phân tích tĩnh, ta hiểu sâu q trình thực thi chương trình thực thi Kỹ thuật gỡ rối cho ta hiểu sâu sắc mã nguồn chương trình Ngồi để phân tích mã nguồn chương trình, trình gỡ lỗi cung cấp các thức đặt điểm dừng (breakpoints – chương trình gặp đoạn code mà đặt breakpoint tự động dừng chờ điều khiển tiếp) Có nhiều kiểu breakpoint breakpoint cứng, breakpoint mềm… Xét phương diện người viết chương trình (khơng phải chương trình dạng chia sẻ), đặc biệt chương trình cao cấp, họ ln tìm cách bảo vệ mã nguồn bảo vệ thực tiến trình chương trình họ Trong chống gỡ rối kỹ thuật chống phân tích phổ biến sử dụng phần mềm có ý định chống dịch ngược, kỹ thuật giúp cho phần mềm ngăn chặn cản chở tối đa việc gỡ lỗi hệ điều hành Những người tạo phần mềm biết nhà phân tích phần mềm sử dụng gỡ rối để tìm cách nguyên lý hoạt động phần mềm, kỹ thuật chống gỡ rối cố gắng để làm chậm trình phân tích nhiều tốt Một phần mềm nhận chạy trình gỡ lỗi, làm thay đổi đường thực thi mã bình thường thay đổi mã để gây cố, để can thiệp hiểu nhà phân tích phải tốn thêm thời gian, chi phí cơng sức 2.2.4.2 Kỹ thuật anti debugging Kỹ thuật đòi hỏi người ghỡ rối phần mềm có kiên thức nâng cao, kinh nghiệm phần mềm, kỹ thuật chống ghỡ lỗi phần mềm Mỗi phương pháp chống ghỡ lỗi phần mềm có cách vượt qua khác Như trình bày phần kỹ thuật debugging, chương trình chống ghỡ rối phương pháp sử dụng hàm thư viện liên kết động windows ta dễ dàng vượt qua cách cố tình che giấu kết trả cấu trúc nhân liệu hệ điều hành Hoặc kỹ thuật chống ghỡ rối sử dụng ngăt mềm bị vượt qua phương pháp nhảy byte Các kỹ thuật chống gỡ rối thường sử dụng là: • Sử dụng hàm thư viện liên kết động nhằm phát gỡ rối, kể đến hàm FindWindow thư viện user32.dll windows, sử dụng hàm • • • • • IsDebuggerPresent Phát trực tiếp dựa tiến trình luồng Phát dựa phần cứng ghi Phát dựa độ trễ thời gian Phát mã sửa đổi Phát dựa ngoại lệ 2.3 Phần mềm OllyDbg OllyDBG hay cịn 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 khơng có phức tạp, sau hồ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 Ta có thơng tin OllyDBG hiển thị sau: Cửa sổ OllyDBG chia làm cửa sổ : Hình 15.Cửa sổ OllyDBG Disassembler window: Các đoạn mã chương trình dạng code assembly comment dịng code Đây cửa sổ quan trọng, làm việc nhiều cửa sổ Khi bạn muốn debug chương trình, bạn load file thực thi chương trình vào Olly Các chương trình mà bạn load vào Olly chương trình code ngôn ngữ khác :VB, VC++, Borland Delphi hay MASM cửa sổ toàn code chương trình list dạng mã ASM Theo mặc định Olly chương trình mà bạn load vào Olly Olly tiến hành phân tích tồn code chương trình đưa comment thích hợp Register window: Đây cửa số chứa thông tin chi tiết ghi eax, ebx, ecx v….v… Các cờ trạng thái quản lý cửa sổ Tip window: Các thông tin bổ sung cho dịng code Các thơng tin hữu ích q trình debug Khi ta dịng code q trình debug, Olly cho thấy thơng tin chi tiết dịng code Lấy ví dụ đơn giản sau : ta debug tới dòng lệnh “ mov eax , dword ptr [123]” Thì cửa sổ cho ta biết giá trị hay số lưu giữ [123] Dump window: Cho phép người sử dụng xem chỉnh sửa giá trị nhớ chương trình debug Ta chọn nhiều định dạng khác để biểu diễn nội dung memory cửa số : byte, text, integer, float, address, disassembly PE Header Cửa sổ cho phép tìm kiếm thực chức chỉnh sửa, thiết lập Break points v.v Stack window: Thông tin stack chương trình Trước tiên tìm hiểu sơ qua Stack Đây nơi lưu trữ tạm thời liệu địa chỉ, cấu trúc liệu chiều Các phần tử cất vào lấy từ đầu cấu trúc này, tức xử lý theo phương thức “vào trước, sau”(LIFO: Last In First Out) Phần tử cất vào cuối gọi đỉnh Stack Các bạn hình dung Stack chồng đĩa, đĩa đặt lên cuối nằm đỉnh có lấy Hai ghi làm việc với Stack ESP EBP Ngoài cửa sổ Olly cịn có số cửa sổ khác Để ý menu có chức năng: Hình 16.Các nút chức ollydbg Nút L: để mở cửa sổ Log Olly, cửa sổ cho thấy thông tin mà Olly ghi lại Theo mặc định cửa số lưu thông tin module, import library Plugins load chương trình thời điểm ta load chương trình vào Olly Bên cạnh cửa sổ ghi lạicác thông tin Break points mà đặt chương trình Một tính cửa sổ mu ốn lưu lại thông tin Log cửa số cung cấp cho khả ghi file Nút E: dùng để mở cửa sổ Executables, cửa sổ đưa danh sách file có khả thực thi chương trình sử dụng file exe, dlls, ocxs, v.v 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 Tại cửa sổ sử dụng tính Search để tìm kiếm thơng tin strings, đoạn hexa cụ thể hay unicode v v thêm vào cịn cung cấp cho kiểu thiết lập Break points khác Sections Việc thiết lập BPs tùy thuộc vào yêu cầu mục đích Nút T: cửa sổ Threads, liệt kê thread chương trình 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, hiển thị danh sách lệnh call mà chương trình thực Run F9 dùng F12 để tạm dừng chương trình Nút B: cửa sổ Breakpoints, để mở cửa sổ Break Points, cửa sổ hiển thị tất BPs mà đặt chương trình Tuy nhiên thị BPs set cách nhấn F2 thơi, cịn dạng BPs khác : hardware breakpoint memory breakpoints khơng liệt kê Nút R – References : chứa thơng tin kết cho chức tìm kiếm Olly Những chức khơng thể thiếu chức phục vụ cho cơng việc debug: • Đặt Breakpoint: F2 • Run: F9 • Step into: F7 • Step over: F8 • Restart: Ctrl + F2 Hình 17.Các chức phục vụ debug CHƯƠNG 3: THỰC NGHIỆM ... Tổng quan dịch ngược Chương 2: Các kỹ thuật dịch ngược mã nguồn Chương 3: Thực nghiệm MỤC LỤC DANH MỤC HÌNH VẼ 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... 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. .. 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