Tugas II3062 Keamanan Informasi: Self Generating Code

Minggu lalu pada mata kuliah I3062 (Kemanan Informasi), Pak Budi Rahardjo memberikan kami suatu tugas dengan penjelasan sebagai berikut:

Tugas Anda adalah membuat self-generating code seperti yang ada di paper Ken Thompson, Reflections on Trusting Trust. Bahasa pemrograman bebas.

Jadi, hal pertama yang saya lakukan adalah googling untuk menemukan paper Ken Thompson yang berjudul Reflections on Trusting Trust tersebut. Saya mengunduhnya di http://www.ece.cmu.edu/~ganger/712.fall02/papers/p761-thompson.pdf. Setelah membaca paper yang terdiri dari 3 halaman tersebut, saya menjadi paham beberapa hal. Self generating code adalah suatu program yang menampilkan kode-kode pada program tersebut. Satu hal yang amat menarik menurut Thompson adalah semakin pendek kode dari self generating code, semakin tinggi prestise yang dimiliki oleh programmer tersebut.
Oleh karena itu, setelah melihat contoh kode dalam bahasa C milik Thompson, saya memutuskan untuk membuat program dalam bahasa pemrograman yang sering saya utak atik, yaitu phyton. Kenapa phyton? Karena bahasa tersebut sangat "manusiawi", dan tidak perlu dicompile untuk melihat hasilnya, sehingga program yang saya buat menjadi sangat pendek, tidak perlu system.out.println seperti di Java, atau int (main) {}; seperti di C dan turunannya.
Berikut adalah printscreen dari program yang saya buat.
Saya membuat 2 buah program, kode yang pertama adalah
mega='mega=%s\012print mega%%`mega`'
print mega%`mega`
"mega" merupakan nama variabel yang saya gunakan untuk menampung string yang akan ditulis. Tulisan yang berwarna hijau merupakan string. Namun ternyata hasil keluarannya (tulisan warna biru pada gambar) tidak terlalu sama persis, karena \012 yang saya harap untuk meletakkan kode yang akan diprint pada newline, ternyata terprint sebagai \n.
Jadi, saya membuat program lagi, yaitu
m='m=%s;print m%%`m`';print m%`m`
Sebenarnya program ini sama saja seperti kode sebelumnya, saya hanya menghilangkan \012 dan meletakkan kode print m%`m` pada baris yang sama dan memperpendek nama variabel menjadi 'm' saja. %s berfungsi untuk menampilkan string pada tulisan berwarna hijau tadi. Lebih sederhana, karena tidak perlu mesin karakter atau parser untuk membedakan char 34 dan char 94nya. Satu hal yang pasti, jelas kode program ini menjadi lebih pendek dan secara logika memang diakui sebagai self generating code.

0 Responses