Logo
    обзор на rizin
    ⏪

    обзор на rizin

    ⚠️ [ ORIGIN SOURCE ]
    https://telegra.ph/obzor-na-rizin-Obzor-nekotoryh-funkcij-chast1-06-30
    📅 [ 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