ilma: esoteric internet-dependent programming language


ilma is an esoteric programming language. The history of those languages is full of pearls, and since brainfuck, malebolge and java2k exists, create something new for funny weird development is difficult. Now ilma pourpose himself as esoteric programming language with non-finite partially-deterministic lexical definitions.
ilma is born similarly to brainfuck state machine but with more operators. The main difference is that the instruction are not pre defined: every ASCII C file exposed via http should be used as instruction. This cause the possible modification of the code after the development from the ilma coder due to external causes, like the upgrading of the source file or the deletion of remote file. An ilma code appear to be likely:

http://www.cs.hut.fi/~cessu/minpantu/minpantu-0.1/computer_player.c
http://www.xs4all.nl/~johanw/CoS/c2.c
http://www.2600.com/code/221/dmsb.c
http://www.2600.com/code/221/dmsb.c
http://www.gozer.org/programs/c/files/crypt_string.c
http://www.gozer.org/programs/c/files/crypt_string.c
http://www.gammon.com.au/files/utils/aeslib.c
http://alumni.cse.ucsc.edu/~davevw/onscreen/firmdl.c
http://www.chpc.utah.edu/~cheatham/ptraj-6.5/io.c
http://www.xs4all.nl/~johanw/CoS/c2.c
http://www.gozer.org/programs/c/files/crypt_string.c

This condition: the non deterministic value of each instruction due to remote cause, implicated three strange (weird) propriety (useless feature) in the ilma codes: antiforensic execution, parasitic programming and code mortality. The execution of the ilma code from the ilma interpreter appears, more or less, like this:

user@unnamed:~$ ./ilma.sh hello.ilma 
I'm retrieving all pages, please wait for wget termination...
There are 18 wget running still, sleeping four seconds again...
There are 10 wget running still, sleeping four seconds again...
There are 3 wget running still, sleeping four seconds again...
There are 1 wget running still, sleeping four seconds again...
executing [/home/user/.ilma.entropity/_6913_26173/7176.sh] shell script

hello world
user@unnamed:~$ 

As you see, the interpreter ilma.sh call wget(s) in order to download the ASCII C files, derive the insdtructions and execute the resulting script.
ilma interpreter require some common tools like cut/sed/awk and as web software lynx and wget. ilma use a storage directory in $HOME/.ilma.entropity
Downloading at each execution some files .c cause the resulting flow is different from the origianl developed software, because one file should be changed (and so the instruction derived) or an URL should be unreachable. When the derived instruction differ from the implemented one, you should not detect the problem and your ilma code simply apper to not run. If an host is unreachable file file .c should not be retrivered and the ilma interpreter exit with an appropriate error:

user@unnamed:~$ ./ilma.sh invalid_hello.ilma 
I'm retrieving all pages, please wait for wget termination...
There are 19 wget running still, sleeping four seconds again...
There are 14 wget running still, sleeping four seconds again...
There are 5 wget running still, sleeping four seconds again...
There are 1 wget running still, sleeping four seconds again...
executing [/home/user/.ilma.entropity/_1097_32567/8743.sh] shell script

file /home/user/.ilma.entropity/_1097_32567/dorotea had INVALID INSTRUCTION
user@unnamed:~$ 

How a programmer will implement an ilma code ? with two simple step. The first is to take a look ilma.dictionary, file provided in the package, where are shown the shell instruction generated from the ilma interpreter:

root@unnamed:~/vdebian_root/ilma# cat ilma.dictionary 
ILMA DICTIONARY - written in http://www.hackmeeting.org 2007 edition


instruction number
/
|       instruction command
|       /
|       |

1       x=0
2       y=0
3       x=$(($x+1))
4       y=$(($y+2))
5       x=$(($y+$x))
6       y=$(($x-1))
7       read $x
8       y=$(($y>>1))
9       echo -e $x
10      echo -en $y
11      x=$(< $y)
12      if 
13      than 
14      fi
15      break 
16      for i in `seq 0 \$y`; do (
17      ); done
18      x=$RANDOM
19      x=$(($x<<$y))
20      x=$(($x>>$y))
21      y=$(($x<<1))
22      y=$(($x>>1))
23      y=$x
24      x=$y
25      y=${array[$x]}

