Hola mundo ofuscados

En fitzrovian.com podemos encontrar varios Hola Mundo escritos en C ofuscado. Se llama código ofuscado a aquel en el que se utilizan todos los artificios posibles para dificultar al máximo la lectura del programa, a modo de chiste, broma, y pasatiempo.

A continuación he copiado cada uno de ellos, junto con una explicación de cómo imprime “Hello world” cada programa, explicación a la que podéis acceder pulsando sobre el botón del mismo nombre.

¿Cuántos podéis descifrar por vosotros mismos?

hello1.c

#define _________ }
#define ________ putchar
#define _______ main
#define _(a) ________(a);
#define ______ _______(){
#define __ ______ _(0x48)_(0x65)_(0x6C)_(0x6C)
#define ___ _(0x6F)_(0x2C)_(0x20)_(0x77)_(0x6F)
#define ____ _(0x72)_(0x6C)_(0x64)_(0x21)
#define _____ __ ___ ____ _________
#include<stdio.h>
_____


hello2.c

#include<stdio.h>
main(){
    int x=0,y[14],*z=&y;*(z++)=0x48;*(z++)=y[x++]+0x1D;
    *(z++)=y[x++]+0x07;*(z++)=y[x++]+0x00;*(z++)=y[x++]+0x03;
    *(z++)=y[x++]-0x43;*(z++)=y[x++]-0x0C;*(z++)=y[x++]+0x57;
    *(z++)=y[x++]-0x08;*(z++)=y[x++]+0x03;*(z++)=y[x++]-0x06;
    *(z++)=y[x++]-0x08;*(z++)=y[x++]-0x43;*(z++)=y[x]-0x21;
    x=*(--z);while(y[x]!=NULL)putchar(y[x++]);
}

hello3.c

#include<stdio.h>
#define __(a) goto a;
#define ___(a) putchar(a);
#define _(a,b) ___(a) __(b);
main()
{ _:__(t)a:_('r',g)b:_('$',p)
  c:_('l',f)d:_(' ',s)e:_('a',s)
  f:_('o',q)g:_('l',h)h:_('d',n)
  i:_('e',w)j:_('e',x)k:_('\n',z)
  l:_('H',l)m:_('X',i)n:_('!',k)
  o:_('z',q)p:_('q',b)q:_(',',d)
  r:_('i',l)s:_('w',v)t:_('H',j)
  u:_('a',a)v:_('o',a)w:_(')',k)
  x:_('l',c)y:_('\t',g)z:___(0x0)}

hello4.c

int n[]={0x48,
0x65,0x6C,0x6C,
0x6F,0x2C,0x20,
0x77,0x6F,0x72,
0x6C,0x64,0x21,
0x0A,0x00},*m=n;
main(n){putchar
(*m)!='\0'?main
(m++):exit(n++);}

hello5.c


