Как лучше всего шифровать строки в бинаре?

Тема в разделе "WASM.WIN32", создана пользователем nullPtr, 8 ноя 2020.

  1. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    Ну и чтобы строка не стала в итоге сигнатурой для аверов например.

    Вот в С++20 еще добавили consteval и constinit, не то чтобы я особо старался, но с одного прочтения о них, я так и не усвоил, в чем между ними разница)). И для шифрования строк одним constexpr не обойдешься, у плюсов довольно убогое CTFE, там с массивами особо не поработаешь (хотя надо посмотреть и потестить, что поменялось в С++20, чего то они там добавляли для constexpr в стандартную библиотеку).

    Не, это ужасно. Во-первых, не так читаемо. Во-вторых, это явная сигнатура для аверов.
     
  2. nullPtr

    nullPtr Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2020
    Сообщения:
    138
    И не только) Чтоб потом одним ключом не снял все стринги.
    Такая же шляпа, хеширую. Но думаю перейти на сисколы чтоль.
    Получения ключа? Не понял. Имел ввиду отдельный ключ под каждую строку? Как варик можно в зашифрованный текст дописать ключ.
    Скорее всего так буду свой проект переписывать. Уж больно много либ и готовых утилит под плюсы
    Ну нафиг тогда этот sonstexptr xD

    Я еще переводил char в int-> преоброазовывал в мат выражения и в массив, а в рантайме все это собирал.
    Строки зато не видны вообще.
    --- Сообщение объединено, 9 ноя 2020 ---
    Прост оч боюсь, что админку моего легитимного софта могут пропатчить и увести...
     
  3. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    Ну представь, что ты заведомо знаешь, что имя пользователя на компьютере, на который ты будеш устанавливать свою малварь, будет user11. Ты можешь зашифровать строки и не хранить ключ, а формировать ключ от хеша имени пользователя например. Таким образом реверсер, получая голый семпл, без знания того, кому этот семпл предназначался, ничего с ним сделать не может, кроме брута имени пользователя.

    Сисколлы это тоже своего рода сигнатура, вряд ли в живой природе может встретиться легитимное программное обеспечение, которое будет напрямую сисколлы дергать.

    Ну во-первых тут надо учесть, что это может быть соптимизировано. Можно использовать volatile для массива, но асм код от этого будет не очень красивым и он все равно свернется каким-нить деобфускатором через оптимизацию (как в хексрейзе). Я бы предложил объявить N статических неконстантных переменных (ты их менять не будешь, но компилятор не будет об этом знать), проинициализировать их рандомными значениями и от этих значений высчитывать свои математические операции. В принципе при достаточной степени рандома в генерации мат выражений это выглядит в голове достаточно неплохо.
     
    nullPtr нравится это.
  4. nullPtr

    nullPtr Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2020
    Сообщения:
    138
    Это тоже как вариант. Прост пишу нерезидент софт, которому неизвестно, что там и как там. Мне не очень важно именно сильная криптостойкость. Хватит и ксора с трехбайтовым ключом. Главное чтоб как сказал X-Shar скрыть от хекса и сигнатуру. А все равно в памяти окажется наша строка.
    "Легитимный" бот.NET) Ну ты понял)
    Прост сисколами удобнее будет штоль. И проактивку обойти. А с сигнатурой проблем не будет вообще.
    Это да.

    Кстати, есть идеи каким образом скрыть доменное имя, куда стучит моя прога.
    Не хочется, чтоб его пропатчили и использовали конкуренты :dntknw:
     
  5. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    Domain-fronting?
     
  6. nullPtr

    nullPtr Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2020
    Сообщения:
    138
    да не, чтоб в бинаре мой "196.256.0.1/gate.php" не был виден.
    Да, вопрос тупой. Тут можно свой приват алгоритм среализовать по скрытию строки, чтоб помучать реверсера.
    Другой вариант для дешифровки логов на сервере использовать приват rsa, а пабликом будет шифровать данные отправляемый клиент (логи например).

    Ну одним словом, чтоб не крякнули)
     
  7. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Хотел что то написать, пытался раз пять стирал, потом вообще потёр тк уже всё описано это кратко понятно лучше не сделать.
     
    nullPtr нравится это.
  8. nullPtr

    nullPtr Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2020
    Сообщения:
    138
    Ну я уже решил. Все остальные строки ксорим, а имя гейта будет расположен скажем на facebook.com/post/123.
    От туда парсит зашифрованный адрес гейта и при помощи своего алгоритма дешифровывает. А отсылаемые данные тоже ксорит с ново сгенерированным трехбайтным ксором (генерация на основе машины)(предварительно сжатые логи) и этот самый ключ накладывает rsa4 паблик ключом и дописывает ключ к логу. А на сервере находим зашифрованный ключ, дешифровываем rsa4 приват ключом. И этим обратно ксорим наши логи. Профит

    Тем самым отстук будет уже не на сомнительный гейт, а на трастовый. Во-вторых нужно отреверсить дешифровку полученных данных. И сами отправляемые логи невозможно дешифровать, потому что ксор генерится у каждой машины уникальный и накладывается rsa4.

    Сорь канеш за вышестоящий глупый пост/вопрос. Прост подумал, мб есть техники о которых я не знал. Все банально.

    Всем спасибо за подсказку и за ответы =)
     
  9. jega

    jega New Member

    Публикаций:
    0
    Регистрация:
    15 июн 2020
    Сообщения:
    13
    Это специализированный constexpr.

    consteval - для функций/методов;
    constinit - для переменных(статических и thread_local);

    constexpr может быть не compile-time в зависимости от контекста.

    consteval, constinit же гарантирует compile-time, иначе код не компилируется.