April 2019
MonTueWedThuFriSatSun
1234567
891011121314
15161718192021
22232425262728
2930     

Calendar Calendar


Programming Challenge #4 - Code Obfuscation

Go down

Programming Challenge #4 - Code Obfuscation Empty Programming Challenge #4 - Code Obfuscation

Post  Alex on Mon Mar 26, 2012 6:38 am

"In software development, obfuscated code is the deliberate act of making source or machine code difficult to understand by humans.

Programmers may deliberately obfuscate code to conceal its purpose (security through obscurity) or its logic to prevent tampering, deter reverse engineering, or as a puzzle or recreational challenge for someone reading the source code.

Programs known as obfuscators transform readable code into obfuscated code using various techniques." - http://en.wikipedia.org/wiki/Obfuscated_code

This isn't so much of a challenge just a bit of fun, this can apply to any language but C and C++ are recommended due to the fun that can be had with pointers.

Below is the unreadable (yet compilable) code I've written in C to print a list of square numbers from 1 to 100

Code:
#include <stdio.h>

                  typedef int            
      sub_10003xF3;
typedef int                        sub_10003xEA
;typedef int
*   
                                 sub_10003xDA;
typedef unsigned int   
   
      sub_10003x0B;
typedef void         
                                 sub_10003x0E;
typedef char         sub_10003x8A
   ;
typedef const char
   
   
   
   *            sub_10003xD1         ;


                  sub_10003xF3
sub_10003x0A(                  
                                       );
sub_10003xEA            (
   *         sub_10003x78
      )      (   
            sub_10003xD1
            ,   
...)
               =                        &printf;
sub_10003xEA (*sub_10003xF1)(sub_10003xD1,...) = &scanf;

sub_10003xF3
main()   {
   sub_10003x8A
               sub_10003x8B
;
      sub_10003xEA
         sub_10003xED
         ;
sub_10003xD1
   sub_10003xD2
         ="%d*%d = %d\n"
      ;
   sub_10003xD1
sub_10003xE2=
                  "%c"         ;

   for                      (   sub_10003xED
      =   sub_10003x0A(
      )-   2
      ;                                          sub_10003xED<
1
                                                                  +
sub_10003x0A()
         +   7;                        sub_10003xED
         ++)
sub_10003x78   (sub_10003xD2
         ,   sub_10003xED,
   sub_10003xED,sub_10003xED               *
                     sub_10003xED   )
      ;

   sub_10003xF1
      
               (sub_10003xE2,   &

sub_10003x8B);

   return
      
0;                                                   }

sub_10003xF3 sub_10003x0A()
{
   sub_10003xF3 a,*
         
      b,*         c,*
      d,*         e,*
      f;a         =((
      4%3         )-2
      *7)         /2+
      1;b         =&a
      ;c=         &*b
      ;(*         b)++
      ;d=         &*c;
      a--         ;e=
      &*b         ;f=
      &*e         ;(*
      f)+=      1;


      return
         (   
                     sub_10003x0B
      )(a
+                                                                                                                                 7);
}

I've typedef-ed every variable type used as sub_10003x?? - no reason, it just makes it hard to read you could just as well do: typedef char sdfjokpoi235r4y;
Also used function pointers to rename functions
And made a stupidly complex function to return a value

Thus it looks like a mess and would probably take at least half hour for someone to clean up

