Melindungi Kode Sumber Java Agar Tidak Diakses [ditutup]

96

Minggu lalu, saya harus membuat GUI kecil untuk pekerjaan rumah. Tidak ada teman sekolah saya yang melakukannya. Mereka telah mencuri satu saya dari tempat kami harus mengunggahnya dan kemudian mereka mengunggahnya lagi sebagai milik mereka. Ketika saya memberi tahu guru saya, itu semua pekerjaan saya, dia tidak mempercayai saya.

Jadi saya berpikir untuk memasukkan metode yang tidak berguna atau sesuatu di dalamnya dengan bukti bahwa saya mengkodekannya. Saya memikirkan enkripsi. Ide terbaik saya sampai sekarang:

String key = ("ZGV2ZWxvcGVkIGJ5IFdhckdvZE5U"); //My proof in base64

Dapatkah Anda memikirkan cara lain yang lebih baik?

WarGodNT
sumber
31
Bukankah file memiliki stempel waktu di situs unggahan?
Averroes
76
Apakah Anda mengatakan bahwa mereka dapat mengunduh kode Anda dari tempat Anda mengunggahnya? Sepertinya gila. Anda harus mempertanyakan metode guru. Lebih disukai dengan berbicara dengan atasannya karena dia tampaknya sedikit tidak masuk akal.
Keyer
56
Epic gagal dalam salah satu pekerjaan rumah Anda dan biarkan seluruh kelas gagal.
diadakan
25
Sepertinya gurunya juga pemula ...
UmNyobe
22
Satu-satunya hal yang masuk akal untuk dilakukan dalam situasi ini adalah mencoba memperbaiki masalah dengan berbicara kepada guru tentang bagaimana Anda mengunggah pekerjaan rumah Anda. Mengunggahnya ke area di mana Anda dapat mengunduh kiriman orang lain benar-benar bodoh - Saya tidak yakin seorang guru yang menganggap pendekatan itu baik seharusnya benar-benar mengajar!
Michael Berry

Jawaban:

104

Aku punya masalah yang sama denganmu dulu. Kami memiliki mesin Windows 2000 dan mengunggah file ke folder jaringan Novel yang dapat dilihat semua orang. Saya menggunakan beberapa trik untuk mengalahkan bahkan pencuri terbaik: watermarking spasi putih; metadata watermarking; karakter yang tidak biasa; cap waktu tepercaya; modus operandi. Ini mereka secara berurutan.

Penandaan air spasi kosong:

Ini adalah kontribusi asli saya untuk watermarking. Saya membutuhkan tanda air tak terlihat yang berfungsi di file teks. Trik yang saya temukan adalah memasukkan pola spasi kosong tertentu di antara pernyataan pemrograman (atau paragraf). File tersebut tampak sama bagi mereka: beberapa pernyataan pemrograman dan jeda baris. Memilih teks dengan hati-hati akan menampilkan spasi. Setiap baris kosong akan berisi sejumlah spasi yang jelas tidak acak atau tidak disengaja. (mis. 17) Dalam praktiknya, metode ini berhasil untuk saya karena mereka tidak dapat mengetahui apa yang saya sisipkan di dokumen.

Penandaan air metadata

Di sinilah Anda mengubah metadata file untuk memuat informasi. Anda dapat menyematkan nama Anda, hash, dll. Di bagian file yang tidak terlihat, terutama EXE. Pada hari NT, Aliran Data Alternatif sangat populer.

Karakter yang tidak biasa

Aku akan melempar yang ini hanya untuk iseng. Trik lama peniruan IRC adalah membuat nama dengan huruf yang mirip dengan nama orang lain. Anda dapat menggunakan ini dalam watermarking. Peta Karakter di Windows akan memberi Anda banyak karakter tidak biasa yang terlihat mirip, tetapi bukan, huruf atau angka yang mungkin Anda gunakan dalam kode sumber Anda. Ini muncul di tempat tertentu dalam pekerjaan orang lain tidak mungkin tidak disengaja.

