Apa itu Kekeliruan Kod? Cara Menyamarkan Kod Anda agar Lebih Selamat

Pada hari-hari awal pengkomputeran, pembangun tidak perlu risau tentang rangkaian. Mereka hanya dapat memfokuskan diri untuk memastikan perisian mereka memenuhi tujuannya dan tidak terlalu kerap mengalami kerosakan.

Dan rata-rata orang yang menghubungi perisian itu bukanlah ancaman. Sebilangan besar pengguna tidak akan repot membaca manual pengguna yang dikirimkan dalam kotak perisian, apalagi mencari kod untuk kelemahan.

Kemudian, internet datang dan mengubah segalanya.

Hampir semalam, rangkaian komputer menjadi saling berkaitan. Dan ketika kerumitan bertambah, begitu juga kemungkinan seseorang akan masuk ke rangkaian yang tidak berada di sana.

Dan lebih kerap daripada itu, orang-orang itu mempunyai kemahiran yang diperlukan untuk mengeksploitasi kod yang cacat.

Dan itu membawa kita ke hari ini. Ini adalah masa ancaman keselamatan siber yang belum pernah terjadi sebelumnya. Dan berita mengenai serangan siber nampaknya datang setiap hari.

Sebagai tindak balas, pengurus rangkaian menggunakan sistem pertahanan yang semakin canggih untuk mengeraskan rangkaian mereka terhadap penceroboh. Dan mereka sekarang mengharapkan pembangun perisian berusaha lebih keras untuk mendapatkan kod mereka untuk mengelakkan akses yang tidak dibenarkan.

Namun, pengerasan kod komputer masih tidak banyak diajar di sekolah pengekodan. Tetapi ia menjadi suatu keharusan dalam pembangunan aplikasi moden.

Untuk membantu menyelesaikannya, dalam artikel ini saya akan menerangkan apa itu penyamaran kod. Dan saya juga akan memberi anda gambaran umum mengenai enam teknik penyamaran kod yang paling penting yang digunakan hari ini untuk memulakan anda dalam menulis perisian yang lebih selamat.

Apa itu Kekeliruan Kod?

Seperti namanya, penyamaran kod merujuk kepada serangkaian teknik pengaturcaraan yang dirancang untuk menyamarkan elemen kod program. Ini adalah kaedah utama agar pengaturcara dapat mempertahankan pekerjaan mereka daripada akses atau perubahan yang tidak dibenarkan oleh penggodam atau pencuri harta intelek.

Dan yang paling penting, teknik penyamaran kod dapat mengubah struktur dan kaedah yang digunakan oleh program untuk beroperasi, tetapi tidak pernah mengubah output program.

Masalahnya adalah, banyak teknik penyamaran kod dapat menambah overhead program dan meningkatkan waktu pelaksanaan.

Atas sebab itu, sangat penting untuk memahami teknik mana yang relatif bebas penalti dan yang boleh menyebabkan masalah prestasi. Setelah anda mengetahui kosnya, adalah mungkin untuk menyeimbangkan perlindungan dan prestasi dalam aplikasi dunia nyata.

Berikut adalah enam teknik penyamaran kod yang paling banyak digunakan sekarang.

1. Buang Data Berlebihan

Teknik pengerasan kod pertama yang harus diterapkan dalam setiap kes adalah menyingkirkan semua perkara dalam kod anda yang tidak diperlukan.

Melakukan ini akan melancarkan pangkalan kode anda dan mengurangkan permukaan serangan yang anda pertahankan.

Ini bermaksud membuang fungsi berlebihan, menyahpepijat maklumat, dan metadata sebanyak mungkin. Ringkasnya - apa sahaja yang dapat memberi penyerang peta jalan yang dapat menyebabkan mereka rentan.

2. Transformasikan Data

Perkara seterusnya yang perlu dilakukan adalah mengubah data yang diproses oleh kod anda agar tidak dapat dikenali.

Taktik seperti menggantikan nilai dengan ungkapan, mengubah format penyimpanan data yang anda gunakan, atau bahkan menggunakan versi binari nombor kod anda semuanya menambah kerumitan. Dan kerumitan itu akan menyukarkan sesiapa sahaja membuat kod semula kod anda untuk mendapatkan sesuatu yang berguna daripadanya.

Sebagai contoh, anda mungkin menggunakan enkripsi rentetan untuk membuat rentetan teks biasa dalam kod anda tidak dapat dibaca. Penyulitan tali boleh menggunakan pengekodan base64 sederhana, yang akan mengubah kod ini:

String s = "Hello World"; Into: String s = new String(decryptString("SGVsbG8gV29ybGQ="));

Walaupun tidak sukar bagi pengaturcara yang berpengalaman untuk mengetahui apa yang berlaku di sini, perlu menangani penyahsulitan banyak rentetan memakan masa dan mengecewakan.

