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