• XSS.stack #1 – первый литературный журнал от юзеров форума

На сколько хорошо ты знаешь язык Си?!

weaver

31 c0 bb ea 1b e6 77 66 b8 88 13 50 ff d3
Забанен
Регистрация
19.12.2018
Сообщения
3 301
Решения
11
Реакции
4 622
Депозит
0.0001
Пожалуйста, обратите внимание, что пользователь заблокирован
Ковырялся тут в своих закладках и сохраненках и нашел вот такой вот сорец. Догадайся что он делает. Компилировать нельзя!

C:
#include "stdio.h"
#define e 3
#define g (e/e)
#define h ((g+e)/2)
#define f (e-g-h)
#define j (e*e-g)
#define k (j-h)
#define l(x) tab2[x]/h
#define m(n,a) ((n&(a))==(a))

long tab1[]={ 989L,5L,26L,0L,88319L,123L,0L,9367L };
int tab2[]={ 4,6,10,14,22,26,34,38,46,58,62,74,82,86 };

main(m1,s) char *s; {
    int a,b,c,d,o[k],n=(int)s;
    if(m1==1){ char b[2*j+f-g]; main(l(h+e)+h+e,b); printf(b); }
    else switch(m1-=h){
        case f:
            a=(b=(c=(d=g)<<g)<<g)<<g;
            return(m(n,a|c)|m(n,b)|m(n,a|d)|m(n,c|d));
        case h:
            for(a=f;a<j;++a)if(tab1[a]&&!(tab1[a]%((long)l(n))))return(a);
        case g:
            if(n<h)return(g);
            if(n<j){n-=g;c='D';o[f]=h;o[g]=f;}
            else{c='\r'-'\b';n-=j-g;o[f]=o[g]=g;}
            if((b=n)>=e)for(b=g<<g;b<n;++b)o[b]=o[b-h]+o[b-g]+c;
            return(o[b-g]%n+k-h);
        default:
            if(m1-=e) main(m1-g+e+h,s+g); else *(s+g)=f;
            for(*s=a=f;a<e;) *s=(*s<<e)|main(h+a++,(char *)m1);
        }
}

В общем существует конкурс по программированию, в котором задачей участников является написание максимально запутанного кода на языке Си. Если тебя заинтересовала тема обфускации на уровне исходников советую посмотреть ссылки ниже. Там есть много различных примеров где можно сломать голову и сидеть не один час, а то и несколько дней.

 
Догадайся что он делает.
Типо шифрует данные? Какой-нибудь XOR?
 
Догадайся что он делает
Укорачивает жизнь, тем кто готов разбираться с этим
не один час, а то и несколько дней.
 
