Saturday 15 February 2014

Xây dựng trình căm cho IDA Pro (Phần 1)

 

[Bản dịch dựa theo tài liệu của tác giả Steve Micallef steve@binarypool.com, xuất bản năm 2009]

1. Giới thiệu

1.1 Lý do của tài liệu này ?

Sau một khoản thời gian dài tìm hiểu các tập tin tiêu đề (header file) của IDA và nghiên cứu mã nguồn plugins của những người khác. Tôi nhận thấy cần thiết phải có một cách bắt đầu dễ dàng hơn cho những ai muốn viết trình cắm cho IDA. Mặc dù những ghi chú trong các tập tin tiêu đề cực kỳ chi tiết, Tôi cảm thấy một chút khó khăn khi tìm kiếm một số thứ qua nhiều việc thử và sai. Tôi nghĩ rằng tôi sẽ viết bài hướng dẫn này để thử nghiệm và giúp cho những người mới bắt đầu, và hi vọng tài liệu sẽ hữu ích để tra cứu một cách nhanh chóng cho những người phát triển trình cắm. Tôi cũng dành một phần để cài đặt môi trường mà sẽ giúp cho quy trình phát triển nhanh hơn.

1.2 Những điều được đề cập

Tài liệu này sẽ dẫn dắt bạn bắt đầu với việc phát triển các trình cắm (plugin) cho IDA, đầu tiên sẽ bắt đầu giới thiệu SDK, tiếp theo là cài đặt môi trường phát triển và xây dựng ứng dụng trên nhiều nền tảng. Bạn sẽ dần hiểu được một cách rõ ràng làm thế nào mà một số lượng lớn lớp và cấu trúc được dùng, tiếp theo là việc sử dụng một số hàm thông dụng. Cuối cùng, tôi sẽ trình bày một vài ví dụ về việc sử dụng những hàm API của IDA cho những việc cơ bản như việc lặp qua các hàm, để cấy vào trình debug và thao tác với cơ sở dữ liệu của IDA (tập tin IDB). Sau khi đọc xong tài liệu này, bạn có thể ứng dụng những kiến thức đã học được để xây dựng những trình cắm của bạn và hi vọng bạn sẽ chia sẻ nó cho cộng đồng người dùng IDA.

1.3 Những điều không được đề cập

Tôi tập trung vào hợp ngữ x86 bởi vì nó là nền tảng mà tôi có kinh nghiệm nhất, mặc dù hầu hết những gì được đề cập ở đây có thể được sử dụng cho bất cứ kiến trúc nào được hỗ trợ bởi IDA (trong thực tế là tất cả). Mặc dù vậy, nếu bạn muốn một tài liệu tham khảo toàn diện cho tất cả các hàm của IDA, tôi khuyên bạn nên xem qua các tập tin tiêu đề.

Tài liệu này tập trung chủ yếu vào các hàm “chỉ đọc” trong SDK, thay vì các hàm để thêm ghi chú, sửa lỗi, định nghĩa cấu trúc dữ liệu, và những thứ khác. Những phần đó chiếm phần lớn trong SDK, nhưng không được đề cập đến ở đây để giữ cho tài liệu này có kích thước cố định.

Tôi cũng bỏ qua cấu trúc netnode trong tài liệu này, cùng với nhiều cấu trúc, lớp bởi vì IDA SDK rất lớn, và bao gồm nhiều thứ được sử dụng cho những mục đích riêng – một bài viết không thể đề cập đến tất cả mọi thứ. Nếu có thứ gì đó mà bạn cảm thấy thật sự cần thiết phải được đề cập, hãy liên lạc với tôi và tôi sẽ có thể đưa nó vào phiên bản kế tiếp nếu nó không quá đặc biệt. Tôi cũng đã dự định sẽ viết một phần về đồ thị, nhưng tôi nhận ra là đã có một vài ví dụ trong SDK, và nó sẽ làm tràn kích cỡ của bài viết này. Sự lười biếng có thể cũng là một nhân tố tác động.

1.4 Những kiến thức cần thiết

Trước hết, bạn phải biết cách sử dụng IDA đến mức mà bạn có thể thoải mái khi duyệt qua mã nhị phân được dịch ngược (hợp ngữ) và sử dụng được trình gỡ rối. Bạn cần thiết phải được trang bị với một lượng kiến thức đầy đủ về ngôn ngữ C/C++ và hợp ngữ x86. Kiến thức về C++ quan trọng bởi vì SDK hầu hết được trình bày bằng C++. Nếu bạn không biết C++ nhưng biết C, bạn cần tìm hiểu những khái niệm tổng quát về phương pháp lập trình hướng đối tượng (OPP) như lớp, đối tượng, phương thức và kế thừa.

1.5 Yêu cầu về phần mềm

Để viết trình cắm cho IDA, bạn cần chương trình IDA Pro 5.4, và bộ công cụ phát triển IDA (SDK), bộ này có thể được tải về miễn phí từ trang chủ của hex-rays http://www.hex-rays.com ngoài ra, bạn sẽ cần một trình dịch C/C++ với những công cụ cần thiết (Visual Studio, GCC, Borland, vv).

