vazonez
11.11.2009, 17:55
Прячем Зло или Чистим АВ-сигнатуры
Интро
Надюсь, тебе известно, как в АВ-программах организован поиск зловредов: в антивирусе есть база данных, в которой собраны сигнатуры вирусов - уникальные куски кода/данных. Антивирус ищет в файле эти куски, и если находит - прощай свежий криптор или троян.
В далекие времена, когда дети сидели за партами, а не писали вирусы, сигнатуры можно было выдрать из аверских баз, найти в малваре этот кусок, поменять - и опа, никто нас не видит. Но с тех пор, Евгений поумнел (или умных нанял), и начал хорошенько прятать сигнатуры. Доковыряться до них - задача не из легких, поэтому мы выберем путь полегче - найдем их самостоятельно, не копаясь в базах продуктов мозговой жизнедеятельности аверов.
Суть такого поиска сигнатур - попробовать менять каждый байт вируса, и если после такого он станет чистым в глазах АВ - мы нашли ее! У такой методы есть большое количество минусов - скорость поиска, возможность вообще ничего стоящего не получить и т.п. Но пробовать все-равно стоит!
"Сестра! Скальпель и кувалду!"
Для примера, от настырных глаз АВ будем прятать EXE - контейнер джоинера SunS Joiner. Склеивать будем 2 маленькие свежескомпилированые мирные проги - обе создают по обычному окну. Они есть в архиве к статье (см. внизу).
Софт, который будет использоваться:
1) Free Hex Editor ([Ссылки доступны только зарегистрированным пользователям]) - простенький хекс-редактор. Можно использовать тот-же WinHex.
2) OllyDbg v1.10 ([Ссылки доступны только зарегистрированным пользователям]) - отладчик, нужен для просмотра и редактирования нужной сигнатуры.
3) SunS Joiner v2.2.4 ([Ссылки доступны только зарегистрированным пользователям]) - джоинер, которым будем клеить файлы. Жутко палится, но нам это и нужно.
4) [SD] SignDetect ([Ссылки доступны только зарегистрированным пользователям]) - пропиарюсь немного :-) Этой тулзой будем искать сигнатуру.
5) KIS7 ([Ссылки доступны только зарегистрированным пользователям]) - собственно, от него и будем прятать файл.
6) PEiD v0.95 ([Ссылки доступны только зарегистрированным пользователям]) - для скана контейнера с целью сильно ускорить весь процесс очистки (см. ниже)
"На старт! Внимание! Марш!"
Открывай джоинер:
[Ссылки доступны только зарегистрированным пользователям]
Жми сразу "Без иконки". Для теста, лучше иконку не ставить, т.к. размер ЕХЕ на выходе будет меньше, соотвественно и сигнатуру искать быстрее будет. Добавляем наши тестовые файлы "poasm1k.exe" и "simple.exe". Нажимай на "Склеить" - сохраняй контейнер под любым именем, например "aaa.exe". Дальше клей нам не понадобится, поэтому закрывай его.
Следующий инструмент в очереди - SignDetect. Немного о нем: суть его работы вот в чем - берет наш контейнер, и по очереди меняет 1 байт (опционально, можно увеличить) файла и сохраняет такой "мод" в отдельной папке. После окончания работы в этой папке будет большое количество таких вот "модов". На эту папку нужно натравить АВ, который чекнет и удалит все палящиеся файлы. Файлы, что останутся в ней после проверки - с очищенной сигнатурой.
Запускай тулзу:
[Ссылки доступны только зарегистрированным пользователям]
Жми на "..." - выбирай контейнер "aaa.exe". Следующий шаг - определиться с настройками проги.
Опция "Скан файла" предназначена для выбора диапазона байт в файле, которые мы будем менять. Если контейнер большой (более 100 КБ) - процесс записи тулзой файлов будет длится долго, точно как и скан АВером всех файлов и очистка их же. Поэтому, если есть желание, время и фри спэйс на харде, то выбирай "Весь файл". В нашем случае выбираем "Диапазон (HEX)". Нижняя и верхняя границы диапазона - левое и правое поля соответственно. Для удачного в плане скорости выбора следует правильно выбрать их. Нижнее поле - чаще всего надо использовать смещение начала первой секции контейнера. Для этого открываем PEiD, выбираем в нем наш контейнер, и жмем на кнопку просмотра секция файла:
[Ссылки доступны только зарегистрированным пользователям]
Откроется окно с аттрибутами секций файла. Нам нужно узнать смещение первой секции EXE. Вот оно:
[Ссылки доступны только зарегистрированным пользователям]
Т.е. нужно выбирать самое наименьшее значение столбца "R. Offset". В данном случае оно равно 400h. На этом PEiD нам отслужил - можно закрывать, больше не понадобится. Вводим 400 в левое поле [SD] - это было нижнее значение. Верхнее - это размер файла. Смотрим его в проводнике или TC (Не забудь - оно там в десятиричном виде, а в [SD] нужно вбивать в HEX. Сконвертируй в калькуляторе или в уме ;-) В нашем случае вышло "560C". Это - верхнее значение, вбивай его в правое поле.
Следующая опция - "Количество байт для записи" - думаю назначение понятно. По умолчанию стоит "1". Если после окончания работы тулзы, все созданные файлы палятся - следует увеличить значение и повторить работу с тулзой.
Перед началом работы тулзы, лучше вырубить защиту АВ, т.к. она начнет буйно реагировать на работу с зараженным файлом. Жмем кнопку "Старт!" и ожидаем окончания работы, о чем нам скажет сообщение - "Готово!". На этом работа с тулзой закончена - можно ее закрывать.
Природный отбор
После окончания работы с [SD], рядом с программой создастся папка "SIGN_DETECT", в которой будут измененные EXEшники нашего контейнера. Натравляем АВ на эту папку (Важно! В антивирусе нужно включить опцию - "удалять зараженные". С ней будет намного удобнее - те файлы, которые остались палевными удалятся, а нужные останутся в папке) и ждем конца проверки. После окончания видим такуюю картину:
[Ссылки доступны только зарегистрированным пользователям]
Всего файлов в папке - 21448, а зараженных - 20876. Т.е. очищенных - 572 файла! Это отличный результат. Теперь, чтобы эти файлы не искать, дадим антивирусу удалить грязные файлы. Опять ждем, пока удалится ~20к файлов. После этого в папке остались только нужные нам файлы.
Сама чистка
Закрываем АВ и заходим в папку "SIGN_DETECT". Выбираем любой файл, например "000035A0.exe". Название файла соответствует смещению, по которому изменился байт. Этот файл нам больше не нужен, т.к. все что нужно - смещение, мы узнали.
Запускай Frhed и открывай в нем файл "aaa.exe" - наш контейнер. Топаем по адресу 000035A0 и видим такую картину:
[Ссылки доступны только зарегистрированным пользователям]
Запоминаем несколько байт по этому адресу, например 8 штук - (BF 68 66 40 00 33 С0 55). Чем больше байт, тем лучше - но в нашем случае восьми будет достаточно. Закрывай Frhed - он больше не понадобится.
Последний инструмент, который будем использовать - OllyDbg. Запускай ее, и открывай в нем наш "aaa.exe".
Откроется окно CPU с кодом программы. Нам нужно найти в этом коде ту последовательность байт, при изменении которой файл перестает палится. Для этого откываем окно "Binary Search" - Ctrl+B, вводи в нижнее поле последовательность байт BF 68 66 40 00 33 С0 55, чтобы это выглядело так:
[Ссылки доступны только зарегистрированным пользователям]
Жми "Enter" - поиск закончится и указатель в окне CPU станет на найденную инструкцию:
[Ссылки доступны только зарегистрированным пользователям]
Поиск остановился на адресе 004041A0, на строке "MOV EDI, 406668" - помещение в регистр EDI значения 406668h. Учитывая большое количество отсеяных файлов (572), скорее всего эта строка - только часть сигнатуры, т.е. если мы уберем/перенесем ее - АВ заткнется. Если ее просто изменить на случайное значение - ЕХЕ перестанет работать, поэтому нужно изменить байты так, чтобы код не потерял работоспособности. Самый простой способ - перенести эту команду в неиспользуемое место. Иллюстрация:
[Ссылки доступны только зарегистрированным пользователям]
Т.е. на место "MOV EDI, 406668" ставим прыжок на неиспользуемое пространство, там вставляем: "MOV EDI, 406668" и переход обратно.
Чтобы это осуществить, нужно найти неиспользуемое место в коде. Листаем 2 экрана вниз в окне CPU и видим много нулей, начиная с адреса 404379. Чтобы было удобнее, возьмем круглый адрес - 404380. Ставим на него указатель, жмем пробел - откроется окно для ввода инструкции. Вводим "MOV EDI, 406668" (без кавычек) и жмем "Assemble". Сюда же вводим команду: "JMP 4041A5" - переход на адрес, по которому лежит инструкция, следующая за "MOV EDI, 406668" в оригинальном ЕХЕ - "aaa.exe".
Последний штрих - по адресу 004041A0 вбиваем команду "JMP 404380". Сохраняем модифицированный ЕХЕ: в контекстном меню окна CPU выбираем "Copy to executable" -> "All modifications" -> "Copy all". В контекстном меню появившегося окна выбираем "Save file" и сохраняем под именем "aaa2.exe".
Готово! Закрывай OllyDbg и запускай "aaa2.exe". Если все делалось правильно - должно появится 2 окна, а значит патч сработал и мы все сделали правильно.
Проверка на вшивость
Каспер удачно заткнулся - можешь проверить на своем. Но есть более интересный результат:
Файл "aaa.exe", который мы не трогали, на VT:
35/41
[Ссылки доступны только зарегистрированным пользователям] 0a6a64df0b47d2-1257888873
Файл "aaa2.exe", наша версия:
19/41
[Ссылки доступны только зарегистрированным пользователям] 30c43e5da9ec9a-1257938117
Очень отчетливо видно, как заткнулись 16 антивирусов :-D Среди них и продукт ЛК.
Аутро
Вот так, имея в запасе 20 минут свободного времени можно забыть об АВ. Такой метод очень хорошо себя проявляет тогда, когда нужно протроянить определенную жертву, когда знаешь, какой у нее АВ - например друзья, родственники и т.д. ;-)
Архив с подобытными кроликами и модифицированным файлом можно найти тут:
[Ссылки доступны только зарегистрированным пользователям] : vazonez
Оригинал: [Ссылки доступны только зарегистрированным пользователям]
Видео-туториал можно скачать тут:
[Ссылки доступны только зарегистрированным пользователям]
Интро
Надюсь, тебе известно, как в АВ-программах организован поиск зловредов: в антивирусе есть база данных, в которой собраны сигнатуры вирусов - уникальные куски кода/данных. Антивирус ищет в файле эти куски, и если находит - прощай свежий криптор или троян.
В далекие времена, когда дети сидели за партами, а не писали вирусы, сигнатуры можно было выдрать из аверских баз, найти в малваре этот кусок, поменять - и опа, никто нас не видит. Но с тех пор, Евгений поумнел (или умных нанял), и начал хорошенько прятать сигнатуры. Доковыряться до них - задача не из легких, поэтому мы выберем путь полегче - найдем их самостоятельно, не копаясь в базах продуктов мозговой жизнедеятельности аверов.
Суть такого поиска сигнатур - попробовать менять каждый байт вируса, и если после такого он станет чистым в глазах АВ - мы нашли ее! У такой методы есть большое количество минусов - скорость поиска, возможность вообще ничего стоящего не получить и т.п. Но пробовать все-равно стоит!
"Сестра! Скальпель и кувалду!"
Для примера, от настырных глаз АВ будем прятать EXE - контейнер джоинера SunS Joiner. Склеивать будем 2 маленькие свежескомпилированые мирные проги - обе создают по обычному окну. Они есть в архиве к статье (см. внизу).
Софт, который будет использоваться:
1) Free Hex Editor ([Ссылки доступны только зарегистрированным пользователям]) - простенький хекс-редактор. Можно использовать тот-же WinHex.
2) OllyDbg v1.10 ([Ссылки доступны только зарегистрированным пользователям]) - отладчик, нужен для просмотра и редактирования нужной сигнатуры.
3) SunS Joiner v2.2.4 ([Ссылки доступны только зарегистрированным пользователям]) - джоинер, которым будем клеить файлы. Жутко палится, но нам это и нужно.
4) [SD] SignDetect ([Ссылки доступны только зарегистрированным пользователям]) - пропиарюсь немного :-) Этой тулзой будем искать сигнатуру.
5) KIS7 ([Ссылки доступны только зарегистрированным пользователям]) - собственно, от него и будем прятать файл.
6) PEiD v0.95 ([Ссылки доступны только зарегистрированным пользователям]) - для скана контейнера с целью сильно ускорить весь процесс очистки (см. ниже)
"На старт! Внимание! Марш!"
Открывай джоинер:
[Ссылки доступны только зарегистрированным пользователям]
Жми сразу "Без иконки". Для теста, лучше иконку не ставить, т.к. размер ЕХЕ на выходе будет меньше, соотвественно и сигнатуру искать быстрее будет. Добавляем наши тестовые файлы "poasm1k.exe" и "simple.exe". Нажимай на "Склеить" - сохраняй контейнер под любым именем, например "aaa.exe". Дальше клей нам не понадобится, поэтому закрывай его.
Следующий инструмент в очереди - SignDetect. Немного о нем: суть его работы вот в чем - берет наш контейнер, и по очереди меняет 1 байт (опционально, можно увеличить) файла и сохраняет такой "мод" в отдельной папке. После окончания работы в этой папке будет большое количество таких вот "модов". На эту папку нужно натравить АВ, который чекнет и удалит все палящиеся файлы. Файлы, что останутся в ней после проверки - с очищенной сигнатурой.
Запускай тулзу:
[Ссылки доступны только зарегистрированным пользователям]
Жми на "..." - выбирай контейнер "aaa.exe". Следующий шаг - определиться с настройками проги.
Опция "Скан файла" предназначена для выбора диапазона байт в файле, которые мы будем менять. Если контейнер большой (более 100 КБ) - процесс записи тулзой файлов будет длится долго, точно как и скан АВером всех файлов и очистка их же. Поэтому, если есть желание, время и фри спэйс на харде, то выбирай "Весь файл". В нашем случае выбираем "Диапазон (HEX)". Нижняя и верхняя границы диапазона - левое и правое поля соответственно. Для удачного в плане скорости выбора следует правильно выбрать их. Нижнее поле - чаще всего надо использовать смещение начала первой секции контейнера. Для этого открываем PEiD, выбираем в нем наш контейнер, и жмем на кнопку просмотра секция файла:
[Ссылки доступны только зарегистрированным пользователям]
Откроется окно с аттрибутами секций файла. Нам нужно узнать смещение первой секции EXE. Вот оно:
[Ссылки доступны только зарегистрированным пользователям]
Т.е. нужно выбирать самое наименьшее значение столбца "R. Offset". В данном случае оно равно 400h. На этом PEiD нам отслужил - можно закрывать, больше не понадобится. Вводим 400 в левое поле [SD] - это было нижнее значение. Верхнее - это размер файла. Смотрим его в проводнике или TC (Не забудь - оно там в десятиричном виде, а в [SD] нужно вбивать в HEX. Сконвертируй в калькуляторе или в уме ;-) В нашем случае вышло "560C". Это - верхнее значение, вбивай его в правое поле.
Следующая опция - "Количество байт для записи" - думаю назначение понятно. По умолчанию стоит "1". Если после окончания работы тулзы, все созданные файлы палятся - следует увеличить значение и повторить работу с тулзой.
Перед началом работы тулзы, лучше вырубить защиту АВ, т.к. она начнет буйно реагировать на работу с зараженным файлом. Жмем кнопку "Старт!" и ожидаем окончания работы, о чем нам скажет сообщение - "Готово!". На этом работа с тулзой закончена - можно ее закрывать.
Природный отбор
После окончания работы с [SD], рядом с программой создастся папка "SIGN_DETECT", в которой будут измененные EXEшники нашего контейнера. Натравляем АВ на эту папку (Важно! В антивирусе нужно включить опцию - "удалять зараженные". С ней будет намного удобнее - те файлы, которые остались палевными удалятся, а нужные останутся в папке) и ждем конца проверки. После окончания видим такуюю картину:
[Ссылки доступны только зарегистрированным пользователям]
Всего файлов в папке - 21448, а зараженных - 20876. Т.е. очищенных - 572 файла! Это отличный результат. Теперь, чтобы эти файлы не искать, дадим антивирусу удалить грязные файлы. Опять ждем, пока удалится ~20к файлов. После этого в папке остались только нужные нам файлы.
Сама чистка
Закрываем АВ и заходим в папку "SIGN_DETECT". Выбираем любой файл, например "000035A0.exe". Название файла соответствует смещению, по которому изменился байт. Этот файл нам больше не нужен, т.к. все что нужно - смещение, мы узнали.
Запускай Frhed и открывай в нем файл "aaa.exe" - наш контейнер. Топаем по адресу 000035A0 и видим такую картину:
[Ссылки доступны только зарегистрированным пользователям]
Запоминаем несколько байт по этому адресу, например 8 штук - (BF 68 66 40 00 33 С0 55). Чем больше байт, тем лучше - но в нашем случае восьми будет достаточно. Закрывай Frhed - он больше не понадобится.
Последний инструмент, который будем использовать - OllyDbg. Запускай ее, и открывай в нем наш "aaa.exe".
Откроется окно CPU с кодом программы. Нам нужно найти в этом коде ту последовательность байт, при изменении которой файл перестает палится. Для этого откываем окно "Binary Search" - Ctrl+B, вводи в нижнее поле последовательность байт BF 68 66 40 00 33 С0 55, чтобы это выглядело так:
[Ссылки доступны только зарегистрированным пользователям]
Жми "Enter" - поиск закончится и указатель в окне CPU станет на найденную инструкцию:
[Ссылки доступны только зарегистрированным пользователям]
Поиск остановился на адресе 004041A0, на строке "MOV EDI, 406668" - помещение в регистр EDI значения 406668h. Учитывая большое количество отсеяных файлов (572), скорее всего эта строка - только часть сигнатуры, т.е. если мы уберем/перенесем ее - АВ заткнется. Если ее просто изменить на случайное значение - ЕХЕ перестанет работать, поэтому нужно изменить байты так, чтобы код не потерял работоспособности. Самый простой способ - перенести эту команду в неиспользуемое место. Иллюстрация:
[Ссылки доступны только зарегистрированным пользователям]
Т.е. на место "MOV EDI, 406668" ставим прыжок на неиспользуемое пространство, там вставляем: "MOV EDI, 406668" и переход обратно.
Чтобы это осуществить, нужно найти неиспользуемое место в коде. Листаем 2 экрана вниз в окне CPU и видим много нулей, начиная с адреса 404379. Чтобы было удобнее, возьмем круглый адрес - 404380. Ставим на него указатель, жмем пробел - откроется окно для ввода инструкции. Вводим "MOV EDI, 406668" (без кавычек) и жмем "Assemble". Сюда же вводим команду: "JMP 4041A5" - переход на адрес, по которому лежит инструкция, следующая за "MOV EDI, 406668" в оригинальном ЕХЕ - "aaa.exe".
Последний штрих - по адресу 004041A0 вбиваем команду "JMP 404380". Сохраняем модифицированный ЕХЕ: в контекстном меню окна CPU выбираем "Copy to executable" -> "All modifications" -> "Copy all". В контекстном меню появившегося окна выбираем "Save file" и сохраняем под именем "aaa2.exe".
Готово! Закрывай OllyDbg и запускай "aaa2.exe". Если все делалось правильно - должно появится 2 окна, а значит патч сработал и мы все сделали правильно.
Проверка на вшивость
Каспер удачно заткнулся - можешь проверить на своем. Но есть более интересный результат:
Файл "aaa.exe", который мы не трогали, на VT:
35/41
[Ссылки доступны только зарегистрированным пользователям] 0a6a64df0b47d2-1257888873
Файл "aaa2.exe", наша версия:
19/41
[Ссылки доступны только зарегистрированным пользователям] 30c43e5da9ec9a-1257938117
Очень отчетливо видно, как заткнулись 16 антивирусов :-D Среди них и продукт ЛК.
Аутро
Вот так, имея в запасе 20 минут свободного времени можно забыть об АВ. Такой метод очень хорошо себя проявляет тогда, когда нужно протроянить определенную жертву, когда знаешь, какой у нее АВ - например друзья, родственники и т.д. ;-)
Архив с подобытными кроликами и модифицированным файлом можно найти тут:
[Ссылки доступны только зарегистрированным пользователям] : vazonez
Оригинал: [Ссылки доступны только зарегистрированным пользователям]
Видео-туториал можно скачать тут:
[Ссылки доступны только зарегистрированным пользователям]