• XSS.stack #1 – первый литературный журнал от юзеров форума

Юзаем AVпии..

KraZz

(L3) cache
Пользователь
Регистрация
18.06.2009
Сообщения
196
Реакции
7
Бредисловие: то, что вы будите сейчас читать – это адский трЭш(опасный для жизни)! ЗЫ: Те, кому меньше 18 - советую выключить комп.
Друзья мои укатили в сауну для продолжения "банкета", а я под "пивом" к компу. Поставил перед собой на половину пустой(или на половину полный(не знаю, не определился еще)) графинчик водочки, "закусончег" и..
сделафф с утра литровый глоток пива, пытался написать вторую часть, но не асилил.. посчитал, что должна быть вводная часть, полез в свой загашнег и нашел то, что написано было давно и я не хотел постить, сдунул пыль подредактировал и..
Я не знаю, хватит ли меня на вторую часть «Реверс AVпии..» и даже не уверен в том, что правильно сделал, что решил здесь запостить эту первую, но все таки под давлением аЦцких грибов, я это сделал :(

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

Теория
И так представим что нам нужно заморфить вот такую ASM команду:
Код:
mov eax,0C0DEBADh

Давайте посмотрим на код в стандартных прогах
Код:
004349C8 8D4D FC          LEA ECX,DWORD PTR SS:[EBP-4]
004349CB 6A 01            PUSH 1
004349CD 6A 00            PUSH 0
004349CF 6A 03            PUSH 3
004349D1 51               PUSH ECX
004349D2 50               PUSH EAX
004349D3 8D45 08          LEA EAX,DWORD PTR SS:[EBP+8]
004349D6 50               PUSH EAX
004349D7 68 00020000      PUSH 200
004349DC FF35 B0714900    PUSH DWORD PTR DS:[4971B0]
004349E2 E8 295E0000      CALL 0043A810
Из кода видно, что можно до CALL в стек положить много разного и это "задетектить" будет проблематично, но если оставить контанту в открытом виде, смысла морфить нет
Но предположим что мы заморфили код (для примера)
Код:
00401000 81F7 B2260000           XOR EDI,26B2
00401006 A1 5C324000             MOV EAX,DWORD PTR DS:[40325C]
0040100B 8B15 40304000           MOV EDX,DWORD PTR DS:[403040]
00401011 891D 40334000           MOV DWORD PTR DS:[403340],EBX
00401017 6A D6                   PUSH -2A
00401019 68 552DD435             PUSH 35D42D55
0040101E 68 6F1EC52E             PUSH 2EC51E6F
00401023 E8 57000000             CALL 0040107F
[...]
0040107F 50                      PUSH EAX
00401080 8B4C24 08               MOV ECX,DWORD PTR SS:[ESP+8]
00401084 C705 14334000 ED000000  MOV DWORD PTR DS:[403314],0ED
0040108E 83C7 2F                 ADD EDI,2F
00401091 81F1 3D0A37DD           XOR ECX,DD370A3D
00401097 66:89D0                 MOV AX,DX
0040109A 8815 C8304000           MOV BYTE PTR DS:[4030C8],DL
004010A0 F7D1                    NOT ECX
004010A2 C705 80304000 C6A70000  MOV DWORD PTR DS:[403080],0A7C6
[...]
В регистр ECX мы помещаем нашу константу 0C0DEBADh, брр.. чет я отвлекся...
Теперь встает вопрос как морфить, но только так чтобы не добавлять в морф код, который поспособствует быстрому созданию сигнатур
Если посмотреть на этот код
FF35 B0714900 PUSH DWORD PTR DS:[4971B0]
и этот
FF3425 B0714900 PUSH DWORD PTR DS:[4971B0]
То можно увидеть, что ASM команды идентичны, но опкод разный
На первый взгляд может показацца что это гуд, но на самом деле массовка - это не есть гуд, особенно когда в ней юзаются "экзотические" команды (ну там, к примеру, команды с использованием сегментных регистров итд.)
Кто-то может возразить, что типа: «ну и что и стандартные проги юзают подобные решения для антиотладки» - да юзают, но процент очень мал(3-5), но и это даже и не показатель!, если бы даже процент был 50, то..
В связи с "недавними" изысканиями было показано, что созданная аверами доверительная группа и была предназначена для того, чтобы решить данный казус
Любой разработчик гавношары теперь может к ним обратится для регистрации его порнопрожки чтобы аверы не детектили их "стандартный код"(ну там к примеру навешанный на нее прот)
Раньше это было, но! убого и не юзабельно..
Вот теперь я опешу процесс, как проверять является ли наш код стандартным или нет

Практика
Скачиваем
http://www.z-oleg.com/secur/avz/download.php (здесь описывается версия 4.30)
Для начала мы изменим интерфейс AVZ, уберем все то, что нам не нужно и расширим, то что нам требуется для комфортного юзанья
я советую(чтобы сравнить и понять всю суть изменений в GUI) попробовать запустить скрипт стандартно(через меню) из AVZ
я даже настоятельно рекомендую(ибо все это и писалось для примера, чтобы дать понять, что юзать то, что предлагает разработчик ПО - не всегда есть гуд; нужно для комфорта уметь использовать и постоянно применять свои знания, а не тупо читать и думать, что после того как прочитал, все уже знаешь и умеешь – нет, здесь без практики мы просто кусок мяса!)
В архиве есть форма, которая находится в файле TMainForm.dfm, так вот анпачем AVZ (там UPX(им же и анпачим)), далее открываем AVZ в Restorator
И идем RCData -> TMAIN, далее выделяем все в окне Resource Viewer и заменяем содержимым из файла(простым копипастом)
Сохраняем назвав все эти телодвижения avz_script.exe
У вас должно получицца что-то похожее как на рисунке screen.gif из архива
Если почитать хелпер AVZ, то можно заметить что эту тулузу можно юзать через командную строку, что мы и сделаем..
При этом у нас появляется допвозможность - при запуске скрипта выскакивает кнопка «Прервать работу скрипта», которая может остановить в любой момент выполнение скрипт
Редактор для скриптов я советую юзать вот этот:
http://code.google.com/p/scite-ru/downloads/list (SciTE_221_81Ru_140910_beta.zip)
а также можно подробнее почитать здесь http://forum.ru-board.com/topic.cgi?forum=5&topic=24956
сразу скажу примитивно все(в паблике всегда так и тут без вариантов), но это лучше чем вообще ничего и можно после скачивания сразу юзать
нам надо всего лишь немного настроить, а именно в файле pascal.properties заменить строчку:
Код:
command.go.*.pas="$(FileName).exe"
На
Код:
command.go.*.pas=X:\Antivirus\AVZ\avz4\avz_script.exe Script=$(FilePath)
Где естественно у вас вместо «X:\Antivirus\AVZ\avz4\» должен быть свой путь к avz_script.exe
Теперь, когда мы открываем в SciTE скрипт с расширением *.pas и жмем F5, будет запускаться avz_script.exe и выполнять наш скрипт
В скрипте из архива в комментариях описано как юзать сигнатурный поиск(а также настоятельно рекомендую почитать хелпер AVZ по скриптам)
Но я здесь немного опишу этот процесс, чтобы было более понятно
Первое что нужно это выбрать 5 прожек написанных на C++ и 5 на Delphi размером не больше 3-5мегабайт, которые юзают большинство зомбиков(ну, для примера C:\Program Files\Download Master\dmaster.exe) проги не должны быть упакованы ничем!
И добавить обязательно парочку системных для контроля (ну, к примеру, блокнот и калькулятор)
Для примера:
Код:
 ScanFile('C:\WINDOWS\system32\notepad.exe', Signature, LIMIT);
 ScanFile('C:\WINDOWS\system32\calc.exe', Signature, LIMIT);

В скриптах юзается синтаксис pascal/delphi, сами функции в скрипте лучше не трогать
Вообще я этот Delphi ненавижу и на это есть много причин, но вот этот скрипт(который в архиве) мне почему-то было интересно писать
И так добавляем в скрипт (куда именно добавить.. я думаю, сразу будет видно)
Signature.Add('FF 35'); //PUSH DWORD PTR DS:[4971B0]
И в SciTE жмем F5
В окне AVZ начинаем наблюдать массовость присутствия данного кода в стандартных прогах
Теперь закомментируем то, что мы только что добавили и вписываем в скрипт новый код
Signature.Add('FF 34 25');
И в SciTE опять жмем F5
По результатам видно, что ни одного соответствия не было найдено
Отсюда вывод: что если мы добавим данный опкод в наш код, то он и будет основой для "сигнатурного" детекта, так как стандартными компиляторами высокого уровня он не генерируется!
вот примерно так, перед тем как добавить новый код, его можно примитивно проверить на стандар-р-тизацию - во как, еле выговорил %)))
 


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