RPat - тулза на основе binutils, предназначенная для генерации сигнатур для IDA Pro flair.
Flair поддерживает следующие форматы при создании сигнатур (взято из flair\readme):
plb parselib processes OMF libraries and creates PAT fileНо как известно форматов объектных файлов существует гораздо больше, и в дикой природе даже уже существует инструмент, грозящийся поддерживать довольно много из них - это пакет GNU binutils. Соотв-но логично использовать его для грязной работы разбора форматов, а самому дописать только выходной генератор .pat файлов, что и было однажды проделано 11 лет назад
pcf parsecoff processes COFF libraries and creates PAT file
pelf parseelf processes ELF libraries and creates PAT file
ppsx parsepsx processes PSX libraries and creates PAT file (Sony Playstation)
ptmobj parsetobj processes Trimedia libraries .... .... ....
pomf166 Keil C166 object files (old format)
Если кто не знает например что такое .pat файлы и чего с ними дальше делать - дальше можете не читать
Опции командной строки
- -C - вызывать функцию cplus_demangle для печати имен символов - приводить имена C++ в более userfriendly вид
- -a - не переписывать выходной файл, а добавлять содержимое. Бывает полезно если хочется сделать один .pat (и соотв-но один .sig) файл из множества библиотек
- -b - печатает список поддерживаемых форматов файлов
- -B -аналог опции -i objdump
- -f - явно задает формат файла. Если не указана - binutils попробует найти подходящий формат сам
- -g - включить в выходной .pat файл все глобальные символы, а не только функции
- -i имя секции - задает имя секции, которая будет проигнорирована при сканировании символов для сигнатур. Бывает полезно для отключения например stabs
- -n - включить в выходной .pat файл все не экспортируемые функции
- -o имя выходного .pat файла
- -p минимальная длина сигнатуры - крайне не рекомендуется менять длину, ибо по умолчанию во flair она 32 байта. Все более короткие функции игнорируются
- -r - не включать в выходной .pat файл имена ссылок из релоков
- -v - гадить на экран кучей малоосмысленных сообщений
- -z - почему-то на некоторых старых форматах (типа a.out) binutils сообщает что функции начинаются с кучи нулей - в таком случае мы пытаемся найти в теле функции первый ненулевой байт, не равный 0x90 (x86 nop) и строить сигнатуру начиная с него
Сборка
Linux/FreeBSD/another UNIX
- Нужно сначала собрать сам binutils, причем сказать configure --enable-targets=all. Ни в коем случае не нужно делать make clean после этого - RPat использует некоторые объектные файлы из binutils
- Затем нужно поправить Makefile - указать в переменной BFD_ROOT путь к корневой директории binutils
- выполнить make
- PROFIT
MS Windows
Представляет собой Ъ сатанинский квест, на который потратил вчера почти весь шабат например - дело в том что binutils крайне плохо собирается под mingw даже под прослушивание свежего альбома Buzrum и при произнесении могучих заклинаний про МатьВ остальном сборка совершенно идентична вышеописанной
Warning: RPat совершенно не тестировался на mingw-w64 и я даже не уверен что он там соберется
Списочек поддерживаемых форматов
- pe-i386- a.out.adobe
- a.out-zero-big
- a.out-mips-little
- epoc-pe-arm-big
- epoc-pe-arm-little
- epoc-pei-arm-big
- epoc-pei-arm-little
- pe-arm-wince-big
- pe-arm-wince-little
- pei-arm-wince-big
- pei-arm-wince-little
- coff-arm-big
- coff-arm-little
- a.out-arm-netbsd
- pe-arm-big
- pe-arm-little
- pei-arm-big
- pei-arm-little
- b.out.big
- b.out.little
- elf32-avr
- elf32-bfin
- elf32-bfinfdpic
- elf32-big
- elf32-bigarc
- elf32-bigarm
- elf32-bigarm-symbian
- elf32-bigarm-vxworks
- elf32-bigmips
- elf32-bigmips-vxworks
- elf32-cr16
- elf32-cr16c
- elf32-cris
- elf32-crx
- elf32-d10v
- elf32-d30v
- elf32-dlx
- elf32-fr30
- elf32-frv
- elf32-frvfdpic
- elf32-moxie
- elf32-h8300
- elf32-hppa-linux
- elf32-hppa-netbsd
- elf32-hppa
- elf32-i370
- elf32-i386-freebsd
- elf32-i386-vxworks
- elf32-i386
- elf32-i860-little
- elf32-i860
- elf32-i960
- elf32-ip2k
- elf32-iq2000
- elf32-lm32
- elf32-little
- elf32-littlearc
- elf32-littlearm
- elf32-littlearm-symbian
- elf32-littlearm-vxworks
- elf32-littlemips
- elf32-littlemips-vxworks
- elf32-m32c
- elf32-m32r
- elf32-m32rle
- elf32-m32r-linux
- elf32-m32rle-linux
- elf32-m68hc11
- elf32-m68hc12
- elf32-m68k
- elf32-m88k
- elf32-mcore-big
- elf32-mcore-little
- elf32-mep
- elf32-microblaze
- elf32-mn10200
- elf32-mn10300
- elf32-mt
- elf32-msp430
- elf32-openrisc
- elf32-or32
- elf32-pj
- elf32-pjl
- elf32-powerpc
- elf32-powerpc-vxworks
- elf32-powerpcle
- elf32-s390
- elf32-sh
- elf32-shbig-linux
- elf32-shl
- elf32-shl-symbian
- elf32-sh-linux
- elf32-shl-nbsd
- elf32-shl-vxworks
- elf32-sh-nbsd
- elf32-sh-vxworks
- elf32-sparc
- elf32-sparc-vxworks
- elf32-spu
- elf32-tradbigmips
- elf32-tradlittlemips
- elf32-us-cris
- elf32-v850
- elf32-vax
- elf32-xc16x
- elf32-xstormy16
- elf32-xtensa-be
- elf32-xtensa-le
- pe-powerpc
- pei-powerpc
- pe-powerpcle
- pei-powerpcle
- a.out-cris
- ecoff-bigmips
- ecoff-biglittlemips
- ecoff-littlemips
- coff-go32
- coff-go32-exe
- coff-h8300
- coff-h8500
- a.out-hp300hpux
- a.out-i386
- a.out-i386-bsd
- coff-i386
- a.out-i386-freebsd
- a.out-i386-lynx
- coff-i386-lynx
- msdos
- a.out-i386-netbsd
- i386os9k
- pe-i386
- pei-i386
- coff-i860
- coff-Intel-big
- coff-Intel-little
- ieee
- coff-m68k
- coff-m68k-un
- a.out-m68k-netbsd
- coff-m68k-sysv
- coff-m88kbcs
- a.out-m88k-mach3
- a.out-m88k-openbsd
- mach-o-be
- mach-o-le
- mach-o-fat
- mach-o-i386
- coff-maxq
- pe-mcore-big
- pe-mcore-little
- pei-mcore-big
- pei-mcore-little
- pe-mips
- pei-mips
- a.out-newsos3
- nlm32-i386
- nlm32-powerpc
- nlm32-sparc
- coff-or32-big
- a.out-pc532-mach
- a.out-ns32k-netbsd
- a.out-pdp11
- pef
- pef-xlib
- ppcboot
- aixcoff-rs6000
- coff-sh-small
- coff-sh
- coff-shl-small
- coff-shl
- pe-shl
- pei-shl
- coff-sparc
- a.out-sparc-little
- a.out-sparc-linux
- a.out-sparc-lynx
- coff-sparc-lynx
- a.out-sparc-netbsd
- a.out-sunos-big
- sym
- a.out-tic30
- coff-tic30
- coff0-beh-c54x
- coff0-c54x
- coff1-beh-c54x
- coff1-c54x
- coff2-beh-c54x
- coff2-c54x
- coff-tic80
- a.out-vax-bsd
- a.out-vax-netbsd
- a.out-vax1k-netbsd
- versados
- vms-vax
- coff-w65
- coff-we32k
- coff-z80
- coff-z8k
- elf32-am33lin
- srec
- symbolsrec
- verilog
- tekhex
- binary
- ihex
А вотбы elf64 как-то. А ?
ОтветитьУдалитьсобери сам, делов-то
ОтветитьУдалитьСобрал тока с вудмана который. Типа текстов исходных нету на sourceforge.
ОтветитьУдалитьа это чо: http://cyrplw.svn.sourceforge.net/viewvc/cyrplw/rpat/ ?
ОтветитьУдалитьНу я типа поиском по соурсфоргу или по ссылке из тута.
ОтветитьУдалитьГляжу http://sourceforge.net/projects/cyrplw/files/
а там и нету сорцев.
Спасибо.