Yazılımlarını nasıl koruduklarını on geliştiriciye sorun; çoğunlukla on ayrı cevap alırsınız: bir obfuscator, bir packer, bir lisans API'si, bir anti-debug kütüphanesi. Her biri bir tür saldırıya karşı işe yarar. Hiçbiri tek başına yetmez, çünkü her biri ürünlerin gerçekte nasıl saldırıya uğradığının farklı bir parçasını kapsar.
Yazılım koruma yığını, bu sorunun alternatifidir: her biri farklı bir soruyu yanıtlayan, birinin kapsamadığını diğerinin kapatacağı şekilde dizilmiş birkaç katman. Bu rehber, C++ ve C# ürünleri için önerdiğimiz altı katmanı, her birinin neyi durdurduğunu, yerel ve yönetilen kod arasında vurgunun nasıl değiştiğini ve bunları hangi sırayla benimsemeniz gerektiğini anlatıyor.
Tek bir koruma aracı neden hiçbir zaman yeterli değildir?
Her koruma tekniğinin bir kör noktası vardır. Bir obfuscator kodu okumayı zorlaştırır ama paylaşılan bir anahtara dokunmaz. Bir lisans kontrolü paylaşımı durdurur, ama yalnızca istemcide çalışıyorsa hedef alınabilir. Bir kara liste bilinen araçları engeller, geri kalan her şeyi kaçırır. Saldırganın hepsini aşması gerekmez; yalnızca bıraktığınız açığı bulması yeterlidir.
Katmanlar işe yarar, çünkü boşluklar üst üste gelmez. Bir katmanı aşmak sizi yalnızca bir sonrakine götürür; en önemli katmanlar ise, yani sunucudakiler, saldırganın makinesinde hiç yer almaz.
İyi bir yığın, her katmana tek ve net bir görev de verir. Her katman yalnızca bir soruya yanıt verdiğinde, ürününüz için hangi sorunun hâlâ yanıtsız olduğunu görmek ve bir müşteriye belirli bir kontrolün neden var olduğunu açıklamak kolaylaşır.
Lisanslama ve HWID
Cihaza bağlı sunucu tarafı anahtarlar
Bütünlük kontrolleri
Bellek, metin ve CRC32 kontrolleri
Anti-debug ve anti-VM
Debugger'lar ve sanal makineler tespit edilir
Süreç ve pencere kara listeleri
Bilinen araçlar uzaktan engellenir
Sunucu tarafı veriler
Oturum başına string'ler, dosyalar ve ayarlar
qPAnalyzer
Bilinmeyen araçlar işaretlenir ve puanlanır
Yazılım koruma yığınının altı katmanı
1. Lisanslama ve HWID bağlama
Soru: Bu yazılımı kim, hangi makinede çalıştırabilir? Lisans anahtarları sipariş başına verilir, sunucuda kontrol edilir ve ilk etkinleştirmede bir donanım kimliğine (hardware ID) bağlanır. Anahtarlar gerçek zamanlı olarak oluşturulabilir, askıya alınabilir, yasaklanabilir ve incelenebilir; Bilgisayarlar sayfası hangi cihazın hangi anahtarı kullandığını gösterir. Bu katman gelişigüzel anahtar paylaşımını durdurur ve sürüm çıkarmadan kötüye kullanımı kesmenizi sağlar. HWID kilidi nedir? mekanizmayı ayrıntılı anlatıyor.
Kapsamadığı: Lisanslı bir müşterinin kendi kopyasını inceleyip değiştirmesi. Geçerli bir anahtar, doğru makinede bu katmanı geçer; bu yüzden sonraki katmanlar vardır.
2. Bütünlük kontrolleri
Soru: Bu, gönderdiğiniz derleme mi? qPapel Auth'ta auth.CheckMemoryIntegrity(), programın belleğinin çalışma anında, örneğin komut yamalama (instruction patching) ile değiştirilip değiştirilmediğini kontrol eder. auth.CheckTextIntegrity() CRC, oturum tabanlı ve yama kontrolleri ekler; CRC32 kontrolü ise Uzaktan ayarlar üzerinden açılabilir. Build Control, dosyanızın yetkisiz araçlarla değiştirilmesini, yamalanmasını veya açılmasını engeller.
Kapsamadığı: Hiçbir şeyi değiştirmeyen inceleme. Biri bir programı değiştirmeden çalışırken izleyebilir; bu nedenle bütünlük kontrolleri anti-debug ve çalışma zamanı tespitiyle birlikte kullanılır.
3. Anti-debug ve anti-VM
Soru: Program çalışırken biri onu inceliyor mu? qPapel Auth, bağlı bir debugger'ı algılar ve ihlal eden lisansı yasaklayabilir; anti-VM tespiti ise analiz için yaygın kullanılan sanal makineleri fark eder. Anti-dumping rutinleri, bellek koruması ve kurcalamaya karşı sağlamlaştırma ayarlarınızdan bağımsız olarak yerleşiktir.
Kapsamadığı: Süreç dışından gözlemleyen araçlar. Bunlar kara listelerin ve qPAnalyzer'ın işidir.
4. Süreç ve pencere kara listeleri
Soru: Bilinen bir analiz aracı çalışıyor mu? Uzaktan ayarlar, yeni bir derleme yapmadan pencere başlıklarını, sınıf adlarını, etkin süreçleri ve hata ayıklama araçlarını engellemenize olanak tanır; kuralları uygulama sürümüne, ülkeye veya kullanıcı grubuna göre hedefleyebilirsiniz. Kara listeler hızlı ve ucuzdur, ancak yalnızca zaten bilinen araçları yakalar.
Kapsamadığı: Yeniden adlandırılmış, özel ve yeni çıkmış araçlar. Bir liste yalnızca birinin ona eklediği şeyin adını koyabilir.
5. Sunucu tarafı veriler
Soru: Değiştirilmiş bir derleme gerçekte ne alır? SS Strings, hassas değerleri PapelShip'in sunucularında tutar ve yalnızca kimliği doğrulanmış oturumlara iletir. SS Files, dosyaları uygulamanın içine paketlemek yerine kimliği doğrulanmış istemcilere sunar; şifreli DLL'ler de diske yazılmadan belleğe akıtılabilir. Önceki katmanları atlamak için değiştirilmiş bir derleme bunların hiçbirini almaz, dolayısıyla eksik kalır. Ekonomiyi değiştiren katman da budur; istemci tarafı koruma ile sunucu tarafı sırlar yazısında anlatıldığı gibi.
Kapsamadığı: Geçerli bir oturuma teslim edildikten sonraki değer. Değerlerin bellekte kalma süresini kısa tutun ve oturum sürdüğü sürece çalışma zamanı katmanlarının oturumu izlemesini sağlayın.
6. qPAnalyzer çalışma zamanı tespiti
Soru: Bilinmeyen bir araç çalışıyor mu? qPAnalyzer, yapay zekâ destekli bir çalışma zamanı tehdit tespiti aracıdır. Arayüz yerleşim desenlerini, pencere handle'larını ve bellek imzalarını inceler; işaretlenen bir pencerenin ekran görüntüsünü analiz eder ve %0 ile %100 arasında bir tehdit puanı verir. Ürün bazında beyaz liste ve “Tehdit değil” işlemi yanlış pozitifleri düşük tutar. qPAnalyzer, adı değiştirilmiş ve özel araçları nasıl tespit ediyor? yazısını okuyun.
Kapsamadığı: Ne yapılacağına karar vermek. qPAnalyzer kanıt ve puan üretir; sonucu risk motorunuzun eşikleri ve sunucu tarafındaki yasak belirler.
Katmanlar bir uygulama başladığında birlikte nasıl çalışır?
Katmanlar birbirine sonradan eklenmiş ayrı ürünler değil. Tek bir açılışta birbirine devreder ve sunucu her kararın merkezinde yer alır.
01Anahtar değişimi
Yeni, şifreli bir oturum
02Anahtar, donanım kimliği, derleme
Yerel kontrol sonuçlarıyla birlikte
03Lisans ve cihaz kontrol edildi
Etkin, bağlı, yasaklı değil
04Sunucu tarafı veriler serbest bırakıldı
String'ler, dosyalar, Uzaktan ayarlar
05Çalışma zamanı bulguları
Bütünlük, anti-debug, qPAnalyzer
06Politika uygulandı
Uyar, kısıtla, kapat veya yasakla
Değiştirilmiş bir kopya için bunun ne anlama geldiğine dikkat edin. Yerel kontrolleri atlarsa bile, bir şey almadan önce sunucunun lisans ve cihaz kontrollerinden geçmesi gerekir. Geçerli bir anahtarla bunları geçerse, çalışma zamanı bulguları yine sunucuya ulaşır ve bir yasak, bir sonraki kontrolde anahtarı her yerde durdurur.
Her katman neyi durdurur?
Yaygın tehditleri, onları ele alan katmanla eşleştirmek örtüşmeyi açık hâle getirir. Tehditlerin çoğunu birden fazla katman kapsar; asıl amaç da budur.
| Tehdit | Ana katman | Yedekleyen katman |
|---|---|---|
| Bir grup sohbetinde paylaşılan anahtar | Lisanslama ve HWID | Anahtar yasakları, cihaz yönetimi |
| Değiştirilmiş bir derleme | Bütünlük kontrolleri | Sunucu tarafı veriler |
| Debugger ile canlı inceleme | Anti-debug | Kara listeler, qPAnalyzer |
| Analiz için sanal makinede çalışma | Anti-VM | qPAnalyzer |
| Uygulamanın yanında açık, iyi bilinen bir araç | Kara listeler | qPAnalyzer |
| Yeniden adlandırılmış veya özel bir araç | qPAnalyzer | Anti-debug |
| Derlemeden API anahtarlarını çıkarma | Sunucu tarafı veriler | Bütünlük kontrolleri |
| Etrafta dolaşan, sızdırılmış bir derleme | Sunucu tarafı veriler | Lisanslama, Binary Trace |
C++ ve C#: aynı yığın, farklı vurgu
Altı katman hem yerel hem de yönetilen kod için aynı şekilde geçerlidir. Değişen, baskının nereye düştüğüdür.
- C#, okunması nispeten kolay olan kodlara geri çevrilebilen bir ara dile (IL) derlenir. Bu da sunucu tarafı verilere daha fazla ağırlık verir: assembly'ye hiçbir sır koymayın, hassas değerleri SS Strings'te tutun ve binary'de kalan her şeyi okunabilir kabul edin. Sabit kodlanmış sır içermeden C# lisanslama rehberi ayrıntıya iniyor.
- C++ okunması daha zor bir dildir, ama derlenmiş bir binary yine de komut düzeyinde değiştirilebilir. Bütünlük kontrolleri ve sunucu tarafı kararlar, tek bir değiştirilmiş dalın ürünü ele vermesini engeller. Bkz. C++ kimlik doğrulama ve lisanslama.
qPapel Auth ikisi için de yerel SDK'lar sunar. EasyAuth kütüphanesi 7.0 sürümüyle C# desteği kazandı; mevcut C++ projeleri için Default Library kullanılmaya devam ediyor.
Katmanları hangi sırayla benimsemelisiniz?
İlk gün her katmana ihtiyacınız yok. En az çabayla en fazla korumayı sağlayan sırayla benimseyin.
- 01
Lisanslama ve HWID
Anında gelir koruması. Her satış, sunucuda kontrol edilen ve tek bir cihaza bağlı bir anahtara dönüşür.
- 02
Sunucu tarafı veriler
Çabaya göre en yüksek getiri. En değerli üç string'inizi veya dosyanızı önce sunucuya taşıyın.
- 03
Bütünlük kontrolleri
Bütünlük fonksiyonlarını yalnızca başlangıçta değil, önemli noktalarda çağırın ve CRC32 kontrolünü açın.
- 04
Anti-debug, anti-VM ve kara listeler
Bunları Uzaktan ayarlar bölümünden etkinleştirin. Bu birkaç dakika sürer ve düşük çabalı denemeleri eler.
- 05
qPAnalyzer
Temel yapı oturduktan sonra açın, önce gözlem modunda başlatın, beyaz listeyi ayarlayın ve ardından eylemleri etkinleştirin.
Yayından sonra yığını işletmek
Bir koruma yığınını kurup unutamazsınız. Birkaç rutin alışkanlık onu etkili tutar.
- Bulguları haftada bir inceleyin. Bilgisayarlar sayfasını ve Threat Vault'u kontrol edin; meşru araçları beyaz listeye alın ve yanlış pozitifleri “Tehdit değil” olarak işaretleyin.
- Sıfırlama ve yasak örüntülerini izleyin. Tek bir anahtarda sık HWID sıfırlaması genellikle paylaşım anlamına gelir.
- Değerleri uzaktan değiştirin. Maruz kaldığından şüphelendiğinizde, derlemeyi yeniden yapmadan sunucu tarafı string'leri yenileyin ve Uzaktan ayarları güncelleyin.
- Yanıt eşiklerini belirleyin. Risk motorunun uyar, kısıtla, kapat ve yasakla eşikleri her ürünün değerine uygun olmalı.
- Satış ve lisanslamayı bağlı tutun. Mağaza ve qPapel Auth tek bir paneli paylaştığında iadeler, yasaklar ve sıfırlamalar senkron kalır.
- Personele yalnızca gereken erişimi verin. Personel panelleri, destek ekibinin sıfırlama ve anahtar sorularını sahip hesabı olmadan yanıtlamasını sağlar.
Bir şey ters gittiğinde, örneğin bir derleme olmaması gereken bir yerde ortaya çıktığında, aynı araçlar yanıtı yönetir. Binary Trace ile sızdırılmış derlemeleri tespit etmek adım adım bir planı anlatıyor.
qPapel Auth ürün sayfası, lisanslama, Uzaktan ayarlar ve sunucu tarafı verilerin tek bir panelde nasıl bir araya geldiğini gösteriyor.
Sıkça sorulan sorular
Ürününüzü katmanlar hâlinde koruyun
Tek araçlı koruma, öngörülebilir biçimlerde başarısız olur. Her katmanın kendi sorusunu yanıtladığı ve en önemli kararların ile verilerin sunucuda kaldığı bir yığın, saldırganlar uyum sağladıkça da ayakta kalmayı sürdürür.
Bu hafta lisanslama ve en değerli sunucu tarafı verilerinizle başlayın, ardından kalan katmanları birer birer ekleyin. Her biri, diğerlerinin açık bıraktığı bir boşluğu kapatır.
qPapel Security Team
Lisanslama ve yazılım koruması