Binee est un environnement d'émulation binaire complet qui se concentre sur l'introspection de toutes les opérations IO. Les principaux objectifs de ce projet sont de fournir un environnement flexible pour déterminer les effets secondaires des binaires sur le système.
Les objectifs que Binee essaie de résoudre sont les suivants:
Si vous choisissez d'utiliser Binee pour émuler des parties de Microsoft Windows, vous êtes seul responsable d'obtenir les droits et licences nécessaires de Microsoft.
N'hésitez pas à soumettre des problèmes de github ou si vous voulez nous parler directement, venez rejoindre est dans Slack
espace de travail Slack
diapositives
vidéo de démonstration
présentation
Si vous exécutez un binee sur Microsoft Windows, vous pouvez ignorer l'étape du système de fichiers Mock.
La plupart des logiciels malveillants nécessiteront au moins certaines DLL standard et ces DLL devront être accessibles à partir du système de fichiers Mock. Le système de fichiers de simulation "root" par défaut est situé dans os/win10_32/ . Afin de permettre aux logiciels malveillants de charger les DLL, vous devrez les copier dans l'emplacement approprié dans le système de fichiers Mock. En règle générale, celles-ci doivent être copiées dans, os/win10_32/windows/system32/ . Actuellement, seules les DLL 32 bits tirées d'une installation Windows 32 bits sont prises en charge. Une fois que vous avez les fichiers requis dans ce répertoire, vous pouvez passer à l'étape de compilation et d'exécution.
Build avec la commande docker docker docker build -t binee .
docker run -it -v $PWD:/bineedev/go/src/github.com/carbonblack/binee binee bash
Téléchargez les dépendances de Golang et Build Binee
root@2b0fee41629f:~/go/src/github.com/carbonblack/binee# go build
Remarque: La présence du fichier go.mod dirigera l'utilitaire de build pour collecter les dépendances à la construction, et permettra également au répertoire du référentiel d'être cloné et développé sur n'importe quel chemin (quel que soit le $GOPATH )
À ce stade, vous devriez pouvoir exécuter Binee dans le conteneur Docker et voir le menu d'utilisation.
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 vous exécutez sur Microsoft Windows et / ou que votre système de fichiers simulé est correctement configuré, vous devriez pouvoir exécuter tous les fichiers PE dans les tests/ répertoire.
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 Mettez à jour les packages système:
$ pacman --needed -Sy bash pacman pacman-mirrors msys2-runtime
-restart MSYS puis mettez à jour tout le reste:
$ pacman -Su
Pour compiler pour Windows 32 bits, exécutez:
$ pacman -S python2
$ pacman -S make
$ pacman -S mingw-w64-i686-toolchain
Pour compiler pour Windows 64 bits, exécutez:
$ pacman -S python2
$ pacman -S make
$ pacman -S mingw-w64-x86_64-toolchain
-Install Go:
pacman -S mingw-w64-x86_64-go
3-restart MSYS à nouveau; Clonez ensuite dans la licorne et installez-la:
git clone https://github.com/unicorn-engine/unicorn
cd unicorn
./make.sh
./make.sh install
Binee à 4 clones et Build cd binee
go build