Пишем simple-кейлогер с передачей дампа по TCP на C#. Часть 3 (Заключительная)

Тема в разделе "Этичный хакинг и тестирование на проникновение", создана пользователем Ishikawa, 25 май 2017.

Метки:
  1. Ishikawa

    Ishikawa マエストロ
    Команда форума Grey Team

    Репутация:
    1
    Регистрация:
    15 ноя 2016
    Сообщения:
    124
    Симпатии:
    163
    Всем доброго времени суток!

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

    Сначала объявим адресные пространства, как всегда:

    Пишем simple-кейлогер с передачей дампа по TCP на C#. Часть 3 (Заключительная)

    Потом напишем подпрограмму, которая будет принимать наш Base64, декодировать его обратно в AES, а из него уже будем получать "неформатированный" вывод.

    Функция расшировки обратна функции шифрования из первой части (входной параметр это string cipherText).

    Пишем simple-кейлогер с передачей дампа по TCP на C#. Часть 3 (Заключительная)

    Главное, чтобы совпадали параметры salt, initialVector, keySize и hashAlgorithm.

    Далее идут такие строки. Обращаем внимание на последнюю: она конвертирует Base64 в байты:
    Пишем simple-кейлогер с передачей дампа по TCP на C#. Часть 3 (Заключительная)

    ибо как мы помним у нас Base64+AES шифрование.
    Собственно, далее мы вызываем метод AES и CBC-режим (подробнее о CBC тут)
    Пишем simple-кейлогер с передачей дампа по TCP на C#. Часть 3 (Заключительная)

    Далее у нас "матрешка" из потоков. Благодаря ей и происходит декодировка. В конце потоки обязательно закрываем, чтобы освободить ресурсы.

    Пишем simple-кейлогер с передачей дампа по TCP на C#. Часть 3 (Заключительная)

    И не забудем получить результат:
    Пишем simple-кейлогер с передачей дампа по TCP на C#. Часть 3 (Заключительная)

    На этом модуль Decrypter() завершен. После его работы у нас будет очень много каши из символов.
    Чтобы привести её к более-менее читаемому виду, будем использовать StreamReader, который будет читать наш файл, брать каждую строку, сразу ее декодировать и выводить на экран.
    В отличие от предыдущих частей, тут используется оконный интерфейс (WinForms).

    Поэтому на заранее созданную кнопку вешаем обработчик и пишем туда:
    Пишем simple-кейлогер с передачей дампа по TCP на C#. Часть 3 (Заключительная)

    Затем начинаем читать файл построчно:
    Пишем simple-кейлогер с передачей дампа по TCP на C#. Часть 3 (Заключительная)

    т.о. результат будет уже в декодированном виде помещаться в string, а ее мы будем использовать так:
    Пишем simple-кейлогер с передачей дампа по TCP на C#. Часть 3 (Заключительная)

    Почему именно так? Чтобы упростить себе задачу и преобразовать какие-то определенные символы или группу символов в другой:

    Пишем simple-кейлогер с передачей дампа по TCP на C#. Часть 3 (Заключительная)

    И так далее, думаю смысл ясен. В коде таких конструкций много.
    Потом чтобы не грузить себя оптимизацией, весь вывод просто выводим так:

    Пишем simple-кейлогер с передачей дампа по TCP на C#. Часть 3 (Заключительная)

    Alltext это TextBox на форме.
    Не забудем закрыть файл:

    Пишем simple-кейлогер с передачей дампа по TCP на C#. Часть 3 (Заключительная)

    Теперь мы имеем более осознанный текст, но без учета русской и английской раскладки.
    Чтобы выполнить преобразование eng-to-rus, придется немного попотеть.
    Я всё планировал реализовать через Regex, но времени/навыка не хватает, поэтому для начала учтём, что пользователь мог очень долго держать одну клавишу нажатой.

    Воспользуемся кодом, который будет этот момент мониторить через ф-ю MyFunc(string)
    Пишем simple-кейлогер с передачей дампа по TCP на C#. Часть 3 (Заключительная)

    Она будет считать повторяющиеся символы и в скобках выводить их количество. Вызов делаем так:
    Пишем simple-кейлогер с передачей дампа по TCP на C#. Часть 3 (Заключительная)

    Потом поделим содержимое string на массив string:
    Пишем simple-кейлогер с передачей дампа по TCP на C#. Часть 3 (Заключительная)

    А далее начинается "магия". Создадим шаблон символов, для свободного преобразования:

    Пишем simple-кейлогер с передачей дампа по TCP на C#. Часть 3 (Заключительная)

    Обращаем внимание на хвостик: там учтён "пробел" :)
    Создаем их них массив char:

    Пишем simple-кейлогер с передачей дампа по TCP на C#. Часть 3 (Заключительная)

    Посчитаем размер массива:
    Пишем simple-кейлогер с передачей дампа по TCP на C#. Часть 3 (Заключительная)

    и с помощью Dictionary сделаем сопоставление символов:

    Пишем simple-кейлогер с передачей дампа по TCP на C#. Часть 3 (Заключительная)

    Теперь учтём, что у нас могут быть и английский текст и русский.
    Попробуем вывести его на экран. Грубо говоря в программе будет два окна: в первом будет идти исходная каша и в ней будет еще и английский текст.

    В нижнем - русский (и возможно остатки от корявого декодирования+Англ., ибо код не оптимизирован). Создаем новый StringBuilder, в цикле ищем совпадение с кодами раскладки (шифратор в первой части пишет коды раскладов при их смене). Если совпадение найдено, то чекаем bool-переменную:

    Пишем simple-кейлогер с передачей дампа по TCP на C#. Часть 3 (Заключительная)

    Вверху была Eng, ниже - Rus:

    Пишем simple-кейлогер с передачей дампа по TCP на C#. Часть 3 (Заключительная)

    Конечный результат толкаем на экран:

    Пишем simple-кейлогер с передачей дампа по TCP на C#. Часть 3 (Заключительная)

    Теперь когда мы это дело запустим, то декодировка выглядеть будет примерно так:

    Пишем simple-кейлогер с передачей дампа по TCP на C#. Часть 3 (Заключительная)

    Пишем simple-кейлогер с передачей дампа по TCP на C#. Часть 3 (Заключительная)

    Что за стрелки? Это моменты нажатия и отпускания какой-либо клавиши:
    всем привет1 означает "Всем привет!"
    В данном случае стрелка вверх это SHIFT. SHIFT+1 = !
    Паттерн ↑(26)о↓ означает, что я нажимал/удерживал букву О 26 раз подряд.
    А вот такая штука goooood←←←←d означает, что после ввода 4 символа было удалено.

    Примерно в таком виде лучше и использовать, т.к. самый грамотный анализатор это ваш мозг.

    Я сделал робкую попытку упростить задачу, и выдавать на выходе что-то весьма близкое к оригиналу (но мозг никто не отменял) и добавил пару конструкций для обоих языков:

    Пишем simple-кейлогер с передачей дампа по TCP на C#. Часть 3 (Заключительная)

    своего рода regex для бедных :)

    Выглядит это "чудо" теперь так:
    Пишем simple-кейлогер с передачей дампа по TCP на C#. Часть 3 (Заключительная) Пишем simple-кейлогер с передачей дампа по TCP на C#. Часть 3 (Заключительная)

    Ошибки при таком варианте будут, но читаемость увеличилась.

    К слову, я использовал программу без этой фишки. Удалось восстановить на 90% тексты некоторых документов+было украдено найдено много логинов/пассов от разных устройств и сервисов.

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

    Надеюсь эта статья будет полезна!
    На этом всё :)

    И не забываем, что цикл статей имеет образовательную цель.
    Использование в противоправных целях нарушет закон.

    --- Добавлено 25 май 2017. Первое сообщение размещено 25 май 2017 ---
    Исходник во вложении :cool:
     

    Вложения:

    • Decrypt.rar
      Размер файла:
      1,9 МБ
      Просмотров:
      44
    Drupa, ghostphisher, andrej и 8 другим нравится это.
  2. Bayonet

    Bayonet New Member

    Репутация:
    0
    Регистрация:
    19 май 2017
    Сообщения:
    2
    Симпатии:
    0
    Спасибо тебе Ishikawa за труд и то, то не забыл таки про нас - начинающих) Пойду изучать код. Классные у тебя статьи))
    --- Добавлено 31 май 2017. Первое сообщение размещено 27 май 2017 ---
    Ishikawa. Разобрал твой дешифратор, все работает класс. Очень интересно и познавательно, особенно для нас, новичков. Готов тебе на пиво сбросить, только не знаю как.
     
  3. WebWare Team

    WebWare Team Администратор
    Команда форума

    Репутация:
    0
    Регистрация:
    30 дек 2015
    Сообщения:
    627
    Симпатии:
    530
    Запости ссылку на эту тему в крутом, посещаемом сообществе. Это будет лучшей наградой для маэстро.
     
    Vertigo нравится это.
Загрузка...

Поделиться этой страницей