18

Tôi đang tìm mã mẫu (hoặc thư viện) có thể giúp tôi xác nhận chữ ký số cho các tệp Windows PE (.exe, .dll, .cab, .etc) trên nền tảng không phải Windows bằng C++. Tôi đang tìm cách tiếp cận nền tảng độc lập.Làm cách nào để xác thực chữ ký số cho định dạng Di động của Microsoft trong mã di động?

Cảm ơn!

+0

+1 Sửa đổi tiêu đề một chút để biểu thị rằng bạn có nghĩa là chữ ký số và không phải chữ ký tệp. (Ví dụ.MZ, "PE \ 0 \ 0", v.v.) –

Trả lời

5

Không có câu trả lời chung cho điều này, đặc biệt là khi bạn chưa chỉ định khoảng cách bạn muốn chuyển. Linux trên x86 với thư viện mã nguồn mở sẽ dễ dàng hơn, uCos chạy trên MIPS32 hoặc Arduino sẽ không thể thực hiện được ..

Trước tiên, bạn phải đọc và phân tích cú pháp định dạng PE, cụ thể là bạn phải có thể nhận được nội dung của phần riêng lẻ và băm họ, như .text, .data vv Đối với cái nhìn sâu sắc như thế nào nó đặt lại với nhau, nhìn ở đây:

http://msdn.microsoft.com/en-us/magazine/cc301805.aspx http://msdn.microsoft.com/en-us/magazine/ms809762.aspx

Bây giờ bạn muốn đây là di động, vì vậy bạn có thể cuộn trình đọc PE/trình ghi giới hạn của riêng bạn hoặc xem xung quanh trong một số dự án nguồn mở đã thực hiện việc này. Hãy thử ReactOS hoặc Mono. Hoặc nếu bạn đang hạnh phúc chạy python, hãy thử điều này http://code.google.com/p/pefile/

Thứ hai, khi bạn đang xử lý mật mã, chữ ký số và chứng chỉ X.509, bạn cần một thư viện mã hóa di động đầy đủ. xác nhận và như vậy. Nếu bạn hài lòng với GPL, hãy thử OpenSSL hoặc CyaSSL, hoặc Botan nếu bạn muốn có giấy phép BSD.

Định dạng chính xác của chữ ký Authenticode, quá trình ký kết và quá trình kiểm chứng thực được desribed đây: http://www.microsoft.com/whdc/winlogo/drvsign/Authenticode_PE.mspx (Authenticode_PE.docx)

Nó sẽ đòi hỏi khá nhiều mã để kéo tất cả mọi thứ lại với nhau.

+0

OpenSSL không phải là thư viện mật mã đầy đủ - chỉ SSL. [CryptoPP] (http://cryptopp.com/), mặt khác, là một thư viện mật mã đầy đủ - chúng có [phần về chứng chỉ X.509] (http://www.cryptopp.com/ wiki/X.509) nếu đó là định dạng mà PE sử dụng. (Điều tuyệt vời về CryptoPP là miền công cộng của nó quá :) –

+4

Billy: lần cuối tôi kiểm tra OpenSSL [có crypto] (http://www.openssl.org/docs/crypto/crypto.html) và [xử lý chứng chỉ X509] (http://www.openssl.org/docs/crypto/x509.html#) tốt. – sehe

+0

@sehe: Hmm .. nó có nhiều hơn tôi nghĩ. (Điều đó nói rằng, nó vẫn còn ít hơn nhiều so với Crpyto ++, và Crypto ++ có giấy phép tốt hơn) –

10

Bạn có thể kiểm tra tại WINE's WinVerifyTrustimplementation để biết cách lập trình đầy đủ.

Và trên thực tế, đây là một liên kết tốt How to verify executable digital signatures under Linux? phàn nàn về việc thực hiện WINE (đã trở lại vào năm 2008), và do đó giải thích quy trình theo cách khá "di động", miễn là bạn có thứ gì đó tương tự OpenSSL nền tảng của bạn.

0

Microsoft Authenticode chắc chắn không phải là một bí mật hush-hush lớn và bạn có thể download technical specs and more về cách thức hoạt động của Authenticode. Bạn cũng có thể tải xuống thông tin kỹ thuật về Windows PE file format. Vì bạn không nêu rõ thời tiết bạn muốn một cái gì đó cho Linux, Mac hoặc điện thoại thông minh, tôi không thể cung cấp cho bạn một giải pháp thích hợp. Tuy nhiên, với thông tin tôi đã cung cấp cho bạn ở trên, cùng với OpenSSL, bạn sẽ có thể tạo chương trình của riêng mình để thực hiện việc này bằng ngôn ngữ và hệ điều hành bạn chọn.

0

Câu hỏi này khá cũ, nhưng tôi đặt câu trả lời cho những người vẫn đang đối mặt với cùng một vấn đề.

Bạn có thể sử dụng osslsigncode tool để xác minh chữ ký MS Authenticode trên Linux hoặc các hệ thống * nix khác. Tuy nhiên công cụ chỉ xác minh chữ ký chính nó và không kiểm tra thu hồi chứng chỉ, thời gian hiệu lực vv mặc dù bạn có thể trích xuất dữ liệu từ chữ ký và thực hiện thủ công.

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