Мысли по рынку криптовалют
Мысли по рынку криптовалют на 09.09.2019
Сентябрь 9, 2019
Брут WiFi паролей без захвата рукопожатий
Брут WiFi паролей без захвата рукопожатий
Сентябрь 9, 2019
Показать все
Прячем строки в программах

Речь в данной статье пойдет о шифровании данных внутри программ, я так же приведу простенький пример для наглядности.

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

Кроме метаданных, которые оставляют некоторые компиляторы, в добавок имеются ещё и строки (пути, ссылки и другая инфа)

Оговорюсь сразу, что данный способ защитит только от поверхностного анализа файла. Иными словами, целенаправленный поиск пользователя слов rms или remote не даст результатов.

Начнем. Проводить тест я буде на Kali Linux, но и по Windows есть аналоги программ.

Нам потребуются:

  1. Базовое знание языка C++ (буду тестить на нем)
  2. Утилита Strings (nix-утилита — применяется в двоичных файлах для поиска печатных строк)
  3. C++ компилятор

Приступаем:

Для начала давайте посмотрим, что мы будем иметь, при создании билда с обычной строкой.

#include <string.h> //Библиотека для работы с классом std::string

int main(){ //функция входа
    std::string mystr = "abcd123"; //Эту строку мы будем искать, ее нужно скрыть.
    //Просто вставляем строку в ячейку памяти. Не выводя ее.

    return 0; //Успешно завершаем выполнение
}

Компилируем:

mkdir builds  # Это папка для билдов
c++ uncrypted.cpp -o builds/uncrypted  # Я использую компилятор "c++", указав файл исходного кода uncrypted.cpp и сохраняю в builds под именем uncrypted

Смотрим строки:

strings uncrypted

Наша строка:

шифрование строк

Как видим, строка написана открытым текстом. Что же делать? Можно прибегнуть к банальному шифрованию при помощи XOR (взят только для примера)

Пишем криптор для строк:

#include <iostream> // потоки ввода/вывода
#include <string.h> // библиотека для работы с классом std::string

int main(){ //функция входа
std::string mystr = "abcd123"; // Строка. Вы можете вводить строку и ключ с помощью потоков ввода, можно сделайть на ваше усмотрение.
std::string crypted = ""; // Переменная для сохранение зашифрованной строки

for(int i = 0; i < strlen(mystr.c_str()); i++) // Создаем цикл для шифровки каждого символа
crypted += mystr[i] ^ [B]2[/B]; //проводим операцию xor с ключом 2

std::cout << crypted << std::endl; // выводим результат

return 0; //И завершаем выполнение.
}

Компилируем: c++ crypter.cpp -o builds/cryptor
И запускаем: ./builds/cryptor
Наш понятный текст, стал не понятным символьным набором.

c'af301

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

Основная программа для текста:

#include <iostream> //потоки ввода/вывода
#include <string.h> // std::string

int main(){
    std::string mystr = "c`af301"; //Зашифрованный текст
    std::string a = ""; //Строка под расшифрованный текст

    for(int i = 0; i < strlen(mystr.c_str()); i++) //Запускаем цикл для каждого символа
    a += mystr[i] ^ 2; // Расшифровываем и заполянем переменную.
    std::cout << a << std::endl; //Выводим
    return 0; //Успешное завершение.
}

Примечание! При шифровании и расшифровании, ключи должны быть одинаковые. В противном случае - результат будет другой.

Компилируем: c++ crypter.cpp -o builds/cryptor
И запускаем: ./builds/cryptor
Смотрим, что внутри файла: strings builds/crypted
Прячем строки в программах 1

Как видим, текст зашифрован.

Этим методом можно зашифровать и расшифровать байты, строки или значения. Но помните, что опытного реверсера это не остановит.

0

Автор публикации

не в сети 5 месяцев

Исмаил Гришаев

6
Комментарии: 1Публикации: 45Регистрация: 22-05-2019
ПОДЕЛИСЬ С ДРУЗЬЯМИ

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

восемнадцать + десять =

Авторизация
*
*

16 + десять =

Регистрация
*
*
*
Пароль не введен
*

12 − два =

Генерация пароля

13 − 10 =