read ilma_INSTRUCTION_SET for take the URL that you are looking phor
root@unnamed:~/vdebian_root/ilma#

other than the instruction list (and the equivalent instruction number, explainded below) every script generated from ilma had inside an array of 99 elements, where y=${array[$x]} should move inside and use as resource. the array is composed of:

array[0]='!'
array[1]='"'
array[2]='#'
array[3]='$'
array[4]='%'
array[5]='&'
array[6]="'"
array[7]='('
array[8]=')'
array[9]='*'
array[10]='+'
array[11]=','
array[12]='-'
array[13]='.'
array[14]='/'
array[15]='0'
array[16]='1'
array[17]='2'
array[18]='3'
array[19]='4'
array[20]='5'
array[21]='6'
array[22]='7'
array[23]='8'
array[24]='9'
array[25]=':'
array[26]=';'
array[27]='<'
array[28]='='
array[29]='>'
array[30]='?'
array[31]='@'
array[32]='A'
array[33]='B'
array[34]='C'
array[35]='D'
array[36]='E'
array[37]='F'
array[38]='G'
array[39]='H'
array[40]='I'
array[41]='J'
array[42]='K'
array[43]='L'
array[44]='M'
array[45]='N'
array[46]='O'
array[47]='P'
array[48]='Q'
array[49]='R'
array[50]='S'
array[51]='T'
array[52]='U'
array[53]='V'
array[54]='W'
array[55]='X'
array[56]='Y'
array[57]='Z'
array[58]='['
array[59]='\\'
array[60]=']'
array[61]='^'
array[62]='_'
array[63]='`'
array[64]='a'
array[65]='b'
array[66]='c'
array[67]='d'
array[68]='e'
array[69]='f'
array[70]='g'
array[71]='h'
array[72]='i'
array[73]='j'
array[74]='k'
array[75]='l'
array[76]='m'
array[77]='n'
array[78]='o'
array[79]='p'
array[80]='q'
array[81]='r'
array[82]='s'
array[83]='t'
array[84]='u'
array[85]='v'
array[86]='w'
array[87]='x'
array[88]='y'
array[89]='z'
array[90]='{'
array[91]='|'
array[92]='}'
array[93]='~'
array[94]='\0040' # SPACE
array[95]='\0010' # '\b'
array[96]='\0011' # '\t'
array[97]='\0012' # '\n'
array[98]='\0013' # '\r'

The question is, how I should know the value of an URL ? ilma interpreter have two working mode, as interpreter of ilma.file and as instruction set generator, an instruction set is a file created my ilma using $HOME/.ilma.entropity directory. An ilma instruction set appears as:

root@unnamed:~/vdebian_root/ilma# more ilma_INSTRUCTION_SET 
instruction 1 http://fisheye.freeswitch.org:8081/browse/~raw,r=3774/FreeSWITCH/libs/sofia-sip/libsofia-sip-ua/nea/nea.c
instruction 1 http://sugiyama-www.cs.titech.ac.jp/~hachiya/khepera/sampling.c
instruction 1 http://www.cs.hut.fi/~cessu/minpantu/minpantu-0.1/computer_player.c
instruction 2 http://ftp.nerim.net/mirrors/FreeBSD/FreeBSD-stable/src/release/sysinstall/devices.c
instruction 2 http://www.csc.liv.ac.uk/~grant/Teaching/COMP205/Code/novim.c
instruction 2 http://www.ouah.org/progs/banner.c
instruction 3 http://faculty.washington.edu/gmobus/AdaptiveAgents/realbrain.c
instruction 3 http://webmo.cluster.earlham.edu/rocks/install/install/mp_linpack_10/src/auxil/HPL_dlamch.c
instruction 3 http://www.cs.sfu.ca/~dbeyer/blast_mc/memsafety/benchmarks-Olden-orig/mst/main.c

