Bagaimana fungsi tidak berdokumen ditemukan? [Tutup]

11


Saya selalu bertanya-tanya bagaimana Anda menemukan API tanpa dokumen / pribadi ?

Contohnya Apple tanpa dokumen / API pribadi, Play Station , Windows Phone 7 , Win32 Kernel , Windows API , panggilan balik tersembunyi , dll ...

Alat apa yang digunakan peretas untuk mencari tahu tentang fungsi pribadi dan tidak terdokumentasi?

Di mana saya bisa membaca tentang pengalaman orang-orang yang menggali API pribadi dan membalikkan teknik rekayasa yang mengungkapkan rahasia yang biasanya dijelaskan dalam dokumentasi API?

terima kasih,
A

elp
sumber

Jawaban:

7

Ada beberapa cara yang dapat saya pikirkan:

  1. Refleksi. Di sini Anda mendapatkan objek dan memintanya untuk mengungkapkan informasi tentang dirinya, seperti metode, properti, dll. Dengan opsi yang tepat (tergantung pada bahasa) Anda dapat mengungkapkan informasi yang bukan "publik".

  2. Dekompilasi. Ini meregenerasi (versi) dari sumber yang digunakan untuk membuat biner. Sekali lagi ini mungkin mengungkapkan bagian non publik API.

Anda juga dapat menambahkan "secara tidak sengaja" ke daftar. Panggilan / perintah salah eja yang berfungsi, atau layar bantuan yang mengungkapkan terlalu banyak informasi.

ChrisF
sumber
2
Anda dapat menambah daftar secara tidak sengaja . Ya, ini lebih jarang, tetapi itu terjadi;) Terutama ketika pemilik API memprovokasi kecelakaan.
1
@Pierre - poin bagus.
ChrisF
Juga, tanda tangan perpustakaan bersama. Ini terkait dengan dekompilasi, tetapi fungsi yang diekspor dalam file .dll / .dylib / .so dapat ditelusuri dengan alat resmi (penjelajah ketergantungan di Visual Studio, nm di Unixes)
Chris Dolan
4

Alat normal yang Anda gunakan untuk mengembangkan perangkat lunak :)

Biasanya fungsi-fungsi API tidak terdokumentasi hanya itu, rahasia-rahasia tidak terdokumentasi , dan tidak benar-benar tersembunyi.

Mendesain API bukti di masa depan sulit - Anda dapat dengan mudah menambahkan hal-hal ke dalam API, tetapi sangat sulit untuk menghapus apa pun (tanpa menghancurkan beberapa klien). Jadi, Anda sangat berhati-hati saat menambahkan sesuatu ke API. Itu sebabnya mungkin ada beberapa fungsi tambahan (untuk pengujian, dalam pengembangan, peretasan cepat?) Di API, yang tidak didokumentasikan dan tanpa jaminan bekerja atau berada di sana di versi berikutnya.

Fungsi-fungsi tidak berdokumen ini dapat ditemukan dengan agak mudah, mengingat Anda tahu bagaimana kompiler, tautan, pustaka, dan debugger berfungsi (hal-hal pemrograman sistem). Mengetahui bahasa assembly dari arsitektur target tidak ada salahnya. Jika IDE / kompiler Anda dapat membangun executable yang berfungsi, Anda dapat melakukannya "secara manual" juga, dan dengan tetap membuka mata di jalur itu Anda mungkin menemukan beberapa fitur tersembunyi :)

Contoh dalam lingkungan Unix: Skenario di mana kita memiliki dokumentasi hanya untuk fungsi printf dan ingin tahu apakah ada beberapa fungsi seperti printf lainnya . Kereta pikiran mungkin seperti:

1. Periksa file header

$ 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. Periksa perpustakaan

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

3. Bongkar fungsi perpustakaan

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

Atau semacam itu...

Maglob
sumber
2

disclaimer: Saya suka jawaban ChrisF. Itu tidak meninggalkan beberapa pendekatan, saya pikir. Jika ditempatkan di komentar untuk menjawab bagaimana mereka tercakup, saya akan menghapus jawaban saya.

Itu mungkin semacam jatuh di bawah dekompilasi:

Menemukan API tidak berdokumen lainnya juga dapat melalui debugging alat yang disediakan vendor yang melakukan apa yang Anda inginkan dan melacak panggilan antar perpustakaan. Dengan cara ini, Anda dapat mengetahui jenis data apa yang dikirim ke mana.

Alat "kustom" lainnya kemudian dapat ditulis untuk bermain dengan API tidak berdokumen ini menggunakan python dan CTYPES atau ruby ​​dengan versi sesuatu yang serupa sampai Anda mengetahui persis apa yang dilakukannya atau mengelabui crash. Topik ini dibahas secara mendalam oleh Aaron Portnoy di: http://pentest.cryptocity.net/reverse-engineering/ dan beberapa pembicaraan lainnya di konferensi (Saya ingat dia berbicara tentang hal itu secara langsung di sebuah pembicaraan di Brasil ). Ini terkait dengan RE, tapi saya tidak berpikir itu hanya RE biasa saja. Catatan: video di pentest.cryptocity.net bukan hanya topik ini. Mereka menutupi area lain secara lebih mendalam, ini baru disentuh. Saya pikir karena seringkali sesuatu yang penguji jaga sebagai "langkah-langkah pasti akan memberikan rahasia kita".

Terima kasih telah membaca umpan balik apa pun yang dihargai.

sunting: satu alat yang terbukti bermanfaat untuk ini di sisi windows dibahas minimal di sini: http://breakingcode.wordpress.com/2010/08/24/winappdbg-1-4-is-out/
panggilan pembajakan untuk java tebal klien untuk mengaburkan layanan jaringan kustom dicakup di sini: http://www.securitytube.net/JavaSnoop-Bagaimana- untuk-hack-semua-ditulis-dalam-Java-video.aspx

yang terakhir hanya relevan minimal, tetapi bisa membuktikan relevan ke mana si penanya akhirnya pergi. menggunakan API yang tidak Anda miliki untuk melakukan ... apa pun.

RobotHumans
sumber
Menambahkan jawaban Anda sendiri dari pada memasok lebih banyak / informasi yang berbeda itu baik - itulah tujuan dari Stack Exchange.
ChrisF
@ ChrisF terima kasih atas klarifikasi. sepertinya itu mungkin tertutupi oleh pembalikan. saya pikir itu mungkin menanggung notasi yang lebih spesifik dari metode lain yang mungkin / subset pembalikan yang lebih spesifik (pembalikan dapat mencakup pencarian simbol yang tidak dirujuk dalam MSDN juga dll).
RobotHumans
-2

Peretasan terdengar sangat romantis, spionase industri, kebocoran, suap, pencurian, dan keberuntungan tidak. Saya tidak akan menghitungnya.

Bitsplitter
sumber