Bởi vì đã qua một thời gian dài kể từ khi phiên bản cuối cùng của tài liệu này (xin lỗi vì điều đó!), phiên bản này sẽ tập trung vào phiên bản 5.4 của IDA SDK. Nó sẽ rất cồng kềnh nếu phải nhấn mạnh tất cả những thay đổi trong phiên bản IDA 4.8. SDK hầu như đã được đóng băng kể từ phiên bản 4.9, bởi với những phiên bản cũ có thể vẫn chạy được.

1.6 Những thay thế cho C/C++

Nếu C không phải là ngôn ngữ mà bạn sử dụng, hãy xem xét đến IDAPython, bộ thư viện này có tất cả những chức năng của C++ cùng với những chức năng của ngôn ngữ Python. Tham khảo https://code.google.com/p/idapython/ để biết thêm chi tiết. Cũng đã có một tài liệu về việc sử dụng IDAPython được viết bởi Ero Carrera tại http://........./, mặc dù nó có vẻ đã không được cập nhật kể từ năm 2006.

Cũng có một bài viết được viết vào năm 2005 về việc sử dụng VB6 và C# để viết trình cắm cho IDA – tham khảo nó ở đây: http://www.openrce.org/. Một phiên bản có kiểu trình bày giống như tài liệu php của phiên bản trước của tài liệu này đã được lưu trữ tại OpenRCE, có thể cho người dùng thêm ghi chú, mã ví dụ, vv vào mỗi hàm.

1.7 Về tài liệu này

Nếu bạn có bất cứ ghi chú hoặc ý kiến nào, hoặc nếu bạn phát hiện ra lỗi, vui lòng liên lạc với tôi, Steve Micallef, tại địa chỉ steve@binarypool.com. Nếu bạn thật sự cảm thấy mình đã học được điều gì hữu ích từ tài liệu này thì tôi thật sự được kích lệ nếu bạn viết cho tôi một lá thư, điều này làm cho công việc này đáng giá.

Đã bốn năm kể từ phiên bản cuối cùng của tài liệu này, bởi vậy tôi sẽ cố gắng để giữ cho tài liệu này được cập nhật mới nhất. Bạn sẽ luôn có thể lấy phiên bản mới nhất của tài liệu này tại http://www.binarypool.com/idapluginwriting/.

1.8 Lịch sử sửa đổi

  • Phiên bản 1.0 [7,2005]
    1. Xuất bản lần đầu tiên
  • Phiên bản 1.1 [5, 2009]
    1. Cập nhật phiên bản SDK mới nhất
    1. Một vài cập nhật mới và sửa đổi.
    1. Thay đổi những ví dụ từ Visio 2003 thành Visio 2008
    1. Một vài hàm mới được đề cập.
    1. Thêm vào một vài ví dụ.

1.9 Lời cảm ơn

Tôi xin gởi lời cảm ơn đến Ilfak Guilfanov và Hex-rays bởi việc họ tiếp tục hỗ trợ để tài liệu này đến được với mọi người và cho một sản phẩm tuyệt vời.

1.10 Đọc thêm

Kể từ phiên bản đầu tiên của tài liệu này, vẫn có nhiều giới hạn thông tin về việc xây dựng trình cắm cho IDA. Có hai nguồn tài nguyên tốt vẫn còn được hỗ trợ tại Hex-Rays là https://www.hex-rays.com/products/ida/support/index.shtml và IDA Place. Nếu bạn gặp khó khăn khi viết trình cắm, bạn luôn có thể hỏi để được trợ giúp trên diễn đàn hỗ trợ của Hex-Rays, nơi mà thậm chí nếu SDK không được hỗ trợ chính thức, thì một vài người trong Hex-Rays(hoặc một trong số nhiều người dùng IDA) sẽ sẵn sàng để giúp bạn.

Một nguồn tài nguyên tốt là http://www.openrce.org/, nơi bạn sẽ tìm thấy không chỉ một vài bài viết tuyệt vời về kỹ thuật đảo mã, mà còn tìm thấy công cụ, những trình cắm và tài liệu nữa. Ở đây có rất nhiều người say mê trong sân chơi này, những người này hầu hết sẽ sẵn sàng giúp bạn về bất cứ vấn đề nào liên quan đến IDA hoặc những vấn đề chung về đảo mã.

Kể từ phiên bản đầu tiên của tài liệu này, Chris Eagle cùng với No Starch Press đã cho xuất bản cuốn sách “The IDA Pro Book.” Đây là cuốn sách rất cần thiết cho những người dùng IDA và viết trình cắm. Nếu bạn muốn mua cuốn sách này từ Amazon, Vui lòng sử dụng liên kết này để xác nhận là bạn đến từ bài viết này (Tôi sẽ được nhận một phần trăm nhỏ từ giá sách, nhưng bạn sẽ không mất bất cứ khoản phí nào).

(Còn tiếp tục …)

No comments: