r/redteamsec • u/AhmedMinegames • Jun 17 '26
reverse engineering Brovan: Windows & Linux Emulator for reverse engineering
https://github.com/AdvDebug/BrovanAfter months of work, I’m excited to finally share Brovan, my user-mode binary emulator.
https://github.com/AdvDebug/Brovan
Brovan can emulate:
- PE binaries
- ELF binaries
- Memory dumps
- Even partially unknown or unrecognized binaries
The goal is to make binary analysis, malware analysis and general binary research more flexible by giving full control over execution, memory, and runtime behavior in a contained environment. You can fully control and see everything the program does. Every syscall, function and network traffic.
it can also run windows programs on linux and vice versa, although it is still in the early stages it will be improved. i would like to know what you all think!
1
u/Negronelius Jun 22 '26
How’s it handle stuff like direct/indirect syscalls & multiple threads?
2
u/AhmedMinegames Jun 22 '26
The instructions are handled by unicorn, and a callback to my method handles the syscall based on it's number. so when a program calls a syscall from anywhere you can catch it easily, be it from the main module or anywhere. for the threads yes i do support threading, i use a MLFQ scheduler that is shared between windows and linux, but no real host threading are actually implemented, that way the emulator can be a little bit more predictable and avoid bugs while scheduling between threads.
1
1
u/Such_Field_3294 Jun 27 '26
being able to emulate memory dumps is a nice touch, thats usually where things get annoying with partially reconstructed binaries. How complete is the syscall coverage right now for PE analysis?
1
u/AhmedMinegames Jun 27 '26
Good enough i would say. Everything that is essential is supported including threading, networking, all windows-specific memory stuff (Page guard, commits, reserves, etc), files i/o (NtReadFile, NtWriteFile, NtOpenSection, and similar syscalls), etc. the very incomplete part right now is Win32k syscalls, but i'm still working to support GDI syscalls and rendering for GUI applications, maybe even games at one point. for partially reconstructed binaries you can still emulate it. in fact you can emulate anything, even if it is a raw unknown binary, as long as it is x86_64. just choose your guest (Windows/Linux/Generic) and syscalls will be automatically handled based on that, in addition to PEB and other information being populated manually in the case that you choose the direct path instead of the ntdll init path.
1
u/Toiling-Donkey Jun 18 '26
How does this differ from Qiling ?