Lindungi .NET code dari reverse engineering?


491

Kebingungan adalah salah satu cara, tetapi tidak dapat melindungi dari melanggar keamanan perlindungan pembajakan aplikasi. Bagaimana saya memastikan bahwa aplikasi tersebut tidak dirusak, dan bagaimana saya memastikan bahwa mekanisme pendaftaran tidak dapat direkayasa balik?

Juga dimungkinkan untuk mengonversi aplikasi C # ke kode asli, dan Xenocode terlalu mahal.

C # menyediakan banyak fitur, dan merupakan bahasa yang ideal untuk kode saya, jadi menulis seluruh basis kode lagi di C ++ tidak mungkin.

Sertifikat aman dapat dengan mudah dihapus dari majelis yang ditandatangani di .NET.



@ Andreas: Ini luar biasa !! Saya akan mencoba. Adakah yang menggunakannya?
Jack

1
@Jack hanya untuk aplikasi window store. Tidak ada batas waktu untuk aplikasi desktop (sejauh yang saya tahu).
Tyler Long

Jika Anda ingin yang asli tanpa C ++ kuno, gunakan Delphi. Kemudahan. Net datang dari Delphi.
William Egge

Jawaban:


671

Kamu tidak bisa

Ada langkah-langkah yang dapat Anda ambil untuk membuatnya sedikit lebih sulit, tetapi pada akhirnya semua executable pada mesin lokal dapat dipecahkan. Akhirnya, kode itu harus dikonversi menjadi kode mesin asli dan setiap aplikasi yang dapat dijalankan rentan.

Yang ingin Anda lakukan hanyalah membuatnya cukup sulit untuk retak sehingga tidak sepadan dengan masalah orang.

Beberapa saran yang saya miliki agar Anda membantu melindungi aplikasi Anda:

  • Mengaburkan kode Anda. Dotfuscator memiliki edisi gratis dan dilengkapi dengan Visual Studio.
  • Gunakan kunci publik / pribadi atau enkripsi asimetris untuk menghasilkan lisensi produk Anda. Ini memastikan bahwa hanya Anda yang dapat membuat kode lisensi Anda. Bahkan jika aplikasi Anda di - crack, Anda dapat yakin bahwa mereka tidak akan merilis generator kunci untuk aplikasi Anda, karena tidak mungkin untuk membalikkan algoritma penghasil kunci.
  • Gunakan pengemas pihak ketiga untuk mengemas .NET Anda yang dapat dieksekusi ke dalam aplikasi pembungkus Win32 terenkripsi. Themida adalah salah satu yang lebih baik. Ini menghentikan orang untuk merefleksikan aplikasi Anda di .NET Reflector dan membuatnya susah untuk membongkar untuk dibalik.
  • Tulis pengepak khusus Anda sendiri . Jika paket pihak ketiga terlalu mahal, pertimbangkan untuk menulis sendiri. Terkadang pengepakan khusus bisa sangat efektif, karena tidak ada metode yang dipublikasikan dengan baik tentang cara membongkar mereka. Tutorial Cara menulis paket Anda sendiri memberikan banyak informasi yang baik tentang penulisan paket Win32 Anda sendiri.

Pada akhirnya, jika orang ingin aplikasi Anda retak, mereka akan melakukannya. Lihatlah semua perangkat lunak komersial di luar sana yang memiliki sejumlah besar sumber daya untuk melindungi aplikasi mereka, namun mereka retak sebelum aplikasi bahkan dirilis ke publik.

Seorang insinyur balik yang terampil dapat menjalankan IDA-Pro dan mengiris aplikasi Anda seperti mentega apa pun yang Anda lakukan. Aplikasi yang dikemas dapat dibongkar dan kebingungan hanya mencegahnya berjalan-jalan di taman. Semua kerja keras Anda dengan kode lisensi kompleks Anda dapat dibatalkan dengan tambalan byte tunggal.

Anda hanya perlu menerima bahwa ada kemungkinan orang akan membajak perangkat lunak Anda. Ada beberapa orang yang tidak akan pernah membayar untuk aplikasi Anda tidak peduli apa dan ini adalah orang-orang yang tidak perlu Anda khawatirkan.

Namun ada, banyak bisnis di luar sana yang tidak akan pernah mengambil risiko gugatan dan dengan senang hati membeli lisensi perangkat lunak dan banyak pengguna komputer yang tidak ingin mengambil risiko, menemukan kesalahan atau tidak cukup teknologi untuk bajak laut. Ini adalah pelanggan sejati Anda, dan Anda harus memfokuskan upaya Anda untuk memberi mereka pengalaman pengguna yang baik dan mengabaikan orang-orang yang meretas perangkat lunak Anda.

Saya sudah memiliki aplikasi saya bajakan sebelumnya, dan saya menganggapnya sebagai penghinaan pribadi. Di sinilah saya, seorang pengembang kecil-kecilan, mencurahkan hati dan jiwa saya ke dalam sebuah aplikasi dan orang-orang ini memiliki keberanian untuk membajak dariku ?! Mereka mengambil uang langsung dari sakuku!

Saya segera menambahkan banyak kode DRM yang kejam dan berusaha menyabot orang menggunakan salinan yang tidak sah atau retak. Tentu saja saya seharusnya bekerja untuk membuat aplikasi saya lebih baik daripada mencoba menghentikan yang tak terhindarkan. Bukan hanya itu, tetapi saya telah menyakiti pelanggan sejati saya akan semua perlindungan ekstra yang saya lakukan.

Setelah pertempuran panjang, saya menyadari bahwa saya berjuang melawan arus dan selama ini terbuang sia-sia. Saya mengeluarkan semua kode telepon-rumah kecuali untuk fungsi lisensi barebones dan tidak pernah melihat ke belakang.


67
Jadi +1 itu hampir +2. Saya berharap lebih banyak orang akhirnya mendapatkan bahwa Anda tidak dapat melindungi perangkat lunak Anda terhadap penyerang yang gigih.
Bombe

102
Anda telah mencapai perlindungan perangkat lunak nirwana: ini bukan tentang menambahkan lebih banyak perlindungan, ini tentang berfokus pada produk dan membuatnya begitu baik sehingga orang INGIN membayarnya. Dan bagi mereka yang membajaknya, mereka tidak akan pernah membayar, jadi seolah-olah mereka tidak pernah ada.
Arthur Chaparyan

6
@Arthur Chaparyan, saya setuju. Butuh waktu lama untuk sampai di sini, tetapi akhirnya saya melihat cahaya. Saya menyusuri jalan perlindungan yang lebih ketat dan melawan kerupuk. Saya belajar semua yang saya bisa tentang rekayasa terbalik dalam upaya untuk mencegah saya sendiri. Saya akhirnya menemukan ideologi yang tepat
mmcdole

50
Neraka Aku telah dihormati untuk mengetahui seseorang berpikir perangkat lunak saya layak membajak ...
Erik Forbes

10
Ketika Anda mulai mengandalkan penjualan perangkat lunak Anda untuk sebagian besar penghasilan Anda, itu mengubah banyak hal. Rasanya seperti seseorang mencuri dari Anda. Saya mengerti apa yang Anda katakan. Saya terkejut ketika saya pertama kali menemukan celah untuk perangkat lunak saya di situs torrent.
mmcdole

265

