mirror of
https://github.com/nganhkhoa/CTF-All-In-One.git
synced 2024-12-24 03:01:15 +07:00
update r2
This commit is contained in:
parent
d15ae36ea7
commit
e7fc0b5f8c
@ -19,7 +19,7 @@ skanlite cantata kdenlive konversation libreoffice-still thunderbird-kde k3b cup
|
||||
|
||||
yaourt -S:
|
||||
|
||||
virtualbox tree git ipython ipython2 gdb google-chrome tcpdump vim wireshark-qt edb ssdeep wps-office strace metasploit pwntools peda oh-my-zsh-git radare2 binwalk burpsuite checksec netcat
|
||||
virtualbox tree git ipython ipython2 gdb google-chrome tcpdump vim wireshark-qt edb ssdeep wps-office strace metasploit pwntools peda oh-my-zsh-git radare2 binwalk burpsuite checksec netcat wxhexeditor
|
||||
|
||||
pip3/pip2 install:
|
||||
|
||||
|
@ -13,11 +13,11 @@
|
||||
- [rarun2](#rarun2)
|
||||
- [rax2](rax2)
|
||||
- [交互式使用方法](#交互式使用方法)
|
||||
- [分析(analyze)](#分析analysis)
|
||||
- [分析(analyze)](#分析analyze)
|
||||
- [Flags](#flags)
|
||||
- [定位(seeking)](#定位seeking)
|
||||
- [信息(information)](#信息(information))
|
||||
- [打印(print) & 反汇编(disassembling)](#打印print反汇编disassembling)
|
||||
- [信息(information)](#信息information)
|
||||
- [打印(print) & 反汇编(disassembling)](#打印print--反汇编disassembling)
|
||||
- [写入(write)](#写入write)
|
||||
- [视图模式](#视图模式)
|
||||
- [Web 界面使用](#web-界面使用)
|
||||
@ -58,7 +58,7 @@ Radare2 在命令行下有一些小工具可供使用:
|
||||
- rahash2:基于块的哈希工具。
|
||||
- radiff2:二进制文件或代码差异比对。
|
||||
- rafind2:查找字节模式。
|
||||
- ragg2:r_egg 的前端,将以简单高级语言编写的程序编译成x86、x86-64和ARM的二进制文件。
|
||||
- ragg2:r_egg 的前端,将高级语言编写的简单程序编译成x86、x86-64和ARM的二进制文件。
|
||||
- rarun2:用于在不同环境中运行程序。
|
||||
- rax2:数据格式转换。
|
||||
|
||||
@ -166,6 +166,20 @@ Usage: rabin2 [-AcdeEghHiIjlLMqrRsSvVxzZ] [-@ at] [-a arch] [-b bits] [-B addr]
|
||||
-Z guess size of binary program
|
||||
```
|
||||
|
||||
当我们拿到一个二进制文件时,第一步就是获取关于它的基本信息,这时候就可以使用 rabin2。rabin2 可以获取包括 ELF、PE、Mach-O、Java CLASS 文件的区段、头信息、导入导出表、数据段字符串、入口点等信息,并且支持多种格式的输出。
|
||||
|
||||
下面介绍一些常见的用法:(我还会列出其他实现类似功能工具的用法,你可以对比一下它们的输出)
|
||||
- `-I`:最常用的参数,它可以打印出二进制文件信息,其中我们需要重点关注其使用的安全防护技术,如 canary、pic、nx 等。(`file`、`chekcsec -f`)
|
||||
- `-e`:得到二进制文件的入口点。(`readelf -h`)
|
||||
- `-i`:获得导入符号表,RLT中的偏移等。(`readelf -r`)
|
||||
- `-E`:获得全局导出符号表。
|
||||
- `-s`:获得符号表。(`readelf -s`)
|
||||
- `-l`:获得二进制文件使用到的动态链接库。(`ldd`)
|
||||
- `-z`:从 ELF 文件的 .rodare 段或 PE 文件的 .text 中获得字符串。(`strings -d`)
|
||||
- `-S`:获得完整的段信息。(`readelf -S`)
|
||||
- `-c`:列出所有类,在分析 Java 程序是很有用。
|
||||
|
||||
最后还要提到的一个参数 `-r`,它可以将我们得到的信息以 radare2 可读的形式输出,在后续的分析中可以将这样格式的信息输入 radare2,这是非常有用的。
|
||||
|
||||
#### rasm2
|
||||
```text
|
||||
@ -197,6 +211,37 @@ Usage: rasm2 [-ACdDehLBvw] [-a arch] [-b bits] [-o addr] [-s syntax]
|
||||
-q quiet mode
|
||||
```
|
||||
|
||||
rasm2 是一个内联汇编、反汇编程序。它的主要功能是获取给定机器指令操作码对应的字节。
|
||||
|
||||
下面是一些重要的参数:
|
||||
- `-L`:列出目标体系结构所支持的插件,输出中的第一列说明了插件提供的功能(a=asm, d=disasm, A=analyze, e=ESIL)。
|
||||
- `-a`:知道插件的名字后,就可以使用 -a` 来进行设置。
|
||||
- `-b`:设置CPU寄存器的位数。
|
||||
- `-d`:反汇编十六进制对字符串。
|
||||
- `-D`:反汇编并显示十六进制对和操作码。
|
||||
- `-C`:汇编后以 C 语言风格输出。
|
||||
- `-f`:从文件中读入汇编代码。
|
||||
|
||||
例子:
|
||||
```
|
||||
$ rasm2 -a x86 -b 32 'mov eax,30'
|
||||
b81e000000
|
||||
$ rasm2 -a x86 -b 32 'mov eax,30' -C
|
||||
"\xb8\x1e\x00\x00\x00"
|
||||
|
||||
$ rasm2 -d b81e000000
|
||||
mov eax, 0x1e
|
||||
$ rasm2 -D b81e000000
|
||||
0x00000000 5 b81e000000 mov eax, 0x1e
|
||||
$ rasm2 -a x86 -b 32 -d 'b81e000000'
|
||||
mov eax, 0x1e
|
||||
|
||||
$ cat a.asm
|
||||
mov eax,30
|
||||
$ rasm2 -f a.asm
|
||||
b81e000000
|
||||
```
|
||||
|
||||
#### rahash2
|
||||
```text
|
||||
$ rahash2 -h
|
||||
@ -223,6 +268,37 @@ Usage: rahash2 [-rBhLkv] [-b S] [-a A] [-c H] [-E A] [-s S] [-f O] [-t O] [file]
|
||||
-v show version information
|
||||
```
|
||||
|
||||
rahash2 用于计算检验和,支持字节流、文件、字符串等形式和多种算法。
|
||||
|
||||
重要参数:
|
||||
- `-a`:指定算法。默认为 sha256,如果指定为 all,则使用所有算法。
|
||||
- `-b`:指定块的大小(而不是整个文件)
|
||||
- `-B`:打印处每个块的哈希
|
||||
- `-s`:指定字符串(而不是文件)
|
||||
- `-a entropy`:显示每个块的熵(`-B -b 512 -a entropy`)
|
||||
- ```
|
||||
$ rahash2 -B -b 1024 a.out
|
||||
0x00000000-0x000003ff sha256: 1fd71dfb92c2c1290c3f6a09e477b470a625aef4ab262e18127e6db790c47487
|
||||
0x00000400-0x000007ff sha256: e4829aeb02e97585d663ace279a04d51e39964367943519e4136ab23f43b642a
|
||||
0x00000800-0x00000bff sha256: 9ace05fc25ac536646f116d1030fbe03a958bc0ee3ae0af4b378e7549553bf5d
|
||||
0x00000c00-0x00000fff sha256: d7f185a66987ff7ba0ac0813ff473c5f75e988c5904399f3e24994cade489f81
|
||||
0x00001000-0x000013ff sha256: 1c24ed40e088544cd39ec974b7ebc6f6fb57a71f7d56455625ffe4f259825671
|
||||
0x00001400-0x000017ff sha256: 9acbb50272925734fb1d1feca94e493dcdcd213c815f6680eecd22cba17a2494
|
||||
0x00001800-0x00001bff sha256: c202fd18e976abdae80e4519f156aa5d7ad1623cd183d85429abdb388910b88b
|
||||
0x00001c00-0x00001fff sha256: 7e23808d6acc635b763ef5b9171af1eb39a428a314e8edbdc02fd985abf19918
|
||||
0x00002000-0x00002097 sha256: a44370a272c40becac05c369467dea4e7444dab674d7db029ff0b8be99330ba0
|
||||
$ rahash2 -B -b 1024 -a entropy a.out
|
||||
0x00000000-0x000003ff 2.820547: 35% [###############------------------------------]
|
||||
0x00000400-0x000007ff 4.855878: 60% [###########################------------------]
|
||||
0x00000800-0x00000bff 0.222447: 2% [---------------------------------------------]
|
||||
0x00000c00-0x00000fff 0.810801: 10% [####-----------------------------------------]
|
||||
0x00001000-0x000013ff 1.672678: 20% [#########------------------------------------]
|
||||
0x00001400-0x000017ff 3.942760: 49% [######################-----------------------]
|
||||
0x00001800-0x00001bff 3.153171: 39% [#################----------------------------]
|
||||
0x00001c00-0x00001fff 1.325161: 16% [#######--------------------------------------]
|
||||
0x00002000-0x00002097 0.942890: 11% [####-----------------------------------------]
|
||||
```
|
||||
|
||||
#### radiff2
|
||||
```text
|
||||
$ radiff2 -h
|
||||
@ -256,6 +332,15 @@ Usage: radiff2 [-abcCdjrspOxuUvV] [-A[A]] [-g sym] [-t %] [file] [file]
|
||||
-z diff on extracted strings
|
||||
```
|
||||
|
||||
radiff2 是一个基于偏移的比较工具。
|
||||
|
||||
重要参数:
|
||||
- `-s`:计算文本距离并得到相似度。
|
||||
- `-AC`:这两个参数通常一起使用,从函数的角度进行比较。
|
||||
- `-g`:得到给定的符号或两个偏移的图像对比。
|
||||
- 如:`radiff2 -g main a.out b.out | xdot -`(需要安装xdot)
|
||||
- `-c`:计算不同点的数量。
|
||||
|
||||
#### rafind2
|
||||
```text
|
||||
$ rafind2 -h
|
||||
@ -279,6 +364,14 @@ Usage: rafind2 [-mXnzZhv] [-a align] [-b sz] [-f/t from/to] [-[m|s|S|e] str] [-x
|
||||
-Z show string found on each search hit
|
||||
```
|
||||
|
||||
rafind2 用于在二进制文件中查找字符模式。
|
||||
|
||||
重要参数:
|
||||
- `-s`:查找特定字符串。
|
||||
- `-e`:使用正则匹配。
|
||||
- `-z`:搜索以`\0`结束的字符串。
|
||||
- `-x`:查找十六进制字符串。
|
||||
|
||||
#### ragg2
|
||||
```text
|
||||
$ ragg2 -h
|
||||
@ -317,12 +410,80 @@ Usage: ragg2 [-FOLsrxhvz] [-a arch] [-b bits] [-k os] [-o file] [-I path]
|
||||
-z output in C string syntax
|
||||
```
|
||||
|
||||
ragg2 可以将高级语言编写的简单程序编译成 x86、x86-64 或 ARM 的二进制文件。
|
||||
|
||||
重要参数:
|
||||
- `-a`:设置体系结构。
|
||||
- `-b`:设置体系结构位数(32/64)。
|
||||
- `-P`:生成某种模式的字符串,常用于输入到某程序中并寻找溢出点。
|
||||
- `-r`:使用原始字符而不是十六进制对。
|
||||
- ragg2 -P 50 -r`
|
||||
- `-i`:生成指定的 shellcode。查看 `-L`。
|
||||
- `ragg2 -a x86 -b 32 -i exec`
|
||||
- `-e`:使用指定的编码器。查看 `-L`。
|
||||
|
||||
#### rarun2
|
||||
```text
|
||||
$ rarun2 -h
|
||||
Usage: rarun2 -v|-t|script.rr2 [directive ..]
|
||||
program=/bin/ls
|
||||
arg1=/bin
|
||||
# arg2=hello
|
||||
# arg3="hello\nworld"
|
||||
# arg4=:048490184058104849
|
||||
# arg5=:!ragg2 -p n50 -d 10:0x8048123
|
||||
# arg6=@arg.txt
|
||||
# arg7=@300@ABCD # 300 chars filled with ABCD pattern
|
||||
# system=r2 -
|
||||
# aslr=no
|
||||
setenv=FOO=BAR
|
||||
# unsetenv=FOO
|
||||
# clearenv=true
|
||||
# envfile=environ.txt
|
||||
timeout=3
|
||||
# timeoutsig=SIGTERM # or 15
|
||||
# connect=localhost:8080
|
||||
# listen=8080
|
||||
# pty=false
|
||||
# fork=true
|
||||
# bits=32
|
||||
# pid=0
|
||||
# pidfile=/tmp/foo.pid
|
||||
# #sleep=0
|
||||
# #maxfd=0
|
||||
# #execve=false
|
||||
# #maxproc=0
|
||||
# #maxstack=0
|
||||
# #core=false
|
||||
# #stdio=blah.txt
|
||||
# #stderr=foo.txt
|
||||
# stdout=foo.txt
|
||||
# stdin=input.txt # or !program to redirect input to another program
|
||||
# input=input.txt
|
||||
# chdir=/
|
||||
# chroot=/mnt/chroot
|
||||
# libpath=$PWD:/tmp/lib
|
||||
# r2preload=yes
|
||||
# preload=/lib/libfoo.so
|
||||
# setuid=2000
|
||||
# seteuid=2000
|
||||
# setgid=2001
|
||||
# setegid=2001
|
||||
# nice=5
|
||||
```
|
||||
|
||||
rarun2 是一个可以使用不同环境、参数、标准输入、权限和文件描述符的启动器。
|
||||
|
||||
常用的参数设置:
|
||||
- `program`
|
||||
- `arg1`, `arg2`,...
|
||||
- `setenv`
|
||||
- `stdin`, `stdout`
|
||||
|
||||
例子:
|
||||
- `rarun2 program=a.out arg1=$(ragg2 -P 300 -r)`
|
||||
- `rarun2 program=a.out stdin=$(python a.py)`
|
||||
|
||||
#### rax2
|
||||
```text
|
||||
$ rax2 -h
|
||||
@ -367,6 +528,14 @@ Usage: rax2 [options] [expr ...]
|
||||
-v version ; rax2 -v
|
||||
```
|
||||
|
||||
rax2 是一个格式转换工具,在二进制、八进制、十六进制数字和字符串之间进行转换。
|
||||
|
||||
重要参数:
|
||||
- `-e`:交换字节顺序。
|
||||
- `-s`:十六进制->字符
|
||||
- `-S`:字符->十六进制
|
||||
- `-D`, `-E`:base64 解码和编码
|
||||
|
||||
|
||||
## 交互式使用方法
|
||||
当我们进入到 Radare2 的交互式界面后,就可以使用交互式命令进行操作。
|
||||
|
Loading…
Reference in New Issue
Block a user