2009-05-28 26 views
39

Tôi tò mò muốn biết cách tìm kiếm các API không có giấy tờ trong Windows.Tìm các API không có giấy tờ trong Windows

Tôi biết những rủi ro liên quan đến việc sử dụng chúng nhưng câu hỏi này tập trung vào việc tìm kiếm chúng và không nên sử dụng chúng hay không.

+0

-1 câu hỏi không đúng: đó là * không bao giờ * ý tưởng hay để sử dụng các API không có giấy tờ; họ không có giấy tờ vì một lý do, và những rủi ro không phải là cho bạn mà là để nhà cung cấp hệ điều hành của bạn (nếu họ quan tâm về compat ứng dụng ở tất cả). –

+30

+1 không phải là một câu hỏi xấu. Không có gì sai khi chọc quanh các bên trong hệ điều hành của bạn hoặc bất cứ thứ gì khác. Tò mò là một điều tốt. Chỉ cần không dựa vào hành vi không có giấy tờ. –

Trả lời

32

Sử dụng một công cụ để đổ bảng xuất khẩu từ một thư viện chia sẻ (ví dụ, một .dll như kernel32.dll). Bạn sẽ thấy các điểm vào có tên và/hoặc các điểm vào thứ tự. Nói chung cho các cửa sổ các điểm vào được đặt tên là unmangled (extern "C"). Bạn rất có thể sẽ cần phải xem xét mã lắp ráp và lấy được các tham số (kiểu, số, thứ tự, quy ước gọi, vv) từ khung ngăn xếp (nếu có) và đăng ký sử dụng. Nếu không có khung ngăn xếp thì khó hơn một chút, nhưng vẫn có thể thực hiện được. Xem các liên kết sau đây để tham khảo:

  1. http://www.sf.org.cn/symbian/Tools/symbian_18245.html
  2. http://msdn.microsoft.com/en-us/library/31d242h4.aspx

Kiểm tra các công cụ như dumpbin điều tra phần xuất khẩu.

Ngoài ra còn có các trang web và cuốn sách ra khỏi đó mà cố gắng giữ một danh sách cập nhật các cửa sổ API không có giấy tờ:

  1. The Undocumented Functions
  2. A Primer of the Windows Architecture
  3. How To Find Undocumented Constants Used by Windows API Functions
  4. Undocumented Windows
  5. Windows API

Chỉnh sửa: Các nguyên tắc tương tự này hoạt động trên vô số hệ điều hành, tuy nhiên, bạn sẽ cần phải thay thế công cụ bạn đang sử dụng để đổ bảng xuất. Ví dụ, trên Linux bạn có thể sử dụng nm để kết xuất một tệp đối tượng và liệt kê phần xuất của nó (trong số những thứ khác). Bạn cũng có thể sử dụng gdb để đặt các điểm ngắt và bước qua mã lắp ráp của một điểm vào để xác định đối số nên là gì.

+0

bạn cũng có thể thêm danh sách này vào danh sách của mình: http://www.codeproject.com/KB/system/Win32.aspx – claws

+0

Liên kết thứ 2 & thứ 4 giống nhau. – claws

+0

@claws: cảm ơn bạn thân. Đã cập nhật câu trả lời. –

1

Xem các dll hệ thống và các chức năng mà chúng xuất. Mỗi hàm API, dù được tài liệu hay không, đều được xuất trong một trong số chúng (user, kernel, ...).

1

Đối với API chế độ người dùng, bạn có thể mở User32.dll G3232.dll Kernel32.dll, đặc biệt ntdll.dll trong dependancy walker và tìm tất cả API được xuất. Nhưng bạn sẽ không có tài liệu offcourse.

Chỉ cần tìm thấy một bài viết tốt về Native APIS bởi Mark Russinovich

8

IDA Pro là đặt cược tốt nhất của bạn ở đây, nhưng vui lòng làm ơn gấp đôi không thực sự sử dụng chúng cho bất kỳ thứ gì.

