Obfuscate edilmiş TikTok VM’ini tersine mühendislikle çözmek
(github.com/LukasOgunfeitimi)- TikTok, güvenlik ve obfuscation katmanını güçlendirmek için sanal makineyi (VM) kullanıyor
- Bu proje, güvenlik aşma ve istek imzalama üretiminin nasıl çalıştığını analiz etmek için bu web tabanlı sanal makineyi (VM) tersine mühendislikle inceliyor
- Ana hedef
webmssdk.js; bu dosya X-Bogus ve _signature üretiminde yer alan VM kodunu içeriyor - Proje, JavaScript obfuscation’ını çözüyor ve TikTok VM’in bytecode’unu analiz edip decompile ederek anlamlı işlev düzeyine geri kazandırıyor
- Bu sayede yorum yazma gibi kimlik doğrulama gerektiren istekler için gerekli olan
_signatureüretimi de mümkün hale geliyor - VM son derece gelişmiş tasarlanmış; döngüler, istisna işleme, kapsam yönetimi gibi ileri bytecode yapıları içeriyor
TikTok VM tersine mühendislik projesine genel bakış
- TikTok, istemci istek imzası üretimi, veri koruması ve güvenlik aşımını önlemek için JavaScript tabanlı, obfuscate edilmiş bir sanal makine (VM) kullanıyor
- Bu proje,
webmssdk.jsdosyasını deobfuscate edip decompile ederek imzalama algoritmalarını (X-Bogus, _signature) geri kazanmayı amaçlıyor
Temel özellikler ve yapı analizi
Deobfuscation
-
TikTok, string’leri dizi ve köşeli parantez gösterimiyle indeksleyerek obfuscate ediyor
r[Gb[301]](Gb[57], e) -
Gbdizisinin çözülmesi, sabit bir string tablosu kullanılarak yapılan yer değiştirme işlemiyle gerçekleştiriliyor -
Bu kalıpların tamamı decode edildikten sonra, daha okunabilir dot notation biçimine dönüştürülüyor
Fonksiyon çağrısı obfuscation’ını kaldırma
-
Fonksiyonlar
Abdizisinde tutuluyor ve indeksle çağrılıyorAb[31](args) → Ab31(args) -
AST parser kullanılarak bunlar ayrı fonksiyonlara ayrılıyor, adlandırılıyor ve çağrı biçimi de buna göre değiştiriliyor
Bytecode çözme
-
Bytecode, base64 + gzip + leb128 + XOR şifrelemesiyle karmaşık şekilde yapılandırılmış
r = XOR anahtarının hesaplanması sıkıştırmayı açma ve leb128 decode ile komut setinin yeniden oluşturulması -
Her fonksiyon bytecode tabanlı olarak oluşturulmuş ve decompile süreciyle işlev yapısı geri kazanılıyor
TikTok VM’in özellikleri
- İç içe fonksiyonlar, kapsam yönetimi, istisna işleme, koşullu dallanma gibi açılardan sıradan VM’lere göre daha gelişmiş
- Her komut
switchyerineif-elseyapısı olarak gizlenmiş → bu yapı switch case biçimine geri dönüştürülüyor
Decompile ve debugging
- Her bytecode fonksiyonu, normal JS fonksiyonu düzeyine decompile edilip VMxxx.js biçiminde kaydediliyor
- Örnek: VM223 bir rastgele karakter üreticisi
- Debugging, Chrome’da Tampermonkey + CSP bypass eklentisi kullanılarak, özgün JS’nin decompile edilmiş dosyalarla değiştirilmesi üzerinden yapılıyor
İmzalama(Signing) analizi
İstek başlığı yapısı
- Sunucu isteklerinde 3 ek başlık yer alıyor
msToken: sunucu tarafından veriliyor, her istekte yeniden üretiliyorX-Bogus: webmssdk.js içinde istek temel alınarak üretiliyor_signature: kimlik doğrulama gerektiren isteklerde kullanılıyor, webmssdk.js tarafından üretiliyor
- Normal kullanıcı sorgulama isteklerinde yalnızca
X-Bogusgerekiyor - Yorum yazma gibi kimlik doğrulamalı isteklerde
_signatureda gerekiyor
VM fonksiyon akışı
- VM86: tüm imza üretiminin giriş noktası
- VM113:
X-Bogusüretimi - VM189:
_signatureüretimi - Bu akış signer.js ile yeniden uygulanarak URL imzalama yapılabiliyor
Ek koruma mekanizmaları
- Fare takibi: VM120
- Ortam kontrolü: VM265
- Ancak bunların tamamı istemci tarafı korumalar ve sunucuyla iletişim yok → imza üretimi için göz ardı edilebilir
Dikkat edilmesi gerekenler ve bakım
- TikTok VM sürekli güncelleniyor → yapı değiştiğinde yeniden decompile etmek gerekiyor
- Bu proje ağırlıklı olarak güvenlik analizi, bot önleme teknolojisi araştırması ve eğitim amaçları için uygun
1 yorum
Hacker News görüşleri
Sık sık kesilen ve hata mesajları gösteren bir yayın akışı web sitesini kullanıyorum. Çözüm bulmak için JavaScript kodunu analiz ediyorum ve yapay zeka yardımcıları, karmaşıklaştırılmış kodu anlamada çok yardımcı oldu
Web'de çalışan JavaScript dosyalarını karmaşıklaştırması çözülmüş dosyalarla değiştirerek TikTok'u normal şekilde kullanmak mümkün
Kodu gizlemek için çok fazla çaba harcanıyor gibi görünüyor. Bu, programın optimizasyonunu engelleyip karmaşıklığı artırarak daha fazla hataya yol açabilir
TikTok VM'inin tersine mühendisliğine dair bir örneği yer imlerimde buldum
Tersine mühendislik çabalarıyla ilgili yazıları okumaktan her zaman keyif alırım ve bu yazının takibi kolaydı
Sosyal medya platformlarının bu düzeyde karmaşıklaştırma kullanması için meşru bir gerekçe yok
VM'in ne olduğuna dair soru
Bunun Lynx ile ilgili VM olup olmadığına dair soru
iOS uygulamasında da VM olup olmadığına dair soru
Bir süre TikTok botları üzerinde çalıştım ve çok zordu