Stempel Waktu Tepercaya

Singkatnya, Anda mengirim file (atau hashnya) ke pihak ketiga yang kemudian menambahkan stempel waktu ke file tersebut dan menandatanganinya dengan kunci pribadi. Siapa pun yang menginginkan bukti saat Anda membuat dokumen dapat mengunjungi pihak ketiga tepercaya, biasanya situs web, untuk memverifikasi bukti waktu pembuatan Anda. Ini telah digunakan dalam kasus pengadilan untuk sengketa kekayaan intelektual sehingga menjadi bentuk bukti yang sangat kuat. Itu adalah cara standar untuk mencapai bukti yang Anda cari. (Saya memasukkan yang lain terlebih dahulu karena itu mudah, lebih menyenangkan dan mungkin akan berhasil.)

Artikel Wikipedia ini dapat membantu instruktur Anda memahami bukti Anda dan bagian tautan eksternal memiliki banyak penyedia, termasuk yang gratis. Saya akan menjalankan file uji melalui yang gratis selama beberapa hari sebelum menggunakannya untuk sesuatu yang penting.

Modus operandi

Jadi, Anda melakukan sesuatu dan sekarang Anda punya bukti kan? Tidak, siswa masih bisa mengatakan Anda mencuri ide dari mereka atau omong kosong lainnya. Perbaikan saya untuk ini adalah, secara pribadi, menetapkan satu atau lebih metode saya dengan instruktur saya. Saya memberi tahu instruktur untuk mencari spasi, mencari simbol tertentu, dll. Tetapi jangan pernah memberi tahu yang lain apa tanda air itu. Jika instruktur setuju untuk merahasiakan teknik sederhana Anda, teknik tersebut mungkin akan terus berfungsi dengan baik. Jika tidak, selalu ada stempel waktu tepercaya. ;)

Nick P.
sumber
5
+1 - Jawaban yang bagus dan lengkap. Mungkin harus menjadi jawaban yang diterima.
Andy Thomas
5
Satu ide lagi: Encode inisial Anda dengan nama variabel, nama field, nama metode, nama kelas, dll. Pencuri akan kesulitan menulis ulang semuanya. (Saya sebutkan di sini, karena ini koleksi yang bagus)
gaborsch
1
+1 GaborSch. Itu tambahan yang bagus. Jika Anda tidak kehilangan poin untuk nama metode yang ambigu, maka taktiknya dapat dibuat kurang jelas dan inisialnya sendiri dapat disebarkan di dalam nama.
Nick P
4
Ide lain terinspirasi dari komentar GaborSch: sengaja salah mengeja hal-hal tertentu. Lakukan kesalahan eja yang sangat tidak umum pada beberapa nama fungsi atau variabel. 10 orang lainnya melakukan hal yang sama sendiri? Ya benar ... (Catatan: salah satu kritikus terkemuka terjemahan Alkitab Dunia Baru mengklaim itu adalah tiruan KJV dan buktinya adalah bahwa kesalahan tata bahasa yang langka di KJV ada di NWT "baru". Jadi, ada preseden untuk pekerjaan ini. )
Nick P
7
Satu hal yang perlu diperhatikan tentang "whitespace watermarking" adalah jika IDE memformat ulang kode Anda (misalnya VS C # / Eclipse), kode tersebut akan hilang.
Alvin Wong
63

Jika teman sekelas Anda mencuri kode Anda dari situs unggahan, saya akan mengenkripsi pekerjaan rumah Anda dan mengirimkan kunci tersebut ke guru melalui email. Anda dapat melakukan ini dengan PGP jika Anda ingin menjadi rumit, atau sesuatu yang sederhana seperti file Zip dengan kata sandi.

EDIT: PGP akan memungkinkan Anda untuk mengenkripsi / menandatangani tanpa mengungkapkan kunci Anda, tetapi Anda tidak dapat mengalahkan kesederhanaan geser file Zip dengan kata sandi, jadi pilih saja kunci baru setiap tugas pekerjaan rumah. Kecantikan dalam kesederhanaan :)

