2013-02-21 29 views
6

Thực ra, Dropbox đã làm cho nó rất tốt, họ có thể bảo đảm ứng dụng máy tính để bàn của họ được tạo bằng python; Tôi đã nghiên cứu điều này rất nhiều, nhưng không có giải pháp tốt hơn là obfuscation, mà không phải là cách rất an toàn để đi, và bạn sẽ thấy mã của bạn được tải lên ở đâu đó.Làm xáo trộn mã vạch trăn thông qua đột biến thông dịch

tôi nghe một phiên làm bởi Giovanni Bajo (người sáng lập PyInstaller), ông nói Dropbox thực hiện điều này:

  1. Bytecode-xáo trộn bởi biên dịch lại dịch CPython của bạn, và của thành viên này, tiêu chuẩn CPython thông dịch viên sẽ không thể chạy nó, chỉ trình biên dịch cpython biên dịch lại.
  2. Tất cả những gì bạn cần làm là trộn các số bên dưới define loadup 8.

Tôi chưa bao giờ trải qua mã nguồn của Python, vì vậy, tôi sẽ không tuyên bố rằng tôi hoàn toàn hiểu các từ ở trên.

Tôi cần nghe tiếng nói của các chuyên gia: Làm thế nào để làm một điều như vậy? Và nếu sau khi biên dịch lại, tôi sẽ có thể đóng gói ứng dụng của mình bằng các công cụ sẵn có như PyInstaller?

Cập nhật:

tôi đã thực hiện một số nghiên cứu liên quan đến cách Dropbox làm kiểu này obfuscation/đột biến, và tôi thấy điều này:

Theo Hagen Fritsch, họ làm điều đó trong hai giai đoạn:

  1. Chúng sử dụng mã hóa TEA cùng với RNG được gieo bởi một số giá trị trong đối tượng mã của mỗi mô-đun python. Họ điều chỉnh thông dịch phù hợp để nó

    a) Giải mã các module và

    b) Ngăn chặn truy cập vào các giải mã mã đối tượng.

    Điều này sẽ là con đường đơn giản cho phép dropbox giải mã mọi thứ và đổ các mô-đun bằng cách sử dụng trình soạn thảo nội dung.

  2. Một thủ thuật khác được sử dụng là việc xáo trộn thủ công các mã opcodes. Thật không may điều này chỉ có thể được cố định semiautomatically do đó mật mã thay thế monoalphabetic của họ tỏ ra khá hiệu quả trong điều khoản của chiến thắng một thời gian.

Tôi vẫn muốn hiểu rõ hơn về cách thực hiện điều này, hơn thế nữa, tôi không biết cách giải mã xảy ra trong quá trình này ... Tôi muốn tất cả giọng nói của chuyên gia ở đây ... bạn ở đâu.

+0

Tương tự, câu hỏi gần đây hơn: [Không thể giải mã được Python] (http://stackoverflow.com/q/15087339/222914) –

+0

Cảm ơn Janne. Rất giống với những gì bạn nói, thêm vào đó, việc loại bỏ các mô-đun nội tâm trong trình thông dịch mới được tạo ra/xáo trộn. – securecurve

+0

vào cuối ngày, bytecode sẽ được trích xuất từ ​​bộ nhớ, sau đó, kẻ tấn công có thể làm so sánh giữa bytecode xáo trộn mới và một tiêu chuẩn để biết làm thế nào shuffling được; nhưng, hãy công bằng, không thể cùng một kẻ tấn công dịch ngược một chương trình viết bằng C để lấy mã nguồn, không có gì là an toàn chống lại đảo ngược, đó là một sự đánh đổi ... đó là cách tôi thấy mọi thứ, có thể tôi sai . – securecurve

Trả lời

2

Tôi cho rằng đây là về việc xáo trộn các số trong include/opcode.h. Tuy nhiên, tôi không thấy một số #define loadup, nhưng có thể là một số phiên bản Python cũ. Tôi đã không thử điều này.

Điều này sẽ làm xáo trộn các tệp .pyc của bạn để chúng không thể được kiểm tra bởi bất kỳ công cụ nào nhận ra các tệp .pyc bình thường.Điều này có thể giúp bạn ẩn một số biện pháp bảo mật bên trong chương trình của mình. Tuy nhiên, kẻ tấn công có thể (ví dụ) để trích xuất trình thông dịch Python tùy chỉnh của bạn từ gói ứng dụng của bạn và tận dụng điều đó để kiểm tra các tệp. (Chỉ cần khởi chạy trình thông dịch tương tác và bắt đầu điều tra bằng cách nhập và sử dụng dir trên mô-đun)

Lưu ý rằng gói của bạn chắc chắn sẽ chứa một số mô-đun từ thư viện chuẩn Python. Nếu kẻ tấn công đoán rằng bạn đã xáo trộn các opcodes, anh ta có thể so sánh từng byte giữa phiên bản của bạn và phiên bản bình thường của một mô-đun chuẩn và khám phá các mã của bạn theo cách đó. Để ngăn chặn cuộc tấn công đơn giản này, người ta có thể bảo vệ các mô-đun bằng mã hóa thích hợp và cố gắng ẩn bước giải mã trong trình thông dịch, như được đề cập trong câu hỏi được cập nhật. Điều này buộc kẻ tấn công sử dụng gỡ lỗi mã máy để tìm mã giải mã.


Tôi không biết làm thế nào giải mã xảy ra trong quá trình này ...

Bạn sẽ sửa đổi một phần của thông dịch viên rằng nhập khẩu module và chèn mã C giải mã của bạn ở đó.

+0

Vâng, đó là tất cả? Chúng tôi chỉ thay đổi các số trong 'opcode.h', biên dịch lại trình thông dịch python, đóng gói ứng dụng của tôi, sau đó gửi nó cho khách hàng? Liệu nó có tạo ra một ứng dụng giống như Dropbox với cùng mức độ bảo mật không? – securecurve

+0

@securecurve Mở rộng câu trả lời của tôi. Tôi không biết mức độ bảo mật mà ứng dụng Dropbox có. –

+0

Tại thời điểm này, việc khai thác các opcodes sẽ không đơn giản, kẻ tấn công sẽ phải sử dụng các công cụ gỡ rối/giải mã và gỡ lỗi để xem các opcodes đó trong bộ nhớ ... Tôi có nói đúng hay điều này sẽ xảy ra khác? – securecurve