1. C++ / Говнокод #13906

    +8

    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
    void SaveEncryptedFile( const char *text, int len, const char* filename )
    {
    	char* pEncryptedText = new char[strlen(text)+1];
    	string x1 = "you'll";
    	string x2 = "never";
    	string x3 = "get a";
    	string x4 = "password";
    	char l_pBuf[255];
    	sprintf(l_pBuf,"%d",30*11/3);
    	string result = x1+x2+x2+x1+l_pBuf+x3;
    	encryptString(text,pEncryptedText,result.c_str(),strlen(text),result.length()); // там внутри xor
    
    	FILE* pFile = fopen(filename, "wb");
    	if (pFile)
    	{
    		fwrite(pEncryptedText,sizeof(char),len,pFile);
    		fclose(pFile);
    	}
    
    	delete[] pEncryptedText;
    }

    Нашёл в рабочем проекте. Для "расшифровки" файла используется ещё одна такая же функция.

    Запостил: Deacon, 07 Октября 2013

    Комментарии (26) RSS

    • показать все, что скрытоУ МИНЯ ЕСТЬ IFON 5S НО Я ЖЫ НИ ХВАСТАЮЗЬ!!!!!!!!!!!!!
      Ответить
    • какой хитрый код! x4 объявили - но не пользуемся! лишняя строчка хацкеров озадачит!!

      ЗЫ да это просто обфускация данных что бы пользователи руками не лазили. до того как узнал про ROT13/etc, сам нечто подобное писал.
      Ответить
      • А его конпелятор не соптимизирует?
        Ответить
        • На одном форуме посвященном дельфям предлагали жуткие извращения с кодом - на 20 строк кода 4 функциональные, остальное - мусор. И все вроде ничего, пока один умный человек им не подсказал: вы бы оптимизацию выключили, товарищи...
          Ответить
        • Как? А вдруг в конструкторе стринга побочные эффекты?
          Ответить
          • Где тут вызов конструктора?
            Ответить
            • string x4 = "password"
              Ответить
              • "" разве не литерал?
                Ответить
                • Литерал. Но дело-то не в нем.
                  Ответить
                  • А в чем?
                    Ответить
                    • В том, что стоит слева от него.
                      Если мне не изменяет память, "password" сперва неявно сконвертится к (временному) стрингу, после чего x4 сконструируется из этого стринга. Как максимум два раза вызовется конструктор, как минимум - один (стандарт допускает устранение копирования в таком случае).
                      Ответить
                      • >чего x4 сконструируется из этого стринга.
                        Лол, а не указатель просто копируется?
                        Ответить
                        • > указатель просто копируется?
                          Ага, а потом ты пишешь s[0] = 'x' и БАБАХ!

                          P.S. Хотя в некоторых реализациях строк (но не в std::string) может и указатель копироваться. В Qt и c++ builder вроде бы так и делают, ибо один хрен copy-on-write.
                          Ответить
                          • Я просто не в курсе, в ЦПП литералы строк не такие, как в Ц?
                            Ответить
                            • Такие же: const char*
                              Только std::string в COW не умеет, поэтому выделяет память и копирует данные при создании.
                              Ответить
                      • Не будет тут копирования std::string. У него есть конструктор по const char*. Вызов соответственно всегда один, в этом случае.
                        Ответить
                        • std::string x = "y"; и std::string x("y"); по стандарту отличаются
                          просто в -O2 это одно и то же
                          Ответить
                          • Оставаясь в рамках здравой дискуссии, хочется увидеть ссылки, или хотя бы пункт стандарта где об этом написано.
                            Ответить
                            • The initialization that occurs in argument passing, function return, throwing an exception (15.1), handling an exception
                              (15.3), and brace-enclosed initializer lists (8.5.1) is called copy-initialization and is equivalent to the form
                              T x = a;

                              <...>
                              The semantics of initializers are as follows.
                              <...>
                              — If the initialization is direct-initialization, or if it is copy-initialization where the cv-unqualified version of
                              the source type is the same class as, or a derived class of, the class of the destination,
                              (прим. очевидно, что литерал const char * не является подклассом std::string) constructors are
                              considered. <...>
                              <...>
                              — Otherwise (i.e., for the remaining copy-initialization cases), user-defined conversion sequences that can
                              convert from the source type to the destination type or (when a conversion function is used) to a derived
                              class thereof are enumerated as described in 13.3.1.4, and the best one is chosen through overload resolution
                              (13.3).
                              То есть здесь происходит неявное преобразование const char * в std::string, дабы наш std::string x4 можно было бы инициализировать копированием.
                              Ответить
            • "Где тут вызов конструктора?"

              string x1 = "you'll";
              string x2 = "never";
              string x3 = "get a";
              string x4 = "password";

              string result = x1+x2+x2+x1+l_pBuf+x3;
              Ответить
      • Самое смешное: тот, кто будет использовать этот код наверняка догадается поменять только x4, потому что там password.
        Ответить
        • C - НЕЛАМАЕМЫЙ ЯЗЫК!!!!!!!1
          Ответить
          • Язык, как говориться, без костей, а у меня как раз член вздыбился. Угадываешь мою мысль?
            Ответить
            • >как говориться
              Окончания еще не проходили?
              Хорошо что на завтра уроки не надо делать, да?
              Ответить
            • Стрертый, залогинься.
              Ответить

    Добавить комментарий