Jonathan S. Fisher
sumber
2
Ini adalah pendekatan yang paling sederhana.
Jon Raynor
2
Bagaimana Anda membuktikan bahwa kode itu milik Anda? Saya bisa mencuri kode Anda, dan zip seolah-olah itu milik saya.
gaborsch
4
@GaborSch, jika saya mengunggah kode saya ke file zip dengan kata sandi, saya akan melihat versi Anda yang dicuri tak lama setelah panasnya matahari (dengan kata sandi yang dipilih dengan tepat)
SeanC
11
Anda dapat membuktikan bahwa itu adalah kode Anda dengan berhasil memberikan kunci dekripsi.
Jonathan S. Fisher
10
Tentu, ada banyak lubang dalam teori, tetapi secara realistis tidak mungkin ada orang yang akan mendapatkan akses ke file-nya jika dia mengirimkannya dengan enkripsi: Ada batasan seberapa jauh mereka akan melangkah, dan ada batasan pada kemampuan mereka. Jika mereka tidak dapat menulis GUI untuk pekerjaan rumah mereka, maka kemungkinan mereka tidak akan memecahkan kata sandi atau meretas komputer siapa pun dalam waktu dekat.
Supr
39

Jika Anda memberikan kode sumber kepada guru, cukup tambahkan a serialVersionUIDke salah satu file kelas Anda yang merupakan versi terenkripsi dari nama Anda. Anda dapat mendekripsikannya sendiri kepada guru.

Itu tidak berarti apa-apa bagi yang lain, hanya untuk Anda. Anda dapat mengatakan itu adalah kode yang dihasilkan, jika mereka mencurinya, mungkin tidak akan repot-repot mengubahnya sama sekali.

Jika Anda ingin melakukannya dengan gaya, Anda bisa menggunakan trik ini , jika Anda menemukan benih acak yang menghasilkan nama Anda. :) Itu akan menjadi nomor Anda kemudian, dan di mana pun tampaknya akan membuktikan bahwa itu adalah Anda yang membuat kode itu.

