DevNetwork Obfuscated PHP Contest 2006

Ye' old general discussion board. Basically, for everything that isn't covered elsewhere. Come here to shoot the breeze, shoot your mouth off, or whatever suits your fancy.
This forum is not for asking programming related questions.

Moderator: General Moderators

User avatar
Weirdan
Moderator
Posts: 5978
Joined: Mon Nov 03, 2003 6:13 pm
Location: Odessa, Ukraine

Post by Weirdan »

edit: If anyone wants to know how it works, I can explain it.
Well, your actual string reverser is simple xor-without-temp-var exchange. The part that displays form is more interesting, looks like a zipped string encoded using filename as a key.
User avatar
Weirdan
Moderator
Posts: 5978
Joined: Mon Nov 03, 2003 6:13 pm
Location: Odessa, Ukraine

Post by Weirdan »

Feyd, I have a question regarding this part:

Code: Select all

 
function func($arg) { // decodes html page using filename as a key
// te_lBO0A3obw-GYX5hknqCFKu94vdsHD7cJQPLETfSg6R2IZUmVWMpia1rxNy8jz.php
    list($filename) = explode('.',basename(__FILE__));
    $ret = false;
    $str = null;
    for($i = 0, $l = strlen($arg); $i < $l; ++$i) {
        $str .= str_pad(
            /*input*/decbin(
                strlen($filename)-strrpos($filename,$arg[$i]) % strlen($filename)-1 // offset of the current character 
                                                                                    // from the end of the filename
            ),
            /*pad length*/6, // 6 (why 6, shouldn't it be 8?)
            /*pad string*/0, // 0 (zero)
            /*pad type*/STR_PAD_LEFT // STR_PAD_LEFT
        );
 
        while(strlen($str) >= <!-- s8) --><img src=\"{SMILIES_PATH}/icon_cool.gif\" alt=\"8)\" title=\"Cool\" /><!-- s8) --> {
            $ret .= chr( bindec( substr($str, 0, <!-- s8) --><img src=\"{SMILIES_PATH}/icon_cool.gif\" alt=\"8)\" title=\"Cool\" /><!-- s8) --> ) ); 
            $str = substr($str, <!-- s8) --><img src=\"{SMILIES_PATH}/icon_cool.gif\" alt=\"8)\" title=\"Cool\" /><!-- s8) -->; 
        }
 
    }
    return $ret;
}
 
why did you use 6 as pad length?
User avatar
Mordred
DevNet Resident
Posts: 1579
Joined: Sun Sep 03, 2006 5:19 am
Location: Sofia, Bulgaria

Post by Mordred »

I haven't had time to check the actual code, so not knowing what is passed as $arg, I'm not sure of the purpose of this snippet.

At first glance I thought "Wait, we've seen that" (infolock's code), but then the 6 is out of place ;)

What is really happening is that you get a stream of magic numbers ("offset of the current character from the end of the filename" according to your comments) and pack them in a bit stream, but only taking 6 bits of each. The while() loop waits for a whole 8-bit character in this stream, and gets it out. I hope my blabber is clear enough ;)

P.S. Think of it as a machine for exporting beer from USA to Ukraine ;) On the input you have American sixpacks, but since they all know how much you ex-Soviets guys drink, they repack it by eights ;)

(Чтобы ответить на твой вопрос в этот трэд с jmut - да мы Болгары, случайно понял это и поздравил :) )
User avatar
Weirdan
Moderator
Posts: 5978
Joined: Mon Nov 03, 2003 6:13 pm
Location: Odessa, Ukraine

Post by Weirdan »

What is really happening is that you get a stream of magic numbers ("offset of the current character from the end of the filename" according to your comments) and pack them in a bit stream, but only taking 6 bits of each.
Oh, I see now that that's safe because key length is 65 chars (thus no offset could be greater than 64 [six bits]).
User avatar
feyd
Neighborhood Spidermoddy
Posts: 31559
Joined: Mon Mar 29, 2004 3:24 pm
Location: Bothell, Washington, USA

Post by feyd »

