Всем привет. Хочу рассказать про такой инструмент как rizin. Я хочу рассмотреть его возможность на примере простойго бинарника . Rizin основан на radare2, это форк ориентированный на чистоту кода, его стабильност и оттестированный API. В заметке разберем особенности rizin и его функционал.

Просто аниме картинка
Проект Rizin представляет собой набор небольших утилит командной строки, которые можно использовать вместе или по отдельности.Также его можно использовать как библиотеку, например вот https://github.com/rizinorg/rizin/tree/dev/test/integration
давайте его для начала поставим, это делается в несколько команд
Или если вы используете Linux Arch и при этом используете репрозиторий BlackArch, то у вас это делоется так
sudo
blackman -g blackarch-debugger
и уже выбираете rizin.
Rizin состоит из следующих утилит:
1.rizin
Основной инструмент всего фреймворка. Он использует ядро шестнадцатеричного редактора и отладчика. rizin позволяет вам открывать ряд источников ввода/вывода, как если бы они были простыми файлами, включая диски, сетевые подключения, драйверы ядра, отлаживаемые процессы и так далее.
Он реализует расширенный интерфейс командной строки для перемещения по файлу, анализа данных, дизассемблирования, исправления двоичных файлов, сравнения данных, поиска, замены и визуализации. Он может быть написан на различных языках, включая Python, Haskell, OCaml, JavaScript и другие.
2.rz-bin
Программа для извлечения информации из исполняемых двоичных файлов, таких как ELF, PE, Java CLASS, Mach-O, а также любого формата, поддерживаемого плагинами rizin. rz-bin используется ядром для получения таких данных, как экспортированные символы, импорт, информация о файлах, перекрестные ссылки (xrefs), зависимости библиотек и разделы.
3.rz-asm
Ассемблер и дизассемблер командной строки для нескольких архитектур (включая Intel x86 и x86-64, MIPS, ARM, PowerPC, Java и множество других).
4.rz-hash
Реализация блочного хеш-инструмента. От небольших текстовых строк до больших дисков, rz-hash поддерживает несколько алгоритмов, включая MD4, MD5, CRC16, CRC32, SHA1, SHA256 и другие. rz-hash можно использовать для проверки целостности или отслеживания изменений больших файлов, дампов памяти или дисков.
5.rz-diff
Утилита для сравнения двоичных файлов, которая реализует несколько алгоритмов. Он поддерживает сравнение на уровне байтов или дельта для двоичных файлов, а также сравнение на основе анализа кода для поиска изменений в базовых блоках кода, полученных в результате анализа кода rizin.
6.rz-find
Программа для поиска байтовых шаблонов в файлах.
7.rz-egg
Интерфейс для r_egg. rz-egg компилирует программы, написанные на простом языке высокого уровня, в крошечные двоичные файлы для x86, x86-64 и ARM.
8.rz-run
Средство запуска для запуска программ в разных средах с разными аргументами, разрешениями, каталогами и переопределенными файловыми дескрипторами по умолчанию. rz-run полезен для:
- Решаем кряки
- Фаззинг
- Наборы тестов
9.rz-ax
Минималистичный оценщик математических выражений для оболочки, который полезен для базовых преобразований между значениями с плавающей запятой, шестнадцатеричными представлениями, шестнадцатеричными строками в ASCII, восьмеричными в целые и т. д. Он также поддерживает настройки порядка байтов и может использоваться в качестве интерактивной оболочки, если не заданы аргументы.
давайте пока рассмотрим стандартный rizin, на примере простой проги.
Итак приступим. Для начала нппишем простую программу на языке С.
да стандартный хелло ворлд
теперь скомпилируем ее используя GCC стандартный компилятор С
после чего делоем следующее
rizin -nw helloworld.c
после чего получаем вот такую вот штуку
[0x00000000]>
теперь можем повставлять разные флаги ( а могли бы хуй гыы, но нам как байтоебам это не светит)

