Binee ist eine vollständige binäre Emulationsumgebung, die sich auf die Selbstbeobachtung aller IO -Operationen konzentriert. Die Hauptziele für dieses Projekt sind es, eine flexible Umgebung für die Bestimmung der Nebenwirkungen der Binärdateien auf das System zu bieten.
Die Ziele, die Binee zu lösen versucht, sind die folgenden:
Wenn Sie Binee verwenden, um Teile von Microsoft Windows zu emulieren, sind Sie ausschließlich dafür verantwortlich, die erforderlichen Rechte und Lizenzen von Microsoft zu erhalten.
Bitte zögern Sie nicht, Github -Probleme einzureichen oder wenn Sie direkt mit uns sprechen möchten, kommen Sie in Slack an, wenn Sie mit uns sprechen möchten
Slack Worksace
Folien
Demo -Video
Präsentation
Wenn Sie Binee auf Microsoft Windows ausführen, können Sie den Schritt des Mock -Dateisystems überspringen.
Die meisten Malware benötigen mindestens einige Standard -DLLs, und diese DLLs müssen über das Mock -Dateisystem zugegriffen werden. Das Standard -"-Mock -Dateisystem" Root "befindet sich in os/win10_32/ . Um das Laden der Malware DLLs zu ermöglichen, müssen Sie sie in den entsprechenden Speicherort innerhalb des Mock -Dateisystems kopieren. In der Regel sollten diese in os/win10_32/windows/system32/ kopiert werden. Derzeit werden nur 32-Bit-DLLs aus einer 32-Bit-Windows-Installation unterstützt. Sobald Sie über die erforderlichen Dateien in diesem Verzeichnis verfügen, können Sie zum Kompilieren und Laufschritt übergehen.
Erstellen Sie mit dem folgenden Docker -Befehl docker build -t binee .
docker run -it -v $PWD:/bineedev/go/src/github.com/carbonblack/binee binee bash
Laden Sie Golang -Abhängigkeiten herunter und bauen Sie Binee auf
root@2b0fee41629f:~/go/src/github.com/carbonblack/binee# go build
Hinweis: Das Vorhandensein von Go.MOD -Datei leitet das Build -Dienstprogramm, um Abhängigkeiten beim Build zu sammeln, und ermöglicht es auch, dass das Repository auf einem beliebigen Pfad kloniert und entwickelt wird (unabhängig von $GOPATH ) Verzeichnis
Zu diesem Zeitpunkt sollten Sie in der Lage sein, Binee im Docker -Container auszuführen und das Verwendungsmenü zu sehen.
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
Wenn Sie auf Microsoft Windows ausgeführt werden und/ oder Ihr Mock -Dateisystem ordnungsgemäß konfiguriert sind, sollten Sie in der Lage sein, alle PE -Dateien in den tests/ Verzeichnissen auszuführen.
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/releass/
2-Update die Systempakete:
$ pacman --needed -Sy bash pacman pacman-mirrors msys2-runtime
-Restart -MSYs dann alles andere aktualisieren:
$ pacman -Su
Um für Windows 32-Bit zu kompilieren, laufen Sie:
$ pacman -S python2
$ pacman -S make
$ pacman -S mingw-w64-i686-toolchain
Um für Windows 64-Bit zu kompilieren, rennen Sie:
$ pacman -S python2
$ pacman -S make
$ pacman -S mingw-w64-x86_64-toolchain
-Talls gehen:
pacman -S mingw-w64-x86_64-go
3-Restart-MSYS wieder; Dann in Einhorn klonen und installieren:
git clone https://github.com/unicorn-engine/unicorn
cd unicorn
./make.sh
./make.sh install
4-Klonen-Binee- und Build cd binee
go build