Correct, it is my own construct of base64. I added the reversal to add a tiny twist in the mix and make it a bit more interesting. :) Same with the shifts, string lookups, use of the filename and such.
User avatar
onion2k
Jedi Mod
Posts: 5263
Joined: Tue Dec 21, 2004 5:03 pm
Location: usrlab.com

Post by onion2k »

Typically the close of this has coincided with me getting a huge pile of work to do with a tight deadline. I will go through the entries and pick some winners, but it'll not be for a little while .. so I guess if you've not entered yet you might be able to sneak a last minute post in. ;)
impulse()
Forum Regular
Posts: 748
Joined: Wed Aug 09, 2006 8:36 am
Location: Staffordshire, UK
Contact:

Post by impulse() »

Here goes for the shortest:

Code: Select all

 
$a = $_REQUEST["a"];
echo strrev($a);
 
http://www.stesbox.co.uk/php/strrev.html
User avatar
Mordred
DevNet Resident
Posts: 1579
Joined: Sun Sep 03, 2006 5:19 am
Location: Sofia, Bulgaria

Post by Mordred »

impulse() wrote:Here goes for the shortest:

Code: Select all

 
$a = $_REQUEST["a"];
echo strrev($a);
 
http://www.stesbox.co.uk/php/strrev.html
Rejected

If we assume the server is a production environment (i.e. won't display errors), the shortest possible solution will be:

Code: Select all

<?=strrev($_GET[s])?>
It doesn't fit the task though, it specifically states that "The code must be as non-obvious as possible."

Although, come to think of it, my solution also breaks "It should be pretty much impossible to deduce the purpose of the script just by looking at it." -- it being extensively commented and so on ;) :)

Btw - a question - do we have to explain the workings of our scripts? (Or otherwise only Weirdan would know what's happening there ;P)
User avatar
hawleyjr
BeerMod
Posts: 2170
Joined: Tue Jan 13, 2004 4:58 pm
Location: Jax FL & Spokane WA USA

Post by hawleyjr »

And the winner is???
User avatar
onion2k
Jedi Mod
Posts: 5263
Joined: Tue Dec 21, 2004 5:03 pm
Location: usrlab.com

Post by onion2k »

hawleyjr wrote:And the winner is???
To be announced.

I'm right at the end of a 2 month project, deadline is looming, I'm working my arse off to meet it. Beginning of next month I'll be able to go back through this topic and find some winners.
User avatar
Mordred
DevNet Resident
Posts: 1579
Joined: Sun Sep 03, 2006 5:19 am
Location: Sofia, Bulgaria

Post by Mordred »

If we were to discuss our code, would it interfere with your judging afterwards?
User avatar
onion2k
Jedi Mod
Posts: 5263
Joined: Tue Dec 21, 2004 5:03 pm
Location: usrlab.com

Post by onion2k »

Mordred wrote:If we were to discuss our code, would it interfere with your judging afterwards?
Not at all. Discuss away. Might actually help my judging.
jmilane
Forum Commoner
Posts: 89
Joined: Mon Aug 07, 2006 6:05 pm

Post by jmilane »

hawleyjr wrote:I love it :)

http://jameshawley.com/forum/devnet.php?IO0=HAWLEYJR

Code: Select all

