• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

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

Всем доброго времени суток!

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

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

upload_2017-5-25_11-53-46.png


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

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

upload_2017-5-25_11-55-37.png


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

Далее идут такие строки. Обращаем внимание на последнюю: она конвертирует Base64 в байты:
upload_2017-5-25_13-5-32.png


ибо как мы помним у нас Base64+AES шифрование.
Собственно, далее мы вызываем метод AES и CBC-режим (подробнее о CBC )
upload_2017-5-25_13-6-46.png


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

upload_2017-5-25_13-9-32.png


И не забудем получить результат:
upload_2017-5-25_13-11-4.png


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

Поэтому на заранее созданную кнопку вешаем обработчик и пишем туда:
upload_2017-5-25_13-14-50.png


Затем начинаем читать файл построчно:
upload_2017-5-25_13-15-20.png


т.о. результат будет уже в декодированном виде помещаться в string, а ее мы будем использовать так:
upload_2017-5-25_13-16-19.png


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

upload_2017-5-25_13-17-9.png


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

upload_2017-5-25_13-18-18.png


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

upload_2017-5-25_13-19-13.png


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

Воспользуемся кодом, который будет этот момент мониторить через ф-ю MyFunc(string)
upload_2017-5-25_13-22-23.png


Она будет считать повторяющиеся символы и в скобках выводить их количество. Вызов делаем так:
upload_2017-5-25_13-23-14.png


Потом поделим содержимое string на массив string:
upload_2017-5-25_13-24-26.png


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

upload_2017-5-25_13-25-11.png


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

upload_2017-5-25_13-25-49.png


Посчитаем размер массива:
upload_2017-5-25_13-26-7.png


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

upload_2017-5-25_13-26-18.png


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

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

upload_2017-5-25_13-39-1.png


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

upload_2017-5-25_13-41-1.png


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

upload_2017-5-25_13-41-28.png


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

upload_2017-5-25_13-45-54.png


upload_2017-5-25_13-46-14.png


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

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

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

upload_2017-5-25_13-53-44.png


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

Выглядит это "чудо" теперь так:
upload_2017-5-25_13-54-50.png
upload_2017-5-25_13-55-53.png


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

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

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

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

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

[doublepost=1495683065,1495682286][/doublepost]Исходник во вложении :cool:
 

Вложения

  • Decrypt.rar
    1,9 МБ · Просмотры: 437
B

Bayonet

Спасибо тебе Ishikawa за труд и то, то не забыл таки про нас - начинающих) Пойду изучать код. Классные у тебя статьи))
[doublepost=1496246878,1495883037][/doublepost]Ishikawa. Разобрал твой дешифратор, все работает класс. Очень интересно и познавательно, особенно для нас, новичков. Готов тебе на пиво сбросить, только не знаю как.
 
S

serg8694

Привет Ishikawa!
Спасибо большое за твой труд!
Помоги пожалуйста, в чем может быть проблема? Наверное плохо гуглил, не нашел решения.
При открытии log.dat вызывается исключение.
 

Вложения

  • 6.JPG
    6.JPG
    207,5 КБ · Просмотры: 547
  • 7.JPG
    7.JPG
    195,6 КБ · Просмотры: 519
  • 8.JPG
    8.JPG
    201 КБ · Просмотры: 431
R

RickEnd

Кто нибудь знает как связаться с автором, заранее спасибо!
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!