Anda tidak dapat sepenuhnya mengamankan aplikasi apa pun (dikelola atau tidak). Jika sistem seperti Playstation dan iPad bisa retak - di mana vendor bahkan mengontrol perangkat keras - harapan apa yang dimiliki aplikasi Anda? Untungnya, Anda tidak benar-benar menginginkannya. Menurut pendapat saya, Anda hanya perlu mengamankan aplikasi Anda sehingga seseorang tidak dapat secara tidak sengaja membajak produk Anda, dan tidak lebih.

Misalnya, jika Anda menggunakan lisensi per-mesin, itu tidak seharusnya hanya berfungsi ketika Anda menginstalnya pada mesin kedua yang baru. Anda akan menginginkan pesan kesalahan yang baik untuk mencegah panggilan dukungan tambahan, tetapi jangan menghabiskan waktu ekstra membuatnya terlalu sulit untuk bekerja di sekitar dan jangan memukul pengguna di atas kepala dengan itu.

Contoh lain adalah uji coba terbatas waktu. Bahkan jangan khawatir tentang hal-hal sederhana seperti jika pengguna dapat memutar kembali jam sistem. Seseorang yang mengetahui bahwa mereka melanggar lisensi Anda, dan selama seorang pengguna tahu kapan mereka melakukan pelanggaran, Anda sudah cukup melakukannya.

Anda harus melakukan ini karena pengguna tidak peduli dengan lisensi Anda. Lisensi adalah hal-hal yang dibuat-buat yang tidak ada yang dipedulikan sampai mereka perlu. Tidak ada yang membacanya, dan mereka seharusnya tidak perlu. Oleh karena itu cara terbaik untuk memberi tahu pengguna di mana batasannya adalah jika perilaku out-of-the-box untuk aplikasi Anda sesuai dengan lisensi. Dalam kasus pertama ini berarti gagal menginstal atau menginstal dalam mode versi percobaan untuk kedua kalinya. Untuk yang terakhir, itu mungkin hanya berarti memeriksa tanggal teks biasa dalam file konfigurasi. Bagaimanapun, pastikan Anda menanganinya dengan cara yang elegan, membantu, dan penuh hormat.

Jadi itu menjelaskan apa artinya melakukan sebanyak itu. Tapi mengapa tidak melangkah lebih jauh? Mengapa tidak pasang setiap lubang kecil yang bisa Anda temukan? Jawabannya ada dalam dua bagian. Pertama, jika seseorang akan menyeberangi ambang etis sadar melanggar persyaratan lisensi Anda - bahkan dengan cara yang sederhana - mereka juga akan bersedia melakukan sesuatu yang lebih sulit atau berbahaya seperti pull aplikasi Anda dari torrentsitus - dan ada sejumlah bahaya yang terlibat dalam menjalankan aplikasi yang diunduh dari sumber yang tidak terpercaya. Membuatnya semakin sulit hanyalah gangguan kecil bagi para pengguna ini dan berisiko menyebabkan masalah dengan pelanggan Anda yang membayar. Menjaga tetap sederhana dapat mencegah seseorang menggali aplikasi Anda dan melepaskan celah yang lebih komprehensif. Kedua, Anda hanya memiliki sedikit mata untuk mencari kekurangan; peretas memiliki banyak, dan mereka lebih banyak berlatih menemukan mereka. Anda hanya perlu kehilangan satu kesalahan kecil, dan aplikasi Anda akan memiliki distribusi yang sama di situs bajak laut seolah-olah Anda tidak melakukan apa pun. Anda harus benar setiap saat; mereka hanya harus beruntung sekali. Jadi upaya yang diperlukan sangat tinggi, dan kemungkinan ukuran keberhasilan sangat rendah.

Pada akhirnya, jika seseorang ingin membajak aplikasi Anda (bukan hanya menggunakannya), dan itulah tujuan utama mereka, mereka akan melakukannya. Tidak ada yang bisa Anda lakukan untuk menghentikan mereka. Ini adalah sifat perangkat lunak; sekali file yang membentuk produk Anda ada di komputer pengguna, mereka akan dapat melakukannya dengan yang mereka inginkan. Ini sangat relevan di lingkungan yang dikelola seperti Java atau .NET , tetapi jelas berlaku untuk kode asli juga. Waktu ada di pihak mereka, dan diberi waktu yang cukup keamanan digital apa pun bisa dipatahkan.

Karena Anda tidak dapat menghentikan pengguna dari membajak produk Anda, tindakan terbaik Anda adalah melibatkan kelas pengguna ini dengan cara menggunakannya untuk keuntungan Anda. Seringkali mungkin membuat mereka bekerja untuk Anda daripada melawan Anda. Dengan mengingat hal itu, apa pun aplikasi Anda, mungkin ada baiknya menyimpan versi gratis yang hampir sepenuhnya berfungsi dan tidak kedaluwarsa. Perbedaan bahkan antara label harga US $ 1 dan gratis sangat besar, jika tanpa alasan lain selain itu pelanggan tidak perlu mempercayai Anda dengan kartu kredit mereka. Edisi gratis produk Anda tidak hanya akan secara efektif membunuh distribusi bajakan (mengapa harus mengambil risiko versi bajakan ketika Anda bisa mendapatkan harga yang sama?), Tetapi berpotensi untuk memperluas audiensi Anda secara dramatis.

Hasilnya adalah bahwa Anda mungkin perlu menaikkan harga edisi berbayar, sehingga pada akhirnya alih-alih 2.000 pengguna dengan $ 20 masing-masing Anda memiliki 100.000 pengguna gratis, di mana 500 bersedia membayar $ 99 untuk edisi "profesional" . Ini memberi Anda lebih banyak uang daripada jika Anda menghabiskan banyak waktu mengunci produk Anda. Lebih dari itu, Anda dapat melibatkan pengguna gratis ini dan meningkatkan hubungan dengan beberapa cara penting.

Salah satunya adalah dukungan. Seorang pesimis akan mengambil kesempatan ini untuk mengeluh tentang peningkatan biaya mendukung 100.000 pengguna gratis, tetapi sesuatu yang luar biasa terjadi: produk Anda menjadi mandiri. Anda melihat ini sepanjang waktu dengan proyek open source besar yang tidak memiliki uang untuk biaya dukungan. Pengguna akan melangkah dan mewujudkannya.

Pengguna gratis umumnya telah mengurangi harapan dukungan untuk memulai, dan untuk alasan yang baik. Yang perlu Anda lakukan adalah menandai edisi gratis karena hanya memenuhi syarat untuk dukungan komunitas dan memasang forum online yang dimoderasi pengguna untuk tujuan itu. Basis pengetahuan dukungan Anda bersifat swasembada, dan pengguna tingkat lanjut akan menggembalakan mereka yang membutuhkan pegangan tangan atas nama Anda. Yang lebih penting lagi, ini akan memungkinkan Anda untuk mengidentifikasi dan memperbaiki bug lebih cepat, pada akhirnya meningkatkan kualitas produk Anda dan menurunkan total biaya dukungan. Ini tidak mungkin dilakukan sebelumnya karena basis pengguna Anda tidak cukup besar, tetapi ketika Anda memperlakukan pengguna gratis sebagai pelanggan itu bisa bekerja dengan sangat baik.

Lainnya adalah umpan balik. Dengan menonton forum Anda, Anda mempelajari ide-ide peningkatan penting yang mungkin tidak pernah Anda pertimbangkan sebelumnya. Ini memungkinkan Anda untuk akhirnya mengubah lebih banyak pengguna gratis Anda menjadi pengguna berbayar dan menciptakan produk yang lebih menarik yang akan menarik lebih banyak audiens.