C:
%:    include                         <curses.h>
 %:    include                         <unistd.h>
 %:    include                           <time.h>
 %:    include                         <stdlib.h>
                                
 %:    define                 d =strtoul(z,NULL,0));
 %:    define                    m(n)COLOR_%:%:n
 %:    define                           v stdscr
 %:    define                         q mvaddch(
 %:    define                           Z(x) %:x
 %:    define                F(x) z = getenv(Z(x)); z&&(
 %:     define J Z(X:%d/%d Y:%d/%d S:%zu/%zu B:%zu\
n),Y, y<:-2\
                        :>,X,*y,A,g,c);
 %:    define f(a,b)                  ((a)<(b)?(a):(b))
                                    
 typedef size_t a; typedef unsigned long k; a g=997,c,A=5,I,N=5
 ,G=5; k p<:5:>={ 1} , W =300; int l,Y,X,*j=(int<:8:>){ 231} ,*
 U,*V,*e,*n,Q,P,x,* y, *D; void b(a h){ c +=h; mvprintw(0,0,J }
 int E(const char * L){ static int h; !h && endwin(); h=*y; L&&
 puts(L) ; return 1; }  void C(int L, int h) { attroff(m(PAIR(L
 ))); h  &&  attron(m(PAIR(L))); } int R(int h, int L) { return
 (rand()%(L-h+1)) + h ;}  void S(a o) { static const char *s =Z
 ( ; +<>^v); q n <:0:>,e<: 0:>,' '); A=f(A+o,g); if(A>=g){ E(Z(
 YOU WIN! ) ) ; Q = l;  return ; } C(3,1); for (I=0; A &&I<A-(A
 -A||A); ++I){ I&&q n<:I:>,e<: I:>,'o') ; e<:I:>= e<:I+1:>; n<:
 I:>=n<: I +1:>; } A>1&&q n<:I:>,e<:I:>,'o'); e<:I:>=Y; n<:I:>=
                  X; while(++I<g)e<:I:>=n<:I:>=0; C
                  (2,1); q X,Y,s<:*D+2&(1<<3)-!Q:>)
                  ; } void B(a o){ if(o){ S(N); b(1
                  ); } if(Q)return; p<:1:>=0; !o&&q
                  *U,*V,' '); x:y<:3:>=R(1,y<:-2:>-
                  1); y<:2:>=R(2,*y-1); for(I=0; I<
                  A; ++ I)if (* V==e<:I:>&&*U== n<:
                  I:>) goto x; } int main(void) { l
                  =++(int) { 3 } ; char *z; y = j+3
                  ;  void(*H<::>) (a) = { b, S, B};
                  srand((unsigned)time(NULL)); if(!
 initscr())return 1; getmaxyx(v,*y,y<:-2:>);--*y; --y<:-2:>; if
 (y<:-2:><9||*y<9)return E(Z(screen too small)); F(MAXSIZE) g d
 g=f((a)((*y-2)*(y<:-2:>-2)),g); F(GROW)N d F(SIZE)A d F(WAIT)y
 <:-3:>=(int)strtol(z,NULL,0)); F(EVADE)W d U=y+2;F(WALLS) *p d
 F(CANNIBAL)p<:4:>d F(SHED)p<:3:>d F(SHEDS )G d e=calloc(g + 1,
 sizeof*e); n=calloc(g+1,sizeof*n); if(!e||!n)return E(Z(memory
 error)); V=U+1; Y=y<:-2:>/2; X=*y/2; D=1 + V; attron(A_BOLD) ;
 curs_set(0); nonl(); intrflush(v, 0); keypad (v, 1); noecho();
 cbreak (); start_color (); init_pair(1,WALL, WB); init_pair(2,
 HEAD,HB); init_pair(3,BODY,BS); S(0); B(0); x:if(Q)goto y;x=1;
 getmaxyx(v,1<:y:>,y<:-1:>); C(1,1); mvhline(1,0,'#',y<:-2:>) ;
 mvvline(1,0,'#',*y); mvhline(*                         
 y,0,'#',y<:-2:>);mvvline(1,y<:                     
 -2:>,'#', *y); C(1,0); q*U,*V,                     
 '*' ) ; (*H) (0) ; refresh() ;                     
 timeout(y<:-3:>); switch(getch                     
 ()){ case KEY_LEFT:V<:1:>=l-3;                         
 break; case KEY_RIGHT : V<:l/l                     
 :>=l/2; break; case KEY_UP:V<:                         
 l-3:>=l-1; break;case KEY_DOWN                     
 : V <:l/4:>=l; break; case 'q'                     
 :case'Q':Q=l; case' ':(!P&&(P=                     
 1))||(P=0); default:x=0; } if(                     
 x)P=0; if(Q||P) goto x ; if(!Q&&!1<:V:>) goto x; switch(1<:V:>
 ){ case 1: --Y; break; case 2: ++Y; break; case 3: -- X; break
 ; case 4: ++X; break; } if (Y<1||Y>=y<:-2:>||X<2||X>=*y||y<:-2
 :>>=y<: -1 :>|| *y>=1<:y:>){ if(*p&&!(*y>=1<:y:>||y<:-2:>>=y<:
 -1:>)){ if(Y <1||Y>=y<:-2:>)Y=Y<1?y<:-2:>-1:1; if(X<2||X>=*y)X
 =X<2?*y- 1:2 ; } else{ E(Z(OUCH!)); goto y; } } for(I=0; !4<:p
 :>&&I <A; ++I)if(Y == e<:I:>&&X==n<:I:>){ E(Z(OW!)); goto y; }
 if(Y== *V &&X==*U)B(1);  else{ if(W&& !(++1<:p:>%W)   )H<:2:>(
 0) ; if( 3 <:p:>){ if(!( ++p<:2:>% 3<:p:>)){ H <:1:>(G); 2 <:p
 :> = 0 ; } else S (0);}  else S ( 0); } goto x; y:E(  NULL ) ;
 printf   (J     free   (  e  ); free      (n) ;   return  0 ;}

 
  1. Это программа для генерации последовательности чисел, основанной на некоторых математических правилах и алгоритмах.
  2. В коде используются предопределенные массивы tab1 и tab2, которые используются для вычисления и построения этой последовательности.
  3. Функция main рекурсивно вызывает саму себя с различными параметрами и условиями для обработки данных и вычисления требуемой последовательности чисел.
  4. Внутри функции main используются условные операторы switch, case и if, чтобы определить, какие операции выполнять в зависимости от входных параметров.
  5. Результатом работы программы является вывод полученной последовательности чисел на экран.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх