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

Шифрование данных в переменной C lang

Зашифруйте фактический код с помощью AES, но используйте несколько хэшированных ключей:

h3 = Hash(Hash(Hash(key)))
h4 = Hash(Hash(Hash(Hash(key))))

Только у сервера есть оригинальный ключ (key)

Клиент аутентифицируется на сервере и запрашивает ключ h4.

Сервер отвечает ключом h3.

Функции расшифровываются с помощью ключа h4 и снова шифруются с помощью ключа h3.

Сервер теперь игнорирует запросы на ключи: {hx | x >= 4}

Очевидно, что если он сохранил старое изображение, то он все еще может его расшифровать. Поэтому лучше зашифровать каким-нибудь случайным сеансовым ключом и отправить его на сервер. Смысл этого в том, чтобы использовать хэш как форму 2-fa.
я прошу прощения, а можно как-то на пальцах? криптография не мой конек, но возможно, при придется реализовать что-то сильно упрощенное от того, о чем вы говорите
 
Хеш пароля - нормальный вариант, только от смены JZ --> JNZ при сравнении паролей, нужно предусмотреть "проверку целостности" всего кода. Если запихать этот функционал во-второй поток, то отладчики не жалуют многопоточные приложения, так-что от пионеров можно защититься. А чтобы уж наверняка, то второй поток можно вообще зашифровать от дизасма, и расшифровывать его при старте приложения.
 
Ещё вариант: основная логика приложения (для удобства её можно вынести в отдельный файл) изначально зашифрована хэшем правильного пароля. Этот хэш вообще нигде не хранится, но при старте спрашиваем у пользователя пасс, вычисляем хэш и пробуем расшифровать. Тогда пофиг на всякие JX <--> JNX.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Вообще, если есть желание усложнить какую-то логику для реверсера, то имеет смысл, скомпилировать эту логику в байт-код и добавить виртуальную машину в код проекта для исполнения байт-кода.
 
Вообще, если есть желание усложнить какую-то логику для реверсера, то имеет смысл, скомпилировать эту логику в байт-код и добавить виртуальную машину в код проекта для исполнения байт-кода.
Golang? vbox? Мне любопытно. Это защищает код от AV, но почему это усложняет логику для реверсора? Легко извлечь память процесса из виртуальной машины (volatility). А Golang просто уродливо выглядит в IDA.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Golang?
Голанг компилируется в нативный код, не в байткод.

vbox?
VirtualBox, VMware, Xen и тд - это виртуализация реальных архитектур, это другое. Имеется ввиду всякие виртуальные машины типа JVM, CLR и тд. Например, можно взять WebAssembly, скомпилить C/C++ код в WASM, а в свой код вставить какой-нить wasm3 или wac. Конечно, было бы еще неплохо его модифицировать как-то, чтобы готовых дизассемблеров для него не было.

Это защищает код от AV, но почему это усложняет логику для реверсора?
Чтобы разобрать код, реверсеру понадобится разобрать виртуальную машину и понять структуру байткода, это сложнее.
 


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