USB descriptor'ları, VID/PID ve descriptor klonlama ne demek
Bir USB HID descriptor'ı neler taşıyor ve hangi alanlar cihazı tanımlıyor, uyumlu fare listeleri neden var ve jenerik bir descriptor klonlanmış birine göre neden daha zayıf bir kimlik.
Kısa cevap
USB HID descriptor'ı, bir cihazın takıldığında kendini anlatma biçimidir: vendor ID'si, product ID'si, metinleri ve rapor biçimi. Descriptor klonlama ise giriş cihazının kendi jenerik kimliği yerine kendisine takılı gerçek farenin kimliğini sunması demektir.
Bu sayfada10
- USB descriptor'ı nedir?
- Hangi descriptor alanları cihazı tanımlıyor
- Yalnızca VID ile PID'yi değiştirmek neden yetmiyor
- Uyumlu fare listeleri neden var
- Descriptor klonlama nasıl çalışıyor
- Fabrika, jenerik ve klonlanmış kimlikler
- Kendi cihazınızı nasıl kontrol edersiniz
- Klonlanmış bir descriptor neyi gizleyemez
- Descriptor hakkında sık sorulanlar
- Kaynaklar
USB descriptor'ı nedir?
Herhangi bir USB cihazı takıldığında host ondan kendini anlatmasını ister ve o yanıt verene kadar başka hiçbir şey olmaz. Cihaz bir dizi descriptor ile yanıtlar. Device descriptor onu kimin yaptığını ve hangi model olduğunu, configuration descriptor kaç arayüzü olduğunu söyler. Interface ve endpoint descriptor'ları her arayüzün ne yaptığını ve ne sıklıkta sorgulanmak istediğini söyler. Klavye, fare ya da oyun kumandası olan her şey ayrıca bir HID report descriptor'ı gönderir; bu da göndereceği mesajların bayt düzenini tam olarak tarif eder. Bu alışverişe numaralandırma deniyor ve milisaniyeler içinde, herhangi bir sürücü yüklenmeden önce oluyor. İşletim sisteminin cihaz hakkında sonradan inandığı her şey o milisaniyelerden geliyor. Giriş cihazınız da aynı sorulara yanıt veriyor ve bunu iyi ya da kötü yapabiliyor.
Hangi descriptor alanları cihazı tanımlıyor
Bu USB belirtiminin tamamı değil, ama host üzerindeki yazılım burada sayılan her alanı özel bir yetki gerekmeden okuyabiliyor.
| Alan | Ne taşıyor | Ne ele veriyor |
|---|---|---|
| idVendor (VID) | USB standartlar kurumunun bir şirkete verdiği 16 bitlik bir sayı | Cihazı kimin yaptığını. Bilinen bir fare üreticisinin VID'si, o fareye sahip bir makinede sıradan durur. Bir geliştirme kartı üreticisinin VID'si ise soru işaretidir |
| idProduct (PID) | Üreticinin belirli bir modele verdiği 16 bitlik bir sayı | Hangi model olduğunu. VID ile PID birlikte cihazın herkese açık kimliğidir; sürücü eşleştirme, telemetri ve envanter araçlarının baktığı çift budur |
| iManufacturer ve iProduct | Metin descriptor'larına işaret eden indeksler; metin olarak geri okunur | Aygıt Yöneticisi'nde görünen, insanın okuyabildiği ad. En sık unutulan alan ve hiçbir farenin yazmayacağı bir şey yazdığında en kolay ele veren alan |
| iSerialNumber | Bir seri numarası metnine isteğe bağlı bir indeks | Birime özel bir tanımlayıcı. Bazı farelerde var, çoğunda yok. Windows, başka bir porta takılan cihazın aynı cihaz olup olmadığına karar verirken bunu kullanır |
| bcdDevice | Üreticinin tanımladığı bir cihaz revizyon numarası | Firmware revizyonunu. Gerçek ürünler bunu sürümler arasında değiştirir. Dünyadaki her birimde hiç değişmeyen bir değer tek başına bir desendir |
| bcdUSB | Cihazın uyguladığını iddia ettiği USB belirtim sürümü | Hangi belirtim dönemini temsil ettiğini ve full speed ya da high speed davranışının diğer iddialarıyla tutarlı olup olmadığını |
| bDeviceClass ve bInterfaceClass | Sınıf kodları. Sınıf 3 HID'dir | Bunun depolama, ses ya da serial çevirici değil, bir insan arayüz aygıtı olduğunu |
| Arayüz sayısı | Tek bir fiziksel cihazın kaç işlev sunduğunu | Bunun bir fare mi, yoksa fare artı serial port artı başka bir şey olan bileşik bir aygıt mı olduğunu. Sade bir fare genelde üç şey birden değildir |
| Endpoint'teki bInterval | Cihazın host'tan istediği sorgulama aralığı | İstediğini iddia ettiği rapor hızını. Descriptor'ında mütevazı bir aralık isteyip çok daha hızlı rapor gönderen bir cihaz kendisiyle çelişiyordur |
| HID report descriptor | Usage page ve usage'lar, eksen alanlarının bit genişliği, tuş sayısı, tekerlek, üreticiye özel koleksiyonlar | Cihazın biçimini. Tuş sayısı, hareket eksenlerinin 8 bit mi 16 bit mi olduğu, yatay tekerlek olup olmadığı ve bu modelde bulunması gereken üreticiye özel bloğun eksik olup olmadığı |
Bu alanların hiçbiri gizli değil ve hiçbirini okumak için sürücü gerekmiyor. Host üzerindeki herhangi bir süreç takılı cihazları listeleyip bu alanların hepsini okuyabiliyor.
Uyarı
Yalnızca VID ile PID'yi değiştirmek neden yetmiyor
İnsanlar vendor ve product ID'lerini kimliğin tamamı sanıyor; bunlar herkesin ilk baktığı şey olsa da aslında pek çok sayı arasından yalnızca ikisi. Bilinen bir fare üreticisinin VID ve PID'sini taşıyan, ama ürün metninde hâlâ bir mikrodenetleyici kartının adı yazan bir cihaz düşünün. Report descriptor'ı o modelde olmayan sayıda tuş tanımlıyor ve endpoint'i o modelin hiç kullanmadığı bir aralık istiyor. Bu, cihaza hiç dokunmamaktan daha kötü görünür, çünkü yarım kopyalanmış bir kimlik tutarlı değildir ve bir denetimin aradığı şey tam olarak tutarsızlıktır. ID'leri değiştiriyorsanız, onlarla birlikte gelen her şeyi de değiştirin.
Uyumlu fare listeleri neden var
Eski geçiş firmware'leri takılı farenin descriptor'ını çözümlemiyordu. Onun yerine sabit profiller taşıyordu: isimleri belli modeller için elle yazılmış bir rapor düzeni tablosu. Listedeki bir fareyi taktığınızda firmware onun raporlarını nasıl çözeceğini ve kimliğini nasıl kopyalayacağını biliyordu. Başka bir şey taktığınızda ya hiçbir şey ya da karmakarışık bir hareket alıyordunuz. Uyumlu fare sorusu buradan geliyor ve o kuşaktan bir firmware'de bu, fare almadan önce kontrol etmeniz gereken gerçek bir kısıt. Yeni firmware'ler düzeni numaralandırma sırasında cihazdan okuyup uyum sağlıyor; MAKCM'in otomatik HID report descriptor çözümlemesi bunun en net örneği. Listelerin güncel cihazlarda önemini yitirmesinin sebebi bu; yine de firmware'inizin hangi kuşaktan olduğunu tahmin etmek yerine kontrol etmelisiniz.
Descriptor klonlama nasıl çalışıyor
Descriptor klonlama iki adımda oluyor. Giriş cihazı host tarafındaki gerçek fareyi numaralandırıp onun kendisi hakkında söylediklerini okuyor, sonra device tarafında oyun PC'sine aynı yanıtları sunuyor. Böylece oyun PC'sinin gördüğü kimlik, gerçekten var olan ve gerçekten takılı olan, yalnızca bir katman geride duran bir fareye ait oluyor. Tam klonlama ID'leri, metinleri, revizyonu, arayüz düzenini ve report descriptor'ı kapsıyor; yanıtlar birbiriyle uyumlu, çünkü hepsi tek bir gerçek cihazdan geliyor. Kısmi klonlama ID'leri kapsıyor ama metinleri ya da report descriptor'ı geçiş cihazının kendi değerlerinde bırakıyor, bu da tutarsızlık sorununu geri getiriyor. Yani herhangi bir firmware hakkında sorulacak yararlı soru VID spoof edip edemediği değil, descriptor'ın ne kadarını kopyaladığı.
İpucu
Fabrika, jenerik ve klonlanmış kimlikler
Fabrika kimliği, geçiş kartının kendini olduğu gibi tanıtması demek. Dokunulmamış bir Teensy'de bu, başka hiçbir sebeple orada bulunmayacak bir makinede bir geliştirme kartının vendor ID'si ve ürün metinleri anlamına geliyor. Jenerik kimlik, yeterince gerçek görünen uydurma bir fare: nötr metinlere sahip, sınıf uyumlu bir HID fare. Tek başına sıradan görünüyor, ama kimsenin sattığı bir ürüne karşılık gelmiyor ve o firmware'i çalıştıran herkeste aynı. Klonlanmış kimlik ise elinizdeki gerçek farenin descriptor'ı. Tutarlı, var olan bir ürüne karşılık geliyor ve kullanıcıların fareleri farklı olduğu için kullanıcıdan kullanıcıya değişiyor. Bunlar üç farklı konum ve aralarında bir sıralama var. Ama hiçbiri hiçbir şeyin garantisi değil, çünkü bu sıralama güvenlikle değil ne kadar aykırı durduğunuzla ilgili.
Kendi cihazınızı nasıl kontrol edersiniz
Bunu oyun PC'sinden, bir USB device viewer ile yapın ki giriş cihazınızı oyun PC'sinin gördüğü gibi görün. Beş dakika sürüyor ve size hiçbir forum başlığının vermeyeceği kadar bilgi veriyor.
- Ürün ve üretici metinleri bir mikrodenetleyici ya da geliştirme kartı gibi değil, bir fare gibi okunuyor
- Vendor ve product ID'leri birbirine ait ve gerçekten var olan bir ürünle eşleşiyor
- Report descriptor'daki tuş sayısı ve tekerlek, iddia edilen modelle uyuşuyor
- Cihaz tek bir HID fare arayüzü sunuyor; fare artı serial port artı hiç kullanmadığınız bir klavye değil
- İstenen sorgulama aralığı, iddia edilen modelin makul biçimde kullanacağı bir aralık
- Seri numarası metni, iddia edilen modelde olduğu gibi ya var ya yok
- Aygıt Yöneticisi'nde, normal bir oyun bilgisayarında görmeyi beklemeyeceğiniz bir ad yok
Uyarı
Klonlanmış bir descriptor neyi gizleyemez
Kusursuz klonlanmış bir descriptor cihazı numaralandırma sırasında sıradan gösterir, ama cihazın sonrasında enjekte ettiği hareketin zamanlaması ve biçimi hakkında hiçbir şey yapmaz. Analiz o sonraki katmanda oluyor ve insanların asıl korktuğu da orası. Ani sıçrayan hareket, descriptor ne derse desin görünür; fazla pürüzsüz hareket de öyle. Her savrulmada aynı ivme eğrisini çizen hareket ya da bir hedefin konumunu elin düzeltebileceğinden hızlı düzelten hareket de aynı kapıya çıkıyor. Descriptor işi kolay sinyallerin bir sınıfını ortadan kaldırıyor. Buna ihtiyacınız var, ama tek başına yeterli değil; onu yeterli saymak, mükemmel kurulumu olan insanların yazılım gibi davranarak yakalanma biçimi.
Descriptor hakkında sık sorulanlar
Bir oyun faremin descriptor'ını okuyabilir mi?
Makinedeki bir süreç takılı USB cihazlarını listeleyip descriptor'larını özel bir yetki olmadan okuyabilir, çekirdek erişimiyle çalışan bir anti-cheat ise bunu kesinlikle yapabilir. Belirli bir oyunun bunu yapıp yapmadığını ve sonuçla ne yaptığını, o şirketin dışından kimse size dürüstçe söyleyemez.
Gerçek faremin descriptor'ını klonlarsam iki özdeş cihaz mı olur?
Hayır, çünkü gerçek fareniz oyun PC'sine değil giriş cihazının host tarafına takılı; dolayısıyla oyun PC'si o kimlikle yalnızca tek bir cihaz görüyor. Gerçek fareyi bir de doğrudan oyun PC'sine takarsanız, kaçınmaya çalıştığınız kopyayı tam olarak siz yaratmış olursunuz.
Descriptor klonlamak yasa dışı mı?
Başka bir şirketin vendor ID'sini sunmak, o şirkete tahsis edilmiş bir tanımlayıcıyı amacı dışında kullanmak demek ve ayrıca oyunla aranızdaki kullanım şartlarını ilgilendiriyor. Biz avukat değiliz ve bu hukuki tavsiye değil. Ancak teknik olarak mümkün.
Descriptor'ı değiştirmek performansı etkiler mi?
Report descriptor etkiler. 8 bit yerine 16 bitlik göreli eksenler tanımlarsanız büyük hareket değerleri kırpılıp bölünmek yerine tek bir rapora sığar. Büyük savrulmalarda pürüzsüz hareketle basamaklı hareket arasındaki fark budur; kimlik alanlarının ise performansa hiçbir etkisi yoktur.
Hilemde descriptor spoof seçeneği var. Onu açmak yeterli mi?
Kapalı bırakmaktan iyidir ama tek başına tam bir yanıt değildir. Gerçekte neyi değiştirdiğini öğrenin: yalnızca ID'leri mi, metinleri ve report descriptor'ı da mı. Sonra kutucuğun etiketine güvenmek yerine sonucu oyun PC'sinden bir device viewer ile denetleyin.
Kaynak olarak ucuz bir fare mi kullanmalıyım?
Gerçekten oynadığınız fareyi kullanın. Klonlamanın amacı, kimliğin makul biçimde sahip olduğunuz ve kullandığınız bir cihaza ait olması; elinizdeki en makul cihaz da gerçek fareniz.
Kaynaklar
Fabrika, jenerik ve klonlanmış kimlikler arasındaki sıralama bizim kendi okumamız; tezgâh testlerinden çıkan denetim listesi de öyle.
- 01Microsoft Learn, USB device descriptors
tablodaki idvendor, idproduct, metin ve sınıf alanları ve windows'un bunlarla nasıl eşleştirme yaptığı
learn.microsoft.com
- 02Microsoft, Windows debugging tools (WDK)
denetim listesinde kullanılan usb device viewer'ın geldiği yer
learn.microsoft.com
- 03MAKCM firmware, GPL-3.0
güncel makcm firmware'inin model listesi yerine takılı farenin hid report descriptor'ını çözümlediği
github.com
Sırada ne var
Hâlâ takıldınız mı? Discord'da destek talebi açın
Tüm rehberler