Now the ilma programmer should decide which instruction want to use from ilma.dictionaty, search in ilma_INSTRUCTION_SET for an URL of equivalent value and use it in him software. How should be generated the ilma_INSTRUCTION_SET ? exist a special keyword, and use this as first argument cause ilma.sh to build a new instruction set, the old data are keep, so launch this application for some times should cause very large instruction set. The special keyword is umpf:

user@unnamed:~$ ./ilma.sh umpf
[+] building instruction list... 
[+] key not found, using none
[+] looking for /home/user/.ilma.entropity/ilma_INSTRUCTION_SET
[+] getting new source (thanks to http://www.encyclopediadramatica.com/Internet)
[+] NYTimes and Google can help us.
[*] Looking for sources with random key [premiere] ...
[+] sleeping 2 seconds...
[*] Looking for sources with random key [breaths] ...
[+] sleeping 5 seconds...

[...]

[-] removing /home/user/.ilma.entropity/opengrok.creo.hu/dragonfly/rss/src/sys/bus/isa/i386/isa_dma.c: XML document text
[-] removing /home/user/.ilma.entropity/opengrok.creo.hu/dragonfly/history/src/sys/kern/subr_rman.c: XML document text
[+] keeping /home/user/.ilma.entropity/www.page.sannet.ne.jp/joel_rees/sannet/outbox/intoTable.c: ASCII C program text, with CR line terminators
[+] keeping /home/user/.ilma.entropity/www.mudmagic.com/codes/dl/2242/voice.c: ASCII C program text, with CRLF, LF line terminators
[+] /home/user/.ilma.entropity/ilma_INSTRUCTION_SET created with 159 instructions
[+] linking /home/user/.ilma.entropity/ilma_INSTRUCTION_SET to /home/user
user@unnamed:~$ 

ilma, when try to build the instruction set, use lynx for query google (filetype:c + a random keyword taken from the most used in one year of new york times), and wget the first 50 results. After the downloads check which files are ASCII C/ASCII C++, and discard the other. Once cleaned the downloads, generate the file, sorted per instruction value. An unknow bug cause the inclusion of the temporary directory in some instruction, I've not investigated, I simple remove them when I find it in the instruction set. the problem appear with this style:

instruction 2 http://_6913_26173/www.xs4all.nl/~johanw/CoS/c2.c

This is the ilma_INSTRUCTION_SET generated from another user. the URLs are different but the instruction is the same, a programmer use URLs that other has not. The others for execute the code download them. For program ilma code, I propose to follow the same way of hello.doublelang (included in the packets), the day after the first development almost one ASCII C became unreachable. Should be interesting for a serious ilma programmer, collect a list of historically present ASCII C file, for use only the safest reference.

user@unnamed:~$ more ilma_INSTRUCTION_SET 
instruction 1 http://ccat.sas.upenn.edu/humm/Courses/CompHum/CGI/cgi_utls.c
instruction 1 http://fresh.t-systems-sfr.com/linux/src/xvmoontool-3.1.tar.gz:b/xvmoontool-3.1/riseset.c
instruction 1 http://www-users.cs.umn.edu/~mein/blender/plugins/sequence/spin/spin.c
instruction 1 http://www.cnmat.berkeley.edu/OpenSoundControl/src/OSC-Kit/OSC-priority-queue.c
instruction 1 http://www.seismo.unr.edu/ftp/pub/louie/bench/colmft.c
instruction 2 http://shire.larc.nasa.gov/PRODOCS/fire/read_software/fire_ax_cms_read.c
instruction 2 http://www.cnmat.berkeley.edu/OpenSoundControl/src/OSC-Kit/test-priority-queue.c

antiforensic execution

Fintato eseguite qualcosa sul vostro computer, qualche traccia rimarra'. l'eseguibile stesso, le parti di lui non cancellate o dei file temporani residui. L'analisi forense che puo' subire un nostro disco dopo che c'e' stato copiato potra' individuare queste tracce. il codice ilma fa generare l'eseguibile on the fly, non e' direttamente lui un dato discriminante o sensibile. Questa tecnica puo' essere utile anche per la conservazione di materiale sul proprio disco. Dividendo i file sensibili in parti che non possono funzionare separatamente (gli header del formato dai contenuti ?), diffondendo in rete la parte piu' piccola e conservando solo la parte piu' grossa, si potrebbe con uno uso minimo di banda scaricare la parte mancante ogni volta che si vuole visualizzare il contenuto, proteggendo cosi' il prodotto finale da eventuali furti. La protezione viene dall'autenticazione con la quale si accede alla parte piccola e distribuita: un attaccante non potra' ottenere la stessa informazione mancante. I sistemi di NAT evasion sono in crescita e il loro uso naturale e' la creazione di reti distribuite.
Puo' sembrare strano cercare di perdere performance, ma se colleghiamo il fatto che la crittografia diventi illegale (come se non esistesse la steganografia e come se questa legge non favorisca solo chi ha nel proprio disco cifrato roba che gli darebbe piu' di 5 anni di prigione). Inoltre, se il possesso di un .pdf puo' essere considerato un chiaro atto di terrorismo, mi sembra naturale che la protezone piu' appropriata sia -non avere dati compromettenti-, e ricrearli solo quando servono. Per approfondimenti:

