2013-03-01 38 views
6

Tôi biết không thể đảo ngược một dll thành mã C++ vì vậy tôi muốn thu thập càng nhiều chi tiết càng tốt từ nó. Nó không phải là dll của tôi, vì vậy tôi không có mã nguồn của khóa học. Tôi nên sử dụng chương trình nào?Làm thế nào để đảo ngược một DLL thành mã C++?

+1

Công cụ kỹ thuật đảo ngược nhị phân phổ biến là IDA Pro - có phiên bản miễn phí, đáp ứng hầu hết các nhu cầu cơ bản. – datenwolf

+2

Bạn có hiểu biết về DLL không? Nó lớn bao nhiêu? Bạn có biết ngôn ngữ được viết ban đầu không? Bạn đang thực sự cố gắng đạt được điều gì? –

+1

Tôi đã thêm một số "cụm từ khóa" làm thẻ. Tìm họ. –

Trả lời

12

Vâng, nếu bạn có kỹ năng, bạn có thể tháo rời tệp DLL và hiểu tất cả các chức năng của nó. Điều này cần một lượng thời gian đáng kể, nhưng nếu bạn làm điều đó, bạn có thể đảo ngược nó trở lại nguồn bằng tay.

Nếu không, bạn có thể bắt đầu bằng cách sử dụng một công cụ như Dependency Walker để lấy các tệp DLL và hàm mà nó phụ thuộc vào và các chức năng mà nó xuất. Từ đó bạn có thể tìm thấy các chức năng mà bạn quan tâm và sử dụng bộ tách rời như IDA để xem chúng hoạt động như thế nào.

+3

Không ai, ngoại trừ những người ngớ ngẩn có quá nhiều thời gian trong tay sẽ đảo ngược * mọi thứ *. Bạn sẽ luôn luôn đi với một cái gì đó như IDA và làm theo các đường dẫn cuộc gọi mà bạn quan tâm. Bên cạnh đó, bạn có thể thấy xuất khẩu trong chính IDA. Không cần cho một trung gian. +1 vẫn là – 0xC0000022L

+2

Không phải ai cũng có IDA hoặc muốn tìm hiểu nó. Vì vậy, tôi đề nghị phụ thuộc Walker như một cách rất đơn giản để có được thông tin hữu ích. (Tất nhiên, nếu bạn giỏi IDA, bạn có thể làm tất cả mọi thứ ở đó :)) – nneonneo

1

Bạn cần trình xem tệp PE. Điều này sẽ cho bạn biết xuất khẩu từ DLL và bạn có thể lấy dữ liệu trong phần .text để xem mã máy.

2

Bạn có thể xem danh sách các hàm đã xuất bằng cách sử dụng công cụ dumpbin. Nếu các hàm C++ được xuất, bạn có thể suy ra các tham số bằng tên mangling.

Bạn có thể trích xuất tất cả tài nguyên từ tệp DLL bằng cách chỉ "mở" tệp dưới dạng tệp để xem tài nguyên trong Visual Studio. Nếu DLL là một DLL dựa trên COM, có một cơ hội nhỏ Thư viện kiểu được nhúng dưới dạng tài nguyên bên trong nó. Và nếu bạn có Thư viện kiểu, bạn có thể #import nó để tạo lại các tệp tiêu đề cho các giao diện công cộng.

Điều đó tương đối tốt.

+1

Tôi không đồng ý rằng điều đó là tốt như vậy - tất cả phụ thuộc vào thời gian/kỹ năng/công sức bạn có sẵn. Xem câu trả lời của nneonneo. – JBentley