Binee es un entorno de emulación binario completo que se centra en la introspección de todas las operaciones de IO. Los objetivos principales para este proyecto son proporcionar un entorno flexible para determinar los efectos secundarios de los binarios en el sistema.
Los objetivos que binee intenta resolver son los siguientes:
Si elige usar binee para emular porciones de Microsoft Windows, es el único responsable de obtener los derechos y licencias necesarios de Microsoft.
No dude en enviar problemas de GitHub o si desea hablar con nosotros directamente, unirse está en Slack
espacio de trabajo de Slack
toboganes
video de demostración
presentación
Si está ejecutando binee en Microsoft Windows, puede omitir el paso del sistema de archivos simulados.
La mayoría de los malware requerirán al menos algunas DLL estándar y estas DLL deberán ser accesibles desde el sistema de archivos simulados. El sistema de archivo simulado "root" predeterminado se encuentra en os/win10_32/ . Para permitir que el malware cargue DLLS, deberá copiarlos en la ubicación apropiada dentro del sistema de archivos simulados. Por lo general, estos deben copiarse en os/win10_32/windows/system32/ . Actualmente, solo se admiten los DLL de 32 bits extraídos de una instalación de Windows de 32 bits. Una vez que tenga los archivos requeridos en ese directorio, puede pasar al paso de compilación y en ejecución.
Construya con el siguiente comando Docker docker build -t binee .
docker run -it -v $PWD:/bineedev/go/src/github.com/carbonblack/binee binee bash
Descargar Dependencias de Golang y Build Binee
root@2b0fee41629f:~/go/src/github.com/carbonblack/binee# go build
Nota: La presencia del archivo GO.MOD dirigirá la utilidad de compilación para recopilar dependencias en la compilación, y también permitirá que el repositorio sea clonado y desarrollado en cualquier directorio de ruta (independientemente de $GOPATH )
En este punto, debería poder ejecutar binee dentro del contenedor Docker y ver el menú de uso.
root@6a6fe8c2b2a7:~/go/src/github.com/carbonblack/binee# ./binee -h
Usage of ./binee:
-A list all apisets and their mappings
-a string
get the real dll name from an apiset name
-c string
path to configuration file
-d show the dll prfix on all function calls
-e dump pe file's exports table
-i dump a pe file's imports table
-j output data as json
-l call DLLMain while loading DLLs
-r string
root path of mock file system, defaults to ./os/win10_32 (default "os/win10_32/")
-v verbose level 1
-vv
verbose level 2
Si se ejecuta en Microsoft Windows y/ o tiene su sistema de archivos simulado configurado correctamente, debería poder ejecutar todos los archivos PE dentro de las tests/ directorio.
root@6a6fe8c2b2a7:~/go/src/github.com/carbonblack/binee# go build && ./binee tests/ConsoleApplication1_x86.exe
[1] 0x2190c0b0: F GetSystemTimeAsFileTime(lpSystemTimeAsFileTime = 0xb7feffe0) = 0xb7feffe0
[1] 0x21905b40: P GetCurrentThreadId() = 0x0
[1] 0x219138d0: P GetCurrentProcessId() = 0x2001
[1] 0x2011ef30: P GetCurrentProcessId() = 0x2001
[1] 0x21905b50: F QueryPerformanceCounter(lpPerformanceCount = 0xb7feffd8) = 0x1
[1] 0x2190c500: F IsProcessorFeaturePresent(ProcessorFeature = 0xa) = 0x1
[1] 0x213af570: F _initterm_e(PVFV = 0x4020d8, PVFV = 0x4020e4) = 0x0
[1] 0x213af970: F _initterm(PVPV = 0x4020cc, PVPV = 0x4020d4) = 0x0
[1] 0x213be980: F __p___argv() = 0x7ffe0004
[1] 0x213b96f0: F __p___argc() = 0x7ffe0000
[1] 0x213bec50: F _get_initial_narrow_environment() = 0x7ffe0000
[1] 0x213ac0a0: P __acrt_iob_func() = 0x5dda9c68
[1] 0x213bb710: F __stdio_common_vfprintf(stream = 0x0, format = 'GENERIC_READ = 0x%llxn', p0 = 0x80000000) = 0x403380
[1] 0x213ac0a0: P __acrt_iob_func() = 0x403380
[1] 0x213bb710: F __stdio_common_vfprintf(stream = 0x0, format = 'GENERIC_WRITE = 0x%llxn', p0 = 0x40000000) = 0x403380
[1] 0x213ac0a0: P __acrt_iob_func() = 0x403380
[1] 0x213bb710: F __stdio_common_vfprintf(stream = 0x0, format = 'INVALID_HANDLE = 0x%llxn', p0 = 0xffffffff) = 0x403380
[1] 0x213ac0a0: P __acrt_iob_func() = 0x0
[1] 0x213bb710: F __stdio_common_vfprintf(stream = 0x0, format = 'CREATE_ALWAYS = 0x%xn', p0 = 0x2) = 0x403380
[1] 0x213ac0a0: P __acrt_iob_func() = 0x403380
[1] 0x213bb710: F __stdio_common_vfprintf(stream = 0x0, format = 'FILE_ATTRIBUTE_NORMAL = 0x%xn', p0 = 0x80) = 0x403380
[1] 0x213ac0a0: P __acrt_iob_func() = 0x403380
[1] 0x213bb710: F __stdio_common_vfprintf(stream = 0x0, format = 'ERROR_SUCCESS = 0x%xn', p0 = 0x0) = 0x403380
[1] 0x21913b80: F CreateFileA(lpFileName = 'malfile.exe', dwDesiredAccess = 0xc0000000, dwShareMode = 0x0, lpSecurityAttributes = 0x0, dwCreationDisposition = 0x2, dwFlagsAndAttributes = 0x80, hTemplateFile = 0x0) = 0xa00007b6
[1] 0x2196bfbe: F VerSetConditionMask() = 0xa00007b6
[1] 0x213ac0a0: P __acrt_iob_func() = 0xa00007b6
[1] 0x213bb710: F __stdio_common_vfprintf(stream = 0x0, format = 'out = 0x%xn', p0 = 0xa00007b6) = 0x403380
[1] 0x2196bfbe: F VerSetConditionMask() = 0x403380
[1] 0x213ac0a0: P __acrt_iob_func() = 0x403380
[1] 0x213bb710: F __stdio_common_vfprintf(stream = 0x0, format = 'out = 0x%xn', p0 = 0x403380) = 0x403380
[1] 0x2196bfbe: F VerSetConditionMask() = 0x403380
[1] 0x213ac0a0: P __acrt_iob_func() = 0x403380
[1] 0x213bb710: F __stdio_common_vfprintf(stream = 0x0, format = 'out = 0x%xn', p0 = 0x403380) = 0x403380
[1] 0x21bc0780: P memset(dest = 0xb7feff1c, char = 0x0, count = 0x58) = 0xb7feff1c
[1] 0x21914000: F WriteFile(hFile = 0xa00007b6, lpBuffer = 0xb7feff10, nNumberOfBytesToWrite = 0xb, lpNumberOfBytesWritten = 0xb7feff0c, lpOverlapped = 0x0) = 0xb
[1] 0x2190c500: F IsProcessorFeaturePresent(ProcessorFeature = 0x17) = 0x1
[1] 0x2190fef0: F SetUnhandledExceptionFilter(lpTopLevelExceptionFilter = 0x0) = 0x4
[1] 0x21927950: F UnhandledExceptionFilter(ExceptionInfo = 0x402100) = 0x1
[1] 0x219138c0: P GetCurrentProcess() = 0x1
[1] 0x20122cb0: P GetCurrentProcess() = 0x1
[1] 0x21910690: F TerminateProcess(hProcess = 0xffffffff, uExitCode = 0xc0000409) = 0xffffffff
1-Install MSYS64/32: https://osdn.net/projects/mingw/releases/
2 actualizan los paquetes del sistema:
$ pacman --needed -Sy bash pacman pacman-mirrors msys2-runtime
-Restart msys y luego actualizar todo lo demás:
$ pacman -Su
Para compilar para Windows de 32 bits, ejecute:
$ pacman -S python2
$ pacman -S make
$ pacman -S mingw-w64-i686-toolchain
Para compilar para Windows de 64 bits, ejecute:
$ pacman -S python2
$ pacman -S make
$ pacman -S mingw-w64-x86_64-toolchain
-sinstall Go:
pacman -S mingw-w64-x86_64-go
MSYS 3-RESTART nuevamente; Luego clone en unicornio e instálelo:
git clone https://github.com/unicorn-engine/unicorn
cd unicorn
./make.sh
./make.sh install
Binee de 4 clones y construir cd binee
go build