Rehber Hogwarts Legacy'de Denuvo'yu nasıl bypasslarsınız?

Her ne kadar, EMPRESS ablamız kadar yetenekli olmasak da konu hakkında kendi çapımızda bir şeyler açıklayacağım. Hazırsanız başlayalım.

Denuvo nasıl çalışır?


  • Oyun, donanım/yazılım özelliklerini bir parmak izinde toplar ve bir Steam Ticket'i (oyun sahipliğinin kanıtı) oluşturur.
  • Parmak izi ve Ticket daha sonra Denuvo Sunucularına gönderilir.
  • Oradan Steam Ticket'i, kullanıcının oyuna gerçekten sahip olduğundan emin olmak için Steam'e gönderilir.
  • Kullanıcı oyuna gerçekten sahipse, yalnızca tam parmak izine sahip bir bilgisayarda çalışan bir Denuvo Token oluşturulur.
  • Bu tokeni kullanarak oyuncu artık oyunu çalıştırabilir.
  • Oyun token olmadan çalışamaz çünkü token örneğin runtime'da belirli değerlerin şifresini çözmek ve benzeri şeyler için kullanılır.
  • Değerlerin şifresini çözmek için belirteci kullanmanın yanı sıra Denuvo, parmak izi için donanım özelliklerinin runtime'da belirteçle hala eşleştiğini düzenli olarak doğrular.
Amaç

Bu nedenle bu yazı kasıtlı olarak belirsiz olacak ve oyunun nasıl analiz edildiğini ve yamalandığını ayrıntılı olarak göstermeyecek. Aklımdaki asıl hedef, oyunun parmak izini elde etmek için kullandığı tüm özellikleri bulmak ve bunları yamalamaktı. Bunun da ötesinde, runtime kontrollerinin çoğunu yamalamak istiyorum.Gerçek bir crack işlemi için, tüm runtime kontrollerinin yamanması gerekiyor. Hepsini bulmak hala son derece zaman alıcı bir iş, bu yüzden bunu başaran herkes en büyük saygımı hak ediyor. Kendim için gördüğüm asıl zorluk, parmak izi için kullandığı tüm bağları keşfetmek için korumayı analiz etmekti.

Koruma nasıl analiz edilir?



Dolayısıyla amaç bu diyaloğu aşmaktır.

Bu kısım hakkında daha fazla konuşmak isterdim ama bunun iyi bir fikir olduğunu sanmıyorum. Bunun yerine kullandığım araçları özetleyeceğim. Oyunun hangi özellikleri topladığını bulmak için Qiling tersine mühendislik framework'unu kullandım. Qiling, her binary yapıyı taklit ederek tam olarak enstrümante edilmesini sağlar. Gerçekten güçlü bir framework:

Bununla birlikte, çok fazla komut dosyası ve uyarlama gerektirir. Kutudan çıktığı anda sizin için tüm işleri yapan bir araç değildir. Qiling'e tamamen alışmam ve parmak izi özelliklerinin çoğunu bulmam yaklaşık iki ay gibi bir süre aldı. Sonuncusunu keşfetmem ise geri kalan 3 ayımı aldı ve onu da ancak tesadüfen keşfedebildim. Belirli bir özelliğin gerçekten parmak izinin bir parçası olduğunu doğrulamak için yamaladım/spoof yaptım ve önceden geçerli olan Denuvo Token'ımın artık geçersiz olduğunu ve hata iletişim kutusunu gösterdiğini kontrol ettim.
Yamalarımın çoğunda, hooklarımı ve saplamalarımı dinamik olarak oluşturmak için oldukça fazla runtime'yi disassemble etmek zorunda kaldım, bu da çeşitli disassembly'lerde epeyce hata keşfetmeme neden oldu.

Bununla birlikte, portable bir crack yapmak bir hedef olmadığından, kendi hipervizörümü kapsamlı bir şekilde kullandım. Örneğin, elle yama yapmak için çok sıkıcı olan birkaç yere EPT hooklarını yüklemek için kullandım. Tüm özellikler elimdeyken, bilgisayarım için bir parmak izi kullanarak oyunu bilgisayarımda bir token oluşturmaya zorladım. Tüm yamalarımı ve hooklarımı kullanarak (toplamda ~2000), şimdi bilgisayarım için oluşturulan jetonu kullanarak oyunu dizüstü bilgisayarımda çalıştırmak istedim.

Bir süre sonra başlangıç ekranına kadar çalıştırmayı başardım:



Ulaşmak istediğim nokta buydu. Oyun artık farklı bir makine için düzenlenmiş bir jetonla başlatılabiliyor ve ben kesinlikle mutluyum. Oyun tabii ki hala PC token'ı ile arada sırada çöküyor. Bazen oyuna girip oynayabiliyorum, bazen de çöküyor. İşte bu noktada tüm runtime kontrollerini yamalamak gerekiyor. Oyunun bunları nasıl gerçekleştirdiğini bilmek, sadece bir zaman ve motivasyon meselesi. Ancak, daha önce de belirtildiği gibi, bu hala üstesinden gelinmesi gereken büyük bir görev, bu yüzden bunu yapmayı başaran herkes en büyük saygımı hak ediyor.

