Bagaimana saya bisa mencegah klien melihat kode saya ditulis dalam bahasa yang ditafsirkan?

16

Saya sedang membangun program interpretasi yang cukup rumit dengan Python. Saya telah mengerjakan sebagian besar kode ini untuk keperluan lain selama beberapa bulan, dan oleh karena itu tidak ingin klien saya hanya dapat menyalin dan mencoba menjualnya, karena saya pikir itu layak untuk jumlah yang adil.

Masalahnya adalah bahwa saya memerlukan skrip untuk berjalan di server yang klien saya bayar, jadi apakah ada cara saya dapat mengamankan folder tertentu pada mesin dari akses root, atau membuatnya sehingga hanya satu penggunaan tertentu yang dapat mengakses direktori ? OS adalah Ubuntu.

Mike Partridge
sumber
13
Apa jenis kontrak / perjanjian yang ada antara Anda dan klien Anda? Apakah mereka memiliki kodenya, atau Anda hanya melisensikan penggunaannya kepada mereka? Atau apakah Anda tidak menyelesaikan semua ini?
matt b
2
Saya pikir mungkin untuk mengkompilasi sumber python ke dalam biner. Apakah mungkin untuk proyek ini? Jika demikian, Anda bisa menggunakan biner saja.
FrustratedWithFormsDesigner
nightcracker benar menurut saya. Lisensi dan kontrak yang tepat harus mencegah semua ini, bukan tindakan teknis. Terutama karena Anda selalu dapat mendekompilasi / menghilangkan sesuatu dan rootdiizinkan untuk melakukan semuanya .
Bobby
Pikirkan itu sebaliknya, jika mereka melanggar kontrak atau lisensi Anda dapat menuntut mereka sampai mereka menangis
Jakob Bowyer
9
Semua orang selalu mengatakan kode mereka bernilai jumlah yang adil.
Kaleb Brasee

Jawaban:

40

Lisensi itu.

Sungguh, itu saja!

orlp
sumber
6
Pikiran pertama saya adalah untuk memilih ini bukan jawaban, tapi sih, Anda benar. Lisensi dan penandatanganan kontrak adalah cara untuk pergi ke sini.
Bobby
@ Bob: Hampir satu-satunya cara untuk pergi. Alternatifnya adalah dengan terus menambahkan fitur baru yang menyenangkan dan bermanfaat dengan begitu cepat sehingga mencuri versi lama akan membuang-buang waktu.
S.Lott
akankah commons creative cukup sebagai lisensi?
10
-1 Pertanyaannya menanyakan cara untuk menghentikan klien melihat kode, ini tidak melakukan itu. Orang tidak selalu mematuhi lisensi, dan mungkin tidak mungkin mencari tahu secara hukum untuk menuntut.
Orbling
8
Anda tidak dapat menghentikan klien melihat kode Python, terlalu mudah untuk dibongkar. DRM tidak berfungsi (jika mereka dapat menjalankannya, mereka dapat membongkarnya). Jadi satu-satunya jawaban adalah jawaban yang sah. Dan begitu Anda mengandalkan hukum untuk penegakan hukum, tidak ada gunanya membuat hidup Anda atau pelanggan Anda lebih sulit dengan memperumit basis teknis.
ncoghlan
10

Anda selalu dapat mengkompilasi semua file Anda ke byte kode pyc. Ada pengurai di luar sana yang dapat menghasilkan kode sumber dari itu tetapi tidak ada yang serius.

Namun itu hanya akan menyelesaikan kemampuan membaca kode program Anda. Untuk melindungi satu-satunya cara adalah melisensikannya seperti yang dikatakan nightcracker, karena bahkan jika Anda mengkompilasi kode Anda, untuk mengatakan kode mesin, jika pekerjaan Anda tidak dilindungi oleh lisensi, itu masih dapat dikomersilkan sesuai keinginan Anda.

Intinya, kompilasi ke kode byte dan yang lebih penting Lisensi itu


