Не важно, как медленно ты продвигаешься, главное, что ты не останавливаешься.


Thursday 8 March 2018

Radare 2 : Pengenalan (Part 1)

Bermula dari pengalaman mencari dokumentasi radare yang masih sedikit (terutama dalam bahasa indonesia), saya mencoba untuk menulis seri tentang radare.

Instalasi

Paket instalasi radare 2 dapat diunduh di github resminya, https://github.com/radare/radare2
sudo git clone https://github.com/radare/radare2.git
cd radare2
sudo sys/install.sh
Dalam paket radare2 yang terinstall, terdapat aplikasi kecil pendukung antara lain:

radare2

Merupakan aplikasi utama yang digunakan untuk men-debug suatu program, disassembly, bahkan patching.

rabin2

Program yang digunakan untuk mengekstrak informasi dari binary seperti ELF, Java CLASS, and Mach-O. Informasi yang dapat diekstrak seperti arsitektur, binary type, class, endian, OS, serta informasi yang biasa digunakan untuk exploit development seperti va randomisazion, nc, canary, dll. Termasuk library yang diimport ke dalam program.
root@xd:~/cpp# rabin2 hello
Usage: rabin2 [-AcdeEghHiIjlLMqrRsSUvVxzZ] [-@ at] [-a arch] [-b bits] [-B addr]
              [-C F:C:D] [-f str] [-m addr] [-n str] [-N m:M] [-P[-P] pdb]
              [-o str] [-O str] [-k query] [-D lang symname] | file
root@xd:~/cpp# rabin2 -I hello
arch     x86
binsz    6500
bintype  elf
bits     64
canary   false
class    ELF64
crypto   false
endian   little
havecode true
intrp    /lib64/ld-linux-x86-64.so.2
lang     c
linenum  true
lsyms    true
machine  AMD x86-64 architecture
maxopsz  16
minopsz  1
nx       true
os       linux
pcalign  0
pic      true
relocs   true
relro    partial
rpath    NONE
static   false
stripped false
subsys   linux
va       true

rasm2

Program yang digunakan untuk merubah kode hex menjadi asm atau sebaliknya (assembler/dissassembler).
root@xd:~/cpp# rasm2 -a x86 -d 554889e5 -b 64
push rbp
mov rbp, rsp
root@xd:~/cpp# rasm2 -a x86 -b 64 'push rbp;mov rbp,rsp'
554889e5

rahash2

Program yang digunakan untuk menghitung hash dari binary, biasa digunakan untuk identifikasi suatu binary.
root@xd:~/cpp# rahash2 hello -a md5,sha1,sha256
hello: 0x00000000-0x000020e7 md5: fd0424835991263e9d5e3b1662b7df6a
hello: 0x00000000-0x000020e7 sha1: 388bd716c5d925ca8fb9fd67f9af31a1c03a76a9
hello: 0x00000000-0x000020e7 sha256: 726dedfea8fbd3fc70acb5da81b2dc5ec9175c11395df4387cb2a2c6d0884874

radiff2

Program yang digunakan untuk melihat perbedaan antara 2 binary program yang ada, berguna pada saat prosess patching, maupun membandingkan program yang identik.
root@xd:~/cpp# radiff2 -AsC hello hello2
[x] Analyze all flags starting with sym. and entry0 (aa)
[x] Analyze len bytes of instructions for references (aar)
[x] Analyze function calls (aac)
[x] Use -AA or aaaa to perform additional experimental analysis.
[x] Constructing a function name for fcn.* and sym.func.* functions (aan)
[x] Analyze all flags starting with sym. and entry0 (aa)
[x] Analyze len bytes of instructions for references (aar)
[x] Analyze function calls (aac)
[x] Use -AA or aaaa to perform additional experimental analysis.
[x] Constructing a function name for fcn.* and sym.func.* functions (aan)
              fcn.0000021a  30 0x21a |   MATCH  (1.000000) | 0x21a   30 fcn.0000021a
                 sym._init  23 0x4f0 |   MATCH  (1.000000) | 0x4f0   23 sym._init
            sym.imp.printf  32 0x520 |   MATCH  (1.000000) | 0x520   32 sym.imp.printf
sub.__cxa_finalize_248_530  16 0x530 |   MATCH  (1.000000) | 0x530   16 sub.__cxa_finalize_248_530
                    entry0  43 0x540 |   MATCH  (0.953488) | 0x540   43 entry0
  sym.deregister_tm_clones  40 0x570 |   MATCH  (1.000000) | 0x570   40 sym.deregister_tm_clones
    sym.register_tm_clones  57 0x5b0 |   MATCH  (1.000000) | 0x5b0   57 sym.register_tm_clones
 sym.__do_global_dtors_aux  49 0x600 |   MATCH  (1.000000) | 0x600   49 sym.__do_global_dtors_aux
           sym.frame_dummy  10 0x640 |   MATCH  (1.000000) | 0x640   10 sym.frame_dummy
                  sym.main  28 0x64a |   MATCH  (0.600000) | 0x64a   45 sym.main
       sym.__libc_csu_init 101 0x670 | UNMATCH  (0.970297) | 0x680  101 sym.__libc_csu_init
       sym.__libc_csu_fini   2 0x6e0 |   MATCH  (1.000000) | 0x6f0    2 sym.__libc_csu_fini
 sym.imp.__libc_start_main  60 0x0 |   MATCH  (1.000000) | 0x0   60 sym.imp.__libc_start_main
                 sym._fini   9 0x6e4 |   MATCH  (1.000000) | 0x6f4    9 sym._fini

rafind2

Program yang digunakan untuk mencari string, hexpair string, dll
root@xd:~/cpp# rafind2 -r -s 'hello' hello
f hit0_0 0x000006f4 ; hello
f hit0_1 0x000016f0 ; hello

ragg2

Program yang digunakan untuk meng-compile simple high-level language, biasanya digunakan untuk membuat payload sederhana.
root@xd:~/cpp# ragg2-cc -x payload.c
eb00488d351d000000bf01000000ba07000000b8010000000f0531ffb83c0000000f0531c0c348656c6c6f210a00

rarun2

program launcher yang digunakan untuk menjalankan program di environment yang berbeda dengan argument, permission, argument, file descriptor, permission yang berbeda.

rax2

digunakan untuk mengkonversi antara byte, hex, ascii, int, dll, bahkan base62 encoding.
root@xd:~/cpp# rax2 10
0xa
root@xd:~/cpp# rax2 0xa
10
root@xd:~/cpp# rax2 -s 414141
AAA

Pada bagian pertama ini cukup sekian, untuk bagian selanjutnya akan membahas radare2 (r2) lebih mendalam, jika ada tambahan/saran, silahkan komentar di bawah ini.
5 λ .: March 2018 Bermula dari pengalaman mencari dokumentasi radare yang masih sedikit (terutama dalam bahasa indonesia), saya mencoba untuk menulis seri ten...
< >