Як виявляються недокументовані функції? [зачинено]


11


Мені завжди було цікаво, як ти знаходиш незадокументований / приватний API?

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

Які інструменти використовують хакери, щоб дізнатися про приватні та незадокументовані функції?

Де я можу прочитати про досвід людей, що поглинаються в приватні API та зворотні методи інженерії, які розкривають секрети, які зазвичай пояснюються в документації API?

спасибі,
A

Відповіді:


7

Я можу придумати кілька способів:

  1. Рефлексія. Тут ви отримуєте об’єкт і просите його розкрити інформацію про себе, як-от методи, властивості тощо. За допомогою правильних варіантів (залежно від мови) ви можете розкрити інформацію, яка не є "загальнодоступною".

  2. Декомпіляція. Це відновлює (версія) джерела, використовуваного для створення бінарного файлу. Знову це може виявити не публічні частини API.

Ви також можете додати до списку "випадково". Виклик / команда неправильного написання, що працює, або довідковий екран, який розкриває занадто багато інформації.


2
Ви можете додати до списку випадково . Так, це рідше, але трапляється;) Особливо, коли власники API провокують аварію.

1
@Pierre - хороший момент.
ChrisF

Також поділилися підписами бібліотеки. Це пов'язано з декомпіляцією, але експортовані функції у файлі .dll / .dylib / .so можна переглядати за допомогою офіційних інструментів (провідник залежності в Visual Studio, нм в 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)

Або щось подібне ...


2

відмова від відповідальності: Мені подобається відповідь ChrisF. Я думаю, що це залишає кілька підходів, я думаю. Якщо він розміщений у коментарях до відповіді, як вони висвітлюються, я видалю свою відповідь.

Це може щось потрапити під декомпіляцію:

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

Інші "спеціальні" інструменти можуть бути записані для гри з цими незадокументованими API, використовуючи python та CTYPES або рубін з його версією чимось подібним, поки ви не дізнаєтеся, що саме робить або плавиться за збої. Цю тему Аарон Портной висвітлював у мінімальній глибині: 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, яким ви не володієте ... робити все, що завгодно.


Додавання власної відповіді, ніж надання більшої кількості / різної інформації, є корисною - це все, що стосується обміну стеками.
ChrisF

@ChrisF дякую за пояснення. просто здавалося, що це могло бути охоплено реверсом. Я думав, що він може містити більш конкретне позначення іншого можливого методу / більш конкретного підмножини реверсування (реверсування може охоплювати пошук символів, на які також не посилається в MSDN тощо).
RobotHumans

-2

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.