обзор на rizin

обзор на rizin

📅 [ Archival Date ]
Jun 30, 2022 6:03 PM
🏷️ [ Tags ]
РоссияReverse

⁉️ Translate this page

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

image

Просто аниме картинка

Проект Rizin представляет собой набор небольших утилит командной строки, которые можно использовать вместе или по отдельности.Также его можно использовать как библиотеку, например вот https://github.com/rizinorg/rizin/tree/dev/test/integration

давайте его для начала поставим, это делается в несколько команд

$ git clone https://github.com/rizinorg/rizin
клонируем репу, а остальные команды его компилят
$ meson build
$ ninja -C build
$ sudo ninja -C build install

Или если вы используете 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, на примере простой проги.

Итак приступим. Для начала нппишем простую программу на языке С.

#include <stdio.h>
int main() {
   printf("Hello, World!");
}

да стандартный хелло ворлд

теперь скомпилируем ее используя GCC стандартный компилятор С

gcc -w hello_world.c -o hello_word

после чего делоем следующее

rizin -nw helloworld.c

после чего получаем вот такую вот штуку

[0x00000000]>

теперь можем повставлять разные флаги ( а могли бы хуй гыы, но нам как байтоебам это не светит)

image

гыы, афтар шутит про хуи, вот убогий

На сегодня я предлагаю взять и потестить несколько флагов из командной строки. Давайте используем стандартный аааа и посмотрим чо получилось.

[0x00000000]> aaaa

Analyze all flags starting with sym. and entry0 (aa)
Analyze function calls (aac)
find and analyze function preludes (aap)
Analyze len bytes of instructions for references (aar)
Check for classes
Type matching analysis for all functions (aaft)
Propagate noreturn information
Use -AA or aaaa to perform additional experimental analysis.
Enable constraint types analysis for variables

ахуенно, давайте погоняем наш бинарь по различным функциям и на этом закончим.

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