Akhirnya, Anda perlu mempertimbangkan pemasaran. Semua pengguna gratis ini sekarang adalah penggemar, bukan musuh, dan mereka akan bertindak sesuai. Bukan hanya itu, tetapi ketika tiba saatnya untuk merilis versi Anda berikutnya, para pengguna ini semua akan pergi melalui saluran distribusi yang Anda setujui, daripada beberapa mekanisme lain yang tidak diketahui. Itu berarti untuk versi Anda berikutnya, Anda mulai terhubung dengan audiens yang lebih besar, sangat tertarik dan mendukung.

Fitur terbaik untuk dicadangkan untuk edisi profesional adalah alat yang ditujukan untuk memudahkan penerapan dan manajemen perusahaan. Seorang cracker tidak akan melihat ini sebagai alasan yang cukup kuat untuk meretasnya untuk penggunaannya sendiri, tetapi untuk bisnis yang ingin membeli 300 lisensi dan mendorongnya ke seluruh perusahaan, ini adalah must-have. Tentu saja, edisi profesional akan tetap dibajak, tetapi sekali lagi: jangan berkeringat karena Anda mungkin tidak akan dapat menjual produk tersebut kepada para perompak itu apa pun yang Anda lakukan, jadi itu tidak membebani Anda pendapatan apa pun .

Meskipun secara psikologis mungkin sulit untuk memberikan produk Anda sebanyak ini, semoga Anda dapat memahami bagaimana itu benar-benar cara terbaik untuk pergi. Tidak hanya itu, itu satu-satunya cara untuk pergi dalam jangka panjang. Saya tahu seseorang di luar sana berpikir bahwa mereka tidak ingin melakukannya dengan cara ini. Lagipula, mereka berhasil menjual produk $ 20 yang terkunci selama bertahun-tahun. Tapi itu terlalu buruk, karena jika Anda tidak melakukannya dengan cara ini, pada akhirnya orang lain akan melakukannya . Dan produk mereka akan sama baiknya dengan milik Anda, atau cukup dekat sehingga mereka dapat mengklaim hal itu. Lalu tiba-tiba harga Anda terlihat keterlaluan, penjualan menurun drastis, dan tidak ada lagi yang bisa Anda lakukan. Anda dapat memilih tingkat menengah tambahan jika harus, tetapi tidak mungkin membantu Anda.


1
@Pelajaran: itu agak tumbuh dari waktu ke waktu dan melewati konversi otomatis ke ambang batas CW.
Joel Coehoorn

1
+1 Lebih baik daripada jawaban yang saya berikan ke versi sebelumnya dari pertanyaan ini. @ Joel Tidak tahu ada batasnya.
pipTheGeek

1
Saya tidak sepenuhnya setuju dengan semua yang ada di sini, dan ini +1 yang mudah untuk presentasi dan argumen yang dipikirkan dengan sangat baik.
Beska

2
Argumen yang bagus, tetapi melewatkan poin tentang melindungi kekayaan intelektual. Jika aplikasi Anda memiliki beberapa kode yang melakukan sesuatu yang agak rumit, kebingungan dapat memberikan perbedaan antara menyalin dan menempelkan kode, dan mencoba menafsirkan dan merekayasa ulang kode agar berfungsi. Ini sangat penting dengan pembaruan: jika seseorang telah menyalin kode Anda yang dikaburkan, ketika Anda merilis pembaruan, mereka harus melakukannya lagi - dan paling tidak, itu menyebabkan mereka lebih sakit / biaya / waktu. Jika Anda tidak memproteksi dalam beberapa cara, mereka hanya menyalin / menempel lagi dan berfungsi.
gregmac

4
Great post - benar-benar masuk ke semua detail yang tepat tentang alasan mengapa tidak perlu repot untuk menulis perlindungan salinan yang kompleks. Meskipun pertanyaannya adalah duplikat, ada baiknya dibuka kembali hanya untuk jawaban ini. Mungkin seorang mod dapat menggabungkannya?
EMP

45

Dalam pengalaman saya, membuat aplikasi atau pustaka Anda lebih sulit untuk dirusak akan menyakiti pelanggan jujur ​​Anda sementara hanya sedikit menunda yang tidak jujur. Berkonsentrasilah untuk membuat produk gesekan yang hebat dan rendah alih-alih berusaha keras untuk menunda hal yang tak terhindarkan.


38

Rahasia yang Anda bagikan dengan banyak orang bukanlah rahasia. Jika Anda memiliki hal-hal rahasia dalam kode Anda, mengaburkannya bukan perlindungan; itu hanya harus didobobekan sekali . Jika Anda memiliki rahasia yang tidak ingin Anda bagikan dengan pelanggan Anda, maka jangan membaginya dengan pelanggan Anda . Tulis kode Anda sebagai layanan web dan simpan kode super rahasia Anda di server Anda sendiri, di mana hanya Anda yang dapat melihatnya.


1
Btw saya melakukan proyek di mana saya ingin mengaktifkan produk "offline" juga. (Saya membuat layanan WCF untuk mengaktifkan online). Dalam hal ini bagaimana Anda akan memanipulasi kode? bisakah kamu memberi saya beberapa hit?
Piyush

1
Ide yang menarik, tetapi tindakan apa yang akan Anda rekomendasikan kepada seseorang yang mengembangkan aplikasi yang harus berjalan tanpa koneksi data, seperti game WP7?
Charlie Skilbeck

23

Secara garis besar, ada tiga kelompok orang di luar sana.

  • Mereka yang tidak akan membeli perangkat lunak Anda dan menggunakan celah, atau jika mereka tidak menemukan, tidak menggunakan perangkat lunak Anda sama sekali. Jangan berharap menghasilkan uang dari grup ini. Mereka bergantung pada keterampilan mereka sendiri atau pada cracker (yang cenderung memprioritaskan waktu mereka tergantung pada kegunaan Anda dan seberapa besar audiens Anda. Semakin bermanfaat, semakin cepat crack akan tersedia).

  • Kelompok pengguna yang sah yang akan membeli (membayar) perangkat lunak Anda, terlepas dari mekanisme perlindungan apa yang Anda gunakan. Jangan membuat hidup susah bagi pengguna sah Anda dengan menggunakan mekanisme perlindungan yang rumit karena mereka akan membayar untuk hal apa pun. Mekanisme perlindungan yang kompleks dapat dengan mudah merusak pengalaman pengguna dan Anda tidak ingin ini terjadi pada grup ini. Secara pribadi, saya akan menentang solusi perangkat keras apa pun, yang menambah biaya perangkat lunak Anda.

  • Minoritas yang akan menggunakan crack "tidak etis" dan hanya akan membayar perangkat lunak Anda karena fitur-fiturnya dilindungi oleh mekanisme lisensi. Anda mungkin tidak ingin membuatnya sangat mudah bagi grup ini untuk menghindari perlindungan Anda. Namun, semua upaya yang Anda habiskan untuk melindungi perangkat lunak Anda akan membayar kembali, tergantung pada seberapa besar kelompok orang ini. Ini sepenuhnya tergantung pada jenis perangkat lunak yang Anda buat.

Mengingat apa yang Anda katakan, jika Anda berpikir ada minoritas yang cukup besar yang dapat didorong untuk membeli perangkat lunak Anda, silakan dan terapkan beberapa bentuk perlindungan. Pikirkan tentang berapa banyak uang yang dapat Anda hasilkan dari minoritas ini dibandingkan dengan waktu yang Anda habiskan untuk perlindungan, atau jumlah yang Anda habiskan untuk API / alat perlindungan pihak ketiga.