/*iio=I$iO*/$i=O;/*$iIII1$=OIi1$o1OOIo=1iO1o$=Ooooii=IIIIi$oI1Io==1=*/
/*oi==O1=1OI*/$iOIiOi1iOOOIIOI1O1ooo1IIi1OOIO/*oiO111O=Ioo1iIIo1=oIi*/
/*IOI=oO=I1oi1I1Ii*/=/*1i$$O$o$iIioIii1=oI1*/$_GET['IO0']/*10$$IIoOI*/
/*OIiiOo1$$OiOO$Ii11io1ii1ioIO$$Io=1$o1OOIo=1iO1o$=Ooooii=IIO$$IIiII*/
/*1i1oiOioo$=1oi==ooOI1=O1i*/;/*oiOiOiOII1o1OI$$IIiO1o1IOOio==1=OiIi*/
/*11io1ii1ioIOIo=OI=$1$iOIiOi1iOOOIIOI1O1OI1O1OIooo1IIi1OOIO/*O1OOoo*/
/*oOOo11i1Ii*/;/*iIIOO*/$Io11ioO/*i$1$Io11=ioO=1iiooOI1=*/;/*i$1$Io1*/
/*=11IoIio=$iIOI=IoiIoii1$$$=IOO=i11$iIioI11OIoIOO=o=ii=oI$1=O=OIoi1*/
/*II=I=o1IoiIoOoOIOi111*/$IOOI1o1oIooiioOO1/*oo1$Ioi1o1$oi$oIi$=I1Ii*/
/*1iI$O=oOOo$iio$iOI*/=/*i$oIi$oOOo$iioOI*/create_function/*=I1iI$O=*/
/*=iIoIOO*/(/*i$oo=OoI1I*/'$oI1IO1o11I1IoO1IIoIOoOIooIo'/*oo==1I$=i=*/
/*O$IiO=I$IIO*/,/*$1OO11iOooO=oii1=*/'$oOiOOoo1IOI1OIIO=0/*i$I=1i$II*/
/*o=oOoi$O1oiI1o$iii$1$oi11=i=IioI1OOiI1*/;/*i11=i=IioII1Oo11=OooiII*/
/*oiIO$OO1i1oi1ioIOi1ooOoOooI*/for/*1$1oOi=iIooO11*/(/*1Oo1I=Io1=oO$*/
/*Ii=1o1iIoOo*/$oIoIO1ooIIIiIoOooOiOo111/*O1o$iii$1$oIi1i1iO1iIO1Ioo*/
/*o*/=/*==1OO*/0/*1=1$=1i=I$1iIi$II1Io1o1*/;/*1iiI1oO1$O1IOI1OI=ooIo*/
/*IiIOi/*1IOOIOo$IIO==o1OI1OOiiIo$1=i1$$i=oiI$O1IiIOioO1IOOIOo$IIO==*/
/*o$OooO=IIii$I11oOoIoo1I*/$oIoIO1ooIIIiIoOooOiOo111/*ioOOOOiOIIiOIi*/
/*i=IiOi$$1iiI1oO1$*/</*Oi=oO1IOI1=ooI=O1oIoioio=IIoo=O1o1I1oIo111OO*/
/*1IOI1=ooIoIoioio=IIooI==I$I=$OI*/strlen/*IIo11$$OoiiOi=oIO1iIoO=oO*/
/*IiI1=O1i1*/(/*oioO$i==OOoI11I==Oi*/$oI1IO1o11I1IoO1IIoIOoOIooIo/*o*/
/*o1$$iIIii=iOiOO=iio1I$=i1i*/)/*I$iO1$1OooiO1i11i$1*/;/*Io1oi1O1$o=*/
/*0*/$oIoIO1ooIIIiIoOooOiOo111/*1oii11iiOI=iIoIio$iio=O=I1Io==1=Ii1O*/
/*1I=ioi$$1OiO111IIIoI*/++/*o1I=o1o1OOooi1O=o*/)/*=oIOIoi1ii1oi11iI=*/
/*11O1o$=I=I1i=I1I=$1O=iI11oi11*/{/*OO=IO1OI1oIi1oO$$iioOoi1ioi$$oOi*/
/*1OI1oIi1oO$$iioOoi1ioi$$oOi1Io1iooOoOOoO=$I*/$oOiOOoo1IOI1OIIO/*I=*/
/*Oo1=i$i=Oo1IiiOO1=oiIOi1=$o*/++/*i1$i1O1IiOI1$Ii$oOo*/;/*iIooOO$1o*/
/*IiOOOO=IOOiOI$=ioo=I1Ii1o*/}/*=$i1I$=iO11II=Io$$o*/return /*=I1o1O*/
/*1iO1oiio$oIi*/$oOiOOoo1IOI1OIIO/*O1iI=iii=iII1IoIOIo=o$i*/;/*I=OiI*/
/*I*/'/*IO1Oo1I$ii11IoOI$i$$Oo1oIO*/)/*IoIo$IOiOIiO$o1I1OOOoiOoiO$o1*/
/*io$1o$OO1ii=oI=1I*/;/*I1=IiO11iIoOIo1i=I$iO*/for/*Oo111ioi1oIIIii$*/
/*iIIIoo1OO=IOiiiO1o=Ii=ooOIO*/(/*oO1OIIii$=1=oOIIiooiioOiOOoI=11oO1*/
/*1I1o1I$o1=oOoio1ioO1iO1=ioO1*/$Oo111Ii1OiIIioiOiI11i1Oi/*$iOIO11Oo*/
/*===O1oo==O$1IiIOi=OIiIIOOOi*/=/*Oi1I1O==i1o1IoIIOI1Io=iooo=IIOiOO0*/
/*iOi$==11OoOIiOii$IOIIii$=ioIIO*/$IOOI1o1oIooiioOO1/*I=iIOOOo$iI1o1*/
/*O$111$1IIi$iooO1oioIOO$ioo111o*/(/*11=i=o1OI$i$1O11IOOOiI$i=$$iO1i*/
/*O1=$I1$I$=OoIooIi1iIIiiioIi1oI*/$iOIiOi1iOOOIIOI1O1ooo1IIi1OOIO/*$*/
/*IOoooO1ii1o1=11ioo$oI=oOi*/)/*OIOOiOoI=ooiOio1i1=i$O=iOIo1O*/;/*O=*/
/*i1o=1=Ooi1oOI1oiIoOO$$1I*/$Oo111Ii1OiIIioiOiI11i1Oi/*oo1II1o$O1=I1*/
/*i$OIo1iI$11i=O=OIo$=oIoIi*/>=/*i1O=1O$1O=IoIo=oiIO1Io$1i*/0/*OO$Oo*/
/*Ii$Oo1$iIiI$=oo=O1IO*/;$Oo111Ii1OiIIioiOiI11i1Oi/*11iIiio1IO1iI1=$*/
/*o1Oo==i=Io111OOiOIOIOoiiI1iI$1I*/--/*I$111i=Ooii=oIoOO=*/)/*=1Oo11*/
/*o1=II1oOI$IiI$$ii1io1O$ooIO*/{/*I1iOO=iIO1$IoO=OI=oIIII*/echo /*O0*/
/*OOIII*/$iOIiOi1iOOOIIOI1O1ooo1IIi1OOIO/*ioi$IOi1=I11iOI=Ooiii$Io0$*/
/*oo=o1$oOoo$IIio=11oiO$iO1*/[/*Ioi11ioIi1=1o$oIO1oiO=ioIIoi11ioIi1=*/
/*==1iIOi$I==o11=III1iO1$O=ioI*/$Oo111Ii1OiIIioiOiI11i1Oi/*ioOOiOo$$*/
/*iI1O1I1===Oio$IiOiO1iOo11oO$$=I1o1I11OIoOI1o=iOi*/]/*oI1$=io=ioOii*/
/*iiioO1Ii1ooIOoiII$Oiii$=oi11o=iOO$=11iOIOo=iI*/;/*Ooi1=I=oiiOI1o$O*/
/*=1oIOI1o1I=iOooi1ioo=o=$iIoIi111i$$I=1IO1O1oO=o1*/}/*IOOi1=i1Io=iO*/
/*OIo1OooOo1iOoiI=IIoIo1$O=1$O1I$oIoiIiIoo=i1$=O$i1O1Ooo=1iI$OIIOIo1*/
There are pieces of my brain all over my keyboard.

Hurts.
User avatar
a94060
Forum Regular
Posts: 543
Joined: Fri Feb 10, 2006 4:53 pm

Post by a94060 »

jmilane wrote:
hawleyjr wrote:I love it :)

