Funkbuster: IDA Python plugin

p1cador

cerf
Автор темы
Проверенный
220
359
Пол года назад приходилось проходить собеседование на позицию реверсера, где получил следующее тестовое задание:
Даны две версии .dll библиотеки. Библиотеки были огромные, около 30 мегабайт одна, и 40 другая. Отличия в них были колоссальные, что понятно уже исходя из разницы в размерах. Также, был дан список адресов в первой библиотеке. Необходимо было найти аналогичные адерса во второй. Это были не адреса функций, функции очень отличались в двух версиях. Это были адреса инстуркций внутри функций, или даже адерса аргументов инструкций внутри функций (например, для инструкции add EAX, 1337h, байткод 05 37 13 00 00, нужно было найти адрес непосредственно аргумента, т.е. 37 13 00 00, а значение аргумента сука тоже могло отличаться). Время на тз было ограничено, тогда я запилил питоновский скрипт для поиска по сигнатурам и кросс-референсам. Спустя некоторе время, пришла идея обложить этот функционал гуями. Сейчас вкратце распишу, что к чему. Более подробно - на гитхабе: https://github.com/ep1h/funkbuster-ida-plugin

В гуях плагина три основные секции: Filters, Results, Info.

В Filters можно настраивать различные фильтры (охуеть), через которые будут отсеиваться функции. Фильтровать можно по сигнатурам (и по их отсутствиям), по кросс-референсам на/из определенных функций и/или данных (и по отсутствию кросс-референсов), а также по цепочкам вызовов с определенной глубиной (отобразить только функции, которые вызываются из определенной функции через цепочку из нескольких вызовов, или наоборот, не вызываются, или наоборот, ИЗ которых вызывается/не вызывается определенная функция).

В Results секции - список функций, удовлетворяющих условиям фильтрации.

В Info секции - инфа о выбранной в "Results" функции, кросс-референсы, потенциальные вызовы виртуальных функций.

Все адреса/оффсеты в гуях кликабельны, для простоты навигации.

PS да, работы тут еще много, код очень сырой, но сомневаюсь, что в ближайшее время продолжу. Может кому-то поможет.


1697212001229.png
 

Digger Man

Любитель Linux
Модератор
1,635
1,116
Даны две версии .dll библиотеки. Библиотеки были огромные, около 30 мегабайт одна, и 40 другая.
Большая редкость конечно…

Задумка крутая, в куттере подобная фильтрация вроде есть, но в большинстве случаев юзлесс мне кажется, я думаю ты и сам редко ищешь адреса инструкций, а не функций, а если функции не отличаются в двух разных версиях, то вообще труда не составляет, найти адрес, ну на крайняк по вызовам можно пройтись)
Теперь давай для гидры)
 
Последнее редактирование:
  • Нравится
Реакции: AdCKuY_DpO4uLa и p1cador

SR_team

like pancake
BH Team
4,720
6,369
В Ghidra кста подобный функционал из коробки. Уже давно привык, что если надо что-то найти в IDA проекте, особенно если это поле в структуре, то проект надо экспортировать в Ghidra

1697241860549.png
 
  • Нравится
Реакции: p1cador