Разработка DL лоадера

1. Что именно шифровать в dll? Т.е. какой именно раздел РЕ файла должен быть пошифрован дроппером? ведь нельзя поксорить весь файл, иначе он не будет работать, ровно как и поксорить там секцию данных или еще что. Можно подробней на эту тему?

в дроппер изначально вкомпиливаются смещения в dll-файле, отмечающие область, которая подлежит пошифрованию. Либо же эта область помечается маркерами в начале и конце, и дроппер по маркерам определяет ее границы.

алгоритм длл-ки такой:
- вычислить аппаратный ключ
- расшифровать массив
- передать управление на расшифрованный массив (который представляет из себя базонезависимый код или например еще одну вложенную длл, которая мапится в память).
 
2. Заменить дллку у любой запущенной программы. Проверить что она не в системной папке. В выплевываемую дллку добавить экспорт как у оригинала, и добавить загрузку оригинала. Сложно, но Вы ж не просили легко :D
 
1. Что именно шифровать в dll? Т.е. какой именно раздел РЕ файла должен быть пошифрован дроппером? ведь нельзя поксорить весь файл, иначе он не будет работать, ровно как и поксорить там секцию данных или еще что. Можно подробней на эту тему?
Можно ксорить, можно по сложнее алгос применить, далее в памяти расшифровывать и настраивать образ в памяти нужного нам процесса.

2. Как обеспечить автозагрузку дллки? Т.е. дроппер скачал дллку, заинжектил ее в адресное пространство эксплорера или свцхост, а сам самоудалился. Все работает, но как только юзер выключит/перезагрузит комп, дллка сама по себе же не подключится опять к процессу. Как здесь быть? AppInit_DLLs не предлагать, так как они или отключены с виста+, или требуют цифровой подписи (точно не помню, но там с ними какая-то проблема есть). + загрузка сразу во все процессы, как по мне, не есть хорошо.
Это уже другой вопрос, юзаются методы через rundll32, добавляются ссылки на длл в спец. ключи реестра, читай автозагрузка длл... Но находясь на харде будет палиться, т.е. нужен крипт длл... Либо морфер на борту дроппера, который выплевывает каждый раз новую длл, что на порядок сложнее организовать.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Спасибо всем за ответы, единственное:
2. Заменить дллку у любой запущенной программы. Проверить что она не в системной папке. В выплевываемую дллку добавить экспорт как у оригинала, и добавить загрузку оригинала.
не пойму:
1)как такое реально сделать универсально. Системные, общеизвестные длл мы заменить не можем (так как Windows file protection + многие длл кешируются). Итого - можно заменить дллку лишь у обычных программ, т.е. не-виндовс длл, верно? А если да - то какая прога стоит у всех? И как можно сделать такую длл? Или я чего-то не понимаю, но скажем у 1 стоит скайп, у второго мейл агент, у третьего какая-то игра, как можно накодить малварь, чтобы она создала универсальную длл под все это? Или я усложняю, а на самом деле это в принципе реально - там скопировать раздел экспорта и как-то сделать редирект на все функции оригинальной длл?

2)Какую именно запущенную программу выбирать? Опять же - может человек включил скайп раз в месяц, а мы к нему прицепимся с длл..
 
Quake3
не надо конкретную программу выбирать заранее, можно генерировать длл-ки для всех запущенных программ, подсунув нужные функции вместо экспортируемых функций-заглушек, и в отдельную секцию запихнуть оригинальную длл, которую разворачивать в памяти. Сложный подход, но должен быть эффективным :) если еще и аппаратно-зависимое шифрование навернуть, то вообще красота )
 
Left4Dead классная идея! + Права у тех прожек могут быть выше чем пользовательские либо допущены к инету автоматическими сгенеренными правилами фаера либо заацепченными вручную.

в отдельную секцию запихнуть оригинальную длл, которую разворачивать в памяти
Оригинальную длл можно держать рядом, зная её новое имя, можно подгрузить её в пространство нужного процесса.

Как алгоритм такой выглядит?
1. Проходимся по папке Program Files
2. Ищем софт из списка либо все подряд эвристически чекаем?
3. Ищем дллки в папка, смотрим экспорт
4. Генерим собственную с заглушкой экспортной функции, переименовывая оригинал в dllname+__+ext
5. Патчим свою длл с именем переименованной оригинальной?
6. Не дожидаясь пока "клиент" запустит нужный софт сам, запускаем ShellExecute... Пешка в дамках!

как то так?
 
Оригинальную длл можно держать рядом, зная её новое имя, можно подгрузить её в пространство нужного процесса.

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

паук, не расстраивайся - держи плюсик :)
 
Вот сейчас озадачился идеей написания морфера си\си++ сорцов, гляжу в сторону Clang, pycparser и еще пары проектов, у всех есть плюсы\минусы...
На данный момент задача состоит в том чтобы разложить входной сурс на AST древо, далее научиться генерить компоненты такого древа не нарушая логики (читай мусорный генератор), а также замену части кода древа с заменой на эквивалент (читай морфинг), а также перестановку частей кода, без потери логики (читай пермутатор), с последующей сборкой древа обратно в сурс без потери работоспособности.

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

demien , я хотел подобное сделать с масм, но пока не хватает общих знаний по матчасти тех же двоичных деревьев, или как там их.
А почему, собственно, С/С++?
 
Меня завлекла идея именно морфинга си, т.к. для асма для бинарного морфинга уже куча всего изобретена, практически все аспекты описанны, делфи уже useless язык, а вот си мне интересен со всех точек зрения, плюс входные инструменты парсинга готовые есть как на питоне, так и бинарные.
 


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