Code Monkey home page Code Monkey logo

cutter's Introduction

Cutter logo

Cutter

Cutter is a free and open-source reverse engineering platform powered by rizin. It aims at being an advanced and customizable reverse engineering platform while keeping the user experience in mind. Cutter is created by reverse engineers for reverse engineers.

Cutter CI Build status

Screenshot

Learn more at cutter.re.

Getting Cutter

Download

Cutter release binaries for all major platforms (Linux, macOS, Windows) can be downloaded from GitHub Releases.

  • Linux: If your distribution provides it, check for cutter package in your package manager (or cutter-re). If not available there, we have setup repositories in OBS for some common distributions. Look at https://software.opensuse.org/package/cutter-re and follow the instructions there. Otherwise download the .AppImage file from our release, make it executable and run as below or use AppImageLauncher.

    chmod +x Cutter*.AppImage; ./Cutter*.AppImage

  • macOS: Download the .dmg file or use Homebrew Cask:

    brew install --cask cutter

  • Windows: Download the .zip archive, or use either Chocolatey or Scoop:

    choco install cutter

    scoop bucket add extras followed by scoop install cutter

Build from sources

To build Cutter from sources, please check the Building Docs.

Docker image

To deploy cutter using a pre-built Dockerfile, it's possible to use the provided configuration. The corresponding README.md file also contains instructions on how to get started using the docker image with minimal effort.

Documentation

Plugins

Cutter supports both Python and Native C++ plugins.

Our community has built many plugins and useful scripts for Cutter such as the native integration of Ghidra decompiler or the plugin to visualize DynamoRIO code coverage. You can find a list of cutter plugins linked below. Feel free to extend it with your own plugins and scripts for Cutter.

Official & Community Plugins

Plugins Development Guide

Getting Help

Please use the following channels to ask for help from Cutter developers and community:

cutter's People

Contributors

a1ext avatar abogical avatar adikso avatar ballessay avatar beauby avatar fcasal avatar gauravkghildiyal avatar hteso avatar imbillow avatar itayc0hen avatar karliss avatar mrexodia avatar nezza avatar nirmalmanoj avatar optizone avatar pelijah avatar petross404 avatar probonopd avatar ps1337 avatar pwntester avatar radare avatar ret2libc avatar siebelstim avatar surendrajat avatar thestr4ng3r avatar vane11ope avatar wargio avatar xarkes avatar xvilka avatar yossizap avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cutter's Issues

Add a way to select new file (different IO)

image

No need of special implementation on r2 side you can do r2 http://google.com already

probably a selector in this menu^ by default on "file on disk" and with the following IO which are the one that doesn't require Cutter refactoring:

  • http
  • ihex
  • ipa
  • apk

Use oLj

Add file->export as code->XXX

  e io.va = false

followed by:

  pc     C
  pc*    print 'wx' r2 commands
  pch    C half-words (2 byte)
  pcw    C words (4 byte)
  pcd    C dwords (8 byte)
  pca    GAS .byte blob
  pcA    .bytes with instructions in comments
  pcs    string
  pcS    shellscript that reconstructs the bin
  pcj    json
  pcJ    javascript
  pcp    python

 $s # for filesize
 @ 0 # for beginning of size

Into file -> exports -> code then in the save menu just give the user capability to choose formats in a droplist, adding the default extension accordingly.

Example python: filename.py

Vertical and horizontal split view

To be able to

  • Scroll different parts of same disasm
  • To view disasm of another file (may be for diffing mode?)
  • Same for hex view
  • Or one panel is for disasm and another - for graph
  • Or disasm + notes (notepad)

Replace notepad plugin by jupyter notebook

Idea is to integrate jupyter notebook in two-way interaction with r2 core inside the r2 GUI.
There are widgets support in Jupyter Notebook - see http://jupyter.org/widgets.html

See about low-level widgets interaction here http://ipywidgets.readthedocs.io/en/latest/examples/Widget%20Low%20Level.html

Creating widget on the fly inside the Jupyter Notebook https://blog.dominodatalab.com/interactive-dashboards-in-jupyter/

Angr + IPython https://apps.sandstorm.io/app/cxp85aey2qrdqvxja1zgrs0tyzq7s55qwqdwqgz12k036s3rc1yh

Check the IDA + IPython plugins:

https://github.com/james91b/ida_ipython
https://github.com/eset/ipyida
https://github.com/tmr232/Sark

Use cases

  1. Writing text in the markdown format

  2. Including images

  3. Attaching files (images, pdfs, textfiles)

  4. Simple embedded r2pipe command line (ipython + r2pipe.py imported)

  5. Some widgets from r2 GUI available embedded in jupyter nodebook - e.g. graph, so you'll be able to run "afg [funcname]" to get the graph of the function, embedded in the notebook - see example of http://nbviewer.jupyter.org/github/james91b/ida_ipython/blob/master/notebook/examples/Sark%20Snapshots.ipynb
    But keep in mind, that this example is poor - because it's just a snapshot. Embedding full-feature graph is nicer.

  6. Functions entropy (or similar characteristics) - see http://nbviewer.jupyter.org/github/james91b/ida_ipython/blob/master/notebook/examples/Function%20Entropy.ipynb

  7. Machine learning and data analysis:

Widgets information

https://github.com/ipython/ipython/wiki/Widgets

Example of the plugin and custom widget for Jupyter - SparkMonitor https://krishnan-r.github.io/sparkmonitor/

