Releases: rizinorg/rizin
Release v0.5.0
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:
-
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:
With the new kind of addressing (displayed asstack - <offset>
), such cases are resolved:
This also enables decompiler plugins like rz-ghidra to integrate sp-accessed variables defined in rizin in their decompilation output.
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
- rz-bindgen - a tool for generating Python bindings for Rizin, read more details in this blogpost.
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...
Release v0.4.1
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
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 viae 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 viazfs
- FLIRT
.sig
and.pat
files can now be created viazfc
. - 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
(useaaFl
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 withLGPL
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 withLGPL
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...
Release v0.3.4
Release v0.3.3
- Add dist script to remove
.git
folders from subprojects - Add
-e
option torz-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 usingdr
- Fix #2013 for dependencies names which are called
libmagic
andlibxxhash
Release v0.3.2
- 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
- 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
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.
- 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.
- 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 withrizin
andrizin =
. - 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. Seeavg?
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 thetl
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 withel 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.
- 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.
- 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.
-
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
- Remove unnecessary
exit()
calls fromlibrz/
- 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
Command changes
- Add
exit
command to exit Rizin - Add
dmhv
as verbose version ofdmh
- 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
andiX
intoix
- Remove
?:
because it does not exist and contains:
- Rename
o:
tooC
to avoid:
- Rename
s:
tospad
to avoid:
- Rename
=:
and=&:
to=r
and=&r
to avoid:
- Rename
sH
commands tosh
- Remove "comment" argument from
zi*
andf*
- Remove the command
tail
- Remove
tfc
, move totf
, addtfk
- Remove
tna
andtnn
commands - Remove
join
command - Remove
head
command - Remove
less
and directly listls
command - Remove
touch
command - Remove
axF
command - Remove
afb.
and change howafbi
commands work to be more consistent withafb
- 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