Jika Anda ingin menerapkan solusi Anda sendiri, menggunakan kriptografi kunci publik adalah cara yang baik (bukan algoritma simetris) untuk mencegah peretasan yang mudah. Misalnya Anda dapat menandatangani lisensi Anda secara digital (no seri, atau file lisensi). Satu-satunya cara untuk menyiasatinya adalah dengan mendekompilasi, mengubah, dan mengkompilasi ulang kode (yang dapat membuat Anda lebih sulit menggunakan teknik seperti yang disarankan dalam jawaban Simucal).


Menggunakan kriptografi yang kuat untuk melindungi / memverifikasi lisensi Anda sama sekali tidak berguna jika seseorang merobek kode yang membatalkan aplikasi jika lisensi tidak memeriksa. :)
Bombe

Setuju, tapi seperti yang saya katakan, perlindungan bukan untuk kelompok pengguna yang akan menggunakan celah (asumsi yang saya buat akan ada).
Mystic

kriptografi kunci publik = kriptografi asimetris. Saya pikir maksudmu simetris.
mmcdole

1
Agar adil, poin ketiga bias karena menganggap bahwa sebagian orang selalu minoritas. Saya cukup yakin di bawah kerangka kerja tertentu itu adalah mayoritas yang jelas. Saya memiliki game online dengan fitur banyak pemain dalam pikiran karena a) sebagian besar pengguna adalah anak-anak dengan standar etika yang sangat rendah b) biaya dapat menjadi signifikan bagi para pengguna jika itu adalah biaya bulanan yang diperlukan selama berbulan-bulan dll.
j riv

19

Anda tidak dapat mencegah orang lain dari merusak perangkat lunak Anda.

Namun, Anda dapat membuatnya membuat retakan yang akan mengurangi penjualan Anda. Pembuat kunci yang dapat mengeluarkan kode registrasi yang valid untuk perangkat lunak Anda jauh lebih buruk daripada tambalan sederhana yang menghapus insentif pendaftaran dari perangkat lunak Anda. Itu karena celah hanya akan berfungsi untuk satu versi perangkat lunak, dan akan berhenti bekerja dengan pembaruan perangkat lunak berikutnya yang Anda rilis. Pembuat kunci akan terus bekerja sampai Anda mengubah algoritma kunci pendaftaran Anda dan itu adalah sesuatu yang tidak ingin Anda lakukan sering karena itu akan menunda klien jujur ​​Anda.

Jadi, jika Anda mencari metode untuk melawan pembuat kunci ilegal untuk perangkat lunak Anda dan Anda tidak ingin menggunakan enkripsi asimetri karena kode registrasi panjang yang dihasilkan ini, Anda mungkin melihat Verifikasi Kunci Parsial.

Verifikasi Kunci Sebagian memastikan bahwa setiap pembuat kunci ilegal hanya berfungsi untuk satu rilis perangkat lunak Anda. Pada dasarnya yang Anda lakukan adalah memastikan bahwa setiap rilis perangkat lunak Anda hanya terhubung dengan kode untuk memeriksa BEBERAPA digit kode registrasi. Digit mana yang sebenarnya acak, sehingga cracker harus merekayasa balik banyak versi berbeda dari perangkat lunak Anda dan menggabungkan semua ini menjadi satu keygenerator untuk merilis keygenerator yang berfungsi untuk semua versi perangkat lunak Anda.

Jika Anda merilis versi perangkat lunak baru secara teratur, ini menyebabkan sejumlah keygenerator tersebar di semua jenis arsip pembajakan perangkat lunak yang tidak berfungsi lagi. Pembajak perangkat lunak potensial biasanya mencari celah atau keygen untuk versi terbaru, sehingga mereka kemungkinan akan mencoba beberapa dari mereka dan akhirnya menyerah.

Saya telah menggunakan Verifikasi Kunci Sebagian dalam game shareware (C ++) saya yang lebih baru dan sangat efektif. Sebelumnya kami punya banyak masalah dengan keygenerator yang tidak bisa kami lawan. Setelahnya ada banyak celah dan beberapa keygenerator yang hanya berfungsi untuk versi tertentu dari permainan, tetapi tidak ada generator kunci yang akan bekerja dengan semua versi. Kami secara teratur merilis pembaruan game yang sangat kecil dan membuat semua retakan yang ada sebelumnya tidak berguna.

Tampaknya ada open source .NET framework untuk Verifikasi Kunci Parsial , meskipun saya belum mencobanya.


1
seperti idenya, Anda juga dapat menggunakan kata sandi yang berbeda untuk enkripsi asimetri dalam rilis yang berbeda.
Priyank Bolia

Ide yang menarik, tapi apa sebenarnya masalah dengan kode registrasi yang panjang? Sekarang tidak ada yang mau memasukkannya dengan tangan - semua orang akan menyalin dan menempelkannya, jadi apakah itu 10 karakter atau 100 karakter tidak akan ada bedanya.
EMP

4
@ Evgeny: Itu hanya benar jika pengguna Anda adalah pengguna yang kuat. Kami telah membuat game shareware / kasual selama bertahun-tahun dan saya dapat memberi tahu Anda bahwa sebagian besar pengguna kami tidak dapat menyalin dan menempel. Jendela registrasi bahkan dilengkapi dengan manual tentang cara menyalin dan menempel, dan beberapa bahkan tidak melakukannya setelah membacanya.
Adrian Grigore

Wow! OK, well, Anda jelas memiliki pengalaman lebih dari saya dalam hal ini, jadi saya tidak bisa berdebat, saya hanya bisa mengatakan saya terkejut. Tetapi saya akan mengatakan bahwa jika mereka tidak tahu cara menyalin dan menempel maka Anda harus membuat kode 200 karakter, sehingga mereka belajar keterampilan komputer umum yang sangat berguna. :)
EMP

1
@ Evgeny: Bahkan dengan kode registrasi pendek, kami masih mendapat banyak e-mail dari orang-orang yang salah ketik kode mereka dan oleh karena itu berpikir bahwa kode tidak dapat valid karena mereka tidak akan pernah membuat kesalahan seperti ini beberapa kali dalam baris. Saya lebih suka meninggalkan pengajaran IT ke perusahaan lain ... :-)
Adrian Grigore

16
  • Gunakan pembaruan online untuk memblokir salinan yang tidak berlisensi itu.

  • Verifikasi nomor seri dari berbagai modul aplikasi Anda dan jangan gunakan panggilan fungsi tunggal untuk melakukan verifikasi (sehingga cracker tidak dapat mem-bypass verifikasi dengan mudah).

  • Tidak hanya memeriksa nomor seri saat startup, lakukan verifikasi sambil menyimpan data, lakukan setiap Jumat malam, lakukan ketika pengguna menganggur ...

  • Verifikasi jumlah pemeriksaan file aplikasi, simpan jumlah pemeriksaan keamanan Anda di tempat yang berbeda.

  • Jangan melangkah terlalu jauh dengan trik semacam ini, pastikan aplikasi Anda tidak pernah crash / mengalami kegagalan fungsi saat memverifikasi kode registrasi.

  • Membangun aplikasi yang bermanfaat bagi pengguna jauh lebih penting daripada membuat
    biner yang tidak bisa dipecahkan untuk cracker.


14

Kamu bisa..

Microsoft SLP Services Potensi Perangkat Lunak InishTech menawarkan kemampuan untuk membantu melindungi kode tanpa memengaruhi fungsionalitas aplikasi Anda.

