Сейчас на форуме: rmn, exp50848 (+9 невидимых)

 eXeL@B —› Основной форум —› FLIRT + FLAIR = ?
Посл.ответ Сообщение

Ранг: 171.0 (ветеран), 11thx
Активность: 0.050
Статус: Участник

Создано: 01 сентября 2015 18:55 · Поправил: Apokrif
· Личное сообщение · #1

Народ, подскажите как правильно и быстро флиртовать?
Расклад:
statically linked .so для Andriod.
Компилер: GCC: (GNU) 4.4.3
Неизвестно: android-ndk (т.е. набор либ)
gcc 4.4.3 был во многих android-ndk.
В каждом android-ndk в среднем примерно дюжина android platform (android-3…android-*)
Считаем, что стандартные либы использованы из android-ndk (т.е. не перекомпилились)
Также интересует нестандартные либы (т.н. не входящая в android-ndk) OpenSSL и Lua.

Генерить FLIRT Signature Files подбирая ключи компиляции, потом применять к огромному idb вроде как-то неправильно.

Посмотрел IDA.Pro.Book.2nd.Edition, там только общие советы по этому вопросу...

Пока думаю так:
Для стандартные либ:
в исходном "statically linked" .so попытаться точно вычислить какую-то функцию из стандартных либ и поискать её в разных комбинациях android-ndk/platform. Кажется, что все равно подойдут почти все ndk...

Для нестандартных либ:
Так же попытаться точно вычислить какую-то функцию и поискать её в разных комбинациях ключей компиляции.

Есть какие-то другие (более правильные?) подходы?



Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 01 сентября 2015 19:34
· Личное сообщение · #2

idb2pat не подойдет?

-----
старый пень




Ранг: 171.0 (ветеран), 11thx
Активность: 0.050
Статус: Участник

Создано: 01 сентября 2015 20:05
· Личное сообщение · #3

r_e пишет:
idb2pat не подойдет

Каким макаром?
У меня же ничего (из того что мне нужно) не найдено в idb...
Я так понимаю, если уже есть предыдущая, "опознанная" версия бинарника и известно, что новая скомпилена тем же компилером (или близким) с теми же либами (или близкими), то idb2pat это как за то, что нужно.
Я не прав?



Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 01 сентября 2015 21:57
· Личное сообщение · #4

Apokrif
а чо, в андроид ндк либы в сырцах идут? сгенерь с них сигнатуры.
а тех, которых нет, типа openssl и т.д. сгенерь со стандартным набором ключей. что-нибудь, да распознается.

А что такое вообще statically linked .so? там же импорты должны торчать именованные.
Или имеется в виду statically linked .a?

-----
старый пень




Ранг: 171.0 (ветеран), 11thx
Активность: 0.050
Статус: Участник

Создано: 02 сентября 2015 02:09 · Поправил: Apokrif
· Личное сообщение · #5

r_e пишет:
а чо, в андроид ндк либы в сырцах идут?

Да, всегда можно пересобрать с другими ключами. (Никогда не делал!)
Весь стандартный андроид можно собрать с 0, все сырцы есть.

r_e пишет:
А что такое вообще statically linked .so? там же импорты должны торчать именованные.
Или имеется в виду statically linked .a?

Правильный термин "Statically linked binaries".
Т.е. "statically linked .so" это .so, который не использует libc.so, а "statically linked libc.a"
Многие либы линкуем на выбор, shared/static:
772,856 libstlport_shared.so
1,177,156 libstlport_static.a

r_e пишет:
а тех, которых нет, типа openssl и т.д. сгенерь со стандартным набором ключей. что-нибудь, да распознается.

Да понятно, просто думал, может кто-то уже разбирался и подскажет, где грабли спрятаны…

Добавлено спустя 20 минут
Еще один детсадовский вопрос к флиртущим:
По определению: Signature это pattern + a list of symbol names referenced by the function (и еще кое-то)

Пример, есть функции a(), b() и c().
b() и c() используют a().
Signature сняты.

Чуток меняем a() в начале, чтобы pattern стал другой.
Компилим и применяем старые Signature
Что получится?
А. Т.к. a() по pattern не нашелся, то b() и c() тоже не найдутся из-за отсутствия ссылки на a()
Б. Или a() все равно найдется, т.к. b() и c() его используют и их pattern не изменились?

И можно ли как-то управлять флиртом, чтобы изменить поведение?




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 02 сентября 2015 04:07
· Личное сообщение · #6

у флирта есть процент попадания, там ключики в командной строке иды какие то задаются и она показывает,
кто то уже на форуме это искал находил и был рад, поищите



Ранг: 171.0 (ветеран), 11thx
Активность: 0.050
Статус: Участник

Создано: 02 сентября 2015 16:09
· Личное сообщение · #7

reversecode пишет:
у флирта есть процент попадания, там ключики в командной строке иды какие то задаются и она показывает

Этот:
-z debug:
00000004 flirt




Ранг: 171.0 (ветеран), 11thx
Активность: 0.050
Статус: Участник

Создано: 05 сентября 2015 22:27 · Поправил: Apokrif
· Личное сообщение · #8

Попробовал сигнатуры для своей либы получить (очень простая, всего 3 функции)
pcf.exe из flair66 и flair68 сказал:
Code:
  1. lib.lib: invalid module at offset 630. Skipping.
  2. lib.lib: invalid module at offset 15560. Skipping.
  3. lib.lib: skipped 2, total 2
Попробовал стандартную либу msvcmrt.lib из Visual Studio 11.0 и Visual Studio 12.0 – та же история.
pcf пропустил 285 модулей из 315...
Это я туплю или pcf из flair66 и flair68 реально не поддерживает даже более менее старые Visual Studio?
В flair examples есть Turbo C v2.00 (1989) и BCC++ v3.1 (1992)
И еще delphi1 .. 7.00

В IDA 6.6\sig есть vc7atl.sig и vc8atl.sig
Если это сигнатуры для VisualС 7 и 8, то это примерно годы 2002 - 2005
А для более новых VС сигнатуры даже для стандартных либ не поставляются?
И сгенерить их с помощью pcf тоже нельзя...
Или я конкретно не догоняю?

Могу пару стандартных либ выложить из Visual Studio 12.0, если кто сам хочет попробовать!


 eXeL@B —› Основной форум —› FLIRT + FLAIR = ?
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати