Çalıştırılan programın kendi crcsini hesaplaması

Başlatan z, 03 Haziran 2015, 15:29:19

z

Bir zamanlar aşağıdaki soruna kafa yormuş ve çözümünü bulamamıştım.

Hala da nasıl yapılacağını bilmiyorum.

Programı çalıştırdığımız anda program kendi kendinin 1.byte"ından sonuncu byte"ına kadar tüm verilerinin crc değerini hesaplayacak.

Ardından program içinde zaten belli crc değeri ile karşılaştıracak.

Eğer farklı ise bu orjinal program değil deyip çıkacak.

Batch dosya yada ikinci bir exe ile yapılabiliyor. Fakat ben bunu tek exe ile yapmak istiyorum.

Sorun işletim sisteminin çalışan exeye okuma/yazma yasağı getirmesinden kaynaklanıyor. Ama çözümü vardır elbet.


Bana e^st de diyebilirsiniz.   www.cncdesigner.com

t2

Delphi ile Programınıza CRC Koruması

crc korumasını programımızın kimlik numarasını alma ve kontrol etme şeklinde kullanacağız. burada her programın veya dosyanın belli crc numarası vardır ..  6A97568C  gibi.... ama dosyamızın ufacık bir yerini bile değiştirdiğimiz zaman  yani cracklandığı zaman bu numaralar değişir. biz delphi ile bu numarasnın değiştiğini algılayıp ona göre programımıza engelleme kodları yazacaz.

burada yapacağız işlem 2 tane dosyamız olacak birincisi programımızın crc numarasının kayıtlı olduğu dll dosyası ikincisi progje dosyamız.

burada programımızın tüm kodlamasının bittiğini varsayıyorum ve koruma işlemine geçiyoruz..

1 -

procedure TForm1.FormCreate(Sender: TObject);

Var
Check:Boolean;
begin

Check:= CrcKontrol(Application.ExeName);
if Check then
      begin
      label1.Caption := ' Programınız Düzgün Çalşıyor';
      label1.Font.Color := ClGreen;
      End
else
      Begin
      label1.Caption := '  Programınız Cracklandı ';
      label1.Font.Color := ClRed;
      end;
end;

end.



2 -

Ben yazmadım.  alıntıdır >şuradan <

z

Tamam süpersin. Sistemde crc hesaplayan fonksiyon varsa oldu bu iş.

Yalnız iki dosya olayını sevmedim.

Bunun tek dosya hali olanını yazarım artık.

Yalnız tek dosya olanı acaip kıl.

Kıllığın ne olduğunu görebiliyormusunuz?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

t2

TurboPower Onguard komponentleri var bedava. onun içerisinde aradığınız fonksiyon var. gerçi komponent sevmezsiniz :)

neyse o şöyle çalışıyor. exeyi yaptık. bunun içinde bir kod parçası gömülü. dışarıdan başka bir exe onun kodunu siliyor perçinliyor. tek program var yine. artık değiştirirseniz  program sizin daha önceden ayarladığınız işleri yapıyor.  Ben şöyle yapmıştım. kırılan program, sözde beklendiği gibi çalışmaya devam ediyor. fakat zaman içerisinde cezalandırıyor. kafasına kafasına vuruyor. korsan kullanıcı mahvoluyor :)

z

Aslında işin gücün olmayacak virüs yazan adamlara kıllık yapan programlar geliştireceksin.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

fatih6761

Hocam CRC kontrol işi pek de garanti değil. Kontrol için CRC kodunu programı derlerken yazacaksanız primary sectionların dışında bir yerde olmalı. Çünkü CRC kodunu hesaplayıp eklediğinizde yeni bir veri ve dolayısıyla yeni bir CRC kodu oluşacak. Bunu önlemek için CRC kodunu hesaplanan alanın dışında bir yerde tutmanız gerekiyor. Bunu da ancak derleme zamanında yapabilirsiniz.
Diyelimki bunu hallettiniz, CRC kodunun adresi bir disassembler ile kabak gibi açığa çıkar. İsteyen istediği değişikliği yapar, kodun sonunu CRC adresi olarak belirler, CRC hesaplar ve program yeni CRC kodu üzerinden hiçbirşey anlamadan çalışmaya devam eder. Programı kıracak olan adamın işini en fazla birkaç saat uzatırsınız.
Bıktırma babında işe yarar, ama hedefe kitlenilmişse pek de işe yaramayacaktır diye düşünüyorum.

t2

Alıntı yapılan: z - 03 Haziran 2015, 15:56:51
Aslında işin gücün olmayacak virüs yazan adamlara kıllık yapan programlar geliştireceksin.
Bir forumda uzman kişi şöyle demiş:
Programınız çalışıyorsa kırılır. Kırılmayan program istiyorsanız, çalışmayanını yapmalısınız.

z

Kırılır da ot yoldurur.

Mesela debug edildiğini anlayan programın karşı atağa geçmesi sıradan debugcıları devre dışı bırakmaya yeter.

Fakat işletim sisteminin de desteğini almak lazım.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

t2

işletim sisteminin kendine faydası olsa, desteği hiç esirgemez.

z

Alıntı yapılan: fatih6761 - 03 Haziran 2015, 16:01:44
Hocam CRC kontrol işi pek de garanti değil. Kontrol için CRC kodunu programı derlerken yazacaksanız primary sectionların dışında bir yerde olmalı. Çünkü CRC kodunu hesaplayıp eklediğinizde yeni bir veri ve dolayısıyla yeni bir CRC kodu oluşacak. Bunu önlemek için CRC kodunu hesaplanan alanın dışında bir yerde tutmanız gerekiyor. Bunu da ancak derleme zamanında yapabilirsiniz.
Diyelimki bunu hallettiniz, CRC kodunun adresi bir disassembler ile kabak gibi açığa çıkar. İsteyen istediği değişikliği yapar, kodun sonunu CRC adresi olarak belirler, CRC hesaplar ve program yeni CRC kodu üzerinden hiçbirşey anlamadan çalışmaya devam eder. Programı kıracak olan adamın işini en fazla birkaç saat uzatırsınız.
Bıktırma babında işe yarar, ama hedefe kitlenilmişse pek de işe yaramayacaktır diye düşünüyorum.

Bu çözümü virüs bulaşmasına karşı düşünüyorum. Yoksa debuger ile uğraşan tabiki bunu devre dışı bırakır.

En azından bu yönteme özel virüs geliştirilmediği sürece virüslere karşı kesin çözüm gibi görünüyor.

Yukarıda yazdığın cevapta bahsettiğim kıllığı yakalamışsın.

Şimdi soru: Dediğin gibi değil komple tüm programın crcsini hesaplayıp gene kendi içindeki crc ile karşılaştıran programı yazmak.

Yazılır....


mesaj birleştirme:: 03 Haziran 2015, 14:13:21

Hatta basit bir exe yazmak lazım.

Bu exeyi çalıştırdığında eğer virüs exeyi değiştirmişse dikkat makinenizde virüs var uyarısı vermesi süper bir şey.
Hatta virüslü kısmı yakalayıp bir dosya içine yazması daha da süper olur. Alın buda virüs kodunuz.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

fatih6761

Hocam CRC değerini içindeyken hesaplamak kısmına kafam basmadı.
Hesaplayıp yazdığımız CRC kodun CRC sini değiştirmeyecek mi?
CRC yi hesaplanan alanın içinde tutmayı nasıl başarırız?

z

Tamam işte sorunu tam olarak anladın.

Soruyu basitleştireyim.

3 adet veri alanı var.

1. veri belli. 2 ve 3. veri alanına 1., 2. ve 3. veri alanlarındaki verilerin toplamı ve toplamı bozmayacak ilave veri yazılacak.

Örnek: [1]=x
           [2]=0
           [3]=0

toplamı hesaplansın.

x+0+0=x+x-x

o halde 2 veri alanına x, 3 veri alanına da -x yazarsak sonuç değişmez.

Bu örneği toplamla koruduk. Aynı örneği CRC ile korunur hale getireceğiz. Soru bu.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

fatih6761

#12
Hocam yanlış hatırlamıyorsam CRC kodu AND OR gibi geri dönüşsüz operatörleri kullanıyorlar.
Bir de toplama işleminin değişme özelliği var. a+b=b+a sağlanıyor ama
sıralı veriler olunca
CRC(a,b,c) = CRC(b,a,c) sağlanıyor mu bunu bilmemiz lazım.

=================================
a,b sabit veriler olsun. Her a,b için
CRC(a,b,c) = c yi sağlayan bir c verisi tam tanımlı yollardan bulunabiliyorsa iş kolay demektir.

z

2 ilave değişkenle aynı crcyi elde edemiyorsak ilave değişken sayısını artırabiliriz.

Yani Crc(a,b,c,..........son,0,0,0.....0)=Crc(a,b,c,..........son,x,y,z....crcn)

Buradaki x,y,z... verilerinin amacı crcyi eşitlemeye yarayacak ilave veriler.

Sorun zaten crc yi tersden hesaplama zorluğu fakat bilgisayarla hızlıca deneme yaptırılabilir.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Icarus

@z: CRC'i sabit ve sıfır olarak kabul edersen şöyle yapılabilir.
A = Dosyadaki binary data ise
CRC(A + CRC(A)) = 0 olur