UPDATE: (Pengungkapan: Saya bekerja di Eazfuscator.NET) Apa yang membuat Potensi Perangkat Lunak Layanan SLP Microsoft berbeda adalah kemampuan untuk mengotomatiskan kode, sehingga Anda pasti bisa . Beberapa tahun berlalu sejak pertanyaan awalnya diajukan; hari ini ada lebih banyak produk yang tersedia yang juga bekerja dengan dasar yang sama seperti:


2
harga teman saya, membeli perangkat lunak lisensi dari Microsoft terlalu mahal untuk ISV normal
Priyank Bolia

Saya sudah mencobanya, ini bekerja dengan sangat baik tetapi hanya mengenkripsi kode di dalam metode bukan seluruh perakitan atau proyek, sehingga cracker dapat dengan mudah mengubah aliran program dengan injeksi IL
Mohsen Afshin

@ogggre Jika menambahkan tautan vendor, Anda benar-benar perlu mengungkapkan koneksi Anda di pos. Juga versi SLPS yang saat ini tersedia (yang saya kerjakan: D) mendukung generik. Secara alami semua solusi memiliki pro dan kontra masing-masing yang hanya dapat dievaluasi dengan benar oleh eval
Ruben Bartelink

@MohsenAfshin Saya tidak mengerti apa yang Anda katakan - intinya adalah bahwa Anda perlu melindungi metode apa pun di mana penambahan / penghapusan / perubahan IL akan mewakili pelanggaran lisensi. Karena virtualisasi tidak bisa gratis, tidak masuk akal untuk 'melindungi semuanya secara ajaib' seperti yang Anda sarankan. Kembali ke poin utama: Tujuan Perlindungan SP adalah untuk mencegah perubahan IL pada metode yang Anda pilih dengan dasar bahwa mereka sensitif (ditambah umumnya beberapa orang lain sebagai kebisingan untuk menghindari penanaman, Anda perlu memecahkan bagian ini di sini -> tandatangani )
Ruben Bartelink

1
@RubenBartelink Saya setuju dengan Anda. Sayangnya utas ini terlalu besar dengan beberapa halaman konten. Pada awalnya saya ingin menambahkan jawaban baru tetapi StackOverflow menyarankan bahwa lebih baik untuk memperpanjang yang sudah ada. Jadi saya lakukan. Semoga sedikit informasi saya bermanfaat. Terima kasih atas pembaruan tentang dukungan umum di SLPS dan koreksi Anda.
ogggre

10

.NET Reflector hanya dapat membuka "kode terkelola" yang pada dasarnya berarti ".NET code". Jadi Anda tidak dapat menggunakannya untuk membongkar file COM DLL, asli C ++, kode Visual Basic 6.0 klasik , dll. Struktur kode .NET yang dikompilasi membuatnya sangat nyaman, portabel, dapat ditemukan, dapat diverifikasi, dll. NET Reflector mengambil keuntungan dari ini untuk memungkinkan Anda mengintip ke dalam kumpulan yang dikompilasi tetapi dekompiler dan disassembler sama sekali tidak spesifik untuk .NET dan telah ada selama kompiler ada.

Anda dapat menggunakan obfuscator untuk membuat kode lebih sulit dibaca, tetapi Anda tidak bisa mencegahnya dari dekompilasi tanpa membuatnya tidak dapat dibaca oleh .NET. Ada beberapa produk di luar sana (biasanya mahal) yang mengklaim untuk "menautkan" aplikasi kode terkelola Anda ke dalam aplikasi kode asli, tetapi bahkan jika ini benar-benar berfungsi, orang yang gigih akan selalu menemukan jalan.

Namun ketika menyangkut kebingungan, Anda mendapatkan apa yang Anda bayar. Jadi, jika kode Anda sangat eksklusif sehingga Anda harus berusaha keras untuk melindunginya, Anda harus bersedia menginvestasikan uang dalam obfuscator yang bagus.

Namun, dalam 15 tahun pengalaman saya dalam menulis kode, saya menyadari bahwa menjadi terlalu protektif terhadap kode sumber Anda adalah buang-buang waktu dan memiliki sedikit manfaat. Hanya mencoba membaca kode sumber asli tanpa mendukung dokumentasi, komentar, dll. Bisa sangat sulit untuk dipahami. Tambahkan ke nama-nama variabel tidak masuk akal yang muncul dengan dekompiler dan kode spageti yang dibuat oleh obfuscator modern - Anda mungkin tidak perlu terlalu khawatir tentang orang yang mencuri kekayaan intelektual Anda.


9

Apakah ini benar-benar layak? Setiap mekanisme perlindungan dapat dipatahkan dengan tekad yang memadai. Pertimbangkan pasar Anda, harga produk, jumlah pelanggan, dll.

Jika Anda menginginkan sesuatu yang lebih dapat diandalkan maka turunkan kunci perangkat keras, tapi itu agak menyusahkan (bagi pengguna) dan lebih mahal. Solusi perangkat lunak mungkin hanya akan membuang-buang waktu dan sumber daya, dan satu-satunya hal yang akan mereka berikan kepada Anda adalah perasaan 'keamanan' yang salah.

Lebih banyak ide (tidak ada yang sempurna, karena tidak ada yang sempurna).

  • AntiDuplikasi
  • Mengubah bahasa, gunakan trik bagus yang penulis Skype digunakan
  • Server lisensi

Dan jangan buang terlalu banyak waktu karena kerupuk memiliki banyak pengalaman dengan teknik-teknik khas dan beberapa langkah di depan Anda. Kecuali Anda ingin menggunakan banyak sumber daya, mungkin ubah bahasa pemrograman (lakukan dengan cara Skype).


Jangan lupa bahwa sangat mungkin untuk menyerang bagian perangkat lunak dari kunci perangkat keras.
Magnus Hoff

Ya, itu benar, satu-satunya pilihan nyata adalah memiliki sebagian aplikasi diimplementasikan dalam perangkat keras (beberapa campuran aneh aplikasi perangkat lunak-VHDL misalnya). Ini juga akan menjadi meskipun crackable ...
Anonymous

Bagaimana dongle yang menerapkan strategi kunci publik / pribadi. Hanya kunci pribadi dongle yang dapat mendekripsi aplikasi dan menjalankannya.
mmcdole

Itulah yang biasanya dilakukan oleh kunci perangkat keras. Tetapi Anda bisa menyerang dongle - klon itu, atau perangkat lunak yang bertanggung jawab untuk berbicara dengan dongle (mengelak, menonaktifkan, dll).
Anonim

1
Dalam kasus saya itu benar-benar sepadan. Setelah saya menerapkan Verifikasi Kunci Sebagian dan mengubah skema kunci pendaftaran untuk produk yang sudah ada, penjualan naik secara signifikan. Semua perangkat lunak dapat dipecahkan, pertanyaannya adalah seberapa tinggi Anda meningkatkan standar untuk bajak laut perangkat lunak biasa.
Adrian Grigore

9

Jika Anda ingin orang lain dapat menjalankan kode Anda (dan jika tidak, lalu mengapa Anda menulisnya?), Maka CPU mereka harus dapat mengeksekusi kode Anda. Agar dapat menjalankan kode, CPU harus dapat memahaminya .

Karena CPU bodoh, dan manusia tidak, ini berarti bahwa manusia dapat memahami kode juga.

Hanya ada satu cara untuk memastikan bahwa pengguna Anda tidak mendapatkan kode Anda: jangan berikan kode Anda.

