All Projects → gaasedelen → Lucid

gaasedelen / Lucid

Licence: mit
An Interactive Hex-Rays Microcode Explorer

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Lucid

Hexraystoolbox
Hexrays Toolbox - Find code patterns within the Hexrays AST
Stars: ✭ 202 (+7.45%)
Mutual labels:  decompiler, ida-pro, reverse-engineering
Jremapper
Remapping tool for compiled java programs.
Stars: ✭ 97 (-48.4%)
Mutual labels:  decompiler, reverse-engineering
Lighthouse
A Code Coverage Explorer for Reverse Engineers
Stars: ✭ 1,348 (+617.02%)
Mutual labels:  ida-pro, reverse-engineering
Stingray
IDAPython plugin for finding function strings recursively
Stars: ✭ 110 (-41.49%)
Mutual labels:  ida-pro, reverse-engineering
Botw Re Notes
Reverse engineering notes and tools for The Legend of Zelda: Breath of the Wild
Stars: ✭ 78 (-58.51%)
Mutual labels:  ida-pro, reverse-engineering
Mrspicky
MrsPicky - An IDAPython decompiler script that helps auditing calls to the memcpy() and memmove() functions.
Stars: ✭ 86 (-54.26%)
Mutual labels:  decompiler, ida-pro
Reversing List
Reversing list
Stars: ✭ 106 (-43.62%)
Mutual labels:  ida-pro, reverse-engineering
Redasm
The OpenSource Disassembler
Stars: ✭ 1,042 (+454.26%)
Mutual labels:  ida-pro, reverse-engineering
Mazewalker
Toolkit for enriching and speeding up static malware analysis
Stars: ✭ 132 (-29.79%)
Mutual labels:  ida-pro, reverse-engineering
Amie
A Minimalist Instruction Extender for the ARM architecture and IDA Pro
Stars: ✭ 136 (-27.66%)
Mutual labels:  ida-pro, reverse-engineering
Rematch
REmatch, a complete binary diffing framework that is free and strives to be open source and community driven.
Stars: ✭ 141 (-25%)
Mutual labels:  ida-pro, reverse-engineering
Ida gel
A collection of IDA loaders for various game console ELF's. (PS3, PSVita, WiiU)
Stars: ✭ 76 (-59.57%)
Mutual labels:  ida-pro, reverse-engineering
Hexrays scripts
Various scripts for the Hexrays decompiler (kloppy, shuffle, arachno, IDA coffee, screenrecorder, ricky)
Stars: ✭ 50 (-73.4%)
Mutual labels:  decompiler, ida-pro
Ida For Delphi
IDA Python Script to Get All function names from Event Constructor (VCL)
Stars: ✭ 92 (-51.06%)
Mutual labels:  ida-pro, reverse-engineering
Termux Apktool
Decompile and Recompile android aplication use termux without openjdk installed
Stars: ✭ 53 (-71.81%)
Mutual labels:  decompiler, reverse-engineering
Flare Ida
IDA Pro utilities from FLARE team
Stars: ✭ 1,374 (+630.85%)
Mutual labels:  ida-pro, reverse-engineering
Fernflower
Unofficial mirror of FernFlower Java decompiler (All pulls should be submitted upstream)
Stars: ✭ 2,380 (+1165.96%)
Mutual labels:  decompiler, reverse-engineering
Reko
Reko is a binary decompiler.
Stars: ✭ 942 (+401.06%)
Mutual labels:  decompiler, reverse-engineering
Protodec
Protobuf decompiler
Stars: ✭ 37 (-80.32%)
Mutual labels:  decompiler, reverse-engineering
Despector
Java / Kotlin Decompiler and AST Library
Stars: ✭ 126 (-32.98%)
Mutual labels:  decompiler, reverse-engineering

Lucid - An Interactive Hex-Rays Microcode Explorer

Lucid Plugin

Overview

Lucid is a developer-oriented IDA Pro plugin for exploring the Hex-Rays microcode. It was designed to provide a seamless, interactive experience for studying microcode transformations in the decompiler pipeline.

This plugin is labeled only as a prototype & code resource for the community. Please note that it is a development aid, not a general purpose reverse engineering tool.

Special thanks to genmc / @pat0is et al. for the inspiration.

Releases

  • v0.1 -- Initial release

Installation

Lucid is a cross-platform (Windows, macOS, Linux) Python 2/3 plugin. It takes zero third party dependencies, making the code both portable and easy to install.

  1. From your disassembler's python console, run the following command to find its plugin directory:

    • IDA Pro: os.path.join(idaapi.get_user_idadir(), "plugins")
  2. Copy the contents of this repository's /plugins/ folder to the listed directory.

  3. Restart your disassembler.

This plugin is only supported for IDA 7.5 and newer.

Usage

Lucid will automatically load for any architecture with a Hex-Rays decompiler present. Simply right click anywhere in a Pseudocode window and select View microcode to open the Lucid Microcode Explorer.

View microcode

By default, the Microcode Explorer will synchronize with the active Hex-Rays Pseudocode window.

Lucid Layers

Lucid makes it effortless to trace microinstructions through the entire decompiler pipeline. Simply select a microinstruction, and scroll (or click... if you must) through the microcode maturity layer list.

Lucid Layer Traversal Demo

Watch as the explorer stays focused on your selected instruction, while the surrounding microcode landscape melts away. It's basically magic.

Sub-instruction Granularity

Cursor tracing can operate at a sub-operand / sub-instruction level. Placing your cursor on different parts of the same microinstruction can trace sub-components back to their respective origins.

Lucid Sub-instruction Granularity Demo

If the instructions at the traced address get optimized away, Lucid will attempt to keep your cursor in the same approximate context. It will change the cursor color from green to red to indicate the loss of precision.

Sub-instruction Trees

As the Hex-Rays microcode increases in maturity, the decompilation pipeline begins to nest microcode as sub-instructions and sub-operands that form tree-based structures.

Lucid Sub-instrution Graph Demo

You can view these individual trees by right clicking an instruction and selecting View subtree.

Known Bugs

As this is the initial release, there will probably a number of small quirks and bugs. Here are a few known issues at the time of release:

  • While sync'd with hexrays, cursor mapping can get wonky if focused on microcode that gets optimized away
  • When opening the Sub-instruction Graph, window/tab focus can change unexpectedly
  • Microcode Explorer does not dock to the top-level far right compartment on Linux?
  • Switching between multiple Pseudocode windows in different functions might cause problems
  • Double clicking an instruction address comment can crash IDA if there is no suitable view to jump to
  • Plugin has not been tested robustly on Mac / Linux
  • ...?

If you encounter any crashes or bad behavior, please file an issue.

Future Work

Time and motivation permitting, future work may include:

  • Clean up the code.......
  • Interactive sub-instruction graph generalization (to pattern_t / rules)
  • Microcode optimizer development workflow?
  • Microcode optimization manager?
  • Ctree explorer (and similar graph generalization stuff...)
  • Microcode hint text?
  • Improve layer translations
  • Improve performance
  • Migrate off IDA codeview?
  • ...?

I welcome external contributions, issues, and feature requests. Please make any pull requests to the develop branch of this repository if you would like them to be considered for a future release.

Authors

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].