Como são descobertas as funções não documentadas? [fechadas]

11


Eu sempre me perguntei como você encontra API privada / não documentada ?

Exemplo da API não documentada / privada da Apple , Play Station , Windows Phone 7 , Kernel do Win32 , API do Windows , retorno de chamada oculto , etc.

Quais ferramentas os hackers usam para descobrir funções privadas e não documentadas?

Onde posso ler sobre as experiências das pessoas que pesquisam APIs privadas e técnicas de engenharia reversa que revelam os segredos normalmente explicados na documentação da API?

obrigado,
A

elp
fonte

Respostas:

7

Existem algumas maneiras em que posso pensar:

  1. Reflexão. Aqui você obtém um objeto e pede que ele revele informações sobre si mesmo, como métodos, propriedades etc. Com as opções corretas (dependendo do idioma), você pode revelar informações que não são "públicas".

  2. Descompilação. Isso gera novamente (uma versão) da fonte usada para criar o binário. Novamente, isso pode revelar partes não públicas da API.

Você também pode adicionar "por acidente" à lista. Uma chamada / comando incorreto que funciona ou uma tela de ajuda que revela muitas informações.

ChrisF
fonte
2
Você pode adicionar à lista Por acidente . Sim, é menos frequente, mas acontece;) Especialmente quando os proprietários da API provocam o acidente.
1
@ Pierre - bom ponto.
ChrisF
Além disso, assinaturas de biblioteca compartilhada. Isto está relacionado com a descompilação, mas funções exportado em um / arquivo .dll .dylib / .so são browseable com ferramentas oficiais (explorador dependência no Visual Studio, nm em Unixes)
Chris Dolan
4

Ferramentas normais que você usa para desenvolver software :)

Normalmente, as funções da API não documentadas são apenas isso, não documentadas e não realmente escondidas com cuidado.

Criar uma API à prova do futuro é difícil - você pode facilmente adicionar itens à API, mas é realmente difícil remover qualquer coisa (sem quebrar alguns clientes). Portanto, tenha muito cuidado ao adicionar qualquer coisa à API. É por isso que pode haver algumas funções extras (para testar, em desenvolvimento, um hack rápido?) Na API, que não estão documentadas e sem garantias de trabalhar ou estar presente na próxima versão.

Essas funções não documentadas podem ser encontradas com alguma facilidade, desde que você saiba como os compiladores, vinculadores, bibliotecas e depuradores funcionam (material de programação do sistema). Saber a linguagem assembly da arquitetura de destino não será prejudicial. Se o seu IDE / compilador puder criar executáveis ​​funcionais, você poderá fazer isso "manualmente" também e, mantendo os olhos abertos nesse caminho, poderá descobrir alguns recursos ocultos :)

Exemplo no ambiente Unix: um cenário em que temos documentação apenas para a função printf e gostaríamos de saber se existem outras funções semelhantes a printf . Linha de pensamento pode ser algo como:

1. Verifique os arquivos de cabeçalho

$ 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. Verifique a biblioteca

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

3. Desmonte a função 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)

Ou algo assim...

Maglob
fonte
2

isenção de responsabilidade: eu gosto da resposta de ChrisF. Isso deixa de fora algumas abordagens, eu acho. Se ele for colocado nos comentários da resposta como eles são cobertos, excluirei minha resposta.

Pode cair na descompilação:

Encontrar outras APIs não documentadas também pode ser através da depuração de uma ferramenta fornecida pelo fornecedor que faz o que você deseja e do rastreamento de chamadas entre bibliotecas. Dessa forma, você pode ter uma idéia de que tipo de dados é enviado para onde.

Outras ferramentas "personalizadas" podem ser escritas para brincar com essas APIs não documentadas usando python e CTYPES ou ruby, com sua versão de algo semelhante até você descobrir exatamente o que está fazendo ou fuzilando por falhas. Este tópico é abordado em profundidade mínima por Aaron Portnoy em: http://pentest.cryptocity.net/reverse-engineering/ e em algumas de suas outras palestras em conferências (lembro-me de que ele fala diretamente sobre isso em uma palestra no Brasil). ) Está relacionado ao ER, mas não acho que seja exatamente o ER geral. Nota: os vídeos no pentest.cryptocity.net não são APENAS este tópico. Eles cobrem outras áreas com mais profundidade, isso é apenas abordado. Eu acho que porque muitas vezes é algo que os testadores guardam como "os passos exatos seriam revelar nossos segredos".

Obrigado por ler qualquer comentário apreciado.

edit: uma ferramenta que pode ser útil para isso no lado do Windows é abordada minimamente aqui: http://breakingcode.wordpress.com/2010/08/24/winappdbg-1-4-is-out/
chamada de seqüestro para java espesso os clientes para confundir serviços de rede personalizados são abordados aqui:
http://www.securitytube.net/JavaSnoop-How-to-hack-anything-written-in-Java-video.aspx

esse último é apenas minimamente relevante, mas pode ser pertinente para onde o questionador está indo. usando APIs que você não possui para fazer ... tanto faz.

RobotHumans
fonte
Adicionar sua própria resposta do que fornecer mais / informações diferentes é bom - é disso que se trata um Stack Exchange.
ChrisF
@ Chrishr obrigado pelo esclarecimento. apenas parecia que poderia ter sido coberto pela reversão. Eu pensei que poderia suportar uma notação mais específica de outro método possível / subconjunto mais específico de reversão (a reversão poderia abranger a pesquisa de símbolos não mencionados no MSDN, etc.).
precisa saber é o seguinte
-2

Hacking parece bastante romântico, espionagem industrial, vazamentos, subornos, roubo e pura sorte não. Eu não os contaria embora.

Bitsplitter
fonte