Python 如何转储函数';使用R2S管进行拆卸
我将要编写一个软件,将二进制文件放入radare2,然后将子程序(包括指令、地址和指令的二进制表示)转储到文本文件中 我与IDA Pro和IDAPython一起使用它,但我也想为radare2重新创建它。文本文件最终应如下所示:Python 如何转储函数';使用R2S管进行拆卸,python,radare2,Python,Radare2,我将要编写一个软件,将二进制文件放入radare2,然后将子程序(包括指令、地址和指令的二进制表示)转储到文本文件中 我与IDA Pro和IDAPython一起使用它,但我也想为radare2重新创建它。文本文件最终应如下所示: 0x0804ba0a 55 push ebp 0x0804ba0b 89e5 mov ebp, esp 0x0804ba0d 83ec18 sub esp, 0x18 0x0804
0x0804ba0a 55 push ebp
0x0804ba0b 89e5 mov ebp, esp
0x0804ba0d 83ec18 sub esp, 0x18
0x0804ba10 83e4f0 and esp, 0xfffffff0
0x0804ba13 b800000000 mov eax, 0
0x0804ba18 29c4 sub esp, eax
不幸的是,网络上的资源很少,文档也不是很长。我很想给你更多的工作机会,但不知为什么我被困在这里了。
我知道了如何使用pdf命令反汇编函数,我可能可以在python中这样使用它,但按照我的方式,main、入口点和sym.main将丢失。我想分解整个.text部分或.text部分中的所有函数:
import r2pipe
file = 'path_to_file'
r = r2pipe.open()
with open (file, 'w') as f:
r.cmd('aaa')
# disassemble all functions starting with fcn and write them
# to the file
f.write(r.cmd('pdf @@ fcn*'))
环境
- radare2:radare2 4.2.0-git 23519@linux-x86-64 git.4.1.1-84-g0c46c3e1e提交:0c46c3e1e30bb272a5a05fc367d874af32b41fe4构建:2020-01-08_u09:49:0
- 系统:Ubuntu 18.04.3 LTS
- 这可以通过使用两个radare2命令来实现,这些命令可以来自命令提示符,也可以使用支持r2pipe的语言。
- 命令一:aaaa#分析文件
- 命令二:pdf@@f>out
- pdf#打印函数的反汇编
- @@f#对每个函数重复该命令
- >out#将输出重定向到名为out的文件
user@host:~$r2/bin/ls
[0x00005850]>aaaa
...
[0x00005850]>pdf@@f>输出
[0x00005850]>q
user@host:~$cat out
...
┌ 38:fcn.00014840();
│ ; var int64_t var_38h@rsp+0xFFFFD0
│ 0x00014840 53推送rbx
│ 0x00014841 31f6异或esi,esi
│ 0x00014843 31ff异或edi,edi
│ 0x00014845 e846f2feff调用sym.imp.getcwd
│ 0x0001484a 4885c0测试rax,rax
│ 0x0001484d 4889c3 mov rbx,rax
│ ┌─< 0x00014850 740e je 0x14860
│ │ ; 代码外部参照来自fcn.00014840@0x14868
│ ┌──> 0x00014852 4889d8 mov rax,rbx
│ ╎│ 0x00014855 5b pop rbx
│ ╎│ 0x00014856 c3 ret
..
│ ╎│ ; 代码外部参照来自fcn.00014840@0x14850
│ ╎└─> 0x00014860 e88beffeff呼叫符号输入错误位置
│ ╎ 0x00014865 83380c cmp dword[rax],0xc
│ └──< 0x00014868 75e8 jne 0x14852
└ 0x0001486a E861EFFFF呼叫fcn.000146d0
; 从fcn.00013d00@0x13d9d、0x13da8调用外部参照
...
使用Python和r2pipe的示例
导入管道
R2=r2pipe.open('/bin/ls')#用文件打开R2
R2.cmd('aaaa')#分析文件
R2.cmd('pdf@@f>out')#将每个函数的反汇编写入out文件
R2.退出()#退出R2
还考虑退回逆向工程问题!