2012-08-22 32 views
12

Sau khi đọc How do I protect Python code?, tôi quyết định thử một mô-đun mở rộng thực sự đơn giản trên Windows. Tôi đã biên dịch mô-đun mở rộng của riêng mình trên Linux trước đây, nhưng đây là lần đầu tiên tôi biên dịch nó trên Windows. Tôi đã mong đợi để có được một tập tin .dll, nhưng thay vào đó, tôi có một tập tin .pyd. Docs cho biết chúng giống nhau, nhưng phải có hàm init[insert-module-name]().Làm cách nào để đảo ngược các tệp .pyd của kỹ sư?

Có an toàn không khi giả định, thật khó để đảo ngược kỹ sư chúng dưới dạng tệp dll. Nếu không, độ cứng của chúng để đảo ngược kỹ sư ở quy mô từ tệp .pyc thành tệp .dll là gì?

+0

Nếu thông báo "Có, tệp .pyd là dll," thì vấn đề gì trong việc hỏi xem chúng có ít kỹ năng đảo ngược hơn các tệp dll không? Đó vẫn là mã gốc ... –

+0

@MatteoItalia Tôi đang gặp khó khăn trong việc hiểu sự khác biệt của chúng. Ví dụ, các tệp .pyc được biên dịch mã quá, nhưng chúng dễ dàng hơn để đảo ngược kỹ sư hơn các tệp dll. – yasar

+1

@ yasar11732 .pyc tệp không phải là mã gốc mặc dù. – delnan

Trả lời

9

Chúng giống như bạn đã phát hiện ra, tương đương với các tệp DLL có cấu trúc nhất định. Về nguyên tắc, họ cũng khó có thể đảo ngược kỹ sư, họ là mã máy, cần rất ít siêu dữ liệu và mã có thể đã được tối ưu hóa ngoài sự công nhận.

Tuy nhiên, cấu trúc bắt buộc và biết rằng nhiều chức năng sẽ xử lý PyObject * và các loại CPython được xác định rõ ràng khác, có thể có một số hiệu ứng. Nó sẽ không thực sự giúp đỡ với lập bản đồ mã lắp ráp để C (nếu bất cứ điều gì, nó sẽ khó khăn hơn do các macro cụ thể CPython). Mã mà phần lớn tương tác với các kiểu Python sẽ trông khá khác với mã thao tác các cấu trúc C (và tương đối cồng kềnh). Điều này có thể làm cho nó thậm chí còn khó hiểu hơn, hoặc nó có thể cho mã mà không có gì thú vị và cho phép một kỹ sư đảo ngược để bỏ qua nó và nhận được bí mật thương mại của bạn trước đó.

Không ai trong số những mối quan tâm này áp dụng cho các đoạn mã là mã C thuần túy (tức là không tương tác với Python). Và bạn có thể có rất nhiều thứ đó. Vì vậy, nó không nên tạo ra một sự khác biệt đáng kể cuối cùng.

1

Về cơ bản chúng là mã gốc. Nhưng bởi vì mọi chức năng đều có danh sách đối số hài hước, nên khó có thể thấy được chức năng của từng chức năng. Tôi sẽ nói rằng họ đang cứng như dll, nếu không khó hơn.

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