3 puan yazan GN⁺ 2025-04-04 | 1 yorum | WhatsApp'ta paylaş

curl-impersonate

Belirli tarayıcıları taklit edebilen özel bir curl derlemesidir; Chrome, Edge, Safari ve Firefox'u taklit edebilir. curl-impersonate, gerçek tarayıcılarla aynı TLS ve HTTP handshake süreçlerini gerçekleştirebilir. Komut satırı aracı olarak kullanılabilir veya bir kütüphane olarak entegre edilebilir.

Neden gerekli?

  • Bir HTTP istemcisi TLS web siteleriyle iletişim kurduğunda, ilk olarak TLS handshake işlemini gerçekleştirir. Bu sıradaki ilk mesaja Client Hello denir.
  • Çoğu HTTP istemcisi ve kütüphanesinin oluşturduğu Client Hello mesajı, gerçek tarayıcılardan oldukça farklıdır.
  • Sunucu HTTP/2 kullanıyorsa, TLS handshake'e ek olarak HTTP/2 handshake de gerekir ve bu sırada değiş tokuş edilen ayarlar da gerçek tarayıcılardan farklıdır.
  • Bu nedenle bazı web servisleri, TLS ve HTTP handshake üzerinden istemciyi tanımlar ve farklı istemcilere farklı içerik sunar.
  • Bu yöntemler TLS fingerprinting ve HTTP/2 fingerprinting olarak bilinir; web'i daha az açık, daha az mahrem ve belirli web istemcileri için daha kısıtlı hale getirir.
  • Bu depodaki değiştirilmiş curl, TLS ve HTTP handshake'in gerçek tarayıcılarla tam olarak aynı görünmesini sağlar.

Nasıl çalışır?

  • curl, tarayıcı gibi görünecek şekilde ciddi ölçüde değiştirilmiştir.
  • curl, Firefox'un kullandığı TLS kütüphanesi olan nss ile derlenir; Chrome sürümü ise Google'ın TLS kütüphanesi olan BoringSSL ile derlenir.
  • Çeşitli TLS uzantıları ve SSL seçeneklerinin yapılandırılma biçimi değiştirilmiştir.
  • Yeni TLS uzantıları desteği eklenmiştir.
  • HTTP/2 bağlantıları için curl ayarları değiştirilmiştir.
  • curl, --ciphers, --curves ve bazı -H header'ları gibi varsayılan olmayan bayraklarla çalıştırılır.

Desteklenen tarayıcılar

  • Chrome, Edge, Firefox ve Safari'nin çeşitli sürümleri taklit edilebilir.
  • Her tarayıcı için curl-impersonate çalıştıran wrapper script'ler sağlanır.

Temel kullanım

  • Desteklenen her tarayıcı için, gerekli header ve bayraklarla curl-impersonate çalıştıran bir wrapper script vardır.
  • Örnek: curl_chrome116 https://www.wikipedia.org

Belgeler

  • Ek belgeler docs/ dizininde bulunur.

Kurulum

  • curl-impersonate, teknik nedenlerle iki sürüme sahiptir. Chrome, Edge ve Safari'yi taklit eden chrome sürümü ile Firefox'u taklit eden firefox sürümü vardır.
  • Linux ve macOS için önceden derlenmiş binary'ler GitHub releases sayfasında sunulur.

İleri seviye kullanım

libcurl-impersonate

  • libcurl-impersonate.so, komut satırı curl-impersonate ile aynı değişikliklerle derlenmiş bir libcurl'dür.
  • Ek API fonksiyonu curl_easy_impersonate sağlar.

CURL_IMPERSONATE ortam değişkenini kullanma

  • Halihazırda libcurl kullanan uygulamalarda, LD_PRELOAD ile mevcut kütüphane çalışma zamanında değiştirilebilir.
  • CURL_IMPERSONATE ortam değişkeni ayarlanarak tüm seçenekler otomatik olarak yapılandırılabilir.

Katkı

  • Açık issue'ları inceleyip, değişikliklerinizi içeren bir pull request açarak katkıda bulunabilirsiniz.

Sponsorlar

  • Projenin açık tutulmasına ve sürdürülmesine yardımcı olan sponsorlar vardır. Sponsor olmak istiyorsanız doğrudan iletişime geçebilirsiniz.

1 yorum

 
GN⁺ 2025-04-04
Hacker News yorumları
  • Kod yazarı ve gönderiyi paylaşan kişiye övgüler. OpenSSL kullanan bir tarayıcı projesinde çalışıyorum ve bunu WireShark ile bizzat analiz etmem gerekeceğini düşünüyordum. Artık başvurabileceğim bolca kaynak var. OpenSSL'in en yaygın kullanım alanı Python ise, Cloudflare çağında Firefox TLS spoofing seçeneği vazgeçilmezdir.

    • Bu projenin, orijinalinden daha iyi olan ve aktif olarak bakımı yapılan bir fork'u var: curl-impersonate
    • Python kullananlar için bu fork'un Python binding'i de var: curl_cffi
  • Ladybird'ün gelecekte ilgi görmesini umuyorum. Şu anda ağ iletişimi için cURL kullanıyor. cURL'ün hâlâ bazı sınırlamaları olabilir (örneğin WebSockets'i h2 üzerinde işleyememesi). Ancak yeni bir tarayıcı motoru ortaya çıkarsa, meşru trafik varsayılan cURL ile aynı fingerprint'e sahip olabilir.

  • IP_TTL değerini platforma uygun ayarlayıp ayarlamadıklarını merak ediyorum. Ayarlamadılarsa, IP katmanında da bir miktar fingerprint bırakabilir. IP katmanındaki TTL değeri 64'ün altındaysa, bu onun modern Windows'ta çalışmadığını ya da varsayılan TTL'i değiştirilmiş modern bir Windows cihazında çalıştığını gösterir. Modern Windows'ta paket TTL'i varsayılan olarak 128'den başlar, diğer çoğu platformda ise 64'ten başlar. Diğer platformlarda internet iletişiminde sorun olmadığı için, modern Windows'un IP paketleri uzaktan bakıldığında her zaman 64 veya üzeri TTL ile görünür.

  • TLS handshake farklı görünüyorsa, kendisini web tarayıcısı (ör. Chrome user agent) olarak tanıtan trafiği filtreleyebilen nginx düzeyinde bir filtre mümkün mü diye merak ediyorum. Kötü niyetli bot trafiğinin büyük kısmı bunu oluşturuyor ve bunu engellemek istiyorum.

  • Böyle şeylerin burada yer alması konusunda hep ikircikli hissediyorum. Bir yandan insanlara bağımsızlığın ve muhalif ruhun hâlâ yaşadığını göstermek güzel. Ama öte yandan, "Özgürlük istikrarsızdır" projelerinde olduğu gibi istenmeyen ilgiyi çekerse, ona bağımlı olan insanlar için daha kötü olabilir. Tarayıcı yazmak zor ve mevcut oyuncular bunu sürekli daha da zorlaştırıyor.

  • Bu araç, küçük bir bash betiği ve gnu parallel ile birleştirildiğinde, red team çalışmalarında https endpoint'lerini haritalamak için çok kullanışlı. Bunu, yalnızca uygun tarayıcıya yanıt veren kapsamdaki adreslerde kullanıyorum. Header spoofing için -H gibi normal curl anahtarlarını kullanabiliyorsunuz.

  • Show HN zamanı: bağlantı

  • Şimdi MCP sürümünü bekliyorum :)

  • Web sitelerinin botlara ya izin verdiği ya da engellediği o basit zamanları özlüyorum.