Ini dapat dicapai dengan dua cara: Perangkat lunak sebagai layanan (SaaS), yaitu, Anda menjalankan perangkat lunak di server Anda dan hanya membiarkan pengguna Anda mengaksesnya dari jarak jauh. Ini adalah model yang menggunakan Stack Overflow, misalnya. Saya cukup yakin bahwa Stack Overflow tidak mengaburkan kode mereka, namun Anda tidak dapat mendekompilasinya.

Cara lainnya adalah model alat: alih-alih memberikan kode kepada pengguna Anda, Anda memberi mereka komputer yang berisi kode tersebut. Ini adalah model yang digunakan konsol game, sebagian besar ponsel dan TiVo . Perhatikan bahwa ini hanya berfungsi jika Anda "memiliki" seluruh jalur eksekusi: Anda perlu membangun CPU Anda sendiri, komputer Anda sendiri, menulis sistem operasi Anda sendiri dan implementasi CLI Anda sendiri . Kemudian, dan hanya dengan begitu Anda dapat melindungi kode Anda. (Tetapi perhatikan bahwa kesalahan sekecil apa pun akan membuat semua perlindungan Anda tidak berguna. Microsoft, Apple, Sony, industri musik, dan industri film dapat membuktikannya.)

Atau, Anda bisa saja tidak melakukan apa pun, yang berarti bahwa kode Anda akan secara otomatis dilindungi oleh undang-undang hak cipta.


8

Sayangnya, Anda tidak akan lari dari ini. Taruhan terbaik Anda adalah menulis kode Anda dalam C dan P / Panggil saja.

Ada tangkapan kecil-22, seseorang bisa saja mendekompilasi aplikasi Anda ke CIL dan mematikan kode verifikasi / aktivasi (misalnya, panggilan ke perpustakaan C Anda). Ingatlah bahwa aplikasi yang ditulis dalam C juga direkayasa ulang oleh peretas yang lebih gigih (lihat saja seberapa cepat gim yang retak sekarang ini). Tidak ada yang akan melindungi aplikasi Anda.

Pada akhirnya itu berfungsi seperti rumah Anda, lindungi dengan cukup baik sehingga terlalu banyak usaha (kode spaghetti akan membantu di sini) dan sehingga penyerang hanya pindah ke tetangga sebelah Anda (kompetisi :)). Lihatlah Windows Vista, harus ada 10 cara berbeda untuk memecahkannya.

Ada paket di luar sana yang akan mengenkripsi file EXE Anda dan mendekripsi ketika pengguna diizinkan untuk menggunakannya, tetapi sekali lagi, itu menggunakan solusi generik yang tidak diragukan lagi telah retak.

Mekanisme aktivasi dan registrasi ditujukan pada 'rata-rata Joe:' orang yang tidak memiliki cukup pengetahuan teknologi untuk memintasnya (atau dalam hal ini tahu bahwa mereka dapat memintasnya). Jangan repot-repot dengan kerupuk, mereka memiliki terlalu banyak waktu di tangan mereka.


1
Jika Anda benar-benar repot mengalihtugaskan kode pendaftaran Anda ke dll, Anda harus memastikan bahwa DLL harus berbeda dengan setiap versi baru dari perangkat lunak Anda. Kalau tidak, Anda membuatnya lebih mudah bagi orang untuk memecahkan perangkat lunak Anda. Yang perlu mereka lakukan adalah memecahkan DLL Anda sekali dan menggunakannya untuk semua versi yang lebih baru. Bahkan pengguna akhir dapat melakukan ini begitu mereka menemukan DLL lama yang retak, dan ini bahkan lebih buruk daripada memasukkan mekanisme registrasi ke dalam kode terkelola Anda.
Adrian Grigore

8

Selain perlindungan pembelian, Anda (atau pengembang Anda) dapat belajar untuk melindungi dari penyalinan.

Ini adalah ide-ide:

Pada awalnya, cobalah untuk menulis program yang menulis sendiri ke konsol. Itu masalah yang terkenal. Tujuan utama dari tugas ini adalah berlatih menulis kode referensi-sendiri.

Kedua, Anda perlu mengembangkan teknologi yang akan menulis ulang beberapa kode dengan cara yang dapat diandalkan pada CIL metode lain .

Anda dapat menulis mesin virtual (belum dalam . NET ). Dan taruh beberapa kode di sana. Pada akhirnya, mesin virtual menjalankan mesin virtual lain yang menjalankan kode. Itu untuk bagian dari fungsi yang jarang disebut untuk tidak terlalu memperlambat kinerja.

Tulis ulang beberapa logika menjadi C ++ / CLI, dan campur kode terkelola dengan tidak terkelola. Ini akan mengeraskan pembongkaran. Dalam hal ini, jangan lupa untuk menyediakan binari x64 juga.


tidak bisa Anda jelaskan secara terperinci.
Priyank Bolia

7

Iya. Itu benar. .NET code sangat mudah untuk melakukan reverse engineer jika kodenya tidak dikaburkan.

Kebingungan akan menambah lapisan gangguan pada orang yang mencoba merekayasa balik perangkat lunak Anda. Tergantung pada versi mana yang Anda dapatkan, Anda akan mendapatkan berbagai tingkat perlindungan.

Visual Studio menyertakan versi Dotfuscator . Karena ini adalah versi yang dibundel, Anda pasti tidak mendapatkan kebingungan terkuat yang mungkin. Jika Anda melihat daftar fitur mereka, Anda akan melihat dengan tepat apa yang Anda lewatkan (dan apa yang akan dilakukan aplikasi untuk membuat kode Anda lebih aman).

Ada beberapa obfuscator .NET atau sumber terbuka gratis lainnya di luar sana (tapi saya tidak dapat mengomentari kualitas atau berbagai metode yang mereka gunakan):

Pada akhirnya, tidak ada yang sempurna. Jika seseorang benar-benar ingin melihat cara kerja perangkat lunak Anda, mereka akan melakukannya.


11
Bukan hanya "jika mereka benar-benar ingin melihat cara kerja perangkat lunak Anda, mereka akan". Jika mereka peduli, mereka mungkin bisa menebak tanpa melihat. 99,9% + perangkat lunak tidak memiliki algoritma debu pixie ajaib. Bagian sulit dari pemrograman bukanlah teknik rahasia khusus. Itu hanya membuat semua bagian berbaris dan bekerja.
Ken

9
@Ken - Shhhh! Anda tidak dapat membiarkan seluruh dunia tahu bahwa sebagian besar waktu kami tidak menggunakan algoritma debu pixie ajaib.
Justin Niessner

9
Justin: Apakah Cinta dihitung sebagai algoritma ajaib? Cinta adalah yang membuat program saya istimewa. Saya tidak berpikir Anda dapat membongkar Cinta.
Ken

Babel.NET tidak lagi gratis. Anda dapat menemukan daftar obfuscator paling umum (yang gratis dan komersial) di sini .
InputOutput

6

Yah, Anda tidak bisa sepenuhnya melindungi produk Anda dari keretakan, tetapi Anda dapat memaksimalkan / meningkatkan tingkat keamanan dan membuatnya sedikit terlalu sulit untuk di-crack oleh pemula dan cracker menengah.