гыы, афтар шутит про хуи, вот убогий
На сегодня я предлагаю взять и потестить несколько флагов из командной строки. Давайте используем стандартный аааа и посмотрим чо получилось.
[0x00000000]> aaaa
ахуенно, давайте погоняем наш бинарь по различным функциям и на этом закончим.
ft - анализ соответсвия типов для всех функций
fs
env
string
threads
network
dylib
alloc
time
process
stdout
r - анализ длины функции
c - анализ вызова функций
Usage: c[?dfx] [argument] # Compare
| c [string] Compare a plain with escaped chars string
| c* [string] Same as above, but printing rizin commands instead
| c1 [addr] Compare 8 bits from current offset
| c2 [value] Compare a word from a math expression
| c4 [value] Compare a doubleword from a math expression
| c8 [value] Compare a quadword from a math expression
| cat [file] Show contents of file (see pwd, ls)
| cc [at] Compares in two hexdump columns of block size
| ccc [at] Same as above, but only showing different lines
| ccd [at] Compares in two disasm columns of block size
| cd [dir] chdir
| cf [file] Compare contents of file at current seek
| cg[?] [o] [file] Graphdiff current file and [file]
| cl|cls|clear Clear screen, (clear0 to goto 0, 0 only)
| cu[?] [addr] @at Compare memory hexdumps of $$ and dst in unified diff
| cud [addr] @at Unified diff disasm from $$ and given address
| cv[1248] [hexpairs] @at Compare 1,2,4,8-byte (silent return in $?)
| cV[1248] [addr] @at Compare 1,2,4,8-byte address contents (silent, return in $?)
| cw[?] [us?] [...] Compare memory watchers
| cx [hexpair] Compare hexpair string (use '.' as nibble wildcard)
| cx* [hexpair] Compare hexpair string (output rizin commands)
| cX [addr] Like 'cc' but using hexdiff output
p- поиск и анализ функциональных прелюдий
Usage: p[=68abcdDfiImrstuxz] [arg|len] [@addr]
| p[b|B|xb] [len] ([S]) bindump N bits skipping S bytes
| p[iI][df] [len] print N ops/bytes (f=func) (see pi? and pdi)
| p[kK] [len] print key in randomart (K is for mosaic)
| p-[?][jh] [mode] bar|json|histogram blocks (mode: e?search.in)
| p2 [len] 8x8 2bpp-tiles
| p6[de] [len] base64 decode/encode
| p8[?][j] [len] 8bit hexpair list of bytes
| p=[?][bep] [N] [L] [b] show entropy/printable chars/chars bars
| pa[edD] [arg] pa:assemble pa[dD]:disasm or pae: esil from hex
| pA[n_ops] show n_ops address and type
| pb[?] [n] bitstream of N bits
| pB[?] [n] bitstream of N bytes
| pc[?][p] [len] output C (or python) format
| pC[aAcdDxw] [rows] print disassembly in columns (see hex.cols and pdi)
| pd[?] [sz] [a] [b] disassemble N opcodes (pd) or N bytes (pD)
| pf[?][.nam] [fmt] print formatted data (pf.name, pf.name $<expr>)
| pF[?][apx] print asn1, pkcs7 or x509
| pg[?][x y w h] [cmd] create new visual gadget or print it (see pg? for details)
| ph[?][=|hash] ([len]) calculate hash for a block
| pi[?][bdefrj] [num] print instructions
| pI[?][iI][df] [len] print N instructions/bytes (f=func)
| pj[?] [len] print as indented JSON
| pm[?] [magic] print libmagic data (see pm? and /m?)
| po[?] hex print operation applied to block (see po?)
| pp[?][sz] [len] print patterns, see pp? for more help
| pq[?][is] [len] print QR code with the first Nbytes
| pr[?][glx] [len] print N raw bytes (in lines or hexblocks, 'g'unzip)
| ps[?][pwz] [len] print pascal/wide/zero-terminated strings
| pt[?][dn] [len] print different timestamps
| pu[?][w] [len] print N url encoded bytes (w=wide)
| pv[?][jh] [mode] show variable/pointer/value in memory
| pwd display current working directory
| px[?][owq] [len] hexdump of N bytes (o=octal, w=32bit, q=64bit)
| pz[?] [len] print zoom view (see pz? for help)
Давайте рассмотрим какие флаги мы рассмотрели
aap
aac
aar
aaft
А на сегодня все.
Источники
https://rizin.re/ офф сайт
https://book.rizin.re/ мануал на софт
https://github.com/rizinorg/rizin гитхаб, там же есть инструкции по установке.
пишу сюда всякое https://t.me/c4nc7