Curl-impersonate: build curl khusus yang dapat meniru browser utama
(github.com/lwthiker)curl-impersonate
Build khusus dari curl yang dapat meniru browser tertentu, termasuk Chrome, Edge, Safari, dan Firefox. curl-impersonate dapat melakukan handshake TLS dan HTTP yang sama persis dengan browser asli. Dapat digunakan sebagai alat baris perintah atau diintegrasikan sebagai library.
Mengapa ini diperlukan?
- Saat klien HTTP berkomunikasi dengan situs web TLS, langkah pertama yang dilakukan adalah handshake TLS. Pesan pertama pada tahap ini disebut Client Hello.
- Pesan Client Hello yang dihasilkan oleh sebagian besar klien dan library HTTP sangat berbeda dari browser asli.
- Jika server menggunakan HTTP/2, selain handshake TLS juga diperlukan handshake HTTP/2, dan pengaturan yang dipertukarkan pada tahap ini juga berbeda dari browser asli.
- Karena alasan ini, beberapa layanan web mengidentifikasi klien melalui handshake TLS dan HTTP, lalu menyajikan konten yang berbeda untuk klien yang berbeda.
- Metode ini dikenal sebagai TLS fingerprinting dan HTTP/2 fingerprinting, yang membuat web menjadi kurang terbuka, kurang privat, dan lebih membatasi untuk klien web tertentu.
- curl yang dimodifikasi di repositori ini membuat handshake TLS dan HTTP tampak persis sama dengan browser asli.
Bagaimana cara kerjanya?
curldimodifikasi secara signifikan agar terlihat seperti browser.- curl dikompilasi dengan nss, library TLS yang digunakan Firefox, dan versi Chrome dikompilasi dengan BoringSSL, library TLS milik Google.
- Cara mengonfigurasi berbagai ekstensi TLS dan opsi SSL diubah.
- Dukungan untuk ekstensi TLS baru ditambahkan.
- Pengaturan curl untuk koneksi HTTP/2 diubah.
- Menjalankan curl dengan flag non-default seperti
--ciphers,--curves, dan beberapa header-H.
Browser yang didukung
- Dapat meniru berbagai versi Chrome, Edge, Firefox, dan Safari.
- Tersedia skrip wrapper untuk setiap browser guna menjalankan
curl-impersonate.
Penggunaan dasar
- Untuk setiap browser yang didukung, tersedia skrip wrapper yang menjalankan
curl-impersonatedengan header dan flag yang diperlukan. - Contoh:
curl_chrome116 https://www.wikipedia.org
Dokumentasi
- Dokumentasi tambahan tersedia di direktori docs/.
Instalasi
curl-impersonatememiliki dua versi karena alasan teknis. Ada versi chrome yang meniru Chrome, Edge, dan Safari, serta versi firefox yang meniru Firefox.- Binary yang sudah dikompilasi untuk Linux dan macOS tersedia di halaman GitHub Releases.
Penggunaan lanjutan
libcurl-impersonate
libcurl-impersonate.soadalah libcurl yang dikompilasi dengan perubahan yang sama seperticurl-impersonateversi baris perintah.- Menyediakan fungsi API tambahan
curl_easy_impersonate.
Menggunakan variabel lingkungan CURL_IMPERSONATE
- Pada aplikasi yang sudah menggunakan
libcurl, library yang ada dapat diganti saat runtime menggunakanLD_PRELOAD. - Dengan menetapkan variabel lingkungan
CURL_IMPERSONATE, semua opsi dapat diatur secara otomatis.
Kontribusi
- Anda dapat berkontribusi dengan memeriksa issue yang terbuka dan membuka pull request yang menyertakan perubahan.
Sponsor
- Ada sponsor yang membantu membuka dan memelihara proyek ini. Jika ingin menjadi sponsor, Anda dapat menghubungi langsung.
1 komentar
Komentar Hacker News
Pujian untuk penulis kode dan pengunggahnya. Saya sedang terlibat dalam proyek browser yang menggunakan OpenSSL, dan sempat berpikir harus menganalisisnya sendiri lewat WireShark. Sekarang ada banyak materi yang bisa dijadikan referensi. Jika penggunaan OpenSSL yang paling umum adalah Python, maka opsi spoofing TLS Firefox adalah hal yang wajib di era Cloudflare.
Semoga Ladybird mendapat sorotan di masa depan. Saat ini ia memakai cURL untuk jaringan. cURL mungkin masih punya beberapa keterbatasan (misalnya tidak bisa menangani WebSockets di h2). Namun jika ada mesin browser baru bermunculan, lalu lintas yang sah bisa memiliki fingerprint yang sama dengan cURL bawaan.
Saya penasaran apakah nilai IP_TTL sudah disetel sesuai platform. Jika belum, itu masih bisa meninggalkan fingerprint di lapisan IP. Jika nilai TTL di lapisan IP kurang dari 64, itu menunjukkan bahwa ia tidak berjalan di Windows modern, atau berjalan di perangkat Windows modern yang TTL bawaannya telah diubah. TTL paket di Windows modern secara bawaan dimulai dari 128, sementara kebanyakan platform lain dimulai dari 64. Platform lain tidak bermasalah untuk komunikasi internet, jadi paket IP dari Windows modern akan selalu terlihat dari jarak jauh dengan TTL 64 atau lebih.
Jika TLS handshake terlihat berbeda, saya penasaran apakah dimungkinkan ada filter setingkat nginx yang bisa menyaring lalu lintas yang mengaku sebagai browser web (misalnya user agent Chrome). Ini mencakup sebagian besar lalu lintas bot berbahaya, dan saya ingin memblokirnya.
Saya selalu punya perasaan campur aduk saat hal seperti ini muncul di sini. Di satu sisi, bagus untuk memberi tahu orang-orang bahwa kemandirian dan semangat membangkang masih hidup. Namun, seperti proyek "freedom is unstable", jika ini menarik perhatian yang tidak diinginkan, hasilnya bisa lebih buruk bagi orang-orang yang bergantung padanya. Menulis browser itu sulit, dan para pemain lama terus membuatnya makin sulit.
Alat ini sangat berguna bila digabungkan dengan skrip bash kecil dan gnu parallel untuk memetakan endpoint https dalam pekerjaan red team. Saya memakainya pada alamat-alamat dalam suatu rentang yang hanya merespons ke browser yang sesuai. Anda bisa memakai switch curl biasa seperti
-Huntuk spoofing header.Saat Show HN dulu tautan
Sekarang saya menunggu versi MCP :)
Saya rindu masa-masa ketika situs web hanya secara sederhana mengizinkan atau memblokir bot.