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

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

fristailxxx

HDD-drive
Пользователь
Регистрация
26.01.2021
Сообщения
47
Реакции
2
Всем привет, есть простая программа(C LANG) в которой нужно ввести пароль, пароль содержится в переменной например:
int pass = 31112222;
Но человек может просто открыть экзешник в IDA и найти пароль, ввести и войти в программу без пароля.
Как зашифровать данные в переменной? так чтобы пароль нельзя было найти в IDA?
Заранее спасибо!
 
А что ты хочешь шифровать? Если пароль имеет числовое представление, как и показано в твоем примере, то можно разбивать его на математические операции, например:

C:
int pass = 1234567;

pass -= 13;
pass += 84;
...
 
А что ты хочешь шифровать? Если пароль имеет числовое представление, как и показано в твоем примере, то можно разбивать его на математические операции, например:

C:
int pass = 1234567;

pass -= 13;
pass += 84;
...
С паролем это только пример, помимо int нужно еще и текстовые сообщения, но при этом чтобы они еще и выводились)))
 
Пожалуйста, обратите внимание, что пользователь заблокирован
А что ты хочешь шифровать? Если пароль имеет числовое представление, как и показано в твоем примере, то можно разбивать его на математические операции, например:
Да, только оптимизатор скорее всего свернет всю константную математику, чтобы этого не происходило, можно использовать глобальные переменные, например.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
паролем это только пример, помимо int нужно еще и текстовые сообщения, но при этом чтобы они еще и выводились))
Смотри мою статью по обфускации це и плюсов с помощью libclang.
 
так можно же поставить бряк на strcmp(или аналогичную) и посмотреть что с чем сравнивается
В конце концов можно вообще пропатчить программу убрав проверку
Если хочешь надежно защитится,то лучше смотри в сторону работы большей части логики приложения на стороне твоего сервера
Если само приложение есть у юзера,то когда ее взломают это вопрос времени и денег
 
Всем привет, есть простая программа(C LANG) в которой нужно ввести пароль, пароль содержится в переменной например:
int pass = 31112222;
Но человек может просто открыть экзешник в IDA и найти пароль, ввести и войти в программу без пароля.
Как зашифровать данные в переменной? так чтобы пароль нельзя было найти в IDA?
Заранее спасибо!
Ну, есть такие вещи как xor - но это будет так же очевидно, если открыть софт в ida.

А так - есть еще rc4.
Есть rsa
 
Более радикальный вариант - хранить и вообще работать в хэшем. Его значение хоть захардкодить можно.
Кстати да, охуенный вариант в кейсе константного пароля.

Но нужно понимать, что хороший реверсер все это поснимает - вопрос времени
 
Но нужно понимать, что хороший реверсер все это поснимает - вопрос времени

Да, от хорошего реверсера только вынос части логики работы куда-то на отдельный сервер спасет...
 
Да, от хорошего реверсера только вынос части логики работы куда-то на отдельный сервер спасет...
Хмм. Люблю я дамагу. Классный форум.
 
не C LANG:

C++:
const auto& hash = "ee7a0c973a6a04c6a653248c71cb462f2e55c8e4e1d5c068b9930e634f70533435623e8642f8bd8fc249920a815547c4b2b1b3b942ffa0c48039fb799176d041";
cin >> user_input;
if ( sha512sum(user_input).compare(hash) == 0 )
{
    //...
}
else
{
    // ....
}
 
Пожалуйста, обратите внимание, что пользователь заблокирован
От реверсера не спасет ничего, вопрос только в затраченных усилиях. Если же цель просто скрыть от школьника с хекс редактором, то можно добавить ксор + где-то вставить проверку црц пароля или еще что. А лучше, как писали выше, выносить проверку на сервер.

if ( sha512sum(user_input).compare(hash) == 0 )
меняется один байт (jne => je ) и вся эта криптография коту под хвост.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
меняется один байт (jne => je ) и вся эта криптография коту под хвост.
Да, можно, например, от такого хеша высчитывать ключ для расшифровки основного функционала, или хотя бы адрес/смещение функции, на который код должен перейти.

По сабжу: обфускация - это всегда компромис между сложностью реверса и скоростью исполнения кода. Можно какой-нить "индеклав" запилить или "наномитов", но это будет тормозить как пздц. Важно сначала понимать задачу, которую обфускация должна решать.
 
От реверсера не спасет ничего, вопрос только в затраченных усилиях. Если же цель просто скрыть от школьника с хекс редактором, то можно добавить ксор + где-то вставить проверку црц пароля или еще что. А лучше, как писали выше, выносить проверку на сервер.


меняется один байт (jne => je ) и вся эта криптография коту под хвост.
Да, но это всегда так. Цель состояла только в том, чтобы запутать пароль
 
Если эта цель - единственная, ради чего всё затевается, то нормального хэша должно хватить. Кстати, тут и квалификация ревесера не спасет, который всё равно вытащит сам хэш. Но это, пожалуй единственный случай - в любой другой ситуации, этого будет недостаточно.
 
Если эта цель - единственная, ради чего всё затевается, то нормального хэша должно хватить. Кстати, тут и квалификация ревесера не спасет, который всё равно вытащит сам хэш. Но это, пожалуй единственный случай - в любой другой ситуации, этого будет недостаточно.
Или просто пропатчит этот хеш на свой
 
Зашифруйте фактический код с помощью AES, но используйте несколько хэшированных ключей:

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

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

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

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

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

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

Очевидно, что если он сохранил старое изображение, то он все еще может его расшифровать. Поэтому лучше зашифровать каким-нибудь случайным сеансовым ключом и отправить его на сервер. Смысл этого в том, чтобы использовать хэш как форму 2-fa.
 
Последнее редактирование:


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