2009-09-04 1 views

ответ

2

Ну, вы можете это сделать, но это некрасиво.

#define ENCODE_STRING_14(str) {\ 
      str[0]^0x020,\ 
      str[1]^0x020,\ 
      str[2]^0x020,\ 
      str[3]^0x020,\ 
      str[4]^0x020,\ 
      str[5]^0x020,\ 
      str[6]^0x020,\ 
      str[7]^0x020,\ 
      str[8]^0x020,\ 
      str[9]^0x020,\ 
      str[10]^0x020,\ 
      str[11]^0x020,\ 
      str[12]^0x020,\ 
      '\0'\ 
      } 

void Decode(char *str, int length) 
{ 
    for(int i = 0; i < length - 1; ++i) 
    { 
     str[i] ^= 0x20; 
    } 
} 

char hello[] = ENCODE_STRING_14("Hello, World!"); 

int main() 
{ 
    printf("%s\n", hello); 
    Decode(hello, 14); 
    printf("%s\n", hello); 
    return 0; 
} 

Составитель с оптимизацией в VS2005, строка хранится в исполняемом файле, как "HELLO \ x0C \ 0wORLD \ x01". Теперь, очевидно, xor с 0x20 не является хорошей функцией, чтобы скрыть вашу строку. И, конечно же, вам нужно будет #define макрос для каждой длины строки.

Очевидно, что это не лучшее решение. Метапрограммирование шаблонов C++ было бы лучше. Вы также можете написать все свои строки в отдельном машиночитаемом файле и написать отдельную программу, которая анализирует это, затеняет строки любым способом, который вы считаете нужным, и выводит все это на .h/.c. Оба эти решения лучше, чем это.

+0

Не компилируется на gcc, пробовал различные параметры -std =. –

0

Нет, препроцессор C не имеет возможности индексировать строки, как вы предлагаете.

Из любопытства, какие другие препроцессоры вы использовали, которые могут это сделать?

1

Нет, предварительный процессор C не может обрабатывать символы строк по символам.

У вас есть идентификаторы или строки в виду, во всяком случае? Вы можете много сделать с идентификаторами с фиксированными сопоставлениями (то есть, если вы знаете имя1, вы можете указать фиксированное сопоставление для xq23), но вы не можете алгоритмически находить идентификаторы, а затем создавать для них сопоставление.

0

Нет, я не могу придумать никакого способа сделать это с препроцессором.

Этот связанный с этим вопрос может помочь вам, хотя: How to hide a string in binary code?

Смежные вопросы