Skip to content

Releases: rizinorg/rizin

Release v0.5.0

18 Feb 17:04
a7d643a
Compare
Choose a tag to compare

We are happy to present the result of our half-year long work - v0.5.0 release. Within this release we almost finished (only a few commands remain) the conversion to the new tree-sitter-based parser. Moreover, we also progress with the RzIL migration - three more architectures were converted since the last release: PowerPC, SuperH, and 8051. We also started the conversion of the x86 - most basic instructions are covered. One more significant change since - is the use of a new frame-pointer-based variables addressing instead of the old SP/BP-based ones.

As usual, keep reading for more insights and let us know of any bugs you find or improvements you would like to see in future versions.

New

  • With this release we completely removed the old bash-based rz-pm package manager to focus on the new cross-platform package manager, rz-pm, written in Go and easy to install on all major OS and platforms.

  • Stack pointer tracking: The stack pointer was previously already tracked during analysis for variables and their accesses, but not stored in any sensible form for further use. Starting with this release, it is stored in a way that allows for efficient querying of the stack frame size value at arbitrary analyzed addresses. The asm.stackptr variable can be enabled to visualize both the absolute sp value and the delta of each instruction in disassembly:
    Bildschirm­foto 2023-02-18 um 14 58 33

  • Stack-based variables: Variables on the stack are not identified by bp/sp+ anymore, which often caused misleading results, but by their address from the bottom of the stack frame, independent of how they are accessed.
    Notice how in this example from rizin 0.4.1, the analysis creates both bp- and sp-based variables from DWARF info and disassembly respectively, but is unable to detect that they actually describe the same stack locations:
    Bildschirm­foto 2023-02-18 um 14 30 44
    With the new kind of addressing (displayed as stack - <offset>), such cases are resolved:
    Bildschirm­foto 2023-02-18 um 14 31 14
    This also enables decompiler plugins like rz-ghidra to integrate sp-accessed variables defined in rizin in their decompilation output.

  • New color themes: Nord (eco nord) and Mars (eco mars).
    Bildschirm­foto 2023-02-18 um 14 30 44
    Bildschirm­foto 2023-02-18 um 14 30 44

Improvements / Fixes

  • All of our tests now pass on both Little Endian and Big Endian platforms. For a long time we had tests failing when executed on Big Endian systems, due to subtle assumptions the running system was Little Endian. Not anymore! We do have S390x machines running our test suite on every commit to ensure that we won't regress anymore.
  • String search is now multithreaded! Now multi-core processors can use parallelism to find string across the binary which results in faster loading time.
  • FLIRT generation and detection had important fixes covering cases that were wrongly handled before. You can expect much better detection now and better coverage with our sigdb (this also improves the compatibility with IDA)
  • cabextract tool presence is no longer necessary for unpacking PDB files, as rizin is able unpacking them itself using the "libmspack" library.

Extras

Packaging

  • libuv dependency was removed
  • liblzma dependency was added
  • libmspack dependency was added
  • blake3 dependency was added