Tetapi ingatlah bahwa tidak ada yang tidak dapat dipecahkan, hanya perangkat lunak di sisi server yang terlindungi dengan baik dan tidak dapat dipecahkan. Bagaimanapun, untuk meningkatkan tingkat keamanan dalam aplikasi Anda, Anda dapat melakukan beberapa langkah sederhana untuk mencegah beberapa cracker "tidak semua" dari cracking aplikasi Anda. Langkah-langkah ini akan membuat kerupuk ini menjadi gila dan mungkin putus asa:

  • Mengaburkan kode sumber Anda, jelas ini akan membuat kode sumber Anda terlihat berantakan dan tidak dapat dibaca.
  • Memicu beberapa rutinitas pengecekan acak di dalam aplikasi Anda seperti setiap dua jam, 24 jam, satu hari, minggu, dll. Atau mungkin setelah setiap tindakan yang dilakukan pengguna.
  • Simpan MD5 checksum aplikasi yang dirilis di server Anda dan implementasikan rutin yang dapat memeriksa file MD5 checksum saat ini dengan yang asli di sisi server Anda dan membuatnya dipicu secara acak. Jika MD5 checksum telah diubah itu berarti salinan ini telah dibajak. Sekarang Anda bisa memblokirnya atau merilis pembaruan untuk memblokirnya, dll.
  • Cobalah untuk membuat rutin yang dapat memeriksa apakah beberapa kode Anda (fungsi, kelas, atau rutinitas tertentu) benar-benar telah dimodifikasi atau diubah atau bahkan dihapus. Saya menyebutnya (pemeriksaan integritas kode).
  • Gunakan pengepakan tidak dikenal gratis untuk mengemas aplikasi Anda. Atau, jika Anda punya uang, pilih solusi komersial seperti Thamida atau .NET Reactor . Aplikasi-aplikasi itu diperbarui secara berkala dan sekali seorang cracker membongkar aplikasi Anda, Anda bisa mendapatkan pembaruan baru dari perusahaan-perusahaan itu dan begitu Anda mendapatkan pembaruan baru, Anda cukup mengemas program Anda dan merilis pembaruan baru.
  • Lepaskan pembaruan secara teratur dan paksa pelanggan Anda untuk mengunduh pembaruan terbaru.
  • Akhirnya buat aplikasi Anda sangat murah. Jangan membuatnya terlalu mahal. Percayalah, Anda akan mendapatkan lebih banyak pelanggan yang senang dan cracker hanya akan meninggalkan aplikasi Anda, karena tidak sepadan dengan waktu mereka untuk memecahkan aplikasi yang sangat murah.

Itu hanya metode sederhana untuk mencegah pemula dan cracker menengah dari cracking aplikasi Anda. Jika Anda memiliki lebih banyak ide untuk melindungi aplikasi Anda, jangan malu untuk mengimplementasikannya. Itu hanya akan membuat cracker hidup lebih keras, dan mereka akan frustrasi, dan akhirnya mereka akan meninggalkan aplikasi Anda, karena itu tidak sepadan dengan waktu mereka.

Terakhir, Anda juga perlu mempertimbangkan menghabiskan waktu Anda pada pengkodean aplikasi yang bagus dan berkualitas. Jangan buang waktu Anda pada pengkodean lapisan keamanan yang rumit. Jika seorang cracker yang baik ingin memecahkan aplikasi Anda ia akan melakukan apa pun yang Anda lakukan ...

Sekarang pergi dan laksanakan beberapa mainan untuk kerupuk ...


5

Ada Salamander , yang merupakan kompiler dan penghubung .NET asli dari Remotesoft yang dapat menggunakan aplikasi tanpa kerangka .NET. Saya tidak tahu seberapa baik itu sesuai dengan klaimnya.


Jawabannya cukup mudah: Sayang sekali, bahwa sebagian besar jawaban berbicara tentang kebingungan. Kebingungan baik untuk menghentikan yang pertama (seperti reflektor) mencoba untuk melihat kode Anda, itu saja. Itu tidak buruk. Dan tentu saja tidak ada yang menghentikan peretas sejati yang mengerti kode perakitan, selain menulis aplikasi SAAS (bahkan kemudian mereka dapat mencoba meretas server Anda). Tapi ada lagi, ada alat-alat seperti Salamander, .NET Reactor lain yang disebutkan, yang menyediakan (mungkin) bentuk keamanan yang hampir sama tanpa kompilasi sebagai C + + yang dikompilasi Win32 .exe. Yang mana dari alat-alat itu yang terbaik, saya belum bisa menilai.
Philm

5

Jika Microsoft dapat menemukan solusi, kami tidak akan memiliki versi Windows bajakan, jadi tidak ada yang sangat aman. Berikut adalah beberapa pertanyaan serupa dari Stack Overflow dan Anda dapat menerapkan cara Anda sendiri untuk melindunginya. Jika Anda merilis versi yang berbeda maka Anda dapat mengadopsi teknik yang berbeda untuk versi yang berbeda sehingga pada saat yang pertama retak, yang kedua dapat mengambil alih.


5

.NET Reactor

Memperbarui

Jared menunjukkan bahwa de4dot mengklaim dapat mendekompilasi itu.

.NET Reactor menyediakan perlindungan lengkap untuk properti intelektual sensitif Anda dengan mengubah .NET assemblies Anda menjadi proses yang tidak dikelola yang tidak dapat dipahami sebagai CIL, dan yang tidak dapat didekompilasi oleh alat yang ada. Peretas tidak memiliki akses ke bentuk apa pun yang dapat dipahami dari sumber Anda.

Kuat dan fleksibel, fitur lisensi .NET Reactor memungkinkan Anda untuk menegakkan kondisi lisensi Anda dan melindungi aliran pendapatan Anda dengan menggunakan kunci perangkat keras dan perangkat lunak. Manajer lisensi dapat membangun percobaan atau lisensi permanen, dalam hitungan detik. Kit pengembangan perangkat lunak (SDK) yang sepenuhnya didokumentasikan, lengkap dengan contoh, memungkinkan Anda untuk memanggil sistem lisensi langsung dari kode Anda, memungkinkan Anda untuk membuat ekstensi khusus ke sistem lisensi.


3
Saya mencoba menghubungi orang-orang itu dengan beberapa pertanyaan, saya punya tentang produk mereka, tetapi mereka tidak pernah menjawab. Apakah Anda sudah mencoba produk mereka. Saya telah pergi dengan perakitan cerdas dan produk serta dukungan mereka sangat baik. Tapi seperti yang sudah saya katakan dalam pertanyaan kebingungan adalah satu cara, tetapi bukan bukti lengkap.
Priyank Bolia

1
Saya memiliki beberapa masalah dengan produk mereka sebelumnya dan kemudian saya mengajukan beberapa pertanyaan mengenai ikon resolusi tinggi di groups.google.se/group/net-reactor-users dan saya mendapat balasan dan perbaikan, tetapi sekarang sepertinya mereka sulit untuk mendapatkan. Untuk buruk - itu adalah produk hebat dan saya masih menggunakannya
loraderon

2
Jika "tidak ada alat yang dapat mendekompilasi", mengapa itu terdaftar sebagai obfuscator / packer yang didukung pada halaman fitur de4dot ?: bitbucket.org/0xd4d/de4dot
Jared Thirsk

Mungkin karena ini adalah pernyataan lama dan mereka belum memperbarui halaman web mereka. Saya bukan lagi pengguna alat kebingungan.
loraderon

de4dot adalah alat yang sangat kuat. Saya telah mencobanya melawan beberapa obfuscator dan itu membuat pekerjaan yang bagus. Namun, itu tidak dapat menangani file yang dilindungi .NET Reactor (v6.0). Mungkin de4dot tidak mutakhir.
InputOutput

4

