Paul Selles

Computers and cats

Category Archives: C

Code Obfuscation: The 12 Days of Christmas

There is nothing more festive than code obfuscation, especially when that code obfuscation comes in the form of the carol The 12 Days of Christmas. The International Obfuscated C Code Contest is held every year since 1984 [1]. In 1988 one of the winners, Ian Phillipps’ entry printed out the lyrics to The 12 Days of Christmas [2]. Here is the winning code [3]:

main(t,_,a )
char
*
a;
{
				return!

0<t?
t<3?

main(-79,-13,a+
main(-87,1-_,
main(-86, 0, a+1 )


+a)):

1,
t<_?
main( t+1, _, a )
:3,

main ( -94, -27+t, a )
&&t == 2 ?_
<13 ?

main ( 2, _+1, "%s %d %d\n" )

:9:16:
t<0?
t<-72?
main( _, t,
"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l,+,/n{n+,/+#n+,/#;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l q#'+d'K#!/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# ){nl]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#n'wk nw' iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c ;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/")
:
t<-50?
_==*a ?
putchar(31[a]):

main(-65,_,a+1)
:
main((*a == '/') + t, _, a + 1 )
:

0<t?

main ( 2, 2 , "%s")
:*a=='/'||

main(0,

main(-61,*a, "!ek;dc i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry")

,a+1);}

 

Since its inaugural release, the program has been making rounds on the internet or demoed in CS classes. It is interesting to look at, but how does it work? To save the trouble of redoing work, you can check two best code analysis by Thomas Ball and  Mike Markowski [4],[5]. They are both very thorough and to the point and definitely worth the time.

 

Paul

 

References

[1] The International Obfuscated C Code Contest. 1984-2013. Leo Broukhis, Simon Cooper, Landon Curt Noll

[2] The International Obfuscated C Code Contest, 1988 Winning Entries. 1984-2013. Leo Broukhis, Simon Cooper, Landon Curt Noll

[3] The International Obfuscated C Code Contest, phillipps.c. 1988. Landon Curt Noll & Larry Bassel

[4] Reverse Engineering the Twelve Days of Christmas. 1998. Thomas Bell

[5] xmas.c. 2008. Mike Markowski