info

Obfuscated Code

from time to time I amuse myself by writing little pieces of obfuscated code. it's not worthy of competition in an obfuscated code contest, but it's still fun. since they're all pretty small pieces of code, i've just pasted them right into this page. I encourage you to try to figure out what they do without reading my comments on them (which of course preceed them) or compiling them. But only if you enjoy torturing yourself in that manner.

a signature piece

I wrote this sometime during the fall of 1999, it just prints out my name and email address. it recursively calls itself in order to do so, using a static char* array that gets incremented every pass through the main function. this doesn't compile with c++ compilers because in c++ it is apparently illegal to recursively call main.

int main(int i){static char *p="\n=eok)bmgi[\\gX2d[YW_\\'\n\\SQO7\004HVF0"; char c;if(i<-33)return i+1;else{c=((i>0)?i[--p-i+1]:*(p++)); putchar(main(i-1)-((i>0)?0:i));return c;}}

a non-signature piece

I wrote this sometime in early february, 2000. although this code prints out my name and email address as usual, it is unsuitable as a signature, due to it's size. the size is bloated because you can only put one #define on a line, so since it was long but with lots of whitespace, i filled it up with bogus comment blocks. this one indexes into an array containing the encoded output string via another array of characters. It also contains no spaces other than ones within strings.

/**//**//**/#define/**/_S_/*http://prijks.esgeroth.org*/}/*(C)2000*//**/ /**//**//**//**//**//**//**//**//**/#define/**/_K_/**/putchar('2'-'('); #define/**/_I_/**/putchar(_3[_2[_5]-*(_2+4)]-((_2[_5]-60)%10));_l(_0); /**//**/#define/**/_R_/**/int/**/_5,_;for(_5=0;_5<5;_5++)/**//**//**/ #define/**/_0_/**/"\"""r"/**/"e""e""f""e"/**/"r""-""""m""a"/**/"n\""" """ #define/**/_4_/**/int/**/main(int/**/_0){static/**/char/**/*_2="CJLJ<"; #define/**/_J_/**/for/**/(_5=0;_5<27;_5++){_=_4[_5]-'F';putchar(_3[_]-_%10);} #define/**/_2_/**/static/**/char/**/*_3=" S>AnnqWx{@/irixzo";/**//**/ void/**/_l(int/**/_){switch(_){case/**/1:return;break;}printf(_0_);}/**/ _4_/**/_2_/**/static/**/char/**/*_4="GKJLUFHNOKJLUPTURTOSVWQSORI";/**/ /**//**//**//**//**/_R_/**/_I_/**/_J_/**/_K_/**/_S_/**//**//**//**//**/

a signature piece

this one was written sometime in mid february 2000. it prints out, depending on the number of command line arguments, my name and email address, my webpage url, or gibberish. it accomplishes this thru a very simplistic pseudo-random number generator that is seeded using argc.

char *s=":r\0tfnq<=-foiha\xA/,,aerrmprrr\x1D\x9heefph;cfqife\x1Dtsnhjq-QpM" "nmnn\0bidqf";unsigned int _(unsigned int _0){return((337*_0+113)%63);}int main(int a){unsigned int b=_(a);while(b[s]){putchar(s[b]+b%(a+2));b=_(b);}}

fun with ascii

this one was written early october 2000. it draws a box with a '*' bouncing around inside it.

void s(int*_,int __){*_=(__<=0)?((*_<0)?-*_:*_):((*_>0)?-*_:*_);}unsigned int k;void r(int*_){*_=(k=(16807*k)%2147483647)%5-2;}void _(int c,int n){for(;n>0; --n)putchar(c);}int main(int a){int p[2]={(a+7)%19,(a+12)%19},d[2]={a%5-2,(a+2) %5-2},m,n;k=a;_(8,2048);_(32,2048);_(8,2048);while(1){_(32,1);_(45,19);_(32,1); _(10,1);for(m=0;m<19;++m){_(124,1);for(n=0;n<19;++n){if(p[0]==n&&p[1]==m)_(42, 1);else _(32,1);}_(124,1);_(10,1);}_(32,1);_(45,19);_(32,1);for(m=0;m<2;++m){ if(p[m]<=0||p[m]>=18){s(d+m,m[p]);r(d+1-m);}}for(n=0;n<2;++n){p[n]+=d[n];if (p[n]<0)p[n]=0;if(p[n]>18)p[n]=19;}_(8,2048);_(0,98765);}return 0;}

fun with noise

this one was written may 4 2000. it generates a xpm file, according to simple command line specifications, filled with "patterned" "random" noise. (the xpm data is printed to stdout, redirect to a file, then view said file with your favorite graphics app)

int rs;int U=50,V=50,S=50,P=2;int r(){return(rs=(rs*6197)%100001);} char *_S_ = "/+\"[TR&17\023}\177m" "\201wr0tzt\2065@7\210\220\214\215\213\225y|" "@^B\236."; void _(int i){putchar(i);}void _n(int i){_(i/10+'0');_(i%10+'0'); }void _h(int i){ _((i>9)?(i+55):(48+i));}void _b(){_('\t');_('c');_(' '); _('#');}void _e(){_(34);_(',');_('\n');}void m(){int H, Z_32, q, Z;for(q = 0; q<37;++q)_(q[_S_]-q);_(34);_n(V);_(' ');_n(U);_(' ');_n(S);_(' ');_n(P);_(34); _(',');_('\n');for(H=0;H<25;++H){if(P==1){if(H>=S)goto ______;_(34);_('a'+H); _b();_h(r()%16);_h(r()%16);_h(H%16);_h(r()%16);_h((H*r())%16);_h(r()%16);_e(); }else{for(Z_32=0;Z_32<4;++Z_32){if(H*4+Z_32>=S)goto ______;_(34);_('a'+H); _('a'+Z_32);_b();_h(r()%16);_h(r()%16);_h(H%8+r()%8);_h(r()%16);_h(r()%16); _h(r()%16);_e();}}}______:for(H=0;H<U;++H){_(34);for(Z_32=0;Z_32<V;++Z_32){ if(P==1)_('a'+r()%S);else{do{q=r()%25;Z=r()%4;}while(q*4+Z>=S);_('a'+q); _('a'+Z);}}_e();}_('}');_(';');_('\n');}int main(int c, char* v[]){rs=((int) v[0])%6197;while(rs%2==0||rs%5==0)++rs;if(c>1)U=(v[1][0]-'0')*10;if(c>2)V=( v[2][0]-'0')*10;if(c>3){S=(v[3][0]-'0')*10;if(v[3][1])S+=(v[3][1]-'0');else S /=10;}if(S<25)P=1;m();return 0;/* by PWR (http://prijks.esgeroth.org/ */}

pyramid

Created July 31, 2002 and updated later that day. Takes a command line argument for the height of the output.

; int main( int aa, char*v[]) {int x[5];0 [x]=aa>1?atoi (v[1]):017;for( 1[x]=1;1[x]<=0[x] ;++1[x]){for(3[x]=1 ;3[x]<0[x]-1[x]+1;++3 [x]){putchar(32);}for(2 [x]=0;2[x]<1[x];++2[x]){; ;putchar(46);putchar(32);}; putchar(10);}/**/return 0;};;