Chúng nằm bên trong vì chúng thay đổi; họ có thể (và làm) thậm chí thay đổi như là kết quả của một Hotfix, vì vậy bạn thậm chí không đảm bảo API không có giấy tờ của bạn sẽ làm việc cho các phiên bản hệ điều hành cụ thể và cấp gói dịch vụ mà bạn đã viết nó cho. Nếu bạn gửi một sản phẩm như thế, bạn đang sống trong thời gian vay mượn.

+3

Và sau đó nếu bạn là người có ảnh hưởng, Microsoft phải duy trì chúng mãi mãi bởi vì nếu không, phần mềm của Crap Inc sẽ phá vỡ và người dùng sai lầm sẽ hét lên về cách Microsoft hút và Apple là tuyệt vời. – Josh

+7

Bạn thậm chí không phải là người có ảnh hưởng - crack mở cơ sở dữ liệu shim AppCompat một ngày nào đó, chúng tôi có các ứng dụng như Disney Timon & Puumba Tìm hiểu để nhập vào đó –

+0

Có. Tôi sử dụng SetConsoleFont không có giấy tờ thành công trên windows xp, và windows 7, nhưng nó không thành công trên windows 7 sp1. – carlos

6

Mọi người ở đây cho đến nay thiếu một số chức năng đáng kể bao gồm các phần cực kỳ không được ghi chép của hệ điều hành Windows RPC. Các hoạt động RPC (xem rpcrt4.dll, lsass.exe, csrss.exe, v.v.) xảy ra rất thường xuyên trên tất cả các hệ thống con, thông qua các cổng LPC hoặc các giao diện khác, chức năng của chúng được chôn trong các câu thần chú của các loại khác nhau./struct-typedef's etc ... vốn khó khăn hơn để gỡ lỗi, do bản chất không đồng bộ hoặc thực tế là chúng được định nghĩa cho quá trình mà nếu bạn gỡ lỗi thông qua bước đơn hoặc những gì có bạn, bạn sẽ tìm thấy toàn bộ hệ thống bị khóa do chặn bàn phím hoặc các I/O khác không được chuyển;)

ReactOS có lẽ là cách tốt nhất để điều tra API không có giấy tờ. Họ có một hạt nhân khá trưởng thành và điều hành khác được xây dựng. IDA khá tốn thời gian và không chắc bạn sẽ tìm thấy bất cứ điều gì mà người ReactOS chưa có.

Đây là một sự xáo trộn từ trang được liên kết;

ReactOS® là hệ điều hành miễn phí, hiện đại dựa trên thiết kế Windows® XP/2003. Được viết hoàn toàn từ đầu, nó nhằm mục đích theo kiến ​​trúc Windows® được thiết kế bởi Microsoft từ cấp phần cứng ngay qua ứng dụng . Đây không phải là hệ thống dựa trên Linux và không chia sẻ cấu trúc unix .

Mục tiêu chính của dự án ReactOS là cung cấp hệ điều hành là số nhị phân tương thích với Windows. Điều này sẽ cho phép các ứng dụng Windows của bạn và các trình điều khiển chạy như trên hệ thống Windows của bạn. Ngoài ra, giao diện và cảm nhận về hệ điều hành Windows được sử dụng, sao cho mọi người quen với giao diện người dùng quen thuộc của Windows® sẽ tìm cách sử dụng Phản ứng đơn giản. Mục tiêu cuối cùng của của ReactOS là cho phép bạn xóa Windows® và cài đặt ReactOS mà không cần người dùng cuối nhận thấy sự thay đổi .

Khi tôi điều tra một số cấu trúc Windows hiếm thấy, ReactOS thường là tham chiếu đáng tin cậy duy nhất.

+1

Ồ, vì vậy nếu bạn cố gắng đảo ngược kỹ sư hệ điều hành, bạn nên điều tra tiện ích của IDL và cách định vị IDL được nhúng trong DLL, trích xuất vị trí của các phương thức triển khai. Ngoài ra, hãy tham khảo http://en.wikipedia.org/wiki/MSRPC để biết một số điểm khởi đầu tốt hơn. – RandomNickName42

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