[II3096] Saya tidak bilang, “Saya tidak bilang”.

[II3096] Saya tidak bilang, “Saya tidak bilang”.

Anda bertanya kepada saya, “Anda bertanya kepada Saya?”?

Saya menyangkal, “Saya menyangkal”

“Bohong saya,” bohong saya.

Saya tidak bilang, “Saya tidak bilang.”

Saya balikkan pertanyaannya pada Anda, “Saya balikkan pertanyaannya pada Anda.”

Itu niatnya membuat narasi dialog rekursif… tapi nampak gagal karena saya sendiri tidak paham artinya…

Eniwei sebenarnya ada 2 tugas lagi buat kuliah Keamanan Informasi :

  1. Membuat program yang mengeluarkan source codenya sendiri sebagai output
  2. Membuat steganografi

Self Generating Code

Untuk program itu, simpelnya : kalau kita ngejalanin programnya, yang keluar itu persis sama dengan kodingannya. Kurang lebih sama dengan dialog aneh tadi. Sama-sama isi dan hasil sama, sama-sama ruwet mikirin dan bikinnya. Arti yang lebih baku nampaknya ga terlalu berbeda. Tapi di bakunya ada istilahnya : Quine

. Istilah Quine diambil dari seorang filsuf bernama Willard Van Orman Quine (1908-2000) yang mendalami indirect self-reference.

Nah ini ada kode dalam C… saya pinjam dan ubah.. pemilik aslinya Dave Harif yang dipampang di http://www.nyx.net/~gthompso/self_c.txt .

/*
A quine in C
an adaptation
using only stdio.h
Author : Ibnu Alam 13506024
notes :
Coded in Notepad++
Copy-paste-modified to fit to a constraint
Compiled in gcc -c
Running on Windows Vista Home OS
*/
#include <stdio.h>
#define f "/"
#define e "*"
#define d "\\"
#define c "\n"
#define b "\""
#define a "%s%s%sA quine in C%san adaptation%susing only stdio.h%sAuthor : Ibnu Alam 13506024%s%snotes :%s%sCoded in Notepad++%sCopy-paste-modified to fit to a constraint%sCompiled in gcc -c%sRunning on Windows Vista Home OS%s%s%s%s#include <stdio.h>%s#define f %s%s%s%s#define e %s%s%s%s#define d %s%s%s%s%s#define c %s%sn%s%s#define b %s%s%s%s%s#define a %s%s%s%smain(){printf(a,f,e,c,c,c,c,c,c,c,c,c,c,c,c,e,f,c,c,b,f,b,c,b,e,b,c,b,d,d,b,c,b,d,b,c,b,d,b,b,c,b,a,b,c,c);}%s"
main(){printf(a,f,e,c,c,c,c,c,c,c,c,c,c,c,c,e,f,c,c,b,f,b,c,b,e,b,c,b,d,d,b,c,b,d,b,c,b,d,b,b,c,b,a,b,c,c);}

Inti dari programnya sederhana.

  • Deklarasi-deklarasi dan reference (#include…)
  • Sebuah main yang memprint serangkaian string <- operator output
  • Serangkaian string yang berisi kode program itu (main, deklarasi, reference)

Jelas rekursif : Main memprint string. String berisi kode. Jadi yang diprint itu main, deklarasi, reference dan stringnya.

Jika source dicompile akan muncul hasilnya… sama dengan source!

Kerumitan di bahasa C terjadi karena ada penggunaan karakter spesial yang harus menggunakan backslash seperti new line (\n) dan tanda kutip (\”) karena bahasa C tidak bisa menginterpret karakter tersebut langsung menjadi tulisan. Contohnya, jika tidak digunakan penanganan khusus, \n akan menjadi sebuah baris baru, tidak tertulis sebagai ‘\n’, padahal kita perlu menulis ‘\n’, bukan membuat baris baru. Cara penanganannya adalah dengan mengsubstitusi, bisa dengan nomer ASCII yang bersangkutan (\n = 34, jadi “char a = 34;”, dst…) atau seperti di kode di atas, dideklarasikan.

Untuk bahasa lain ada juga yang tidak bermasalah dengan ini. Bahkan dengan bahasa fungsional seperti C-LISP bisa dibuat sangat sederhana (dari wiki):

(progn (setf a "(progn (setf a ~S) (format t a a))") (format t a a))

Silakan bereksplorasi 😀

Eits! Belum selesai… Ada satu lagi 😛

Steganografi… Apa itu?

Kalau dari kata-kata saya sendiri (seingatnya dari kuliah kriptografi): Steganografi adalah seni dan teknik menyembunyikan pesan sehingga pesan tersembunyi dapat tersampaikan tanpa disadari keberadaannya oleh pihak yang tidak berkepentingan. Apa gunanya? Supaya tidak menimbulkan kecurigaan.

Misal saya dan anda surat-suratan. Baik surat elektronik (e-mail) maupun surat biasa. Bisa saja ada orang lain yang membaca padahal itu adalah rahasia antara kita berdua (ciee ngegombal garing…).

Karena paranoid, kita mengantisipasi : Tulisan dikodekan.

Jadi tadi aslinya mau nulis “Aduh saya lapar” jadi “KJ#^IT&W@PFH*P)G”. Nah kan orang lain ga bisa baca (saya juga ga bisa). Tapi kan orang yang baca (misal stalker lah biar seru) jadi waswas… Kalau dia beruntung atau berbakat memecahkan kode ya dia bisa pecahkan kodenya. Atau dia bisa geram dan menangkap anda lalu mencoba mengorek-ngorek isi tulisannya seperti interogasi di film-film mafia… salah-salah jadi mayat 😀

Lain halnya dengan :

Dibuat pesan tersembunyi. Misal nulis “ambil data untuk HRD. saya ambil yang annual. lagi apa pak? ada reschedule”. Coba ambil huruf pertama dari tiap kata : a-d-u-h-s-a-y-a-l-a-p-a-r. Nah ga akan ketahuan kan? 😀

Nah, di source code tadi ada juga lho pesan tersembunyi alias steganografinya… Tentu cara membacanya berbeda dengan contoh tadi. Silakan coba dipecahkan ! >:D

Minggu depan saya kasih kuncinya. Good luck!