¿Cómo se descubren las funciones indocumentadas? [cerrado]

11


Siempre me he preguntado cómo encontrar API indocumentada / privada .

Ejemplo: la API indocumentada / privada de Apple , Play Station , Windows Phone 7 , Win32 Kernel , API de Windows , devolución de llamada oculta , etc.

¿Qué herramientas usan los hackers para conocer las funciones privadas y no documentadas?

¿Dónde puedo leer sobre las experiencias de las personas profundizando en API privadas y técnicas de ingeniería inversa que revelan los secretos que normalmente se explican en la documentación de API?

gracias
A

elp
fuente

Respuestas:

7

Hay un par de maneras en que puedo pensar:

  1. Reflexión. Aquí obtiene un objeto y le pide que revele información sobre sí mismo, como métodos, propiedades, etc. Con las opciones correctas (según el idioma) puede revelar información que no es "pública".

  2. Descompilación Esto regenera (una versión) de la fuente utilizada para crear el binario. Nuevamente, esto podría revelar partes no públicas de la API.

También puede agregar "por accidente" a la lista. Una llamada / comando mal escrito que funciona, o una pantalla de ayuda que revela demasiada información.

ChrisF
fuente
2
Podría agregar a la lista Por accidente . Sí, es menos frecuente, pero sucede;) Especialmente cuando los propietarios de API provocan el accidente.
1
@Pierre - buen punto.
ChrisF
Además, las firmas de la biblioteca compartida. Esto está relacionado con la descompilación, pero las funciones exportadas en un archivo .dll / .dylib / .so se pueden explorar con herramientas oficiales (explorador de dependencias en Visual Studio, nm en Unixes)
Chris Dolan
4

Herramientas normales que utiliza para desarrollar software :)

Por lo general, las funciones de API indocumentadas son solo eso, indocumentados , y no secretos ocultos realmente cuidadosos.

Diseñar una API a prueba de futuro es difícil: puede agregar fácilmente cosas a la API, pero es realmente difícil eliminar cualquier cosa (sin romper algunos clientes). Entonces, tienes mucho cuidado al agregar algo a la API. Es por eso que puede haber algunas funciones adicionales (para pruebas, en desarrollo, ¿un truco rápido?) En API, que no están documentadas y sin garantías de trabajar o estar en la próxima versión.

Estas funciones no documentadas se pueden encontrar fácilmente, dado que sabe cómo funcionan los compiladores, vinculadores, bibliotecas y depuradores (material de programación del sistema). Conocer el lenguaje ensamblador de la arquitectura de destino no hará daño. Si su IDE / compilador puede construir ejecutables que funcionen, también puede hacerlo "manualmente", y manteniendo los ojos abiertos en esa ruta puede descubrir algunas características ocultas :)

Ejemplo en un entorno Unix: un escenario en el que tenemos documentación solo para la función printf y nos gustaría saber si hay otras funciones similares a printf . El tren de pensamiento podría ser algo como:

1. Verifique los archivos de encabezado

$ 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. Comprobar biblioteca

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

3. Desmontar la función de biblioteca

    $ 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)

O algo así...

Maglob
fuente
2

descargo de responsabilidad: me gusta la respuesta de ChrisF. Sí deja de lado un par de enfoques, creo. Si se coloca en los comentarios de la respuesta cómo están cubiertos, eliminaré mi respuesta.

Podría caer en descompilación:

Encontrar otras API indocumentadas también puede ser a través de la depuración de una herramienta suministrada por el proveedor que hace algo de lo que desea y rastrea las llamadas entre bibliotecas. De esta manera, puede tener una idea de qué tipo de datos se envían a dónde.

Luego, se pueden escribir otras herramientas "personalizadas" para jugar con estas API indocumentadas usando python y CTYPES o ruby ​​con su versión de algo similar hasta que descubra exactamente lo que está haciendo o difuminando los bloqueos. Aaron Portnoy cubre este tema en profundidad mínima en: http://pentest.cryptocity.net/reverse-engineering/ y algunas de sus otras charlas en conferencias (me parece recordar que habla sobre eso directamente en una charla en Brasil ) Está relacionado con RE, pero no creo que sea exactamente RE general. Nota: los videos en pentest.cryptocity.net no son SOLO este tema. Cubren otras áreas con más profundidad, esto solo se toca. Creo que porque a menudo es algo que los probadores guardan como "los pasos exactos serían revelar nuestros secretos".

Gracias por leer cualquier comentario apreciado.

editar: una herramienta que puede resultar útil para esto en el lado de Windows se cubre mínimamente aquí: http://breakingcode.wordpress.com/2010/08/24/winappdbg-1-4-is-out/
secuestro de llamadas para Java grueso Los clientes para utilizar servicios de red personalizados están cubiertos aquí:
http://www.securitytube.net/JavaSnoop-How-to-hack-anything-written-in-Java-video.aspx

el último solo es mínimamente relevante, pero podría resultar pertinente para el destino final del interrogador. usando API que no tienes que hacer ... lo que sea.

RobotHumanos
fuente
Agregar su propia respuesta que proporciona más / información diferente es bueno: de eso se trata un intercambio de pila.
ChrisF
@ ChrisF gracias por la aclaración. simplemente parecía que podría haber sido cubierto por la inversión. pensé que podría tener una notación más específica de otro método posible / un subconjunto más específico de inversión (la inversión podría cubrir la búsqueda de símbolos no referenciados en el MSDN también, etc.).
RobotHumans
-2

La piratería suena bastante romántica, el espionaje industrial, las fugas, los sobornos, el robo y la simple suerte no. Sin embargo, no los descartaría.

Bitsplitter
fuente