2008-12-04 19 views
19

Trình cài đặt của tôi xây dựng "dấu hiệu" một DLL bằng cách sử dụng chứng chỉ Ký Mã trong quá trình xây dựng.Tôi có thể xóa chữ ký số khỏi một DLL không?

Tôi đã nhận thấy rằng nếu tôi cố gắng xây dựng hai lần liên tiếp, lần xây dựng thứ hai không thành công vì DLL đã được ký để các cuộn cảm mã hóa. Rõ ràng tôi có thể sửa lỗi này bằng cách ký một bản sao của DLL trong bản dựng, nhưng vấn đề đã lôi cuốn tôi:

Có thể "unsign" một DLL, và nếu không, tại sao không ...?

Trả lời

7

Chắc chắn nó có thể, nhưng không tầm thường.

Mặc dù sẽ dễ dàng hơn để lưu bản sao của DLL được chỉ định.

Chữ ký số này ít hơn một phần bổ sung được thêm vào cuối tệp PE. Bạn có thể viết một chương trình đã xóa chữ ký, nếu bạn muốn.

Nó không đơn giản như cắt xén tệp; bạn phải xóa tham chiếu đến chữ ký trong tiêu đề tệp. Nó có thể trở nên phức tạp nếu DLL có nhiều chữ ký và bạn chỉ muốn xóa một chữ ký.

Định dạng của một file PE được công khai tài liệu here

+1

Cảm ơn. Không * khá * câu trả lời tôi hy vọng (ví dụ "chỉ cần chạy UNSIGNTOOL"), nhưng tôi đã thông báo tốt hơn bây giờ! – Roddy

6

Một tùy chọn khác có thể là để chuyển sang SignTool.exe. Nó đi kèm với các Windows SDK và ký một nhị phân đã được ký kết không tạo ra một lỗi. Tôi sử dụng signtool.exe trong quá trình xây dựng của tôi và không có bất kỳ khó khăn với nó, ngay cả khi một cái gì đó đã được ký kết.

Ngoài ra, hãy kiểm tra các câu hỏi What's the main difference between signcode.exe and signtool.exe?

3

Kiểm tra nếu công cụ xây dựng của bạn hỗ trợ "Re-ký". Điều này sẽ thay thế tất cả các chữ ký hiện có.

Nếu không, bạn có thể sử dụng Stud_PE để xóa khối chữ ký. Mở tệp DLL hoặc EXE trong Stud_PE, chuyển đến tab mục, nhấp chuột phải vào phần chữ ký kỹ thuật số và chọn "Xóa phần". Tuy nhiên, điều này cần sự tương tác của người dùng. Các phiên bản cũ của công cụ có thể phá hủy tệp.

25

Bạn có thể sử dụng delcert.exe từ XDA Forum post này.

đây là một công cụ nhỏ mà dải (loại bỏ) dấu hiệu kỹ thuật số (Authenticode) từ PE file thực thi như * .exe, * .dll, * .mui vv

+1

Công cụ này sử dụng API 'ImageRemoveCertificate' và hoạt động tốt. – zig

+0

Và nó thậm chí đi kèm với các nguồn, tuyệt vời. –

12

Đó là khá dễ dàng để xóa chữ ký khỏi tệp .dll bằng cách sử dụng API ImageRemoveCertificate.

Bạn không có bất kỳ ngôn ngữ nào được chỉ định trong thẻ nhưng bài viết này cho biết cách triển khai trong C#. Remove digital signature from a file using C#

Ngoài ra, nếu bạn đang tìm kiếm một công cụ đơn giản để thực hiện công việc cho bạn, bạn có thể sử dụng FileUnsigner.

6
signtool remove /s C:\path\to.exe.or.dll 

signtool có sẵn trong Windows SDK.

+0

Hm, bạn thấy lệnh "remove" ở đâu trong singtool.exe? Phiên bản nào vậy? Bạn có thể vui lòng liên kết nó? Liên kết hiện tại của bạn không hiển thị liên kết như tôi thấy. –

+0

Hm, sử dụng "signtool /?" để xem các tùy chọn. @NikolaDavidovic –

+0

Vâng, nó không có lệnh 'remove'. Tự kiểm tra. Nó không được liệt kê trên liên kết bạn đã cung cấp. Vì vậy, tôi hỏi, phiên bản signtool.exe bạn đang sử dụng khi bạn viết câu trả lời này? Tôi đã kiểm tra với phiên bản sản phẩm 6.1.7600.16385. –

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