Làm thế nào để bạn xáo trộn mã nguồn?

Trong phát triển phần mềm, Obfuscation là hành động có chủ ý tạo ra Mã nguồn khó hiểu đối với con người. Mã này thường được làm rối để bảo vệ tài sản trí tuệ hoặc bí mật thương mại và để ngăn kẻ tấn công thiết kế ngược một chương trình phần mềm độc quyền

Mã hóa một số hoặc tất cả mã của chương trình là một phương pháp che giấu

Trong Python, có sẵn nhiều gói mà bạn có thể làm xáo trộn cơ sở mã của mình và bảo vệ tài sản trí tuệ của mình

  • pyarmor — che giấu hoàn toàn bằng mã hóa hex;
  • python-minifier — thu nhỏ mã và làm xáo trộn tên hàm/biến
  • pyminifier - thực hiện tốt công việc làm xáo trộn tên hàm, biến, nghĩa đen; . Vấn đề. sau khi mã hóa mã có thể chứa lỗi cú pháp và không chạy

Trong khi nghiên cứu, tôi đã tìm thấy một tùy chọn khác để làm xáo trộn Mã Python của mình bằng Cython, điều này khá hữu ích và khó đảo ngược Kỹ sư

Obfuscation là một trong nhiều tính năng mà gói Cython cung cấp. Cython là một trình biên dịch tĩnh tối ưu hóa, lấy các mô-đun

python main.py
9 của bạn và dịch chúng sang các tệp C có hiệu suất cao. Các tệp C kết quả có thể được biên dịch thành các thư viện nhị phân gốc mà không cần nỗ lực. Khi quá trình biên dịch hoàn tất, không có cách nào để đảo ngược các thư viện đã biên dịch trở lại mã nguồn Python có thể đọc được

Hãy để tôi hướng dẫn bạn các bước hướng tới việc làm xáo trộn mã nguồn Python bằng Cython. Chúng tôi sẽ sử dụng một dự án đơn giản để giới thiệu giống nhau

Mã mẫu để minh họa việc làm xáo trộn mã

Tôi đã viết một đoạn mã nhỏ dựa trên Flask bằng trăn lấy phương trình số làm Đầu vào, xác thực phương trình và nếu hợp lệ, giải phương trình. Không có gì hợp lý, chỉ dành cho mục đích hướng dẫn. Ý tưởng là để giới thiệu sự xáo trộn mã của logic nghiệp vụ

cơ sở mã

  • https. //github. com/mohammedvaghjipurwala/code_obfuscation

Mã repo trông giống như…

.
├── README.md
├── __init__.py
├── main.py
├── routes.py
├── swagger.yml
├── src
│ ├── __init__.py
│ └── solver.py
└── compile.py

Hướng dẫn mã

  • python main.py
    0. Tệp này là tệp khởi động bình mà qua đó ứng dụng bình bắt đầu
  • python main.py
    1. Tệp này lưu trữ tất cả các tuyến API do ứng dụng cung cấp
  • python main.py
    2. Tệp này lưu trữ Chi tiết API có thể được truy cập ở dạng tài liệu được định dạng thông qua Trình duyệt
  • python main.py
    0. Tệp này lưu trữ logic nghiệp vụ xác minh phương trình và nếu hợp lệ thì giải phương trình
  • python main.py
    1. Tệp này lưu trữ cơ sở mã để xây dựng tệp
    python main.py
    2 từ tệp
    python main.py
    9

https. //github. com/mohammedvaghjipurwala/code_obfuscation/blob/main/compile. py

Thực thi mã

Để chạy ứng dụng Flask, hãy thực hiện lệnh bên dưới trong thiết bị đầu cuối

python main.py

Bây giờ bạn có thể truy cập Tài liệu API Swagger bằng URL

http://<public-ip>/ui

Đi vênh vang

Phản hồi thành công

Phản hồi lỗi

Chạy biên dịch. py

Tùy thuộc vào phiên bản Python bạn sử dụng, hãy chạy

python compile.py build_ext --inplace

…hoặc, cho Python 3

python3 compile.py build_ext --inplace

Lệnh trên sẽ tạo các tệp

python main.py
2 và
python main.py
5 bên cạnh tệp nguồn
python main.py
9 của bạn

python main.py
0

Tệp

python main.py
5 là nguồn trung gian được sử dụng để tạo tệp
python main.py
2, là mô-đun nhị phân mà bạn muốn phân phối. Khi xây dựng trên Windows, các tệp này có thể sẽ có phần mở rộng
python main.py
9

Bạn có thể xóa các tệp

http://<public-ip>/ui
0
python main.py
5 và
python main.py
9 sau khi tạo thành công và chỉ giữ lại các tệp
python main.py
2. Một phương pháp đã được thêm vào cho cùng một

Lưu ý rằng các tệp

python main.py
2 chứa nền tảng đích trong tên của chúng (e. g.
http://<public-ip>/ui
5 trên MacOS của tôi). Rõ ràng, các mô-đun được biên dịch không đa nền tảng. Nếu bạn phân phối chương trình của mình cho người dùng Ubuntu Linux, bạn nên biên dịch nó trên Linux. Nếu không, bạn sẽ không thể tải các tệp nhị phân này. Vì vậy, bạn sẽ phải biên dịch một phiên bản mã dành riêng cho nền tảng cho từng nền tảng được nhắm mục tiêu của mình

Trình kích hoạt của tập lệnh này có thể được thêm vào trong các tệp thiết lập hoặc Dockerfile hỗ trợ xây dựng gói ứng dụng. Gói hàng cuối cùng cần được vận chuyển sẽ có Tài sản trí tuệ khó hiểu, rất khó để đảo ngược Kỹ sư

Người giới thiệu

  • https. //www. mục tiêu công nghệ. com/searchsecurity/definition/obfuscation
  • https. //Trung bình. com/@xpl/protecting-python-source-using-cython-dcd940bb188e
  • https. //ý chính. github. com/ctokheim/6c34dc1d672afca0676a

Nếu bạn thấy blog này hữu ích, hãy để lại một tràng vỗ tay 👏 hoặc bình luận 💬. Mọi phản hồi hoặc phê bình mang tính xây dựng đều được hoan nghênh 🙌

Công cụ nào có thể được sử dụng để che giấu mã nguồn?

Công cụ làm xáo trộn mã . Bộ giải mã mã nguồn mở trong Java bao gồm ProGuard, là trình thu nhỏ tệp lớp và loại bỏ các lớp không sử dụng. Nó giúp đổi tên các lớp còn lại bằng những cái tên vô nghĩa

Có thể Deobfuscate mã không?

Thứ hai, mã bị xáo trộn rất khó hiểu và do đó logic lập trình bị ẩn, đại loại là, khỏi những con mắt tò mò. Tuy nhiên, việc gỡ rối mã cực kỳ dễ dàng hoặc bạn cũng có thể nói kỹ sư đảo ngược, bất kỳ đoạn mã nào bị xáo trộn và làm cho nó dễ đọc hơn đối với con người.

Kỹ thuật che giấu mã là gì?

Xáo trộn mã là quá trình làm cho ứng dụng trở nên khó hoặc không thể dịch ngược hoặc phân tách và mã ứng dụng được truy xuất khó phân tích hơn đối với con người . Các nhà phát triển ứng dụng phải làm cứng mã ở các lớp khác nhau.

Bạn có nên làm xáo trộn mã của mình không?

Obfuscation là một phương pháp quan trọng để bảo vệ mã nguồn bằng cách làm cho mã trở nên khó hiểu , do đó ngăn các bên không được ủy quyền dễ dàng dịch ngược hoặc phân tách mã nguồn.