O Binee é um ambiente completo de emulação binária que se concentra na introspecção de todas as operações de IO. Os objetivos principais para este projeto são fornecer um ambiente flexível para determinar os efeitos colaterais de um binário no sistema.
Os objetivos Binee tenta resolver são os seguintes:
Se você optar por usar o BINEE para imitar partes do Microsoft Windows, será o único responsável por obter os direitos e licenças necessários da Microsoft.
Sinta -se à vontade para enviar problemas do GitHub ou se você quiser conversar diretamente conosco, venha participar está no Slack
Espaço de trabalho Slack
deslizamentos
vídeo de demonstração
apresentação
Se você estiver executando o Binee no Microsoft Windows, poderá pular a etapa do sistema de arquivos simulados.
A maioria dos malware exigirá pelo menos algumas DLLs padrão e essas DLLs precisarão estar acessíveis a partir do sistema de arquivos simulados. O sistema de arquivos simulado "root" padrão está localizado em os/win10_32/ . Para permitir que o malware carregue DLLs, você precisará copiá -los para o local apropriado dentro do sistema de arquivos simulados. Normalmente, eles devem ser copiados, os/win10_32/windows/system32/ . Atualmente, apenas as DLLs de 32 bits puxadas de uma instalação do Windows de 32 bits são suportadas. Depois de ter os arquivos necessários nesse diretório, você pode passar para a etapa de compilação e execução.
Construa com o seguinte Docker Command docker build -t binee .
docker run -it -v $PWD:/bineedev/go/src/github.com/carbonblack/binee binee bash
Baixe as dependências de Golang e construa Binee
root@2b0fee41629f:~/go/src/github.com/carbonblack/binee# go build
Nota: A presença do arquivo go.mod direcionará o utilitário de construção para coletar dependências após a construção e também permitirá que o repositório seja clonado e desenvolvido em qualquer caminho (independentemente de $GOPATH )
Nesse ponto, você poderá executar o Binee no recipiente do Docker e ver o menu 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
Se você estiver em execução no Microsoft Windows e/ ou tiver seu sistema de arquivos simulado configurado corretamente, poderá executar todos os arquivos PE nos tests/ diretório.
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 Atualizar os pacotes do sistema:
$ pacman --needed -Sy bash pacman pacman-mirrors msys2-runtime
-restart msys e atualize tudo:
$ pacman -Su
Para compilar para o Windows de 32 bits, execute:
$ pacman -S python2
$ pacman -S make
$ pacman -S mingw-w64-i686-toolchain
Para compilar para o Windows de 64 bits, execute:
$ 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 novamente; Em seguida, clone no unicórnio e instale -o:
git clone https://github.com/unicorn-engine/unicorn
cd unicorn
./make.sh
./make.sh install
Binee de 4 clones e cd binee
go build