1. Си / Говнокод #22448

    +2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    #include <stdio.h>
    #include <stdlib.h>
    #include <stdint.h> 
    
    void secret(void) __attribute__ ((used,noinline,noreturn));
    void brainfuck(void) __attribute__ ((noinline));
    int main(void);
    
    void secret(void)
    {
      printf ("You win!\n");
      exit(0);
    }
    
    char *bfprog = "+++---";
    
    void brainfuck(void)
    {
        char *bfprog_p = bfprog;
        unsigned long long i;
        unsigned char arr[500] = {0};
        arr[499] = ( ((uintptr_t)secret ^ (uintptr_t)main) & 0xffffff00 ) >> 8*0;
        arr[0]   = ( ((uintptr_t)secret ^ (uintptr_t)main) & 0xffff00ff ) >> 8*1;
        arr[498] = ( ((uintptr_t)secret ^ (uintptr_t)main) & 0xff00ffff ) >> 8*2;
        arr[1]   = ( ((uintptr_t)secret ^ (uintptr_t)main) & 0x00ffffff ) >> 8*3;
        unsigned char *arr_p = &arr[249];                  
        for (i = 0;; i++)
        {
            switch (*bfprog_p)
            {
                case '>':
                    arr_p++;
                    break;
                case '<':
                    arr_p--;
                    break;
                case '+':
                    (*arr_p)++;
                    break;
                case '-':
                    (*arr_p)--;
                    break; 
    /*           case '.':
                    putchar(*arr_p);
                    break;
                case ',':
                    *arr_p = getchar();
                    break;                   нинужно*/
                case '[':
                    if (*arr_p == 0 )
                    {
                        unsigned long long bracketcount = 0;
                        do
                        {
                          if (*bfprog_p == '[')
                              bracketcount++;
                          else if (*bfprog_p == ']')
                              bracketcount--;
                          bfprog_p++;
                        } while (bracketcount != 0);
                        bfprog_p-=1;
                    }
                    break;
                case ']': 
                    if (*arr_p != 0 )
                    {
                        unsigned long long bracketcount = 0;
                        do
                        {
                          if (*bfprog_p == ']')
                              bracketcount++;
                          else if (*bfprog_p == '[')
                              bracketcount--;
                          bfprog_p--;
                        } while (bracketcount != 0);
                    }
                    break;
                default: return;
            }
            bfprog_p++;
        }
        return;
    }
    
    int main(void)
    {
        brainfuck();
        return 0;
    }

    Задача - подставить в char *bfprog такую строку, чтобы запустилась функция secret(). Менять что-либо еще в коде запрешено. Платформа - 32битные интели, компилятор - гцц. ОС - линукс или виндовс, на ваше усмотрение (хотя разницы по-идее не будет). Предполагаем, что тут применяется особо расширенный и улучшенный ASLR который при каждом запуске перетасовывает размещение функций, и secret от main находится на хуй знает каком расстоянии. Победившему - нихуя

    j123123, 27 Февраля 2017

    Комментарии (3)
  2. Си / Говнокод #22444

    +1

    1. 1
    2. 2
    puts("Ня. Пока.");
    exit(0);

    bormand, 26 Февраля 2017

    Комментарии (70)
  3. Си / Говнокод #22335

    0

    1. 1
    2. 2
    if (width&3)
    		MS_Quit ("VL_MungePic: Not divisable by 4!");

    хехехе

    barop, 16 Февраля 2017

    Комментарии (41)
  4. Си / Говнокод #22313

    +5

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    typedef char бл;
    typedef char вы;
    typedef char на;
    бл*ть = "программирование";
    вы*бать = "снизу вверх";
    на*уя = "наискосок";
    бл**ь = &ть;
    вы**ать = &бать;
    на**я = &уя;

    Любителям писать звёздочки в середине слов посвящается.

    inkanus-gray, 11 Февраля 2017

    Комментарии (36)
  5. Си / Говнокод #22311

    +1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    void skipWhite(char** look, char* endOfString){
        while ((isspace(**look) || **look==',') && *look<endOfString){
            (*look)++;
        }
    }

    Человек скинул проект на C, я его почитал, и думаю, какого буя собственно люди пишут на C?
    Почему бл*ть так много проблем с компиляцией C/C++, что бы вывести hellodaun в консоль, нужно вы*бать себя дилдаком, полазить по стаку, и прочим сайтам.
    КАК ЛЮДИ ПИШУТ НА ЭТОМ ЯЗЫКЕ?
    КААК?
    Эти сраные заголовки файлов, ну вот на*уя они нужны?
    Щас на меня обрушиться коричневая лавина, жду ваших комментов.

    Daun, 10 Февраля 2017

    Комментарии (114)
  6. Си / Говнокод #22298

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    // Стандартное быдлорешение быдлофорсом
    #include <stdio.h>
    #include <stdlib.h>
    #include <crypt.h>
    #include <string.h>
    
    void decrypt1(char hash[], char salt[]) {
        char * crypted, pass[2], a;
        pass[1] = '\0';
        
        for (a = 'a'; a < 'z' + 1; a++) {
            pass[0] = a;
            crypted = crypt(pass, salt);
            if(strcmp(crypted, hash) == 0) {
                printf("Password: %s\n", pass);
                exit(0);
            }
            
            pass[0] -= 0x20;
            crypted = crypt(pass, salt);
            if(strcmp(crypted, hash) == 0) {
                printf("Password: %s\n", pass);
                exit(0);
            }
        }
    }
    
    void decrypt2(char hash[], char salt[]) {
        char * crypted, pass[3], a ,b;
        pass[2] = '\0';
        
        for (a = 'a'; a < 'z' + 1; a++) {
            pass[0] = a;
            for (b = 'a'; b < 'z' + 1; b++) {
                pass[1] = b;
                crypted = crypt(pass, salt);
                if(strcmp(crypted, hash) == 0) {
                    printf("Password: %s\n", pass);
                    exit(0);
                }
                
                pass[1] -= 0x20;
                crypted = crypt(pass, salt);
                if(strcmp(crypted, hash) == 0) {
                    printf("Password: %s\n", pass);
                    exit(0);
                }
            }
            
            pass[0] -= 0x20;
            for (b = 'a'; b < 'z' + 1; b++) {
                pass[1] = b;
                crypted = crypt(pass, salt);
                if(strcmp(crypted, hash) == 0) {
                    printf("Password: %s\n", pass);
                    exit(0);
                }
                
                pass[1] -= 0x20;
                crypted = crypt(pass, salt);
                if(strcmp(crypted, hash) == 0) {
                    printf("Password: %s\n", pass);
                    exit(0);
                }
            }
        }
    }
    
    /*
        Соответствующая поставленной задаче куча дерьма.
        Растёт и ширится как будто в неё упал кусок дрожжей.
    */
    
    int main(int argc, char * args[]) {
        if (argc != 2) exit(1);
        
        decrypt1(args[1], "50");
        decrypt2(args[1], "50");
        decrypt3(args[1], "50");
        decrypt4(args[1], "50");
        printf("Nothing found, sorry.\n");
        return 0;
    }

    Что нужно:
    > C’s DES-based decrypt function

    От куда взято задание:
    > http://docs.cs50.net/problems/crack/crack.html

    Разница с заданием в том, что готовая программа должна ломать пароли до 8 знаков (включительно) по известной соли. Однако обычный брут (как в шапке), мягко говоря, нахуй не нужен чуть более, чем полностью, ибо скорость работы совершенно убогая.

    Соответственно приму любое предложение по улучшению. И да, я слышал про радужные таблицы, может кто-то дать ссыль на статью описание для нулевого иблана в криптографии? Увеличит ли применение этих таблиц скорость работы этого, с позволения сказать, кода? И ещё вопрос: является ли DES-based crypt обратимым?

    Darkling, 08 Февраля 2017

    Комментарии (0)
  7. Си / Говнокод #22294

    +5

    1. 1
    Посоны, как заставить Watcom нормально адресовать? Он тупо пихает адреса, относительно нуля, а надо, что относительно сегментных регистров

    dm_fomenok, 07 Февраля 2017

    Комментарии (103)
  8. Си / Говнокод #22096

    −1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    const char * c_version()
    {
      const char * hui = "hui";
      const char * pizda = "pizda";
      unsigned long huilen = strlen ( hui );
      unsigned long pizdalen = strlen ( pizda );
      char * sobaka = ( char* ) ::malloc ( (huilen + pizdalen) + 2 );
      strcat ( sobaka,hui );
      strcat ( ( sobaka + huilen ),"&" );
      strcat ( ( sobaka + huilen + 1 ),pizda );
      sobaka[huilen + pizdalen + 1] = '\0';
      return sobaka;
    }

    Склеиваем строки

    Koshak90, 01 Февраля 2017

    Комментарии (31)
  9. Си / Говнокод #22095

    +1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    #define EPS 1e-10 
    float sqrt(float x){ 
    float S=x, a=1,b=x; 
    while(fabs(a-b)>EPS){ a=(a+b)/2; b = S / a;} 
    return (a+b)/2; 
    }

    dm_fomenok, 31 Января 2017

    Комментарии (2)
  10. Си / Говнокод #22094

    +3

    1. 1
    2. 2
    3. 3
    4. 4
    void jsonUser(User *user) {
        printf("{id: %d, login: \"%s\", password: \"%s\"}\n", 
                user->id, user->login, user->password);
    }

    dm_fomenok, 31 Января 2017

    Комментарии (5)