Thus the challenge is to make the most obfuscated program (preferably in C or C++) which reads a string from the user and reverses it then outputs it back
(I'd prefer every function/class in the program that is implemented to be used, so no redundant code just for extra lines)

Simple challenge, but the fun is making the code a mess! It's not very often you are encouraged to make your code a mess

I encourage lots of pointers to be used, to count as pointer revision!

In C++, pointless classes can be made to do simple things, preprocessor statements are a good thing, function pointers.

MAKE YOUR CODE HORRIFIC
Alex
Alex

Posts : 67
Join date : 2012-02-23
Location : Come at me bro

View user profile

Back to top Go down

Programming Challenge #4 - Code Obfuscation Empty Re: Programming Challenge #4 - Code Obfuscation

Post  Alex on Mon Mar 26, 2012 9:25 am

Here's mine Smile

Code:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>

typedef char
      sub__132980x1286; typedef
                     char
      *       sub_132980x1234;
                              typedef int
                     sub_132980x1238; typedef
               
                     void*      sub_132980x12FA;
typedef size_t
            sub_132980x1DFA;
typedef const char*
   sub_132980x1DEE;
sub__132980x1286
   sub__132980x3286   
= '\0';sub_132980x1238    sub_132980x1231();   sub_132980x12FA
         (*sub_132980x123E)
   (sub_132980x1DFA) =
&malloc;
sub_132980x1DFA (*sub_132980x1DEA)
         (sub_132980x1DEE)
= &         strlen;
sub_132980x12FA                                 (*sub_132980x12FD)                  
(sub_132980x12FA,sub_132980x1238,sub_132980x1DFA) = &
memset         ; sub_132980x1238
   (*sub_132980x1A3A)
   (sub_132980x1DEE,...) = &printf;
sub_132980x1234 (*sub_132980x1A3B)(sub_132980x1234) = &gets;class sub__132980x3284{private:
   sub__132980x1286
   sub__132980x1283;public:
   sub__132980x3284
      (
sub__132980x1286
      sub__132980x127F ) :
   sub__132980x1283(         sub__132980x127F) {
   }
   sub__132980x1286 sub__132980x3287
()      const
   {return sub__132980x1283
;}};sub_132980x1234
      sub_132980x1DA2(
sub_132980x1DEE
sub_132980x1239);sub_132980x1238
main(){sub__132980x1286 sub_132980x1235[128];
   sub_132980x12FD
      (sub_132980x1235,'\0',sizeof(sub_132980x1235)*sizeof(sub__132980x1286));

   while (1)
                                                   {
      sub_132980x1A3B(
         sub_132980x1235);
      sub_132980x1A3A("%s\n",
         sub_132980x1DA2(
      sub_132980x1235));
                                                   }return 0;}

                                                   sub_132980x1234
                                                   sub_132980x1DA2(
                                                   sub_132980x1DEE
                                                   sub_132980x1239){
         sub__132980x3284 *sub__132980x3285 = new sub__132980x3284(sub__132980x3286);
               sub_132980x1234 sub_132980x2DEA = (sub__132980x1286*) sub_132980x123E
               ( sizeof(sub__132980x1286) * (sub_132980x1DEA(sub_132980x1239)+1) );
                           sub_132980x12FD(sub_132980x2DEA,sub__132980x3285->
               sub__132980x3287(),sizeof(sub_132980x2DEA)*sizeof(sub__132980x1286));
                        for (sub_132980x1238 sub_132980x2D3D = 0; sub_132980x2D3D <
                              sub_132980x1DEA(sub_132980x1239); sub_132980x2D3D++)
                     sub_132980x2DEA[sub_132980x1DEA(sub_132980x1239)-sub_132980x2D3D-
                     ((2*sub_132980x1231())/3)+1] = sub_132980x1239[sub_132980x2D3D];
            sub_132980x2DEA[strlen(sub_132980x1239)] = sub__132980x3285->sub__132980x3287();
                               delete[] sub__132980x3285;return sub_132980x2DEA;}

        sub_132980x1238                  
        sub_132980x1231
        (             )
             {


        sub_132980x1238
             v=3;
        sub_132980x1238
      
      *a   ,*   *b   ,*   **
        c,  **  **  d,  **
      **  *e  ,*  **  ** 
     *f  ,*  **  **  **  g,
       **  **  **  **  h, 
     **  **  **  **  *i  ,*
       **  **  **  **  *j 
     ,*  **  **  **  **  **
      
     k,  **  **  **  **  **
       **  l,  **  **  **
        **  **  **  *m 
          ,*  **  **
           **  **
             **
            **
            *o
            ,*
            **
           **  **
         **  **  **
        **  p,  **  **
      **  **  **  **  **
     **  q,  **  **  **  **
     **  **  **  **  *r  ,*
     **  **  **  **  **  **
     **  **  *s  ,*  **  **
     **  **  **  **  **  **
     **  t,  **  **  **  **
     **  **  **  **  **  **
               u;
            a=
         &v      ;b
      =&              a;
      c=              &b
        ;*b        ++;
          d=&    c;* 
           c++;
         e=&    d;*
        a++        ;f=
       &e              ;g
      =&              f;
        *e          ++
            ;
            h
            =
            &
            g
            ;
         i      =
         &      h
         ;      j
         =      &
         i      ;
         k      =
      &      j      ;
      l      =      &
      k      ;      m
      =      &      l
      ;      o      =
      &      m      ;
      p      =      &
            o
            ;
            *
            p
           ++;
           q=&
           p;r=&
            q
         ;
               s
         =
               &
         r
               ;
         *   
               i
         ++      
               ;
         t      
               =
         &      
               s
         ;
               u
         =      
               &
         t      
               ;
         *      
               p
         --
               ;
   
         return v;
             }
Alex
Alex

Posts : 67
Join date : 2012-02-23
Location : Come at me bro

View user profile

Back to top Go down

Programming Challenge #4 - Code Obfuscation Empty Re: Programming Challenge #4 - Code Obfuscation

Post  Charlie on Mon Mar 26, 2012 2:40 pm

Nowhere near as good as yours, could've spent a lot longer screwing around but it's about 4:30am so I wanna go to sleep soon lol.

Tried to keep it simple to avoid confusing myself, also borrowed your typedef idea. Smile

Main code: http://pastebin.com/P1RsQ6rE
Spoiler:
Code:
#include "header.h"
class _0x0243423{public:
_0x0253423
_0x0323423;
_0x0235423
_0x0323223;
_0x0234523
_0x0233423
;};void
main(
){_0x0243423
*_0x0423423=new _0x0243423
;while(2347e2!=1238e3/122e123
){if(-2734e234/14e2*275e12
){goto _0x0235223;}_0x0235222
:std::cout<<_0x0423423->
_0x0323223.str();goto _0x0235323;
_0x0235232:for(_0x0423423->_0x0233423
=(0x20f9+1477-0x26bd)-1;_0x0423423
->_0x0233423<_0x0423423->_0x0323423
.length();_0x0423423->_0x0233423
++){_0x0423423->_0x0323223<<_0x0423423
->_0x0323423[_0x0423423->_0x0323423
.size()-(0x20f9+1477-0x26bd)-_0x0423423
->_0x0233423];}goto _0x0235222;_0x0235223:
std::cin>>_0x0423423->_0x0323423;goto
_0x0235232;}_0x0235323:_0x0423423=
new _0x0243423;std::cout<<std::
endl;goto _0x0235223;}
Header (header.h): http://pastebin.com/fv6hzaVm
Spoiler:
Code:
#include <iostream>
#include <sstream>
typedef std::
string
_0x0253423;
typedef std::
stringstream
_0x0235423;
typedef
int
_0x0234523;
Charlie
Charlie

Posts : 16
Join date : 2012-02-23

View user profile

Back to top Go down

Programming Challenge #4 - Code Obfuscation Empty Re: Programming Challenge #4 - Code Obfuscation

Post  Alex on Mon Mar 26, 2012 6:45 pm

Nice! The numbers were annoying until I realised they were hex, I thought they were referring to a variable at first :/ And the gotos were very annoying!

But I've tidied it up! Razz

Code:
#include <iostream>
#include <sstream>
using namespace std;

class cMyClass
{
public:
   string cStr;
   stringstream cStrStrm;
   int cInt;
};

void main()
{
   cMyClass *cInstance = new cMyClass;
   
   while ( true )   
   {
      if ( false )
      {
         goto label2;
      }
      
label1:
      
      std::cout<<cInstance->cStrStrm.str();

      goto label3;

label4:

      for (cInstance->cInt = 0;cInstance->cInt<cInstance->cStr.length();cInstance->cInt++)
      {
         cInstance->cStrStrm<<cInstance->cStr[cInstance->cStr.size()-1-cInstance->cInt];   
      }
      goto label1;

label2:

      std::cin>>cInstance->cStr;
      goto label4;
   }

label3:

   cInstance = new cMyClass;
   std::cout<<std::endl;
   goto label2;
}
Alex
Alex

Posts : 67
Join date : 2012-02-23
Location : Come at me bro

View user profile

Back to top Go down

Programming Challenge #4 - Code Obfuscation Empty Re: Programming Challenge #4 - Code Obfuscation

Post  Charlie on Tue Mar 27, 2012 12:45 am

WRONG! It should be
Code:
if(true)
not
Code:
if(false)
!!!!!! Lol Razz

Might have another crack at this, use more pointers and stuff. I tried to do pointers within the class pointer and it got screwed up. :/ I couldn't fix it because I had already started obfuscating the rest so I had no idea what was going on Razz
Charlie
Charlie

Posts : 16
Join date : 2012-02-23

View user profile

Back to top Go down

Programming Challenge #4 - Code Obfuscation Empty Re: Programming Challenge #4 - Code Obfuscation

Post  Sponsored content


Sponsored content


Back to top Go down

Back to top

- Similar topics

 
Permissions in this forum:
You cannot reply to topics in this forum