nice law for help narcopedoterroris in UK, fixed by hidden volumes

nice law for drop human right instead of terrorist, fixed by plausible deniability


parasitic programming

Parassita inteso come dato che per funzionare ha bisogno di altri dati. Gli altri dati, come le vittime dei parassiti, ne sono inconsapevoli. Questa funzione in ilma e' presente in quanto da file distributi per un certo motivo, vengono derivate informazioni di altra natura. I dati diffusi su internet sono di una quantita' tale da poter ricoprire, in relazione a come vengono letti, parecchie combinazioni di 1 e di 0. Questo significa che i nostri dati potrebbero non essere completi sul nostro disco, ma con alcune parti uguali a porzioni di file remoti, che anziche' conservare deleghiamo al download il loro raccoglimento. Certo questo puo' sembrare un'eresia per le performance, e probabilmente lo e', ma se in ambiti di rete locale venissero fatte selezioni di questo tipo ci sarebbe molta piu' ottimizzazione. Sforzandosi, il prodotto di ilma puo' essere visto come un file decompresso, ilma come il software di decompressione, il codice come un file compresso con LZ77, gli URL come riferimenti al dizionario, ed i file ASCII C come il contenuto del dizionario.

code mortality

Se lo sviluppatore di software ilma, oltre che tenere traccia dei server piu' stabili affinche' produrre software che funzioni un numero di volte superiore a uno, tenesse un'istruzione risolta tramite un file ASCII C sotto il suo controllo, protrebbe esecitare la "soppressione del codice". Normalmente quando un codice viene distribuito ha una durata infinita. Una volta diffuso non puo' piu' essere fermata la sua esecuzione. Invece produrre codice con una necessita' parassita soddisfatta da una sorgente sotto il nostro controllo, ci da di conseguenza la possibilita' di interrompere l'esecuzione del codice togliendo la parte a lui necessaria. Andando nella directory $HOME/.ilma.entropity, avviando wget -x http://your.site.net/your.file.c e poi risctruendo l'indice con "ilma.sh umpf"



two last words:

This work is intended to be funny :) and try some weird ideas for fully distribute our resources in decentralyzed network way.





ILMA DOWNLOAD:

ilma interpreter, instruction dictionary and hello world
(Tested only under Linux)

ILMA (voulunteer and forced) SUPPORTER:

The ReactOS Ambassador: KJK::Hyperion
lulz worthy - http://www.encyclopediadramatica.com
Technomantic ilma prophet: nextie - http://deref.blogspot.com
Ilma brotherhood/sisterhood followers: s0ftpj - http://www.s0ftpj.org
crypto survivor doctrine: winston smith project http://www.winstonsmith.info
Quasi-random event able to remember to me to complete ilma: hackmeeting - http://hackmeeting.org
Improvered ilma follower and workshipper, talking lolcode with infinitie patience and english skillz: zen - http://kill-9.it
--
ilma builder - vecna: WARNING: the danger of producing ilma code is the same for the male of praying mantis in reproduction behaviour