Binee هي بيئة محاكاة ثنائية كاملة تركز على تأمل جميع عمليات IO. تتمثل الأهداف الأساسية لهذا المشروع في توفير بيئة مرنة لتحديد الآثار الجانبية للثنائيات على النظام.
الأهداف التي يحاول binee حلها هي ما يلي:
إذا اخترت استخدام Binee لمحاكاة أجزاء من Microsoft Windows ، فأنت مسؤول فقط عن الحصول على أي حقوق وتراخيص ضرورية من Microsoft.
لا تتردد في تقديم مشكلات github أو إذا كنت ترغب في التحدث معنا مباشرة ، تنضم إلى الركود
مساحة عمل الركود
الشرائح
فيديو تجريبي
عرض تقديمي
إذا كنت تقوم بتشغيل Binee على Microsoft Windows ، فيمكنك تخطي خطوة نظام الملفات الوهمية.
سوف تتطلب معظم البرامج الضارة بعض DLLs القياسية على الأقل وسيحتاج هذه DLLs إلى الوصول إلى نظام الملفات الوهمية. يوجد نظام ملفات "الجذر" الافتراضي "الجذر" في os/win10_32/ . من أجل السماح للبرامج الضارة بتحميل DLLs ، ستحتاج إلى نسخها إلى الموقع المناسب داخل نظام الملفات الوهمية. عادة ، يجب نسخها ، os/win10_32/windows/system32/ . حاليًا ، يتم دعم DLL 32 بت فقط من تثبيت Windows 32 بت. بمجرد أن يكون لديك الملفات المطلوبة في هذا الدليل ، يمكنك الانتقال إلى خطوة التجميع والتشغيل.
بناء مع قيادة Docker التالية docker build -t binee .
docker run -it -v $PWD:/bineedev/go/src/github.com/carbonblack/binee binee bash
قم بتنزيل تبعيات Golang وبناء binee
root@2b0fee41629f:~/go/src/github.com/carbonblack/binee# go build
ملاحظة: سيقوم وجود ملف go.mod بتوجيه الأداة المساعدة للبناء لجمع التبعيات عند الإنشاء ، وكذلك السماح باستنساخ المستودع وتطويره في أي مسار (بغض النظر عن $GOPATH )
في هذه المرحلة ، يجب أن تكون قادرًا على تنفيذ Binee داخل حاوية Docker ومشاهدة قائمة الاستخدام.
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
إذا كنت تعمل على Microsoft Windows و/ أو تم تكوين نظام الملفات الوهمية بشكل صحيح ، فيجب أن تكون قادرًا على تنفيذ جميع ملفات PE ضمن tests/ الدليل.
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-تحديث حزم النظام:
$ pacman --needed -Sy bash pacman pacman-mirrors msys2-runtime
-restart msys ثم قم بتحديث كل شيء آخر:
$ pacman -Su
لتجميع Windows 32 بت ، قم بتشغيل:
$ pacman -S python2
$ pacman -S make
$ pacman -S mingw-w64-i686-toolchain
لتجميع Windows 64 بت ، قم بتشغيل:
$ 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 مرة أخرى ؛ ثم استنساخ في يونيكورن وقم بتثبيته:
git clone https://github.com/unicorn-engine/unicorn
cd unicorn
./make.sh
./make.sh install
4-clone binee و Build cd binee
go build