Berikut ini satu ide: Anda dapat memiliki server yang dihosting oleh perusahaan Anda sehingga semua instance perangkat lunak Anda perlu terhubung. Meminta mereka terhubung dan memverifikasi kunci pendaftaran tidak cukup - mereka hanya akan menghapus cek. Selain pemeriksaan kunci, Anda juga perlu meminta server melakukan beberapa tugas penting yang tidak dapat dilakukan klien, sehingga tidak mungkin dihapus. Ini tentu saja mungkin berarti banyak proses berat pada server Anda, tetapi itu akan membuat perangkat lunak Anda sulit untuk dicuri, dan dengan asumsi Anda memiliki skema kunci yang baik (periksa kepemilikan, dll.), Kunci juga akan sulit untuk mencuri. Ini mungkin lebih invasif daripada yang Anda inginkan, karena ini akan mengharuskan pengguna Anda untuk terhubung ke internet untuk menggunakan perangkat lunak Anda.


5
bagaimana jika server sedang down atau pengguna tidak selalu memiliki akses internet, metode Anda hanya akan membuat pelanggan frustrasi dengan seringnya pulang pergi ke server internet hanya untuk menggunakan aplikasi.
Priyank Bolia

Aku sangat setuju. Itu sebabnya saya mengatakan "ini mungkin lebih invasif daripada yang Anda inginkan ..." di baris terakhir saya. Aku hanya menawarkan OP solusi terbaik yang saya pikir adalah teknis layak, bukan pendekatan yang terbaik untuk menjaga pelanggan senang :)
rmeador

Pada kuartal pertama 2010 (beberapa bulan setelah jawaban ini ditulis), perusahaan pengembangan game Ubisoft mencoba ini, dan tampaknya beban pada komponen sisi server sangat besar sehingga permainan tidak dapat dimainkan. Kesan keseluruhan dari SW: "kerumitan untuk menginstal, tidak dapat digunakan secara offline, invasif dan tidak dapat diandalkan ". Jadi, jika Anda memutuskan bahwa pemrosesan sisi server adalah cara yang harus dilakukan, pastikan Anda benar-benar dapat meningkatkan skala permintaan.
Piskvor meninggalkan gedung

3

Apa pun yang berjalan pada klien dapat didekompilasi dan di-crack. Kekaburan hanya membuatnya lebih sulit. Saya tidak tahu aplikasi Anda, tetapi 99% dari waktu saya hanya tidak berpikir itu sepadan dengan usaha.


3

Tidak mungkin untuk sepenuhnya mengamankan aplikasi, maaf.



2

Ingatlah bahwa 99% pengguna Anda tidak akan tertarik untuk memeriksa executable Anda untuk melihat cara kerjanya.

Mengingat begitu sedikit orang yang akan repot mencoba dan bahwa kebanyakan obfuscator dapat dikerjakan, apakah itu sepadan dengan waktu dan usaha Anda?

Anda akan lebih baik menginvestasikan waktu untuk meningkatkan produk Anda sehingga lebih banyak orang ingin menggunakannya.


2

Hanya untuk menambahkan peringatan: jika Anda akan menggunakan kebingungan, periksa apakah semuanya masih berfungsi! Kebingungan mungkin mengubah hal-hal seperti nama kelas dan metode. Jadi jika Anda menggunakan refleksi untuk memanggil metode dan / atau kelas tertentu (seperti dalam arsitektur plugin) aplikasi Anda bisa gagal setelah dikaburkan. Juga stacktraces mungkin tidak berguna untuk melacak kesalahan.


2

Jika ditulis dalam .NET dan dikompilasi ke CIL , itu dapat tercermin. Jika keamanan menjadi masalah dan kebingungan harus dihindari, maka saya sarankan untuk menulis aplikasi Anda menggunakan bahasa yang tidak dikelola, yang, pada dasarnya, lebih sulit untuk dibalik insinyur.


2

Cara memastikan bahwa aplikasi tidak dirusak, dan bagaimana memastikan bahwa mekanisme pendaftaran tidak dapat direkayasa balik.

Keduanya memiliki jawaban yang sangat sederhana: jangan membagikan kode objek ke pihak yang tidak dipercaya, seperti (tampaknya) pelanggan Anda. Apakah layak untuk meng-host aplikasi pada mesin Anda hanya tergantung pada apa fungsinya.

Jika itu bukan aplikasi web , mungkin Anda dapat mengizinkan masuk SSH dengan penerusan X ke server aplikasi (atau Remote Desktop Connection , saya kira, untuk Windows).

Jika Anda memberikan kode objek ke orang tipe kutu buku, dan mereka pikir program Anda mungkin menyenangkan untuk di-crack, itu akan menjadi retak. Tidak ada jalan lain.

Jika Anda tidak percaya kepada saya, tunjukkan aplikasi profil tinggi yang belum retak dan bajakan.

Jika Anda menggunakan kunci perangkat keras, itu akan membuat produksi lebih mahal dan pengguna Anda akan membenci Anda karenanya. Sungguh menyebalkan untuk merangkak di lantai dengan mencolokkan dan mencabut 27 USB yang berbeda karena pembuat perangkat lunak tidak mempercayai Anda (saya bayangkan).

Ada paket di luar sana yang akan mengenkripsi EXE Anda dan mendekripsi ketika pengguna diizinkan untuk menggunakannya

Tentu saja, cara mengatasinya adalah dengan memecahkan tes "bisa-saya-gunakan-itu" sehingga selalu kembali benar.

Trik jahat mungkin dengan menggunakan nilai byte dari opcodes yang melakukan tes di tempat lain dalam program dengan cara yang kotor yang akan membuat program crash dengan probabilitas tinggi kecuali nilainya tepat. Itu membuat Anda terhubung ke arsitektur tertentu, meskipun :-(


bukan titik macet yang mudah untuk di-debug, dan menimpa kode dalam .NET untuk memotong centang itu. Juga bagaimana Anda mengubah opcodes di .NET, dapatkah Anda menguraikan ini?
Priyank Bolia

Oh Saya punya trik C dalam pikiran; katakanlah, ambil alamat dari fungsi validasi, tambahkan 10 byte pertama dalam array char (cor fungsi pointer); pilih fungsi f, dan simpan [alamat f dikurangi jumlah sebelumnya] di fptr. Selalu panggil f sebagai * (fptr + jumlah itu). Precompute "jumlah itu"
Jonas Kölker

2

Buat saja aplikasi yang baik dan kode sistem perlindungan yang sederhana. Tidak masalah perlindungan apa yang Anda pilih, itu akan terbalik ... Jadi jangan buang waktu / uang terlalu banyak.


2

Ketika datang ke .NET, jika Anda merilis aplikasi Windows Forms (atau aplikasi mana pun di mana klien memiliki file Portable Executable), itu bisa di-crack.

Jika Anda ingin tetap menggunakan .NET dan ingin meminimalkan kemungkinan diambilnya kode sumber, maka Anda mungkin ingin mempertimbangkan untuk menggunakannya sebagai aplikasi ASP.NET di server web, alih-alih menjadikannya aplikasi Windows Forms.


2

Terus terang, kadang-kadang kita perlu mengaburkan kode (misalnya, mendaftar kelas lisensi dan sebagainya). Dalam hal ini, proyek Anda tidak gratis. IMO, Anda harus membayar obfucator yang bagus.

Dotfuscator menyembunyikan kode Anda dan .NET Reflector menunjukkan kesalahan saat Anda mencoba mendekompilasinya.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.