Build

  • Remove old bash-based rz-pm (#3360)
  • Update xz (liblzma) to 5.4.1
  • Update liblz4 to 1.9.4
  • Update zlib to 1.2.13
  • Update tree-sitter to 0.20.7
  • Use compiler intrinsics for rz_swap_* functions (#3300)
  • Fix plugin removal and clean code (#3277)
  • Removed rzbochs
  • Update blake3 to use cpu extensions (#3108)
  • Remove rz-agent (#3087)
  • Add ssdeep hash (#3084)
  • build: fix BINDIR_DEPTH computation on Windows (#3075)
  • Replace meson cmake module usage by plain configure_file() (#2948)
  • Meson refactor: collect modules in dict and centralize config (#2945)
  • Build: add option to choose to regenerate cmd_descs.[ch] (#2934)
  • Rename rz_version.h.in to rz_build_version.h.in (#2914)
  • Fix Windows cross build (#2897)
  • Fix windows and cpp compatibility (#2887)
  • Drop libuv dependency
  • Update on every build the git hash shown by rizin -v (#2863)
  • librz: refactor a bit how plugins are built
  • util: make zlib dependency optional
  • Set default warning level 1 for Meson
  • Update libzip to v1.9.2
  • build: keep using meson 0.55.0 functions
  • build: use gnu99 globally instead of per-project
  • Add liblzma subproject
  • Add libmspack and add idpx to extracts compressed pdb (#2728)
  • build: check for 'backtrace' presence in meson
  • Fix compilation on Termux and Haiku (#2671)
  • Use clang-format 15 instead of 14

RzUtil

  • Fix plugin removal and clean code (#3277)
  • Add *pty API (#3221)
  • Fix: grep(~) will change the original result when ignores case (#3259)
  • util: fix logging of long strings by using RzStrBuf
  • Remove RZ_HOMD_OLD_PLUGINS after transition period ended (#3246)
  • Refactoring and rename RASN1 to RzASN1
  • Rename RPKCS7/RCMS/Spc to RzPKCS7/RzCMS/RzSpc
  • Refactoring names and usages of pkcs7
  • Rename RX509* to RzX509*
  • Refactoring names and usages of x509
  • Refactoring RzList to remove unused methods and bad naming (#3074)
  • Added Apple ASN1 OIDs (#3048)
  • Fix oob read on rz_pkcs7_parse_spcdata
  • Fix oob read on rz_x509_parse_tbscertificate
  • Add rz_bv_range_set and rz_bv_is_all_one to bitvector lib (#2891)
  • Move rz_str version funcs into version.c (#2890)
  • Remove cb_printf() from RzPrint
  • rz_print_hexdump() refactoring (#2841)
  • Tokenize and colorize asm strings (#2417)
  • Fixes for the regex engine (#2839)
  • Windows: Subprocess fixes
  • Windows: Refactor environment variables
  • Windows: Implement rz_sys_pipe()
  • Windows: Fix for file sharing permission
  • util/sdb: remove JSON code
  • Move SDB into RzUtil
  • util: make zlib dependency optional
  • util: provide rz_time_gettimeofday API (#2811)
  • Remove rz_th_kill, rz_th_kill_free and rz_th_pool_kill (#2790)
  • Windows: Fix for subprocess API handle inheriting (#2773)
  • Add RzBaseFindOpt for custom thread status callback (#2768)
  • Multithread string search (#2665)
  • Remove RQueue (#2720)
  • Cleanup of utf8.c and utf16.c files. (#2715)
  • Rework register profile parsing
  • Refactor thread code and add RzThreadQueue (#2683)
  • Print: Memoize number of rows for current print
  • Better false-positives detection in rz_scan_strings (#2691)

RzType

  • Make afs respect the calling convention (Fix #3291) (#3292)
  • Remove temporary type string conversion in DWARF integration (#3266)
  • Fix type bitsizes for struct/union member loops
  • Fix rz_type_db_get_bitsize() without specifier and add tests
  • Rewrite and extend type paths from offset
  • Unify and fix typedef loop handling
  • Fix leaks in rz_type and tests (#3223)
  • Ensure double and float uses the proper method to decode it. (#3105)

RzSignature

  • Do not overly optimize when applying a pat file
  • Fix signature creation due bad offset
  • Rename only non-symbols, but add the flag
  • Fix FLIRT CRC calculation, length and matching
  • Fix FLIRT detection when function size is less than 32 bytes (#3118)
  • Remove zignatures and move aaF[l] -> F[al] , zf[sdc] -> F[sdc] (#2682)

RzIO

  • Return error when reading/writing to unmapped memory (#3323)
  • Refactor S-Record files reading to not use sscanf() (#3321)
  • Rewrite of Bochs debugger and io plugin
  • Rewrite reading in io_mach (#3101)

RzHash

  • Fix alignment issues in SHA2
  • Add ssdeep hash (#3084)
  • Support blake3 hash algo (#3030)
  • hash: use RzHash in most hash APIs
  • RzHash: rename everything in librz/hash to RzHash prefix

RzDemangler

  • Add Free Pascal demangling support (#3011)

RzDebug

  • Fix DMP reg profile depending on host bitness
  • Make XNU reg profile depend on CPU type instead of RzDebug.bits (#3270)
  • Fix endianness for Windows PageDump files and WinKd (#3204)
  • Adds sync_registers in debug plugin and cleanup brainfuck debugger
  • Fix up rz_debug_trace_ins_after() (#3216)
  • rz_debug_trace_ins_after: Downgrade dbg->cur_op guard (#3206)
  • Print err msgs if rz_debug_trace_ins_before() fails (#3203)
  • Fix arm64 register access in XNU debugger
  • Use cpu_type_t for checking XNU debuggee's arch
  • Refactor global state of xnu debugger into RzXnuDebug struct
  • Refactor and replace .dm* calls with pure C (#2847)
  • Fix rz_xnu_get_cur_thread() messing up the target's mappings
  • Fix detaching in XNU Debugger
  • Fix attaching in XNU Debugger
  • Improve logging for EXC_SOFTWARE on XNU, showing Unix signals
  • De-include xnu_threads.c and xnu_excthreads.c
  • Remove XNU_USE_PTRACE
  • Fix pdb.autoload crash (#2729)

RzCons

  • Mute the mouse in the HUD mode (#3355)
  • Fix big memory leak in graph rendering (#3342)
  • Add search.case_sensitive option for grep case-sensitive/insensitive (#3241)
  • Fix: grep(~) will change the original result when ignores case (#3259)
  • Add Nord color theme (#3250)
  • Add Mars color theme (#3252)
  • Extract histograms and bars int...
Read more

Release v0.4.1

10 Sep 04:44
Compare
Choose a tag to compare

This release contains a few important security fixes:

Apart from those, were fixed:

  • Various minor packaging and installation issues and improvements
  • Various minor fixes on big-endian platforms
  • GCC 12 compilation warnings.
  • Update libzip to v1.9.2
  • Update rz-libdemangle
  • Fix #2851 - wrong AVR analysis jump value for rjmp/rcall
  • Fix the crash of command fg
  • Fix pg with fewer than 5 arguments
  • Fix afx command JSON output
  • Print graph when dmhg is executed
  • Fix the heap overflow in TUI
  • Fix for file sharing permission on Windows
  • Fix #2957 - oob read in pe_section.c
  • Fix #2970 - oob read in pe/pe.c and bin/golang.c
  • Fix #2970 - oob read in coresymbolication.c and in bin_dyldcache.c
  • Fix #2972 - oob read in ne.c
  • Fix #2971 - null deref dwarf_process.c
  • Fix #2968 - null deref in mdmp.c
  • Fix #2965 - null deref and div by zero in mach0_rebase.c
  • Fix #2962 - oob read in bin.c
  • Fix #2961 - oob read in coresymbolication.c
  • Fix #2958 #2960 #2973 - oob read in dwarf.c
  • Fix #2955 - oob read in dex.c
  • Fix #2954 - oob read in dex.c
  • Fix #2953 - oob read in magic/funcs.c
  • Fix #2952 - null deref in dyldcache.c
  • Fix #2993 - Check rz_buf_read_le32_offset return status parsing LE bins
  • Fix integer overflow in mach0
  • Fix oob read on luac
  • Fix RzBitmap length type and added ownership and checks.
  • Fix strdup on nullptr in rz_core_bin_apply_strings
  • Fix oob read on _luac_build_info and luac memleaks
  • Fix oob read on rz_pkcs7_parse_spcdata
  • Fix oob read on rz_x509_parse_tbscertificate
  • Fix oob read and endian dependency in asm_ebc
  • Fix OOB read in 6502 analysis plugin.
  • Fix reset followed by color change in rz_cons_html_filter
  • Fix always true if due wrong check in search
  • Fix the failure of switching panel command
  • Fix double free of enum member name
  • core_search_for_xrefs_in_boundaries omits the negative return value
  • Fix the crash caused by get_long_object()

Full Changelog: v0.4.0...v0.4.1

Release v0.4.0

25 Jun 13:22
Compare
Choose a tag to compare

Here we are again with a new release of Rizin, v0.4.0. We are still in the v0.y.z realm, but we are getting closer and closer to what we can consider our first stable release v1.0.0, with fully working projects and a uniform shell experience. In the meantime, we are moving forward with several side projects that we hope you will enjoy and that will help your reverse engineering experience, like automatic signature detection, FLIRT signatures creation, firmware base address computation, a new Intermediate Language (RzIL) and more.

As usual, keep reading for more insights and let us know of any bugs you find or improvements you would like to see in future versions.

New

  • FLIRT files can be used to apply analysis information gathered from one binary to another one, allowing the reverse engineer to more easily recognize library functions or standard functions that are usually not binary specific. Rizin can now create such FLIRT files (both in .pat and .sig extensions), which can be later applied to other Rizin sessions or even opened directly by IDA.
$ rizin -A -qc "zfc /tmp/curl.sig" curl-example-dbg
704 FLIRT signatures were written in '/tmp/curl.sig'
$ rz-sign -aa -o /tmp/curl.pat curl-example-dbg
rz-sign: written 704 signatures to /tmp/curl.pat.
  • Signature files (e.g. .sig) can be placed in the installation prefix to form a library that Rizin automatically uses while analyzing a binary, in order to find known functions and ease the reversing process.
$ rizin -A curl-example
[x] Applied 5 FLIRT signatures via sigdb
  • Automatic golang function and string recovery for x86/x64/PowerPC/MIPS/ARM/RISC-V.
$ rizin -A example-go-1.18-stripped
[x] Found go 1.18 pclntab data.
[x] Recovered 4794 symbols and saved them at sym.go.*
[x] Analyze all flags starting with sym.go. (aF @@f:sym.go.*)
[x] Analyze all instructions to recover all strings used in sym.go.*
[x] Recovered 3448 strings from the sym.go.* functions.
  • A new Intermediate Language RzIL has been introduced in Rizin, primarily intended for representing the semantics of machine code and designed as a clone of BAP's Core Theory. It is going to replace ESIL in the future, even though they will both live within Rizin for the time being. ARM32, ARM64, AVR, and 6502 assemblies can already be lifted to RzIL, allowing you to emulate code without running it. Some of the reasons that moved us away from ESIL are: its lack of typing, for example it was hard to discern accesses of different signs, sizes, and bool from integer; its hard to read string representation; being all string-based without a real structure.

    As many reverse engineers are familiar with the concept of SMT (Satisfiability Modulo Theories), RzIL should be familiar as well. In essence, it's a superset of SMT Bitvectors theory plus SMT Arrays (Bitvector-indexed arrays of Bitvectors to represent memory), and Effects (to represent side effects, like jump or branch). Thus, main core concept that was added in Rizin is the algebra of bitvectors, with corresponding functions in RzUtil. Moreover, the readable representation of RzIL was added, in a form of S-expressions:

$ rz-asm -a arm -b 32 -d 1233a0e1
lsl r3, r2, r3
$ rz-asm -a arm -b 32 -I 1233a0e1
(set r3 (<< (var r2) (cast 8 false (var r3)) false))
  • Sometimes when reverse engineering a firmware you get just a raw binary, without any structured file format (e.g. ELF). Finding the base address where the raw data is supposed to be run from is often a tedius process. We now try to automate the identification of few possible candidates addresses through the new B command.
$ rizin -e log.level=3 -qc B stm32f103-dapboot-v1.20-bluepill.bin
INFO: basefind: located 7 strings
INFO: basefind: located 1459 pointers
score candidate  
-----------------
4     0x08000000
1     0x79ca6000

Improvements

  • Improved analysis on DEX files, especially on cross-references to imports.
  • GPL code can be now disabled via -Duse_gpl=false
  • rz-diff -H option now supports infinite scrolling when binary diffing.
  • Improved accuracy of the strings search and EBCDIC encoding support.
  • Significant improvement of the Hexagon disassembly and analysis.

Extras

  • FLIRT signature database is the database generated from rizinorg/sigdb-source, used as a library of signatures that can be automatically recognized in the binaries you analyze. It can be installed via the meson option -Dinstall_sigdb=true while installing Rizin from source or added later via e flirt.sigdb.path=path/to/sigdb.
  • rz-libyara is now available as RzCore plugin for parsing and creating yara rules.
  • rz-libdemangle is our extracted library providing APIs to demangle symbols for various languages. It currently supports C++, Rust, Swift, Java, MSVC and ObjC. C++ and Rust are under GPL license and they can be compiled out if necessary. As a standalone library it can be used by any other project, so try it out if you need it!
  • Official Apple swift demangler is now available as RzDemangler plugin.
  • rz-retdec Retdec decompiler plugin for Rizin
  • rz-libmc7 Siemens Simatic S7 bytecode dissassembler
  • rz-tracetest a testing tool for the correctness of RzIL lifters, which compares executions of instructions from a real trace against the result of executing the same instructions in the RzIL VM. This is a very important piece to ensure that our RzIL lifters produce good results.

Build

  • fix versions of the Rizin libraries so that patch releases do not require a recompilation of dependent programs
  • completely switch to Meson subprojects and removal of shlr directory
  • add -Wimplicit-fallthrough=3 compiler flag by default when supported
  • add option to download and install sigdb together with Rizin

RzUtil

  • Fixes the portable build so that themes and other resources are loaded when the whole portable installation directory is moved
  • Several fixes, cleaning API, adding documentation to existing API
  • Removal of various unused functions and general cleanup of the library.
  • Add RzBitVector API, extensively used in RzIL
  • Add new type of RzBuffer based on RzIO
  • String types, structures and search has been refactored to unify its usages across RzUtil, RzAnalysis and RzCore.

RzType

  • Fix printing of several types
  • Add API for pretty printing of types and reuse it whenever possible
  • Parse comments in types definitions
  • Fix self-referential typedefs parsing
  • Separate variadic argument in a different grammar token
  • Improve error message when types are redefined

RzSignature

  • FLIRT .pat files are now parsed and applied via zfs
  • FLIRT .sig and .pat files can now be created via zfc.
  • rz-sign has been rewritten to create, dump and convert (in both ways).pat and .sig FLIRT files.
  • Fixed endianness issues on FLIRT .sig files.
  • Support for FLIRT signature database which is now applied in the analysis step or manually via aaF (use aaFl to list the database signatures)
  • rz_sign is now a standalone library.

RzIO

  • Add shm:// support on Android and Windows
  • Partial support for loading all files included in .a/.lib archive files
  • Fix opening of multi-dex files with proper base address
  • Several improvements and fixes to WinKD, WinDBG and DMP plugins

RzHash

  • RSA-MD licensed code has been replaced with LGPL implementation.
  • Small refactoring to fix some null dereference bugs when openssl is used.

RzDemangler

  • New library to demangle symbol names in various languages, extensible by plugins
  • By default uses libdemangle for C++, Rust, Swift, Java, MSVC, Obj-C

RzDebug

  • Add support for coredump generation on NetBSD and FreeBSD
  • Add support for file descriptors listing on NetBSD
  • Add serialization functionality for breakpoints, so they can be saved/restored to/from projects
  • Fix signal handling on NetBSD
  • Several fixes and improvements for WinDBG, WinKD, DMP plugins
  • Add support for Windows on ARM
  • Add support for debugging DMP files
  • Add unit tests for software breakpoints
  • Add support for getting backtraces from a Windows Kernel Dump for x64

RzCrypto

  • Replaced MS-PL AES code with LGPL implementation from Nettle.
  • Fixed various endianness issues on some algorithms.
  • Rewrite of ESIL implementation of DES <k> opcode for AVR arch.

RzCons

  • Fix bug on Windows when e scr.vtmode=1
  • Fix visual panels mode on Windows, which was not restoring terminal mode correctly
  • Fixes 'ctrl+arrow and 'alt+arrow key' in the shell
  • Fix console settings after rizin - on Linux
  • Add durian color theme based on summerfruit.vim
  • Remove editor features
  • Remove global variables
  • Retain prompt when exiting using ^D

RzBreakpoint

  • Add serialization of breakpoints
  • Add unit tests for software breakpoints
  • Make dcu fail on failed bp instead of blindly continuing
  • Make breakpoint size respect address-specific bits

RzBin

DEX

  • Implement vfiles to support relocations on dex binaries
  • Resolved big bottleneck which improved parsing performances
  • Added support for imports resolved by direct_methods via super calls

PE/PDB/DM...

Read more

Release v0.3.4

10 Jan 05:42
Compare
Choose a tag to compare
  • Fix the RZ_BIN_PREFIX test for Windows (#2189)
  • Make meson.build work again with meson 0.55.3 (#2113)

Release v0.3.3

07 Jan 14:35
Compare
Choose a tag to compare
  • Add dist script to remove .git folders from subprojects
  • Add -e option to rz-diff to set configuration variables
  • Fix #2089 by checking the kind of DWARF attribute before demangling
  • Fix #469 by checking the value of analysis.jmp.cref
  • Fix #1710 by changing rflags register using dr
  • Fix #2013 for dependencies names which are called libmagic and libxxhash

Release v0.3.2

30 Dec 21:17
507fdbd
Compare
Choose a tag to compare
  • Fix: UAF caused by parse_type_abstract_declarator_node()
  • Fix wrong buffer size reporting with shm://
  • Initialize retctx,ctx before freeing the inner elements
  • Init all fields in rz_cmd_state_output_init()
  • Fix #726 - Fix building for x86 Windows with clang-cl
  • Fix -Wunused-function warning on Mac
  • Fix OOB write for DWARF with abbrev with count 0
  • Fix crash due to NULL pointer dereference in rz_analysis_block_recurse()
  • Fix +/- in visual cursor mode
  • Fix self-referential typedef format
  • Make rz_strbuf_slice() truncate on excessive len

Release v0.3.1

17 Nov 17:02
Compare
Choose a tag to compare
  • Add pid/pidfile on man/rz-run and make a pid option a boolean
  • Fix rax -t not considering GMT argument
  • Fixed 'Ctrl+Arrow' and 'Alt+Arrow' in rizin shell
  • Fix integer overflow and excessive memory usage in jump table analysis
  • Fix infinite loop if first case of switch table points to same block
  • Fix some NULL derefs in Windows Debugger
  • Removed junk on screen in visual mode with two columns
  • Detect shm_open() function with Meson
  • Haiku OS and DragonflyBSD build fixes
  • PE header parsing fixes when opened through shm:// IO plugin
  • Added CRC32 and entropy values in it output
  • Fix NULL pointer dereference due missing small_block method when OpenSSL is used.
  • Fix potential buffer overflow in RC2 hash
  • Move TSLanguage initialization into new rz_core_cmd_new() API
  • [DEX] remove bottleneck on rz_list_get_n()
  • Fix invalid v command resulting in black screen
  • Add few missing Windows types
  • Fix rotating colors with C in visual mode
  • Fix #1864: Find main() of Fedora 35 x86_64 /bin/ls
  • Use empty dependencies to avoid comparing different types (Meson 0.60 compatibility)
  • [Debug] Let gdb attach regularly and reset reason after attach
  • Enable flushing for oldinput_get_help()
  • Provide API for calculating sections digests
  • Move files to generate windows installer under dist/windows

Release v0.3.0

25 Sep 17:00
Compare
Choose a tag to compare

Rizin v0.3.0

A new release of Rizin is here, v0.3.0! This release has taken a bit longer than expected, but a lot of things have been done since the last release, including our first GSoC in the Rizin project. Look at our blogpost to know more about GSoC 2021.

Below we would like to give you a glimpse at what we did, but be aware this is only a small fraction of the changes. You should look at our git history to see everything. Some of our work directly improves our users' experience, while others is more under the hood work, though we are sure it ultimately improves the experience of using and developing Rizin as well.

Keep reading for some highlights of this new release.

New

  • New RzType module: We moved all the types related functions from the RzAnalysis module to a new separate module: RzType. Instead of using a custom stripped-down version of the TinyCC, RzType parses C code by using a grammar defined with Tree-Sitter. RzType parser and loader now better validates types, which allowed us to fix several mistakes in the shipped type libraries for Linux, MacOS, and Windows. When a type is unknown or it is a typedef/atomic type without an underlying specification you may also find the special new type unknown_t which is an integer of the current file/platform word size. This new module allows us to better use types in several places of Rizin, Cutter and rz-ghidra!
  • SPDX headers: All files have been marked with SPDX headers that will help you and us check what kind of code we ship, which licenses, copyrights, etc.. Checks are in place in CI to ensure that all files will have SPDX headers going forward.
    image4
  • rz-diff hexadecimal view: We rewrote big parts of rz-diff tool to remove the dependency on the diff/git diff binary, optimize diffing functions and provide a new hexadecimal diffing view through the new -H option.
    image2
  • Shell new behavior: Rizin can now be started without any argument and it won't open any file, allowing you to later open a binary with o command as usual. We switched the behavior of - and = when starting Rizin, to better match what Linux users expect from a tool: - now reads the binary from stdin, while = now opens a malloc-ed file in memory. Try things with rizin and rizin =.
  • Global variables: So far you could only define variables local to a function (see afv commands), but we are now introducing global variables that can be defined at any fixed address with a given type. See avg? to see how to handle them. This is still a very early concept, but we plan to use them more and more for disassembly printing, analysis, in Cutter, and in rz-ghidra. They are going to replace the “type link” function you may know under the tl commands.

Improvements

  • ELF parsing: Code for ELF parsing has been heavily refactored and adjusted to make better use of dynamic info provided in segments instead of relying on untrusted sections. Few new variables have been introduced to alter how ELF files should be parsed and validated, see elf vars with el elf. Support for DT_HASH and DT_GNU_HASH allows to determine more accurately the number of symbols in the dynamic symbol table. As one of the results of this work, a known anti-analysis technique that tries to hide used symbols is now defeated by Rizin.
    image5
    image1
  • No more io.cache required to apply relocations: It was common in Rizin to get warning messages telling you to enable io.cache to fix binary relocations. We think that was unnecessary and wrong in concept as well. With this new release, the most relevant binary plugins were refactored to provide a list of mappings together with changes that should be applied on top, making relocations patching very easy and transparent for the end user. You will not have to set any particular variable nor will you see changes applied by Rizin itself mixed with changes you, as a user, did to the binary.
    image3
  • Commands ported to Rizin shell: Several commands were ported to Rizin unified shell, making them more consistent and easy to use. These commands have an automatically generated help, their arguments can be wrapped in quotes like you do in bash and they integrate better with Rizin. Some of those commands are: afvxa, afvxv, dts, L, pg, dmh, dm, pt, dc, H, av, ph, avg, i, !.
  • Project migration: With the first release of Rizin we mentioned our new project implementation which would allow our users to keep using older projects as they update their Rizin tools. Even though we are not at release 1.0.0 we already implemented project migrations that automatically update your old projects as you load them! Please report any issue you find with this, so that by the release 1.0.0 we can deliver something as stable as possible!
  • Support for multidex APK files: Initial work to support multidex APK
  • rz-hash: Code related to rz-hash was heavily refactored and it now supports loading of large files as well as HMAC combined with any hash algorithm.

Fixes

  • Fix debugger in static build: The statically compiled rizin binary provided with last release was not able to debug other binaries, due to it being compiled on Alpine and the code using the ptrace API with the wrong types of arguments.

  • FLIRT decompression: Did you know you could load IDA FLIRT signatures files in Rizin with the zf commands? Now we support z-lib compressed FLIRT signatures as well, so try to load your FLIRT database with Rizin.

  • DEX parsing: Several bug fixes ranging from correctly listing symbols in a dex file, to better printing of methods and fields names, to resolution of invoke-virtual methods.
    image6

  • Ports: Added CI jobs for NetBSD and Linux PowerPC - all tests pass, various fixes for HaikuOS, DragonFlyBSD.

There is more in this release and even more to come in the upcoming ones, like a new Intermediate Language, RzIL, that will replace ESIL, improved usage of PDB files, global variables refinement and yet other improvements on ELF parsing. If you wish to help us develop, test, document Rizin or you are just curious about it, look at our website https://rizin.re/community/ to know how to reach out to us!

Enjoy Rizin v0.3.0,

The Rizin team

Release v0.2.1

22 Apr 07:25
Compare
Choose a tag to compare
  • Remove unnecessary exit() calls from librz/
  • Fix wrong demangling of __TIFFSwab16BitData
  • Prevent infinite recursion in DWARF parsing
  • Detect presence of extern char **environ (fixes old MacOS build)
  • Fix SDB and SPP linking with RzUtil
  • Fix RzDiff/RzTest to use subprocess API
  • Fetching all references with rz-pm to support release tags
  • Fix FreeBSD 13 build
  • Fix Gentoo SDB build to use proper Python environment
  • Fix the wrong use of wcstombs()
  • Various UAF, OOB, NULL DEREF fixes

Release v0.2.0

08 Apr 18:09
Compare
Choose a tag to compare

Command changes

  • Add exit command to exit Rizin
  • Add dmhv as verbose version of dmh
  • Add afb-* command to delete all basic blocks of a function
  • Support in newshell for <cmd>?*[j] and ?*[j] <command>
  • Extend output of iS to show more information about sections
  • Fix =!= in newshell to support "fd" argument
  • Merge CL and iX into ix
  • Remove ?: because it does not exist and contains :
  • Rename o: to oC to avoid :
  • Rename s: to spad to avoid :
  • Rename =: and =&: to =r and =&r to avoid :
  • Rename sH commands to sh
  • Remove "comment" argument from zi* and f*
  • Remove the command tail
  • Remove tfc, move to tf, add tfk
  • Remove tna and tnn commands
  • Remove join command
  • Remove head command
  • Remove less and directly list ls command
  • Remove touch command
  • Remove axF command
  • Remove afb. and change how afbi commands work to be more consistent with afb
  • Port q commands to newshell
  • Port afb commands to newshell
  • Port afB command to newshell
  • Port afs commands to newshell
  • Port afx command to newshell
  • Port afS command to newshell
  • Port afo command to newshell
  • Port afu command to newshell
  • Port afv commands to newshell
  • Port t commands to newshell
  • Port dsu commands to newshell
  • Port wf commands to newshell

Analysis improvements

  • Complete acvf command to better lookup function address on vtable offset
  • Better type analysis

Updates

  • Update rizin-shell-parser to tree-sitter 0.19.4
  • Update embedded SDB

Architecture changes

  • Java bytecode disassembly/analysis/assembly/binary plugins are rewritten from scratch and covered by tests
  • Implemented Lua 5.4 bytecode disassembly/analysis/binary plugins (luac)
  • Enabled Python bytecode (pyc) support and covered by tests
  • Remove Whitespace Asm+Analysis Plugins (ws) because the Results are wrong

Debugging

  • Various heap parsing improvements (dmh command)

Various

  • Performance improvements on loading big files with DWARF information
  • Improve developer and contributor documentation
  • Add tests for different compilers and ABI
  • Better SPDX/REUSE conformance of the source code
  • Cleanup of the code to remove unnecessary parts e.g. some of JSON duplicated code
  • Refactored all dependencies into Meson subprojects (lz4, zip, zlib, yxml, etc)
  • Removed old ACR/Makefile files
  • Refactored to use API calls instead of calling commands (rz_core_cmd*()) inside Rizin codebase
  • Improved static "portable" builds to use relative paths for supplementary files