Fix graph view switching

  • Add space key to switch between graph and disassembly view
  • Remove weird behaviours (like switching from disassembly view to graph view when clicking on a function, seeking, etc.)

Adding the first item should help with the second one.

Fix dark theme

The dark theme option is still present, but it's not very reliable. It should update every widget and set it's style to the dark one. Also it should change the disassembly colors, etc.

  • The arrow buttons are white/black (On the darker background, they look inverted.).
  • Most list's selected item/hover colors are explicitly set and don't necessarily match dark themes.
  • Disassembly color presets are not perfect yet. Specified in Configuration::loadDefaultTheme() and Configuration::loadDarkTheme()
  • The background of the window borders within Cutter is gray/white.
  • Tabbed views (e.g. Dashboard | Disassembly | Graph..., or Sections | Comments) are gray/white.
  • The dashboard is gray/white.
  • The headers of the lists with multiple columns (e.g. the sections window in the bottom left) are gray/white.
  • The sections chart has a white background.
  • The opcode description is white/black.

Fix functions sorting

When you order the functions by name, it does not order them correctly. Fix that.

What happened?

After our last thread regarding getting Homebrew in place and resolving the Travis issues with the question of what needs to be done in order to get Travis moving, I meandered over to see what may be going on and found the thread to be gone. After close inspection I discovered that the project had been moved / forked over here. While this seems appropriate, I had hoped that we could get some insight as to why this move was made and some of those threads we were discussing issues on vanished.

Fix DisassemblyWidget

  • Implement up scrolling
  • Fix down scrolling (some artifacts / extra spaces)
    BONUS
  • Split readDisasm into pd -50 and pd 50 so it the view does not start at current seek, but a bit before (add some context to current offset)

Finish graph view for first release

  • Colored assembly (Use Highlighter from disassembly view and make it compliant with x64dbg RichText)
  • Remove black dots in front of assembly
  • Escape to go back
  • Right click context menu
  • Double click on function
  • Show comments (requires radare2 agj update)

Remove radare webserver

I believe it is useless. If not check what is used from there and maybe use r2 API rather than the web server.

Right click and menu to change immediate base

Change immediate base:
| ahi b set base to binary
| ahi d set base to decimal
| ahi h set base to hexadecimal
| ahi o set base to octal
| ahi i set base to IP address
| ahi S set base to syscall
| ahi s set base to string
| aho foo a0,33 replace opcode string

sub rsp, 0x628
>ahi 10
sub rsp, 1576

Handle multiple r2 version on system

The thing is, you might want to use radare2 from the command line for your daily tasks, so you would use master. However you might also want to use cutter sometimes but the version might mismatch from the one which is stable with cutter.

  • Install/Copy/Whatever radare2 from cutter submodule in a separate folder (not with default ./sys/install.sh)
  • On startup set PATH according to the previous installation

[TRACKER] Some HexdumpWidget UI features request

  • Change format words, dwords, qwords, ..(pxh, pxw, pxq) on right click (see px?)
  • Scrolling by line
  • hex.compact
  • hex.comments (pxc command)
  • hex.pairs (it's set to false by default in cutter, but we should make it configurable for the user)
  • Use same disassembly architecture in parsing panel as the one used by the opened file by default
  • Hashes configurable in Hexdump -> information -> bytes info
  • Endianess
  • Colors hexdump
  • Implement write operations (wo?) (see #715)

  • Add ability to always align (like now aligned on 0) or never align (stand at current seek)
  • Show where current seek it
  • show flags (pxa command) (not compatible-yet with hex.compact radareorg/radare2#8957)
  • Hexdump is too wide #149
  • Place separators between areas to visually split them
  • Synchronize selection for hex-data and ASCII areas
  • Change number of columns on right click hex.cols
  • Add a button to close the side bar of the hexdump (see #636)
  • Add "right Click > Select Block" to the Hex Widget (see #761)

Rework functions window

Offsets are visibile at first, ihmo we should only see functions names and scroll a bit to the right if you need the offset.

Fix color on Windows

I think it requires a fix of ecj on Windows, at least some investigation and a proper fix.

Add basic search capability (string / asm code and hex)

Here are the one I suggest for the first iteration

| /cj jmp [esp]         search for asm code
| /cj instr1;instr2   search for instruction 'instr1' followed by 'instr2'
| /j foo\x00           search for string 'foo\0' (json output)
| /xj ff0033            search for hex string

A simple windows showing results that can be clickable like the x-ref windows

Check default font

Monospace is not a valid font for stock Mac.
Use "Andale Mono" for Mac, or Courier or maybe use the ones that were bundled with iaito before.
Or just use QFontDatabase::systemFont(QFontDatabase::FixedFont) if it works

Break MemoryWidget

I think we should destroy the MemoryWidget class and split it into other widgets.
The graph view has already its own Widget, we should do the same for the assembly and hex view.

Remove QWebEngine dependency

It takes a load of space (~80mb) in the release...

Widgets still using QWebEngine:

  • Dashboard
  • PreviewWidget
  • SidebarWidget

  • Remove from Travis
  • Remove from Appveyor

MainWindow singleton

In my opinion we should refactor the code so that the unique MainWindow instance is accessible everywhere and remove it from Widgets constructors parameters.

xref menu to contain the type

xref menu contain the type

axtj sub.write_c42
[{"from":4294982639,"type":"d","opcode":"lea rax, sub.write_c42","fcn_addr":4294982616,"fcn_name":"sub.tputs_bd8"}]

Data, Code etc.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.