Dan apabila digabungkan dengan beberapa teknik penyamaran kod yang lain, transformasi data adalah barisan pertahanan pertama yang berkesan.

3. Gunakan Urutan Urutan Proses

Salah satu syarat mencabar kod yang tidak jelas adalah bahawa anda masih memerlukan kod anda untuk berfungsi seperti yang diharapkan semasa anda selesai.

Tetapi tidak ada yang mengatakan bahawa anda harus melaksanakan kod anda mengikut urutan logik. Sekiranya anda menggabungkan urutan operasi kod anda, anda masih dapat mencapai hasil yang tepat - tetapi menjadikannya lebih sukar bagi pihak ketiga untuk memahami apa yang dilakukan oleh kod anda.

Satu-satunya peringatan adalah anda harus berhati-hati untuk tidak membuat banyak gelung dan jalan buntu yang tidak bermakna kerana anda mungkin secara tidak sengaja memperlahankan masa pelaksanaan kod anda.

Sebagai contoh, perhatikan coretan berikut, yang mengira jumlah dan purata 100 nombor:

int i=1, sum=0, avg=0 while (i = 100) { sum+=i; avg=sum/i; i++; }int i=1, sum=0, avg=0 while (i = 100) { sum+=i; avg=sum/i; i++; }

Dengan menambahkan pemboleh ubah bersyarat, mungkin untuk menyamarkan kod yang sedang dilakukan. Ini kerana analisis fungsi memerlukan pengetahuan tentang apa yang dimasukkan ke dalamnya untuk memulai.

Dalam coretan berikut, pemboleh ubah bersyarat 'rawak' membuat struktur kod yang lebih kompleks yang menjadikannya lebih sukar untuk menguraikan

int random = 1; while (random != 0) { switch (random) { Case 1: { i=0; sum=1; avg=1; random = 2; break; } case 2: { if (i = 100) random = 3; else random = 0; break; } case 3: { sum+=i;avg=sum/i ; i++; random = 2; break; } } }

4. Cuba Debug Obfuscation

Kadang kala, penyerang yang tekun dapat mempelajari semua jenis maklumat berguna mengenai kod anda dengan memeriksa maklumat debugnya.

Dan dalam beberapa kes, mereka mungkin menemui kunci untuk menguraikan beberapa teknik penyamaran lain yang anda gunakan.

Oleh itu, di mana mungkin, adalah idea yang baik untuk membuang akses ke maklumat debug. Dan apabila itu bukan pilihan, menyembunyikan maklumat pengenalpastian dalam laporan debugging adalah mustahak.

5. Gunakan Pengacakan Alamat

For almost thirty years, errors related to memory handling have been the most common software vulnerabilities hackers exploit – even though every programmer knows that the problem persists.

And it's not just among beginners. Around 70% of the vulnerabilities in Google's Chrome web browser stem from memory errors.

The reality is, it's all but impossible to prevent all memory programming errors, especially if you're using languages like C and C++. But what you can do is include some memory randomization features in your code that will help.

At execution, if your code and data's virtual addresses get assigned random values, it gets much harder to find and exploit any unpatched vulnerabilities.

Plus, it adds another benefit, too. It makes it so that even a successful hack of your code is difficult – if not impossible – to replicate. That alone makes it much less likely that an attacker will waste their time trying to hack your software.

6. Rotate the Obfuscated Code

As much as the above techniques work to frustrate attackers, they're far from a perfect defense. Anyone with enough time and skills will still find a way to defeat them. But that brings us to one of the most essential obfuscation techniques of all.

Since all obfuscation techniques aim to increase the complexity of an attacker's work, anything you can do to set them back to square one is a great defensive measure. So, to keep your code protected, use the internet to your advantage.

You can issue periodic updates that rotate the nature and specifics of the obfuscation techniques you're using. Every time you do, all the work someone may have been putting into cracking your software becomes a waste of time.

If you rotate your obfuscation tactics often enough, it won't be worth it for anyone to try and keep up an analysis long enough to succeed.

Security Through Obscurity

The bottom line here is that there's no such thing as 'unhackable' code. No matter how hard a programmer tries, there's always going to be a vulnerability somewhere. Not that you shouldn't keep trying, though.

But in the real world, your code doesn't have to be perfect. It just has to be hard enough to crack that nobody in their right mind would bother trying. And for those who aren't in their right mind, it just has to be complicated and time-consuming enough to keep them at bay.

And that's just what the six tactics above can help you accomplish. But remember, no defense comes without a cost. When deploying these options, make sure to weigh the execution-time penalties they may create against the benefits they provide.

If you're working on something especially sensitive, throwing every possible curveball might be worth it. But if you're writing a quote of the day generator – maybe don't worry as much.

However you choose to proceed, though, don't ever forget to take the time to harden your code in one way or another. It's just the right way to do things in a world filled with cybersecurity threats around every corner.

Featured photo by ThisIsEngineering from Pexels.