Detaylar

Denuvo'nun yaptığı son derece basit ama bir o kadar da sofistike bir şey var. Korumanın büyük bir bölümünü oluşturmuyor ve henüz hiçbir yerde belgelendiğini görmedim:
  • Denuvo stack'i her zaman doğrusal bir şekilde kullanmaz.
  • Modern bilgisayarlarda, stack genellikle aşağı doğru büyür. Eğer stack'e bir şey itilirse, stack pointeri azaltılır. Eğer stack'ten bir şey kaldırılırsa, pointer artar.
  • Bu, pointer'in üzerindeki tüm belleğin rezerve edildiği, altındaki her şeyin boş olduğu anlamına gelir.
  • Bu kavram Denuvo'da geçerli değildir. Elements'ler pointer'in üstünde olduğu gibi altında da saklanır.
  • Diğer herkes buna uyduğu sürece her şey yolunda gider. Bununla birlikte, birisi stack'i doğrusal olarak kullanmaya çalışır çalışmaz, görünüşte boş olan bölgedeki değerlerin üzerine yazılacak ve oyunun çökmesine neden olacaktır.
  • Bu, örneğin donanım breakpointleri kullanıldığında olur. Breakpoint tarafından tetiklenen istisna uygulamaya gönderildiğinde, istisna bağlamı stack'inde saklanır ve oyunun kullandığı değerlerin üzerine yazılır.
  • Bu da donanım breakpoint'lerini ve diğer birçok tekniğin kullanımını son derece zorlaştırır, hatta imkansız hale getirir.

Bunun yerine, donanım breakpoint'lerini kullanmaya devam edebilmek için küçük bir debugger yazdım. Oyuna bağlı ve tek görevi donanım breakpointleri tarafından tetiklenen exceptionları almak. Bu şekilde, exceptionlar oyuna gönderilmez ve böylece stack bozulmamış olur. Böyle bir teknik çok basittir ancak yine de tüm hookların bunu hesaba katması ve böylece çok daha karmaşık hale gelmesiyle sonuçlanır. Çok etkileyici!

Performans

Denuvo'nun performansı öldürdüğüne dair söylentileri herkes bilir, ancak bu gerçekten doğru mu? Denuvo'nun neden olduğu performans etkisini kesin olarak ölçmek son derece zordur. Denuvo'nun çalıştırdığı tüm kod parçalarının tam olarak bilinmesini gerektirir. Bunları tanımlamak ise inanılmaz derecede büyük bir iş. Bunun yerine yapacağım şey, hooklarım tarafından yapılan ölçümleri kullanarak bu konuda mantık yürütmek. Bu, performans etkisini doğrudan ölçmeyecek ancak bize Denuvo ile birlikte performans kaybından bahsetmenin bile ne kadar alakalı olduğuna dair bir tahmin, bir his verecektir.

Neyi ölçeceğimi görselleştirmek için iyi bir benzetme şu şekildedir:

Bir geliştirici olduğunuzu ve toplantıların geliştirme hızınızı ne kadar yavaşlattığını ölçmek istediğinizi düşünün. Ölçülmesi zor olduğunu düşündüğüm şey budur.
Bunun yerine ölçeceğim şey şudur: Sizi ne kadar yavaşlattıklarını düşünmenizi gerektirecek kadar çok toplantı yapıyor musunuz?
Yani, yılda bir toplantınız varsa, kapsamlı testi yapmaya değmez, çünkü gerçekten o kadar önemli değil.
Bu analizin sadece Hogwarts Legacy için geçerli olduğunu unutmayın. Bunların Denuvo tarafından korunan diğer oyunlar için geçerli olup olmadığını bilmiyorum!


Konsol her [MOMO] OVERHEAD yazdırdığında hooklarımdan biri tetikleniyor. Bu aslında Denuvo'nun oyunun yürütülmesine müdahale ettiği anlamına geliyor. Bu da Denuvo'nun bu zamanlarda en azından "bir miktar" (sıfır olmayan) performans ek yüküne neden olduğu anlamına geliyor.

Denuvo'nun gerçekten de zaman zaman müdahale ettiği görülebilir, ancak açıkça görülebilen bir şey var: Bunu çok sık yapmıyor.

Sadece birkaç saniyede bir. Daha da az, bazen hiçbir şey yapmıyor. Sadece önemli şeyler olduğunda, sahne geçişleri, yükleme ekranları veya benzerleri, günlükler birikiyor gibi görünüyor.

Bunun bize tam olarak söylediği şey, normal oyun sırasında, sahne geçişleri veya yükleme ekranlarına kıyasla yalnızca küçük miktarda Denuvo kodunun yürütüldüğüdür. Bu gibi durumlarda olası performans sorunları benim için önemli görünmüyor.

