Lisans Kontrol (Beyin Fırtınası)
-
unbalanced bunu yazdıAsayisci bunu yazdı
fikirler çok hoş :) üşenmeden yazdığınız için teşekkür ederim. İnanın ufkumu genişletti.
Ancak offline çalışma bizde kaçınılmaz. yani müşteriyi online olarak web servis üzerinden lisans kontrolüne zorlayamam.
peki şöyle birşey aklıma geldi? Bu konudaki fikirlerinizi merak ediyorum.yukarıda anlattığım lisans kontrolü müşterimiz tarihi geri alarak aşabiliyordu.
veritabanında ya da registery de her online lisans kontrolünde bu kontrolün "yapıldığı güne" ilişkin bir tarih tutsak ki bunu encrypt etsem. (LastControlDate)
bir de lisans bitiş tarihini tutsak (örn: LicenceDate:13.04.2023)
kullanıcı lisansının dolduğu bi gün online ya da ofline bir şekilde kontrol yaptı (örn: 14.04.2023) haliyle bu tarih yine kaydedilecek (LastControlDate:14.04.2023)eğer bu aşamadan sonra kullanıcı tarihi geriye alırsa basit bir if else döngüsü ile bunu tespit edebilirim diye düşünüyorum
DateTime Bugun:DateTime.Now();
if(Bugun<LastControlDate)
{
"Kullanıcı tarihi geri almış. Sistemi kapat"
}
else { "Sorun yok"}Aşılabilir mi?
Bugun:DateTime.Now();
sorun buradan kaynakli hocam. Adam tarihi geri alinca zaten burasi dogru calismayacak.
O sebeple ticker ile sayman gerektigini söyledim.
Dedigin license date ve last control olayini yapabilirsin, orada zaten süresi gecmisse direk uygulamayi bloklarsin ama adam internete baglanana kadar lisansi gecmis olsa da tarihi geri alarak kullanabilir.
şimdi şöyle düşün;
Lisans bitiş tarihi 10.03.2023 olsun ve bunu registery de özel birşekilde tutuyoruz =>LicenceDate
adam 10 gün önce lisans kontrolü yaptı ve lisans online (05.03.2023) =>LastControlDate
sonra müşteri offline olarak 11.03.2023 tarihinde programa erişmeye çalıştı ve LicenceDate geçtiği için lisanssız uyarısı aldı.
Bu esnada sistem LastControlDate öğesini 11.02.2023 olarak güncelledi.
sonra uyanıklık yapmaya kalkıp tarihi geri aldı. 01.01.2023 => DateTime.No()
şimdi bu durumda aşağıdaki kodumuz sorunsuz çalışması gerekmiyor mu :)DateTime Bugun:DateTime.Now(); //01.01.2023
if(Bugun<=LastControlDate) //01.01.2023 <= 11.02.2023
{
"Kullanıcı tarihi geri almış. Sistemi kapat"
}
else { "Sorun yok"} -
Asayisci bunu yazdı
şimdi şöyle düşün;
Lisans bitiş tarihi 10.03.2023 olsun ve bunu registery de özel birşekilde tutuyoruz =>LicenceDate
adam 10 gün önce lisans kontrolü yaptı ve lisans online (05.03.2023) =>LastControlDate
sonra müşteri offline olarak 11.03.2023 tarihinde programa erişmeye çalıştı ve LicenceDate geçtiği için lisanssız uyarısı aldı.
Bu esnada sistem LastControlDate öğesini 11.02.2023 olarak güncelledi.
sonra uyanıklık yapmaya kalkıp tarihi geri aldı. 01.01.2023 => DateTime.No()
şimdi bu durumda aşağıdaki kodumuz sorunsuz çalışması gerekmiyor mu :)DateTime Bugun:DateTime.Now(); //01.01.2023
if(Bugun<=LastControlDate) //01.01.2023 <= 11.02.2023
{
"Kullanıcı tarihi geri almış. Sistemi kapat"
}
else { "Sorun yok"}yazilarinda celiski var hocam ki öyle olmasa bile yine de yanlis yapmissin.. Yani sen kendi senaryona uygun bir tarih buluyorsun :) Ben yapayim sen bak..
Lisans Bitis tarihi 10.03.2023
Son lisans kontrolü (internete baglanmis) 05.03.2023
buraya kadar tamam olsun..
tarih 08.03.2023 olsun.. ben programi kullandim.. kücük bir program kullanarak tarihi her zaman 08.03.2023 olarak ayarladim, ya da hergün elle ayarladim...
ne oldu?
Iste senin mantiginda bunu anlamanin hic bir yolu yok hocam. O yüzden tick sayman gerekli dedim.
ayrica senin lisans kontrolün sadece bu if else ise zaten program 12.03.2023 den itibaren normal calismaya devam eder. Tabi LicenseDate'i de kontrol etmen lazim (muhtemelen belirtmemissin)
Tarihi degistirmis oldugunu aslinda anlayabilirsin hocam, eger tarih degismisse direk olarak lisansi devre disi birak.
Nasil mi yaparsin? Program ilk kullanimda bir kere internete baglanacak degil mi? O zaman utc time alirsin su siteden https://time.is/UTC
elinde canli olarak bir tarih olacak ve onu sifreli olarak kaydet. Ve tabi bir de elinde lisans bitis tarihn var. Yani elinde toplam 2 tarih var.
Daha sonra program her programin acildiginda anlik tarih ve saati alip kaydet.
Burada 2 seyi karsilastiracaksin
1- lisans baslangic ve bitis tarihleri arasinda mi bu tarih?
2- en son kaydettigin tarih'ten eski mi?
iste burada dügüm cözülmüs olur.
üstteki senaryoyu uygulayalim
Lisans baslangic: 10.01.2023
Lisans Bitis: 10.03.2023
Programi calistirdi ve o UTC tarihinide aldik onu da 10.01.2023 diyelim.
tarih 08.03.2023 oldu. Ve bu güne kadar herhangi bir tarih degistirme olayi olmadi
O halde program suana kadar 10.01.2023 den 08.03.2023 e kadar olan tüm tarihleri kaydetti.
Ve 09.03.2023 oldu tarih, adam programi acmadan tarihi 08.03.2023 yapti.
Programin kayitli tarihlere bakacak 08.03.2023 zaten sisteme kaydedilmis ve yine ayni tarih denk gelmis, demek ki tarihi degistirmis deyip, programi internete baglatmasina zorlayabilirsin ve programi actirmazsin..
Internete baglayinca son kontrol tarihini güncellersin...
Not: Burada sikinti su olur, adam programi 08.03.2023 de iki kere acabilir. O sebeple saatleri de kaydetmen ve toplam saati de saydirman gerekecek. Bir günde 24 saat olacagi icin programin kapanisi - programin acilis saat farkini kaydedeceksin
Eger 08.03.2023 de programin toplam kullanim saati 24'ü gecmisse, tarihte oynanma olmus.
Biraz karisik anlatmis olabilirim cünkü karisik :)) Ama bu sekilde bu olayi gecmesinin mümkünati yok (cracking haric).
Anlamadiysan tekrar anlatirim ama dediklerimi bir kagida cizip adim adim anlamaya calisirsan olayi cözersin :)
-
windowsta eventlog diye bir zımbırtı varmış ve bunu okuyabiliyormuşsun. her açılışta tarihin değiştirilip, değiştirilmediğini kontrol ettirebilirsin. tarih değiştirilmiş ise internete bağlanmaya zorlayacaksın ve bir ntp ile tarihi kontrol ettirip, güncel zamanı o cihaz için tekrar ayarlayacaksın. tabi bunlar google'layarak ulaştığım varsayımlar. ne derece iş görür fikrim yok.