Strumenti normali che utilizzi per sviluppare software:)
Solitamente le funzioni API non documentate sono solo quelle, non documentate e non nascoste con cura.
Progettare un'API a prova di futuro è difficile - puoi facilmente aggiungere cose nell'API, ma è davvero difficile rimuovere qualsiasi cosa (senza rompere alcuni client). Quindi, stai molto attento quando aggiungi qualcosa all'API. Ecco perché potrebbero esserci alcune funzioni extra (per testare, in fase di sviluppo, un attacco rapido?) In API, che non sono documentate e non hanno garanzie di lavorare o di essere presenti nella prossima versione.
Queste funzioni non documentate possono essere trovate abbastanza facilmente, dato che sai come funzionano compilatori, linker, librerie e debugger (materiale di programmazione di sistema). Sapere che il linguaggio di assemblaggio dell'architettura di destinazione non farà male. Se il tuo IDE / compilatore può compilare eseguibili funzionanti, puoi farlo anche manualmente, e tenendo gli occhi aperti su quel percorso potresti scoprire alcune caratteristiche nascoste:)
Esempio in ambiente Unix: uno scenario in cui abbiamo documentazione solo per la funzione printf e vorrei sapere se ci sono altre funzioni printf -like. Il treno del pensiero potrebbe essere qualcosa del tipo:
1. Controlla i file di intestazione
$ 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. Controlla libreria
$ nm /usr/lib/libc.a | grep printf | head -5
U __asprintf
U __fwprintf
U __asprintf
U __fwprintf
U __printf_fp
3. Disassembla la funzione di libreria
$ 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 qualcosa del genere ...