deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak dev.to (home feed)

Geliştirici, CapCut'un BDVE önbellek şifrelemesini tersine mühendislikle çözdü ve açık kaynaklı bir kurtarma aracı yayınladı

Dev.to'da yayımlanan bir yazı, CapCut'un BDVE Tip 1 önbellek şifrelemesinin — periyodik tek baytlık XOR dilimlerinin — nasıl tersine mühendislikle çözüldüğünü anlatıyor ve yeniden kodlama yapmadan orijinal MP4 bit akışlarını geri kazandıran bir Python aracı tanıtıyor.

Geliştirici, CapCut'un BDVE önbellek şifrelemesini tersine mühendislikle çözdü ve açık kaynaklı bir kurtarma aracı yayınladı

ByteDance'ın masaüstü video düzenleyicileri CapCut ve JianYing, taslak klasörlerinin içinde — Resources/combination ve Resources/videoAlg gibi yollarda — büyük ara video dosyaları tutuyor; tek bir önbellek dosyası yüzlerce megabayta ulaşabiliyor. Dev.to'daki ayrıntılı bir yazıya göre bu dosyalar sıradan MP4 gibi görünse de hiçbir yerde oynamıyor: VLC ve QuickTime onları reddediyor, ffmpeg ise diskteki dosya boyutu eksiksiz olmasına rağmen "moov atom not found" hatasıyla duruyor.

Hex dump'ın ortaya çıkardığı

Yazının yazarı, böyle bir dosyanın ilk baytlarını incelediğini anlatıyor. Standart bir MP4, ftyp kutusuyla açılır — dört baytlık bir boyut ve ardından "ftyp" ASCII karakterleri. Önbellek dosyası ise 3B 3B 3B 1B 5D 4F 42 4B ile başlıyor. Bu baytları 0x3B ile XOR'ladiğinizde 00 00 00 20 66 74 79 70 çıkıyor; bu da tam olarak 32 baytlık bir ftyp başlığı. Tek baytlık bir XOR anahtarı açıkça işin içinde — ama anahtarı dosyanın tamamına uygulamak onu daha da bozuyor; bu da akışın yalnızca bir kısmının şifrelendiğine işaret ediyor.

BDVE Tip 1 nasıl çalışıyor

Dosyanın sonuna doğru tarama yapan yazar, ByteDance'ın medya verisinden sonra eklediği 68 baytlık tescilli bir kuyruk (trailer) bulmuş. Bu kuyruk, bir crpt alt kutusu barındıran bir bdve kutusu içeriyor; alanları arasında bir sürüm tanımlayıcısı (1), bir algoritma tanımlayıcısı (periyodik XOR için bu da 1), ayrılmış veya salt olarak tanımlanan 16 bayt ve şemanın üç parametresinin big-endian kodlamaları üzerinden hesaplanmış 32 baytlık bir SHA-256 özeti bulunuyor.

Gizleme yöntemi şu şekilde çalışıyor: medya verisinin üzerinde her step baytta bir, length bayt uzunluğunda bir dilim tek baytlık bir anahtarla XOR'laniyor, dilimler arasındaki boşluklar ise düz metin olarak kalıyor. Kuyruktaki özet step, length ve key değerlerinden hesaplandığı için, herhangi bir aday parametre seti birebir eşleşme için denetlenebiliyor.

Parametreleri kaba kuvvet olmadan çözmek

İki bağımsız 32 bitlik değer söz konusu olduğundan, kaba kuvvet 2^64 mertebesinde kombinasyon demek olurdu. Yazar bunun yerine konteyner ve codec yapısına yaslanıyor. Kuyruktan geriye doğru tarama, moov atomunu ve H.264 örneklerinin kesin dosya ofsetlerini kaydeden örnek tablolarını (stsz, stsc, stco/co64) buluyor. Geçerli NAL birimleri dört baytlık 00 00 00 01 başlangıç kodu ve ardından bir tür baytıyla başlar — SPS için 7, PPS için 8, bir IDR dilimi için 5. Şifreli bir dilimin içine düşen bir örnek ofseti bu imzalarla yalnızca anahtarla XOR'landığında eşleşirken, düz metin bir ofset doğrudan eşleşiyor.