sumber
Saya punya pertanyaan. Apakah kompiler byte menggunakan nama variabel yang berubah-ubah, atau apakah itu menggunakan nama variabel yang lama? (Saya akan membayangkan itu harus menggunakan yang lama, karena modul eksternal bergantung pada namespace itu).
@ Garrett: Bytecode berisi nama variabel. Ini masih berantakan relatif terbaca ketika dibongkar (coba mencerna pembongkaran dari resep ini ), dan tidak ada (terakhir) decompilers.
7

Gunakan Cython. Ini akan memungkinkan Anda untuk mengkompilasi program Anda sebagai executable asli. Maka seharusnya lebih sulit untuk mencuri.

Sedangkan untuk direktori, satu-satunya saran yang bisa saya berikan adalah memastikan Anda telah mengatur izin Anda dengan benar. ACL mungkin teman Anda, meskipun saya tidak 100% yakin bahwa mereka dapat membatasi root dari mengakses file. Bahkan jika mereka bisa, root masih bisa saja mengubah izin. Dia root, dia dewa - begitulah cara kerjanya.

http://www.korokithakis.net/node/109

Chris Eberle
sumber
1

Seperti yang ditunjukkan oleh pengguna di atas, disassembler dapat memperoleh kode kembali, tetapi belum terlalu mudah dibaca (setidaknya tidak untuk disassembler open source).

Saya sedang memikirkan hal ini, dan salah satu cara yang saya pikir Anda bisa menyelesaikan masalah ini (jika Anda menyebut kode open paksa masalah) adalah dengan menulis skrip re factoring otomatis. Ini sebenarnya cukup sederhana. Anda hanya akan memberi makan skrip modul Anda, dan itu akan mengganti nama semua variabel spesifik modul. Ini, bersama dengan hanya merilis file yang dikompilasi, akan melakukan banyak hal untuk mengaburkan kode Anda.

Melakukan pencarian di PyPI, saya menemukan ini: http://pypi.python.org/pypi/pyfuscate/0.1 . Anda harus memeriksanya dan yang lain menyukainya dan melaporkannya kembali: D

Juga: Anda juga harus melisensikannya.


sumber
1

Saya sarankan lisensi juga. Di atas perizinan, mari mengenkripsi kode sumber rutinitas utama menggunakan algoritma kunci asimetris sehingga hanya mesin klien Anda yang dapat menjalankannya. Salah satu kunci dalam pasangan adalah sesuatu yang diperoleh dari perangkat keras (contoh: nomor seri kartu jaringan) dari mesin klien Anda. Gunakan kunci lain dalam pasangan untuk mendekripsi kode sumber saat menjalankan program. Perhatikan bahwa satu-satunya yang dapat dikirim dalam plaintext adalah rutin dekripsi dan sisanya akan berada dalam ciphertext.

Dengan cara ini klien Anda dapat menyalin dan menempelkan kode Anda yang tampaknya omong kosong tetapi tidak dapat menjalankannya di tempat lain. Namun saran saya tidak sepenuhnya anti-peluru: interpreter dapat menyimpan program yang didekripsi di suatu tempat dalam memori. Maka ada kemungkinan bahwa beberapa hacker mengambil program Anda dalam plaintext selama eksekusi saya kira.

Sedangkan untuk mencegah folder dari akses root, saya setuju bahwa root tidak dapat dihentikan dari mengakses file / folder.


sumber
Ini hanya kebingungan, dengan alat yang tepat, akan selalu ada titik waktu di mana kode tersebut dalam teks biasa. Cara sederhana untuk mengalahkan solusi Anda adalah dengan hanya menukar ruby/ python/ nodedengan program kustom yang mencerminkan API eksekusi dan mengeluarkan kode.
Jamo
Selain itu, kunci pribadi (untuk dekripsi) harus tersedia untuk lingkungan, oleh karena itu tersedia untuk penyerang.
Fixee
0

Perizinan adalah jawaban terbaik di sini. Yang mengatakan, mengapa itu harus berjalan di gigi mereka? Jika ini sangat penting, Anda mungkin ingin menggunakan layanan dan membangun semacam API layanan di sekitar hal-hal sehingga orang-orang bahkan tidak dapat melihat properti intelektual Anda untuk mencurinya.

Wyatt Barnett
sumber