Как обнаруживаются недокументированные функции? [закрыто]

11


Мне всегда было интересно, как найти недокументированный / приватный API?

Пример недокументированного / закрытого API Apple , Play Station , Windows Phone 7 , ядра Win32 , Windows API , скрытого обратного вызова и т. Д.

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

Где я могу прочитать о том, как люди изучают частные API и методы обратного инжиниринга, раскрывающие секреты, которые обычно объясняются в документации API?

спасибо,

очь
источник

Ответы:

7

Есть несколько способов, которые я могу придумать:

  1. Отражение. Здесь вы получаете объект и просите его раскрыть информацию о себе, такую ​​как методы, свойства и т. Д. С помощью правильных опций (в зависимости от языка) вы можете раскрыть информацию, которая не является «общедоступной».

  2. Декомпилирование. Это восстанавливает (версия) источника, используемого для создания двоичного файла. Опять же, это может раскрыть непубличные части API.

Вы также можете добавить «случайно» в список. Работающий вызов или команда с ошибкой или экран справки, который показывает слишком много информации.

ChrisF
источник
2
Вы можете добавить в список случайно . Да, это происходит реже, но бывает;) Особенно, когда владельцы API провоцируют аварию.
1
@Pierre - хорошая мысль.
ChrisF
Кроме того, общие библиотеки подписей. Это связано с декомпиляцией, но экспортируемые функции в файле .dll / .dylib / .so можно просматривать с помощью официальных инструментов (проводник зависимостей в Visual Studio, nm в Unixes)
Крис Долан,
4

Обычные инструменты, которые вы используете для разработки программного обеспечения :)

Обычно недокументированные API-функции - это просто недокументированные и не очень тщательно скрытые секреты.

Разработка API, ориентированного на будущее, сложна - вы можете легко добавлять вещи в API, но действительно сложно что-либо удалить (не нарушая некоторые клиенты). Таким образом, вы очень осторожны при добавлении чего-либо в API. Вот почему в API могут быть некоторые дополнительные функции (для тестирования, в разработке, для быстрого взлома?), Которые не документированы и не имеют гарантий работы или присутствия в следующей версии.

Эти недокументированные функции можно легко найти, если вы знаете, как работают компиляторы, компоновщики, библиотеки и отладчики (системное программирование). Знание языка ассемблера целевой архитектуры не повредит. Если ваш IDE / компилятор может создавать рабочие исполняемые файлы, вы можете делать это также «вручную», и, не отрываясь от этого пути, вы можете обнаружить некоторые скрытые функции :)

Пример в среде Unix: сценарий, в котором у нас есть документация только для функции printf, и мы хотели бы знать, есть ли другие функции, подобные printf . Ход мыслей может идти примерно так:

1. Проверьте заголовочные файлы

$ grep printf /usr/include/stdio.h | head -5
extern int fprintf (FILE *__restrict __stream,
extern int printf (__const char *__restrict __format, ...);
extern int sprintf (char *__restrict __s,
extern int vfprintf (FILE *__restrict __s, __const char *__restrict __format,
extern int vprintf (__const char *__restrict __format, _G_va_list __arg);

2. Проверьте библиотеку

$ nm /usr/lib/libc.a | grep printf | head -5
         U __asprintf
         U __fwprintf
         U __asprintf
         U __fwprintf
         U __printf_fp

3. Разберите библиотечную функцию

    $ objdump -S /usr/lib/libc.a | grep -A 10 '_fwprintf' | head
00000000 <__fwprintf>:
   0:   55                      push   %ebp
   1:   89 e5                   mov    %esp,%ebp
   3:   8d 45 10                lea    0x10(%ebp),%eax
   6:   83 ec 0c                sub    $0xc,%esp
   9:   89 44 24 08             mov    %eax,0x8(%esp)
   d:   8b 45 0c                mov    0xc(%ebp),%eax
  10:   89 44 24 04             mov    %eax,0x4(%esp)
  14:   8b 45 08                mov    0x8(%ebp),%eax
  17:   89 04 24                mov    %eax,(%esp)

Или что-то вроде того...

Maglob
источник
2

Отказ от ответственности: мне нравится ответ ChrisF. Я думаю, это исключает пару подходов. Если это будет размещено в комментариях к ответу, как они освещены, я удалю свой ответ.

Это может как бы попасть в декомпиляцию:

Найти другие недокументированные API также можно с помощью отладки предоставленного поставщиком инструмента, который делает то, что вам нужно, и отслеживания межбиблиотечных вызовов. Таким образом, вы можете иметь представление о том, какой тип данных отправляется куда.

Затем можно написать другие «пользовательские» инструменты для работы с этими недокументированными API, используя python и CTYPES, или ruby ​​с его версией чего-то похожего, пока вы точно не выясните, что он делает или размышляет о сбоях. Эта тема в минимальной глубине освещена Аароном Портным в: http://pentest.cryptocity.net/reverse-engineering/ и некоторых других его выступлениях на конференциях (кажется, я помню, что он говорит об этом прямо во время выступления в Бразилии ). Это связано с RE, но я не думаю, что это просто общее RE. Примечание: видео на pentest.cryptocity.net не являются просто этой темой. Они охватывают другие области более глубоко, это только затронуто. Я думаю, потому что часто это то, что тестеры охраняют, поскольку «точные шаги будут выдавать наши секреты».

Спасибо, что прочитали любые отзывы приветствуются.

редактирование: один инструмент, который может оказаться полезным для этого на стороне Windows, описан здесь минимально: http://breakingcode.wordpress.com/2010/08/24/winappdbg-1-4-is-out/
вызов угона для толстой Java клиенты, чтобы узнать о пользовательских сетевых услугах, описаны здесь:
http://www.securitytube.net/JavaSnoop-How-to-hack-anything-written-in-Java-video.aspx

этот последний только минимально релевантен, но может оказаться уместным к тому, куда в конечном счете уходит спрашивающий. используя API, которые вам не нужны ... что угодно.

RobotHumans
источник
Добавление вашего собственного ответа, а не предоставление дополнительной / другой информации - это хорошо - в этом суть Stack Exchange.
ChrisF
@ChrisF спасибо за разъяснения. это только казалось, что это могло быть покрыто задним ходом. я думал, что это может иметь более конкретную запись другого возможного метода / более специфического подмножества реверсирования (реверсирование может охватывать поиск символов, на которые нет ссылок в MSDN, и т. д.)
RobotHumans
-2

Хакинг звучит довольно романтично, индустриальный шпионаж, утечки, взятки, воровство и просто удача - нет. Я бы не стал их считать.

Bitsplitter
источник