gaborsch
sumber
5
Seorang pencuri dapat membuat perubahan kosmetik pada kode, untuk membuat pencurian menjadi kurang jelas. Versi serial UID akan menjadi perubahan kosmetik yang mudah.
Andy Thomas
3
@GaborSch yang dengan serialVersionUID sempurna terima kasih
alot
2
@ AndyThomas-Cramer ya saya harus memprogram metode dengan nama rahasia saya di dalamnya dan jika dihapus program tidak akan berfungsi haha
LoremIpsum
2
@ AndyThomas-Cramer Secara teori ya. Dalam praktiknya, kebanyakan penipu malas dan hanya melakukan seminimal mungkin yang mereka anggap perlu. (Mungkin menggantinya //written by WarGodNTdengan //Written by ImaCheata.) Ini juga tidak mungkin bahwa banyak dari mereka bahkan tahu svUID dapat merusak mereka. Bahkan jika beberapa dari mereka begitu pintar; jika sebagian besar kelas melakukan kecurangan, beberapa hampir pasti ketahuan. Setidaknya itu sudah cukup untuk meyakinkan guru untuk membatalkan prosesnya.
Dan Is Fiddling By Firelight
3
@WilQu: Anda tidak akan menandatangani kode Anda sendiri dengan nama atau kunci pribadi orang lain, bukan?
Kembalikan Monica
35

Ini terjadi dengan sepasang siswa saya yang tinggal di apartemen yang sama. Seseorang mencuri kode sumber dari disk yang tersisa di laci meja.

Pencuri itu sedikit memodifikasi sumber yang dicuri, sehingga tidak terlihat jelas. Saya memperhatikan kemiripan kodenya, dan memeriksa sumbernya di editor. Beberapa garis memiliki spasi ekstra di ujungnya. Setiap sumber siswa memiliki jumlah spasi ekstra yang sama.

Anda dapat memanfaatkan ini untuk menyandikan informasi tanpa membuatnya terlihat. Anda dapat menyandikan inisial atau ID siswa Anda di akhir beberapa baris, dengan spasi.

Seorang pencuri kemungkinan akan membuat perubahan kosmetik pada kode yang terlihat, tetapi mungkin melewatkan karakter yang tidak terlihat.

EDIT:

Memikirkan hal ini lebih lanjut, Anda dapat menggunakan spasi dan tab sebagai kode Morse dan dahs, dan meletakkan nama Anda di akhir beberapa baris. Pencuri dapat menghapus, menyusun ulang, atau mengetik ulang beberapa baris tanpa merusak identitas Anda.

EDIT 2:

"Steganografi spasi putih" adalah istilah untuk menyembunyikan pesan di spasi. Googling mengungkapkan penerapan open-source ini sejak tahun 90-an, menggunakan pengkodean Huffman alih-alih kode Morse.

Andy Thomas
sumber
2
Sama-sama, terima kasih atas pertanyaannya. Memberi saya kesempatan untuk memikirkan spasi kode-Morse.
Andy Thomas
1
Setiap IDE Java dapat memformat kode dengan menghapus semua karakter yang tidak terlihat ;-) Masih ide kode-morse bagus :-)
Prakash K
5
Ekstensi: Dalam literal string apa pun, ganti beberapa yang kosong dengan karakter yang terlihat seperti kosong. Seperti karakter # 255 di ASCII, atau "kosong yang tidak bisa dibuka" di unicode. Kebanyakan pemula tidak akan mencatat perbedaannya, dan ini akan memungkinkan Anda untuk menunjukkan siapa (mungkin!) Yang mencuri sumber Anda.
TheBlastOne
@PrakashK - Ya, itu akan melawan tindakan ini. Kombinasi tindakan mungkin yang terbaik.
Andy Thomas
@TheBlastOne - Ide bagus. Tidak dengan sendirinya mengidentifikasi Anda, tetapi tidak hilang jika pencuri memformat ulang.
Andy Thomas
19

Sepertinya masalah administrasi TI bagi saya. Setiap siswa harus memiliki area unggahan sendiri yang tidak dapat diakses oleh siswa lain.

Guru akan menjadi level yang lebih tinggi, dapat mengakses setiap folder unggahan siswa. Jika ini tidak memungkinkan, gunakan jawaban @exabrial karena itu adalah solusi paling sederhana.

Jon Raynor
sumber
9

Hal terbaik yang dapat Anda lakukan adalah dengan memasukkan kode sumber dengan kata sandi dan mengirimkan kata sandi tersebut ke guru melalui pos.

Masalah terpecahkan.

Omid
sumber
2
1 untuk solusi sederhana. Jangan terlalu memaksakannya. Tapi tanyakan pada profesor apakah dia setuju dengan ini dulu.
Eduardo
6

Gunakan sistem kontrol versi terdistribusi (= mandiri) , seperti git . Semoga bermanfaat juga.

Riwayat versi dengan nama Anda, dan tanggalnya mungkin cukup meyakinkan.

Joop Eggen
sumber
2
Tapi OP tidak gagal membuktikan bahwa sumbernya diciptakan olehnya. Dia kesulitan membuktikan bahwa teman sekolah menggunakan sumbernya untuk sumber mereka.
TheBlastOne
2
VCS terdistribusi cukup kompleks. Yang dibutuhkan penulis hanyalah membuktikan keaslian konten dan / atau penggandaan. Ini dapat dilakukan dengan mekanisme pengiriman file apa pun yang memberi stempel waktu pengiriman, mengidentifikasi pengirim, dan tidak mengizinkan siswa untuk menghapus kiriman. Ini dapat dilakukan dengan sesuatu yang sederhana seperti FTP atau server web.
Nick P
1
Sangat mudah untuk menulis skrip yang akan memindai log komit dan membuat ulang repo baru dengan riwayat yang sama tetapi pengguna yang berbeda.
mikerobi
@mikerobi git filter-branchdibangun untuk hal-hal gila seperti itu, itu seharusnya tidak mudah
Izkata
@Izkata, saya tidak mempertimbangkan kemungkinan untuk mengubah riwayat revisi. Saya sedang memikirkan skrip yang memeriksa revisi pertama dan memasukkannya ke repo lain, kemudian memeriksa revisi kedua dan menambal repo baru, ulangi. Mirip dengan bagaimana beberapa alat untuk mengkonversi dari satu VCS ke pekerjaan lain.
mikerobi
3

Apa yang dicuri?

  • Sumber ? Anda dapat meletakkan String acak di dalamnya (tetapi dapat diubah). Anda juga dapat mencoba menambahkan perilaku khusus yang hanya tahu dari Anda (penekanan tombol khusus akan mengubah baris warna), Anda kemudian dapat bertanya kepada guru "yang lain tahu kombo khusus ini?". Cara terbaik adalah dengan menghentikan program jika file kosong yang tidak berguna tidak ada dalam arsip setelah 5 menit aktivitas, teman sekolah Anda akan terlalu malas untuk menunggu selama ini.

  • Biner? Membandingkan checksum setiap .class saja sudah cukup (teman sekolah Anda terlalu malas untuk menulis ulang file kelas)

Kartoch
sumber
2

Kirimkan saja solusi Anda pada menit terakhir. Ini tidak akan memberi waktu kepada siapa pun untuk menyalinnya.

Dan kirimkan masukan kepada administrator untuk melarang siswa melihat tugas siswa lainnya.

Eduardo
sumber
1

Jika Anda mengunggah file dalam .zip dengan enkripsi kata sandi, siapa pun dapat memecahkan kata sandi dengan mengunduh file .zip dan meminta cpu mereka menjalankan jutaan kueri jika mereka adalah pencuri curang sebesar itu. Sayangnya, ada beberapa dan mudah dilakukan.

Sumber Anda dapat dilihat di server bersama oleh siswa lain. Guru harus benar-benar memberi Anda direktori terenkripsi sandi Anda sendiri untuk diunggah. Ini dapat dilakukan dengan mudah hanya dengan menambahkan subdomain. Tetapi mungkin guru mengizinkan Anda untuk mengunggah file ke server Anda sendiri agar dia dapat mengaksesnya di sana.

Skrip juga dapat disamarkan sehingga memiliki document.write ('Halaman ini ditulis oleh xxxxx'), memaksa siapa pun yang menyalin karya Anda agar tidak dapat menghapus kredit tersebut kecuali mereka mendekripsikannya terlebih dahulu. Tetapi jawaban sebenarnya adalah sekolah Anda perlu memberikan direktori yang dilindungi sandi kepada setiap siswanya.

michael d
sumber
0

Dalam kasus saya, guru saya datang dengan pendekatan yang lebih baik. Pertanyaan yang mereka berikan ada hubungannya dengan nomor registrasi kami. Ex:

Masukan untuk suatu fungsi / teori adalah nomor Registrasi kita yang berbeda-beda untuk setiap siswa

Jadi, jawaban atau pendekatan solusi relatif berbeda dari setiap siswa. Hal ini membuat semua siswa harus mengerjakan pekerjaan rumahnya sendiri, atau setidaknya mengenal cara hack pendekatan dengan registrasi sendiri [itu mungkin lebih sulit daripada mempelajari lesi;)].

Hope your lecturer will read this thread before his next tutorial :D
Chand Priyankara
sumber