http://jameshawley.com/forum/devnet.php?IO0=HAWLEYJR

Code: Select all

/*iio=I$iO*/$i=O;/*$iIII1$=OIi1$o1OOIo=1iO1o$=Ooooii=IIIIi$oI1Io==1=*/
/*oi==O1=1OI*/$iOIiOi1iOOOIIOI1O1ooo1IIi1OOIO/*oiO111O=Ioo1iIIo1=oIi*/
/*IOI=oO=I1oi1I1Ii*/=/*1i$$O$o$iIioIii1=oI1*/$_GET['IO0']/*10$$IIoOI*/
/*OIiiOo1$$OiOO$Ii11io1ii1ioIO$$Io=1$o1OOIo=1iO1o$=Ooooii=IIO$$IIiII*/
/*1i1oiOioo$=1oi==ooOI1=O1i*/;/*oiOiOiOII1o1OI$$IIiO1o1IOOio==1=OiIi*/
/*11io1ii1ioIOIo=OI=$1$iOIiOi1iOOOIIOI1O1OI1O1OIooo1IIi1OOIO/*O1OOoo*/
/*oOOo11i1Ii*/;/*iIIOO*/$Io11ioO/*i$1$Io11=ioO=1iiooOI1=*/;/*i$1$Io1*/
/*=11IoIio=$iIOI=IoiIoii1$$$=IOO=i11$iIioI11OIoIOO=o=ii=oI$1=O=OIoi1*/
/*II=I=o1IoiIoOoOIOi111*/$IOOI1o1oIooiioOO1/*oo1$Ioi1o1$oi$oIi$=I1Ii*/
/*1iI$O=oOOo$iio$iOI*/=/*i$oIi$oOOo$iioOI*/create_function/*=I1iI$O=*/
/*=iIoIOO*/(/*i$oo=OoI1I*/'$oI1IO1o11I1IoO1IIoIOoOIooIo'/*oo==1I$=i=*/
/*O$IiO=I$IIO*/,/*$1OO11iOooO=oii1=*/'$oOiOOoo1IOI1OIIO=0/*i$I=1i$II*/
/*o=oOoi$O1oiI1o$iii$1$oi11=i=IioI1OOiI1*/;/*i11=i=IioII1Oo11=OooiII*/
/*oiIO$OO1i1oi1ioIOi1ooOoOooI*/for/*1$1oOi=iIooO11*/(/*1Oo1I=Io1=oO$*/
/*Ii=1o1iIoOo*/$oIoIO1ooIIIiIoOooOiOo111/*O1o$iii$1$oIi1i1iO1iIO1Ioo*/
/*o*/=/*==1OO*/0/*1=1$=1i=I$1iIi$II1Io1o1*/;/*1iiI1oO1$O1IOI1OI=ooIo*/
/*IiIOi/*1IOOIOo$IIO==o1OI1OOiiIo$1=i1$$i=oiI$O1IiIOioO1IOOIOo$IIO==*/
/*o$OooO=IIii$I11oOoIoo1I*/$oIoIO1ooIIIiIoOooOiOo111/*ioOOOOiOIIiOIi*/
/*i=IiOi$$1iiI1oO1$*/</*Oi=oO1IOI1=ooI=O1oIoioio=IIoo=O1o1I1oIo111OO*/
/*1IOI1=ooIoIoioio=IIooI==I$I=$OI*/strlen/*IIo11$$OoiiOi=oIO1iIoO=oO*/
/*IiI1=O1i1*/(/*oioO$i==OOoI11I==Oi*/$oI1IO1o11I1IoO1IIoIOoOIooIo/*o*/
/*o1$$iIIii=iOiOO=iio1I$=i1i*/)/*I$iO1$1OooiO1i11i$1*/;/*Io1oi1O1$o=*/
/*0*/$oIoIO1ooIIIiIoOooOiOo111/*1oii11iiOI=iIoIio$iio=O=I1Io==1=Ii1O*/
/*1I=ioi$$1OiO111IIIoI*/++/*o1I=o1o1OOooi1O=o*/)/*=oIOIoi1ii1oi11iI=*/
/*11O1o$=I=I1i=I1I=$1O=iI11oi11*/{/*OO=IO1OI1oIi1oO$$iioOoi1ioi$$oOi*/
/*1OI1oIi1oO$$iioOoi1ioi$$oOi1Io1iooOoOOoO=$I*/$oOiOOoo1IOI1OIIO/*I=*/
/*Oo1=i$i=Oo1IiiOO1=oiIOi1=$o*/++/*i1$i1O1IiOI1$Ii$oOo*/;/*iIooOO$1o*/
/*IiOOOO=IOOiOI$=ioo=I1Ii1o*/}/*=$i1I$=iO11II=Io$$o*/return /*=I1o1O*/
/*1iO1oiio$oIi*/$oOiOOoo1IOI1OIIO/*O1iI=iii=iII1IoIOIo=o$i*/;/*I=OiI*/
/*I*/'/*IO1Oo1I$ii11IoOI$i$$Oo1oIO*/)/*IoIo$IOiOIiO$o1I1OOOoiOoiO$o1*/
/*io$1o$OO1ii=oI=1I*/;/*I1=IiO11iIoOIo1i=I$iO*/for/*Oo111ioi1oIIIii$*/
/*iIIIoo1OO=IOiiiO1o=Ii=ooOIO*/(/*oO1OIIii$=1=oOIIiooiioOiOOoI=11oO1*/
/*1I1o1I$o1=oOoio1ioO1iO1=ioO1*/$Oo111Ii1OiIIioiOiI11i1Oi/*$iOIO11Oo*/
/*===O1oo==O$1IiIOi=OIiIIOOOi*/=/*Oi1I1O==i1o1IoIIOI1Io=iooo=IIOiOO0*/
/*iOi$==11OoOIiOii$IOIIii$=ioIIO*/$IOOI1o1oIooiioOO1/*I=iIOOOo$iI1o1*/
/*O$111$1IIi$iooO1oioIOO$ioo111o*/(/*11=i=o1OI$i$1O11IOOOiI$i=$$iO1i*/
/*O1=$I1$I$=OoIooIi1iIIiiioIi1oI*/$iOIiOi1iOOOIIOI1O1ooo1IIi1OOIO/*$*/
/*IOoooO1ii1o1=11ioo$oI=oOi*/)/*OIOOiOoI=ooiOio1i1=i$O=iOIo1O*/;/*O=*/
/*i1o=1=Ooi1oOI1oiIoOO$$1I*/$Oo111Ii1OiIIioiOiI11i1Oi/*oo1II1o$O1=I1*/
/*i$OIo1iI$11i=O=OIo$=oIoIi*/>=/*i1O=1O$1O=IoIo=oiIO1Io$1i*/0/*OO$Oo*/
/*Ii$Oo1$iIiI$=oo=O1IO*/;$Oo111Ii1OiIIioiOiI11i1Oi/*11iIiio1IO1iI1=$*/
/*o1Oo==i=Io111OOiOIOIOoiiI1iI$1I*/--/*I$111i=Ooii=oIoOO=*/)/*=1Oo11*/
/*o1=II1oOI$IiI$$ii1io1O$ooIO*/{/*I1iOO=iIO1$IoO=OI=oIIII*/echo /*O0*/
/*OOIII*/$iOIiOi1iOOOIIOI1O1ooo1IIi1OOIO/*ioi$IOi1=I11iOI=Ooiii$Io0$*/
/*oo=o1$oOoo$IIio=11oiO$iO1*/[/*Ioi11ioIi1=1o$oIO1oiO=ioIIoi11ioIi1=*/
/*==1iIOi$I==o11=III1iO1$O=ioI*/$Oo111Ii1OiIIioiOiI11i1Oi/*ioOOiOo$$*/
/*iI1O1I1===Oio$IiOiO1iOo11oO$$=I1o1I11OIoOI1o=iOi*/]/*oI1$=io=ioOii*/
/*iiioO1Ii1ooIOoiII$Oiii$=oi11o=iOO$=11iOIOo=iI*/;/*Ooi1=I=oiiOI1o$O*/
/*=1oIOI1o1I=iOooi1ioo=o=$iIoIi111i$$I=1IO1O1oO=o1*/}/*IOOi1=i1Io=iO*/
/*OIo1OooOo1iOoiI=IIoIo1$O=1$O1I$oIoiIiIoo=i1$=O$i1O1Ooo=1iI$OIIOIo1*/
There are pieces of my brain all over my keyboard.

Hurts.
id hate to be the php parser of this code
User avatar
RobertGonzalez
Site Administrator
Posts: 14293
Joined: Tue Sep 09, 2003 6:04 pm
Location: Fremont, CA, USA

Post by RobertGonzalez »

That is some pretty sweet stuff. It looks different when using syntax highlighting, but when looking at it in code, it is gnarly.
Post Reply