Skip to content

Teoria del ofuscador y un ejemplo

byrongnz edited this page Nov 22, 2012 · 2 revisions

Ofuscador

Les dejo algo de teoría, unos links hacerca de las tecnicas de ofuscacion y un ejemplo de lo que trata la ofuscación.

Código ofuscado es código cuya lógica es intencionadamente difícil de seguir y / o cuya sintaxis es intencionalmente poco clara. Hay varias razones por las que se podría alejarse de las buenas prácticas de programación para producir código ofuscado. Estos incluyen la protección de la propiedad intelectual (prevenir o retrasar los esfuerzos de ingeniería inversa sobre código propietario), programa de seguridad, o con fines recreativos.

Algunos links que pueden ayudar a la comprension y las tecnicas de un ofuscador(El ultimo link trata sobre el concurso internacional de ofuscacion y pueden ver los distintos ejemplosque puede haber):

http://www.brandonparker.net/code_obf.php

http://www.dreamincode.net/forums/topic/38102-obfuscated-code-a-simple-introduction/&usg=ALkJrhgr2tkhxP9k5MbaQPpw2vqLboQgAQ

http://www.ioccc.org/years.html#2012

NOTA: No se de una manera muy clara de cómo implementar el código ya que como puedan ver en los links hay varias equivalencias en el código.

Ejemplo:

#define o(a,b,c,d) a##f b##f c##f d; a##g b##g c##g d;q-- #define Z(z)if(*j==z) #define c(z,p) Z(z){y;v p##=r;o(b,[q-1]=b,[q] p b,[q]);} #define y q+=t;t=0 #define r w[q] #define v w[q-1] #define w(a,m,f) Z(a){y;r=m(r);q++;o(b,[q-1] = -b,[q-1]f(r)+0b,[0]);} #define A(p,w,o) for(p=0;p<w;p++)(o) #define P(a) for(a=Z;a<Z;a++) #define _ putchar typedef double o; typedef char z; o A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y, E, w[20], bf[20], bg[20],x=-1.3/8,p,d,l=0,h=4e-3,f,m; z e[17] = "FKE<<gMAQUDIYO9"=", k, j; o g(o p, o d){int q =-1,t=0;j=k;while( j ){c(45,-);Z(100){y;q++;r=v;q[bf]=bf[q-1];q[bg]=bg[q-1];}Z(42) {y;v=r;o(b,[q-1]=rb,[q-1] + vb,[q]);}Z(44){t=0;q++;}Z(116){f=v;v=r;r=f;f=bf[q];q[bf]=bf[q-1];bf[q-1]=f;f=q[bg];bg[q]=(q-1)[bg];bg[q-1]=f;

  }c(43,+);Z(47){y;v/=r;              o(b,[q-1]=b,[q-1]/r-v/                (r*r)*b,[q]);}Z(121){y;q++                        ;r=d; bf[ q]=0;bg[q]=1;}
  Z(94){y;f=v;v=pow(v,r)              ;o(b,[q-1]=r*b,[q-1]*                 pow(f,r-1)+0*b,[q]);}w(115                        ,sin,cos);w(99,cos,sin);
  Z(120){y;q++;r=p;bf[q]              =1;bg[q]=0;}if(*j>=48                 &&*j<58){q++;t=1;r=*j-48 ;                        bf[q] = 0;(q--)[bg] = 0;
                         }j++;}H=bf[0]                                                                ;K= bg[ 0]; return w[0];}
                         void s(){int                                                                 e=0;X=Q*8;f=g (Y*8, L*8 )
                         ;e=(f-X<0)?1:                                                                -1;l=0;while((l+=h)<8)  {
  V=Y*8+l*R;W=L* 8+l*D;X=             Q*8+l*U;f=g(V,W);if((f                                          -X)*e>0){if(V>-1&&V<1&&W>                   
  -1&&W<1){p=V;d=W;return            ;}else e/=-1;}}p=d=-10                                           ;}int main(int argc, z **
  argv){int c, f;z b[2],Z            ;S=0,C=1;k=argv[1];Z =                                           atoi(argv[2])>>1;b[1]=Z*2


  &255;b[0]=Z>> 9;J= 3.1415/Z;A(f,6,f[e]^f+1);while(--f>1)_(
  (f%2)[b]);_(246);A(c,384,c/3%2?c/6<<2:0);_(_(0));_(_((_(33)
  <<3)-9)/23);for(f+=5;f < c/22 ; f++) _(e[f] ^ f - 3);for(;f
                                       > c/29;f--)_(f>15?2*f-
                                       31:c);_(0);for(f=0;f<=
                                       Z*2 ; f++){N = S;E_=1-
                    J*J/2;T=J*(1-J*J/6);
                    S=S*E_+C*T;C=C*E_-N*
                    T;A=-(C*C-S*S);P=-A*
 C;E=A*S;G=S*C*2;I=-
 G*S;F=G*C;_((_(e[10
 ]/2-1)<<3)-18);for(
 c=-1;c<5;c++)_((c+1)%2?0:-2*c*c+3*c+9);_(44);A(c,9,c&4?(1-c%2
 )[b]:0);_(7);for(B=-Z ; B<Z ; B++){_(Z+2);for(O=-Z;O<Z;O++){Y
 = (E - P*B/Z - G*O/Z)*x;L = (I - F*B/Z - A*O/Z)*x;Q = (-C +S*

 B/Z)*x;R = - Y + E; D =-L+I; U =-Q-C;s();3[w] = sqrt(R*R + D*D + U*U);m=p==-10?1:(4[w]=sqrt(H*H+K*K+1)*w[3],H/=-4[w],K/=-4[w],
 fabs(H*R + K*D + U/4[w])*exp(-l*l/2) );_((z)(m * 63)*2 + ((z)((p+1)*6) % 2 + (z)((d+1)*6) % 2 == 1 ? 1 : 0));O?l:(_(128),_(B!=
 Z-1 ? Z : Z+1));}_(128);}_(_(129)-129);}_(0x3b);}