2008-11-15 36 views
16

Làm cách nào để tìm các tham số của hàm không được cấp phép?Tìm Tham số Chức năng Dll

Tôi đã tìm kiếm trên toàn bộ internet và kết thúc bằng việc tìm kiếm một cách: nó liên quan đến các chức năng được trang trí. Tuy nhiên, tôi không thể tìm ra cách để có được những thứ đó.

Mọi trợ giúp sẽ được đánh giá cao.

Trả lời

6

Bạn cần phải tháo rời ứng dụng bằng cách sử dụng, như Paul đã lưu ý, một cái gì đó giống như IDA Pro (hoặc phiên bản miễn phí của cùng một).

Tài nguyên giới thiệu tốt là Wikibook, x86 Disassembly. Cụ thể, hãy xem phần trên functions and stack frames. Tham số chức năng giảm dần có thể đơn giản đối với các hàm đơn giản lấy một vài tham số của kiểu tiêu chuẩn.

Có lẽ cách tốt nhất để bắt đầu với loại điều này là tạo một tệp DLL thử nghiệm nhỏ, tạo một vài hàm với các tham số đã biết và sau đó tháo rời tệp DLL của bạn để xem các mẫu. Tìm hiểu cách tháo gỡ khỏi các chức năng của riêng bạn (mà bạn có mã nguồn và biết chữ ký đầy đủ) thay vì lao vào việc tháo rời nội dung của bên thứ ba.

+1

Hrm .... Theo câu trả lời của tôi: P (joking ok;), dù sao bạn không cần phải tháo rời ở tất cả, bạn có thể nhận được nhiều thông tin chính xác hơn nhiều nhanh hơn trước khi sử dụng này , trên thực tế đây là khu nghỉ mát cuối cùng có thể sau các bước tôi đề xuất. – RandomNickName42

5

Cách duy nhất để làm điều này là bằng cách tháo chức năng và xem cách nó sử dụng thanh ghi và ngăn xếp. IDA Pro là công cụ tốt nhất để làm điều này, nhưng nó không phải là một cái gì đó là tầm thường.

+0

Câu trả lời hay, có lẽ tôi nên xóa tên của tôi. Tôi phải làm việc trên ngắn gọn của tôi :) –

1

Nếu phần thông tin duy nhất bạn có là tên hàm chưa được đặt trước, thì rất tiếc, không thể suy ra các tham số chức năng từ chỉ một mình.

Nếu bạn tốt với lắp ráp, có thể tháo rời mã máy cho chức năng và đảo ngược kỹ thuật đó. Nhưng đó là khá khó khăn để làm cho tất cả, nhưng các chức năng đơn giản nhất.

1

Tôi không thực sự quen thuộc với định dạng PE mà Windows sử dụng, nhưng tôi chắc chắn không có cách nào thực sự dễ dàng để thực hiện việc này. Nếu bảng biểu tượng chưa bị tước, bạn có thể tìm thấy một số thông tin (không chắc cách Windows lưu trữ thông tin gỡ lỗi trong PE) nhưng nó gần như chắc chắn sẽ không giúp bạn với các kiểu tham số. Điều tốt nhất cần làm là tải DLL vào trình gỡ lỗi và thử nghiệm với nó ... theo dõi bộ nhớ thô trên khung ngăn xếp, gửi các loại biến khác nhau, v.v.

Thậm chí nếu bạn tìm thấy nguồn lực tốt trên thông tin gỡ lỗi trong một tệp PE, hầu như chắc chắn sẽ không có bất kỳ thông tin nào cho một hàm riêng tư.

4

Có phải COM Dll không? Nếu nó là một Dll COM, sau đó đăng ký nó, sử dụng OLE xem để biết các Interafaces và các thông số.

2

Trước hết, hãy tải xuống Dependency Walker và mở tệp DLL của bạn trong đó. Bạn sẽ thấy các biểu tượng được xuất và nhập. Nếu tên chức năng của bạn trông giống như _MyFunction - đó là kiểu "C" (không được trang trí) và bạn không có quá nhiều thứ để làm với nó (có thể được tháo rời như đã nói trước)

Nếu nó giống như? _MyFunction @ LoNgSetOfSome @ _StrangeChAracTers nó là C++ - trang trí và bạn có thể cố gắng "undecorate" nó bằng cách sử {không chính thức} thông tin từ here

+0

PE Explorer có thể nội bộ unmangle các biểu tượng xuất khẩu từ các thư viện được biên dịch với cả Microsoft và Borland C++ trình biên dịch: http://www.heaventools.com/unmangle.htm – Wylder

7

tôi đã làm một khá sâu câu trả lời here, ReactOS là đặt cược tốt nhất của bạn vì nó dường như một lần nữa, tất cả mọi người đây là một chút cơ bản.

Tôi sẽ mạnh mẽ khuyến khích cố gắng tháo rời DLL của hệ thống.

A MUCH mạo hiểm hơn (và tôi không tin được thảo luận cho đến nay từ ngoại hình), kỹ thuật là liệt kê nội dung của PDB.

Tệp PDB là các biểu tượng gỡ lỗi như bạn có thể biết, tuy nhiên, Microsoft là bắt buộc, do hành động từ các trường hợp tòa án chống tin tưởng, để giải phóng khối lượng lớn các thông tin không được ghi chép khác.

Thông tin chính xác, có thể sử dụng và được cập nhật cho số tiền lớn của Windows API là chỉ được ghi lại qua tệp PDB. Quy ước gọi, số đối số và thậm chí các loại đối số và tên được ghi lại (tuy nhiên không phải là chi tiết cụ thể về việc sử dụng khóa học :).

Xem xét DIA SDK, dia2dump là một ví dụ điển hình được phân phối với Visual Studio, để điều tra thêm, nó cũng cung cấp giải pháp để undecorate chức năng, để nói riêng cho câu hỏi của bạn.

Ngoài ra, kernel32 cung cấp UnDecorateSymbolName, vì vậy bạn có thể sử dụng cũng nếu bạn không muốn liên kết đến thư viện gỡ lỗi sdk.

Các vấn đề liên quan