Sınıflandırılan her ofset daha sonra bir modül kısıtına dönüşüyor: şifreli bir ofset, length'in ofsetin step'e göre modu ile çarpışması — daha doğrusu ondan büyük olması gerektiğini, düz metin bir ofset ise bu değerin en fazla o kadar olabileceğini kanıtlıyor. 49.435 veya 65.536 gibi yaygın parça boyutlarından türetilen küçük bir aday step setini denemek, alanı tek bir (step, length) çiftine daraltıyor; kuyruktaki SHA-256 özeti bunu da doğruluyor. Yazar bu çözümün milisaniyeler sürdüğünü bildiriyor.

Şifre çözme saf bit düzeyinde ters çevirmeden ibaret: pozisyonun step'e göre modu length'in altında olduğu yerlerdeki dilimleri XOR'la, 68 baytlık kuyruğu at ve dosyayı yaz. Hiçbir şey yeniden kodlanmadığından yazar, aktarım hızının 100 MB/s'nin üzerinde olduğunu — 500 MB'lık bir dosya için kabaca dört saniye — ve kurtarılan H.264 ve AAC paketlerinin editörün kendisinin ürettiğiyle bit bit aynı olduğunu, hiçbir nesillik kalite kaybı olmadığını bildiriyor.

Araç

Motor, GitHub'da pikadexofc/export-capcut-pro-video-free adlı depoda yayımlanan açık kaynaklı bir Python projesi olan CapCut Cache Recover olarak sunuluyor; şu an v1.0.1 sürümünde. Yazıda listelenen özellikler arasında son CapCut taslaklarını otomatik indeksleyen etkileşimli bir terminal seçici, çıktı yollarını seçmek için yerel bir Windows kaydetme iletişim kutusu, draft_meta_info. ve draft_content. dosyalarını ayrıştırarak GUID tarzı dosya adlarını gerçek proje ve klip adlarına çözme, sürükle-bırak destekli dört sekmeli koyu temalı bir masaüstü GUI'si ve Python kurulumu gerektirmeyen yaklaşık 12 MB'lık bağımsız bir Windows çalıştırılabilir dosyası yer alıyor. Kayda değer bir nokta: projenin duyurulan kurulum yolu, uzak bir betiği indirip çalıştıran tek satırlık bir PowerShell komutu; bu nedenle web içeriğini doğrudan kabuğa borulamaya ilişkin her zamanki uyarı geçerli.

Neden önemli

Görüntüleri yalnızca bir CapCut taslağının içinde var olan herkes için bu, orijinal bit akışını yeniden dışa aktarma veya yeniden kodlama yapmadan kurtarmanın bir yolunu sunuyor. Teknik açıdan bu, kriptografiye değil gizlemeye saldırının derli toplu bir vaka çalışması: şifre, yinelenen tek baytlık bir XOR ve kırılma, konteyner üst verisini, codec düzeyindeki yapıyı ve biçimin yararlı biçimde yanında taşıdığı bir doğrulama özetini birleştirmekten geliyor. Yine de uyarılar gerçek. Buradaki her şey tek bir blog yazısında kişisel olarak bildirildi — biçim açıklaması ve performans rakamları bağımsız olarak doğrulanmadı — ve ByteDance herhangi bir güncellemede önbellek düzenini değiştirebilir, bu da çözücüyü bozar. Bir uygulamanın önbelleğinden medya kurtarmak, kullanıcının alttaki görüntünün sahibi olsa bile uygulamanın hizmet şartlarıyla çelişebilir.

  • #reverse-engineering
  • #open-source
  • #video
  • #python
  • #capcut

İlgili yazılar