Aslında ne kadar az OVERHEAD satırının kaydedildiğine gerçekten şaşırdım, çünkü söylentilerin doğru olmasını ve tonlarca satırın spam edilmesini bekliyordum, ancak durum böyle değil! Spam yapıldığını hiç görmedim. Her satırın tam olarak ne kadar ek yük getirdiğini bilmiyorum ancak bildiğim şey yama yapmak zorunda olduğum şey. Hooklarımın sadece yürütmeyi çok küçük bir miktar değiştirmesi gerekiyor. Bu kesin bir şey ifade etmese de, Denuvo'nun daha fazlasını yapması durumunda değişikliklerimin daha karmaşık olması gerektiği sonucuna vardım.

Ayrıca Denuvo'nun o sırada çalıştırdığı ve benim hook etmeme gerek olmayan başka kod parçaları olup olmadığını da bilmiyorum. Bununla birlikte, 2000 hook ile o kadar çok kontrol yamaladım ki, en azından iyi bir yaklaşım ve tahmin vermesi gerektiğini düşünüyorum. Görünüşe göre koruma oyuna çok iyi entegre edilmiş.

FPS Ölçümü
Önceki testin ölçtüğü tek şeyin Denuvo etkileşimlerinin sıklığı olduğunu anlıyorum. Eksik olan şey büyüklükleri.

Ne yazık ki bunu ölçebilmemin bir yolu yok. FPS'ye bakmak da bana kesin bir sonuç vermeyecek.

Bu iki nedenden dolayı böyledir:
  1. Denuvo'nun entegre edildiği yerlerin kendisi karmaşık olabilir. Bu da oyunun kendi başına karmaşık görevler gerçekleştiriyor olabileceği ve Denuvo'nun o sırada bir kontrol gerçekleştirmesinden bağımsız olarak düşüşlere neden olabileceği anlamına geliyor. DRM kontrollerinin genellikle eklendiği yerler olduğu için durum muhtemelen böyle olacaktır.
  2. Ek yüke benim hooklarım neden oluyor. Ortaya çıkardığım birçok karmaşıklık katmanı var. EPT hooklarını hipervizörüm aracılığıyla kullanmak en az 2 sayfa hatasına neden olacak ve bu da 2 VM çıkışına yol açacaktır (izin geçişleri nedeniyle). Bunun da ötesinde, konsola giriş yapmak için OutputDebugString kullanıyorum, bu da bir exception oluşturması nedeniyle çok pahalıya mal oluyor. Ancak bunu daha da kötü yapan şey, oyunun kendi kendini hata ayıklamasını sağlamam. Bu da exceptionların ve konsol günlüklerinin hata ayıklayıcı tarafından eşzamanlı olarak yakalanmasına neden olurken oyunun beklemesi gerekiyor.
Dolayısıyla, FPS'ye bakmak ve düşüşleri ölçmek iki senaryodan birini ortaya çıkaracaktır:

Hiç düşüş yoktur, bu da her şeyin süper optimize edildiği anlamına gelir veya FPS düşüşleri vardır.

FPS düşüşleri olması durumunda, Denuvo'nun kötü olduğu, oyunun kötü olduğu veya en olası senaryo olan hooklarımın kötü olduğu anlamına gelebileceğinden, sonuçlar kesin olmayacaktır. Ölçümümün amacı sadece insanlara performansla ilgili olarak işlerin ne yönde gittiğine dair bir his vermekti. En azından benim için Denuvo'nun o kadar da kötü olmadığını gösteriyor. Kesinlikle gördüğüm diğer DRM'ler kadar kötü değil.

Sonuç
Bu korumanın son derece güçlü bir koruma olduğunu kabul etmek zorundayım. Korumasının yanı sıra, oyuna çok iyi entegre edilmiş gibi görünüyor ve bunun neden olduğu herhangi bir ilgili performans ek yükünü ölçemedim. DRM geliştirmek her zaman çok zorlu bir iştir. DRM'lerin kullanımının iyi olup olmadığı, kapitalizmi besleyip beslemediği ya da sadece geliştiriciler tarafından yapılan sıkı çalışmayı koruyup korumadığı karar veremediğim bir şey. Yine de Denuvo'nun aldığı tüm bu nefreti hak etmediğini düşünüyorum.

Kaynak:
 
Son düzenleme:
Hayret kimse korsana karşıyız dememiş henüz.
 
Empress GTA 6'yı kaça kıracak acaba? Hani milyar dolar mertebesin de satar ya o bakımdan
 
Ben bu oyunu satin almistim ve yarim saat oynadiktan sonra oyundan atiyordu. Hicbir sekilde duzeltemedim ve sanirim Denuvo sistemi yuzunden atiyordu. Cok merak ettigim icin korsanini indirip bir deneme yapacagim acaba duzgun calisiyor mu diye.
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…