Skip to content

Reverse

常用命令

编译指令

gcc -> as -> clang -> llvm-mc clang -save-temps hello.bc # llvm IR 二进制表达

查看文件信息

file a.elf objdump -d a.elf # 反汇编 readelf -a a.elf # 查看文件信息 ldd a.elf # 查看依赖库(链接的库)

进程

ps / ps -a pidof a.out # 查看进程号 cd proc/pid # 进入进程目录 cat maps # 查看进程内存映射

调试

静态调试

strace a.out # 查看系统调用 可以通过 man \<function> 查看系统调用手册 ltrace # 查看库函数调用 ltrace 只对动态链接的程序有效

动态调试

gdb

run # 启动调试 start # 一样,但会停在 main 开头 info # 查看各种信息 info registers # 查看寄存器 info proc maps # 查看进程内存映射 dissass main b *0x804849b # 在地址处下断点 stepi # 单步执行

常用思路

对于符号恢复的静态 or 动态链接目标

  • 关注特定常量和字符串
  • 关注输入和输出函数
  • 关注分支、比较指令
  • 关注可能涉及加密解密的特殊运算(位运算、异或、取余)

f5 反编译