uEmu is a tiny cute emulator plugin for IDA based on unicorn engine. Supports following architectures out of the box: x86, x64, ARM, ARM64, MIPS, MIPS64.
What is it GOOD for?
What is it BAD for?
What can be improved?
MSR S3_x, X0
for ARM64)Installation
brew install unicorn
to install Unicorn binariespip install unicorn
to install Unicorn python bindingsFile / Script file...
or ALT+F7
in IDA to load uEmu.pyOptionally uEmu can be loaded automatically as IDA plugin. In this case put it into [IDA]/Plugins folder and change USE_AS_SCRIPT
to False
inside uEmu.py
Note: on Windows you might need to add IDA Pro Qt5 path
import
sys sys.path.append(‘D:\\Soft\\IDA Pro 7.x\\python\\3\\PyQt5’)
Features
Popup Menu
ALT
/OPTION
to specify a number)Start
Start emulation from cursor. It is necessary to provide initial CPU context first (see Update CPU Context) After that all segments from IDA database will be mapped to emulator (initialized data will be copied as well).
Run
Execute code until code or memory breakpoint is reached or there is an event which requires user action.
Step
Perform a single step execution. Hold ALT
/OPTION
to specify number of steps to perform.
Stop
When emulation is in progress this command can be used to interrupt execution.
Reset
Resets emulator instance and unmaps all memory regions.
Breakpoints
You can use IDA breakpoints to indicate locations where emulation should be interrupted. This includes code and memory breakpoints. Usually used together with Run command.
Runtime Actions
Unmapped memory
When emulator needs to access memory which is not yet mapped, plugin will show a following dialog.
Unknown Instructions
When emulator runs into unknown instruction it is possible to skip it and restore CPU context manually.
Views
Controls
Just a panel to control execution.
CPU Context
Every time emulation stops, changed registers will be highlighted. Registers can be displayed in 1, 2 or 3 columns via popup menu.
It is possible to update CPU context via popup menu (see below).
CPU Extended Context
Every time emulation stops, changed registers will be highlighted. Registers can be displayed in 1, 2 or 3 columns via popup menu.
It is possible to update CPU context via popup menu (see below).
Memory
Use this view to observe memory regions for specified address and size. Comment will be displayed in a title for convenience.
Every time emulation stops, changed memory blocks will be highlighted.
Update CPU Context
Register Values can be changed individually or all at once with JSON file via popup menu. Current context can also be saved in JSON file for future use.
Main Plugin Menu
Apart from all the functions listed in Popup Menu, there are couple of new commands.
Show Mapped Memory
Display all mapped regions. Use popup menu to display memory for particular region or dump it to a file.
Fetch Segments
This command tries to sync IDA segments with mapped memory by creating new mappings or merging with existing ones if possible. This helps to add new IDA segments to emulator in runtime without restarting emulator.
Load Project
Load uEmu state from file.
Save Project
Save uEmu state to file. Please note that only registers defined in a plugin are saved.
Settings
Extensions
It is also possible to add new functionality or build your project on top of uEmu using extension system.
Please find description with example here
shadow-rs is a Windows kernel rootkit written in Rust, demonstrating advanced techniques for kernel manipulation…
Extract and execute a PE embedded within a PNG file using an LNK file. The…
Embark on the journey of becoming a certified Red Team professional with our definitive guide.…
This repository contains proof of concept exploits for CVE-2024-5836 and CVE-2024-6778, which are vulnerabilities within…
This took me like 4 days (+2 days for an update), but I got it…
MaLDAPtive is a framework for LDAP SearchFilter parsing, obfuscation, deobfuscation and detection. Its foundation is…