main(){int i,n[]={(((1<<1)<<(1<<1)<<(1<<
1)<<(1<<(1>>1)))+((1<<1)<<(1<<1))), (((1
<<1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<<(
1<<1)<<(1<<1))+((1<<1)<<(1<<(1>>1)))+ (1
<<(1>>1))),(((1<<1)<<(1<<1)<<(1<<1)<< (1
<<1))-((1<<1)<<(1<<1)<<(1<<(1>>1)))- ((1
<<1)<<(1<<(1>>1)))),(((1<<1)<<(1<<1)<<(1
<<1)<<(1<<1))-((1<<1)<<(1<<1)<<(1<<(1>>1
)))-((1<<1)<<(1<<(1>>1)))),(((1<<1)<< (1
<<1)<<(1<<1)<<(1<<1))-((1<<1)<<(1<<1)<<(
1<<(1>>1)))-(1<<(1>>1))),(((1<<1)<<(1<<1
)<<(1<<1))+((1<<1)<<(1<<1)<<(1<<(1>>1)))
-((1<<1)<<(1<<(1>>1)))),((1<<1)<< (1<<1)
<<(1<<1)),(((1<<1)<<(1<<1)<<(1<<1)<<(1<<
1))-((1<<1)<<(1<<1))-(1<<(1>>1))),(((1<<
1)<<(1<<1)<<(1<<1)<<(1<<1))-((1<<1)<< (1
<<1)<<(1<<(1>>1)))-(1<<(1>>1))), (((1<<1
)<<(1<<1)<<(1<<1)<<(1<<1))- ((1<<1)<< (1
<<1)<<(1<<(1>>1)))+(1<<1)), (((1<<1)<< (
1<<1)<<(1<<1)<< (1<<1))-((1<<1)<< (1<<1)
<<(1<<(1>>1)))-((1<<1) <<(1<< (1>>1)))),
(((1<<1)<< (1<<1)<<(1<<1)<< (1<<1))- ((1
<<1)<<(1<<1)<<(1<<1))+((1<<1)<< (1<<(1>>
1)))), (((1<<1)<<(1<<1) <<(1<<1))+(1<<(1
>>1))),(((1<<1)<<(1<<1))+((1<<1)<< (1<<(
1>>1))) + (1<< (1>>1)))}; for(i=(1>>1);i
<(((1<<1) <<(1<<1))+((1 <<1)<< (1<<(1>>1
))) + (1<<1)); i++) printf("%c",n[i]); }

hello6.c

#include <stdio.h>
#define _(_) putchar(_);
int main(void){int i = 0;_(
++++++++++++++++++++++++++++
++++++++++++++++++++++++++++
++++++++++++++++++++++++++++
++++++++++++++++++++++++++++
++++++++++++++++++++++++++++
++++i)_(++++++++++++++++++++
++++++++++++++++++++++++++++
++++++++++i)_(++++++++++++++
i)_(--++i)_(++++++i)_(------
----------------------------
----------------------------
----------------------------
----------------------------
----------------i)_(--------
----------------i)_(++++++++
++++++++++++++++++++++++++++
++++++++++++++++++++++++++++
++++++++++++++++++++++++++++
++++++++++++++++++++++++++++
++++++++++++++++++++++++++++
++++++++++++++++++++++++++i)
_(----------------i)_(++++++
i)_(------------i)_(--------
--------i)_(----------------
----------------------------
----------------------------
----------------------------
----------------------------
------i)_(------------------
----------------------------
i)return i;}

Comentarios
  1. DrLecter

    Cabe acotar que existe gente que ofusca código no a modo de chiste, broma, o pasatiempo sino con el fin de causar problemas de organización, de competencia o para volverse ‘imprescindibles’ para el stakeholder. Saludos.

    Responder

  2. Cuervo

    Me he quedado ofuscado!!! jajaja

    Responder

  3. jajaja están muy buenos los códigos.
    El que lo hizo tiene tiempo de sobra.

    Responder

  4. Ahh, la belleza del C, me he perdido en varias 😀

    Para entender “al ojo” algo así hay que ser como el tipo de Matrix que al mirar el código veía mujeres rubias, morenas, etc.

    Responder

  5. En la Semana ESIDE o ESIDE WORDS llevan años organizando concursos de programación ofuscada, nunca he participado pero no dudo de que lleguen buenos trabajos 😉
    En la Facultad somos asi 😛

    Responder

  6. […] Enlace: | Manuales de C Vía: | MundoGeek […]

    Responder

  7. Así es como se debe hacer, hombre. Cualquier cosa que sea más avanzada es herejía.

    Excepto quizás el C++. El C++ es bueno si no usas strings ni herencias.

    Responder

  8. Se me olvidaba, por si a alguien le interesa:
    http://semana.eside.deusto.es/index.php/Concursos

    Es ahi dónde aparece el concurso 😉

    Responder

  9. El abuso nunca es bueno, pero también es necesario. 😛

    Responder

  10. Muchas gracias newton, muy interesante 🙂

    Responder

  11. […] Mundo Geek, colección de “Hola Mundo” escritos en C ofuscado, esto sí que es código legible, […]

    Responder

  12. […] Hola Mundos en C ofuscados […]

    Responder

  13. valenluis

    Coincido con koki respecto a lo de matrix xD

    Responder

  14. lord_bionyx

    Ofuscado? nunca lo habia oido… pero en fin, probe algunos codigos y funcan… hay que tener tiempo pa’ hacer algo asi… XD

    Responder

  15. Juan

    No hay que tener tiempo pa’ hacer algo así sino un cerebro e mucha imaginación!!!

    Responder

  16. BARB

    Saben me ha parecido fantastico todo estos codigos, auque solo se q esto es solo una probadita por decirlo asi.

    Conosco una ing bueno ya master q dice ser programadora en C pero la verdad no le creo nada pues nunca lo ha demostrado.

    Yo soy nuevo el el ramo pero cada vez me interesa saber mas y mas.

    creo q esto me sirve d e aliento para saber q sepuede hacer mas y mas.

    Responder

  17. Otto

    Si se me dificulta:

    echo “Hello World”

    Se imaginan con eso??? gente loca…

    Responder

  18. Anónimo

    que pendejadas son esas??

    Responder

  19. keep up the wonderful work , I read few blog posts on this site and I think that your web site is rattling interesting and holds sets of wonderful info .

    Responder

  20. […] The International Obfuscated C Code Contest Hola mons horribles […]

    Responder

  21. En estos momentos hay un desafío llamado *Primer Concurso de Ofuscación de Código* y es organizado por HardForo (.com)

    Responder

Deja un comentario