Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => Delphi => Konuyu başlatan: __TECH__ - 02 Temmuz 2011, 14:56:03

Başlık: Delphi - .Exe Bilgileri Hex Editorde Okunmasın Nasıl Şifrelerim ?
Gönderen: __TECH__ - 02 Temmuz 2011, 14:56:03
Arkadaşlar delphi kullanarak hazırladığım bir yazılım , şirketteki serverime sabit ip üzerinden baglanıyor , mssql server 2008 R2 kullanıyorum , delphi içerisinde bir connection string tanımladım  server ip adresi , veri tabanı adı , kullanıcı adı ve sifresi bu string içerisinde yazılız , programı derliyorum,compile ediyorum   fakat , exe kıran ve exenin bilgilerini veren yazılımlarda mesela WinHexEditorde compile ettigim exe yi actıgımda server ip adresim , veri tabanı adım , kullanı adı ve sifrem gorunuyor yani kötü amaclı birisi bu exeyi acıp veri tabanına herhangi bir ms sql desktop manager yazılımla direk baglanıp bilgilerimde deişiklik yapabilir , piyasa hali hazırda satılan yazılımlarda bu connection string okunmamasının onune nasıl geciliyor ? exe yi nasıl şifrelerim  , nasıl bir yol izlemem lazım okunmaması için ?
Başlık: Ynt: Delphi - .Exe Bilgileri Hex Editorde Okunmasın Nasıl Şifrelerim ?
Gönderen: mufitsozen - 02 Temmuz 2011, 15:12:12
programinizda kullandiginiz sabit (literal) bilgileri exede gorunmemesi icin programi yazarkan sifreleyip koyunuz, kullanirkende  desifre edip okuyarak kullaniniz.

Eger literal bilginin exe icindeki yeri bilinmiyorsa desifre etmek oldukca zordur (ama imkansiz değildir)

benim cok guvenlik istemeyen programlar icin kullandigim bir method var (binlerce programcida eminim kullaniyordur) literal bilgi dizinini indexi ile XOR layip  saklayiniz okurkende tekrar index'i ile XORlayip kullaniniz

Ornegin elinizde 6 bytelik bir dizi olsa :
"_TECH_" ==> 0x5f, 0x54, 0x45, 0x43, 0x48,0x5f === indexle (0x01,0x02,0x03,0x04,0x05,0x06) XOR ===> 0x5E, 0x56,0x46,0x47,0x4d,0x59

dikkat ederseniz '_' karakteri indexle XOR edildigi icin iki degisik deger oluyor simdi bu dizini tekrar index ile XOR ederseniz orijinal dizini bulursunuz
Başlık: Ynt: Delphi - .Exe Bilgileri Hex Editorde Okunmasın Nasıl Şifrelerim ?
Gönderen: __TECH__ - 02 Temmuz 2011, 15:41:55
hocam ben delphide ms sql servere baglanmak için zeos bileşenleri kullanıyorum , ve veri tabanına baglanmadan once su kodu olusturuyorum
forum üzerine yerlestirdigim zeos connection nesnesinin adını mssql yapıyorum


mssql.HostName:='server ip adresi';
mssql.Database:='veritabanı adi';
mssql.User:='veri tabanı kullanıcı adi';
mssql.Password:='veri tabanı kullanıcı sifresi';
MsSQL.Connect;
Başlık: Ynt: Delphi - .Exe Bilgileri Hex Editorde Okunmasın Nasıl Şifrelerim ?
Gönderen: mufitsozen - 02 Temmuz 2011, 15:54:19
Alıntı yapılan: __TECH__ - 02 Temmuz 2011, 15:41:55
hocam ben delphide ms sql servere baglanmak için zeos bileşenleri kullanıyorum , ve veri tabanına baglanmadan once su kodu olusturuyorum
forum üzerine yerlestirdigim zeos connection nesnesinin adını mssql yapıyorum


mssql.HostName:='server ip adresi';
mssql.Database:='veritabanı adi';
mssql.User:='veri tabanı kullanıcı adi';
mssql.Password:='veri tabanı kullanıcı sifresi';
MsSQL.Connect;

iyiya once kucuk bir sifreleme programi yazip bu sabit degerlerin ne oldugunu hesapla or: 'www.google.com' gibi bunuda cevirince (mesela) 'xzup#$%fdjs' filan olsun (mesela dedik, tabii ayni boyda :-)  )

mssql.HostName:= DesifreProc('xzup#$%fdjs');   yazarsan olur (bu anafikir tabii ben delphi bilmem, [pascal bilirim ama]) yani off-line bir kucuk program ile sifrelemek istedigin bilgileri sifrele, bunlari ya bir .ini dosyasindan yada benim yaptigim gibi direk yerine desifreleyip koy.

kolay gelsin

Aslinda @gerbayin isi yoksa sana bu fonksiyonlari 10 dk yazardi ama (delphi ustasidir ve c vede c++ vede .....)
Başlık: Ynt: Delphi - .Exe Bilgileri Hex Editorde Okunmasın Nasıl Şifrelerim ?
Gönderen: __TECH__ - 02 Temmuz 2011, 16:01:21
hocam internette arastırdım ama genelde hepsi bilinen sifreleme teknikleri , genelde herkes md5 olarak dusunmusler mesela
mesela 127.0.0.1 in md5 karsılıgı =  f528764d624db129b32c21fbca0cb8d6

su sekilde yapsam

mssql.hostname :=MD5('f528764d624db129b32c21fbca0cb8d6');

bu sekilde server adının kac karakterde saklandıgı ortada yani 32 karakter olan md5  41 olanı hash burdanda anlasılır ve geri donusum yapılmasa bile baglanıcak olan kişi , kendi yazdıgı ozel ayrı bir yazılımla zaten oda aynı sekilde kendi yazılımında

mssql.hostname :=MD5('f528764d624db129b32c21fbca0cb8d6');

yazdıgı zaman direk baglanır cunku md5 bir dogrulama algoritması yani yazılanla numara dogrulandıgında baglantı saglanır , piyasada olmayan bir algoritma bulmak lazım geri donusmemesi için
Başlık: Ynt: Delphi - .Exe Bilgileri Hex Editorde Okunmasın Nasıl Şifrelerim ?
Gönderen: mufitsozen - 02 Temmuz 2011, 16:02:54
Alıntı yapılan: __TECH__ - 02 Temmuz 2011, 16:01:21
hocam internette arastırdım ama genelde hepsi bilinen sifreleme teknikleri , genelde herkes md5 olarak dusunmusler mesela
mesela 127.0.0.1 in md5 karsılıgı =  f528764d624db129b32c21fbca0cb8d6

su sekilde yapsam

mssql.hostname :=MD5('f528764d624db129b32c21fbca0cb8d6');

bu sekilde server adının kac karakterde saklandıgı ortada yani 32 karakter olan md5  41 olanı hash burdanda anlasılır ve geri donusum yapılmasa bile baglanıcak olan kişi , kendi yazdıgı ozel ayrı bir yazılımla zaten oda aynı sekilde kendi yazılımında

mssql.hostname :=MD5('f528764d624db129b32c21fbca0cb8d6');

yazdıgı zaman direk baglanır cunku md5 bir dogrulama algoritması yani yazılanla numara dogrulandıgında baglantı saglanır , piyasada olmayan bir algoritma bulmak lazım geri donusmemesi için

verdikya algorithmayi!

birde exe dosyasinin icinde nerde md5 bilgisi basliyor ve kac byte kim bilecek varmi oyle bir babayigit?
Başlık: Ynt: Delphi - .Exe Bilgileri Hex Editorde Okunmasın Nasıl Şifrelerim ?
Gönderen: t2 - 02 Temmuz 2011, 16:18:45
Programı kullanan kişiden aşağıdaki bilgileri neden gizliyoruz?

mssql.HostName:='server ip adresi';
mssql.Database:='veritabanı adi';
mssql.User:='veri tabanı kullanıcı adi';
mssql.Password:='veri tabanı kullanıcı sifresi';
MsSQL.Connect

Bu işte bir bit yeniği var. Ben kullanacağım programın bilmediğim yerlere bağlanmasını istemem. Şifre girilecekse de, kendim girmem veya görmem lazım.
Başlık: Ynt: Delphi - .Exe Bilgileri Hex Editorde Okunmasın Nasıl Şifrelerim ?
Gönderen: __TECH__ - 02 Temmuz 2011, 16:23:30
hocam o algoritma yazma işini cozemedim :) delphide cok cok iyi deilim bende bildigim ve arastırıp buldugum kadarı ile toparlayıp birseyler yazdım bende ama algoritma işinde takıldım
Başlık: Ynt: Delphi - .Exe Bilgileri Hex Editorde Okunmasın Nasıl Şifrelerim ?
Gönderen: __TECH__ - 02 Temmuz 2011, 16:25:30
hocam siz sifrenizi zaten gireceksiniz kullanılar icin olan kullanıcı adı ve sifresinden bahsetmiyorum , yazılımın genel veri tabanı ile arasındaki baglantıdan bahsediyorum , program bilmedigimiz bir yere baglanmıyoki kullanıcın ihityacı olan stok bilgilerini vermek icin ana serverde calısan baska bir ana yazılımın veri tabanına baglanıp o anki cuncel stok adetlerini gostericek , korkumuz kötü amaclı biri tüm stokları silmesin deiştirmesin veri tabanı  ip adresini ve bilgileri gorup
Başlık: Ynt: Delphi - .Exe Bilgileri Hex Editorde Okunmasın Nasıl Şifrelerim ?
Gönderen: t2 - 02 Temmuz 2011, 16:27:18
Bu kullanıcı için bazı kısıtlamalar olması lazım. o şekilde olur. Ya da  zaten internet olacaksa program kullanılmaz, internet üzerinden işlem yapılır.

Ozaman bu bilgiler webteki config.php gibi bir ayar dosyasında durur.  kullanıcılar zaten onu göremez.

Kullanıcı bilgisayarında kullanıcı adı ve şifre olur.  bununla siteye giriş yapılır her kullanıcının şifresi ve kul. adı farklıdır. yetkileri ve grubu da olur.
Başlık: Ynt: Delphi - .Exe Bilgileri Hex Editorde Okunmasın Nasıl Şifrelerim ?
Gönderen: mufitsozen - 02 Temmuz 2011, 16:28:53
Alıntı yapılan: __TECH__ - 02 Temmuz 2011, 16:25:30
hocam siz sifrenizi zaten gireceksiniz kullanılar icin olan kullanıcı adı ve sifresinden bahsetmiyorum , yazılımın genel veri tabanı ile arasındaki baglantıdan bahsediyorum , program bilmedigimiz bir yere baglanmıyoki kullanıcın ihityacı olan stok bilgilerini vermek icin ana serverde calısan baska bir ana yazılımın veri tabanına baglanıp o anki cuncel stok adetlerini gostericek , korkumuz kötü amaclı biri tüm stokları silmesin deiştirmesin veri tabanı  ip adresini ve bilgileri gorup
Başlık: Ynt: Delphi - .Exe Bilgileri Hex Editorde Okunmasın Nasıl Şifrelerim ?
Gönderen: t2 - 02 Temmuz 2011, 16:30:33
Alıntı yapılan: t2 - 02 Temmuz 2011, 16:27:18
Ozaman bu bilgiler webteki config.php gibi bir ayar dosyasında durur.  kullanıcılar zaten onu göremez.
Başlık: Ynt: Delphi - .Exe Bilgileri Hex Editorde Okunmasın Nasıl Şifrelerim ?
Gönderen: Burak B - 02 Temmuz 2011, 16:35:05
Bu konu benim uzmanlık alanıma giriyor. :)  Zeos kullanıyorsan ağzınla kuş tutsan o verileri alırlar. Geçtim Zeos u ne istersen yap o verileri alırlar. Bu işi server tarafında halletmelisin. Client tarafında bu tür bilgileri barıdırmak tehlikelidir. XOR v.s. boşuna uğraşma. Hatta RSA, AES bile yapsan çözerler. Server tarafında çözümle konuyu. Benden ipucu direkt mysql servera değilde kendi yazdığın bir authentication servera bağlan oda senin isteklerini server tarafındaki mysql servera iletsin. ;)

Örnek;
Bak mesela ben senin programını irdelemek isteyen kötü niyetli birisi olsam durup lamer vari hex editörde stringler aramazdım; ne yapardım giderdim işletim sisteminin network çıkışında senin kullandığın protokolü dinlerdim. Sen istediğin kadar şifreleme kullan eninde sonunda bağlantı kuracaksın ve o bilgi orada apacık halde olacak. Bilmem anlatabildim mi ? Ha istersen SSL veri akışını kullan farketmez bende gider SSL paketini oluşmadan modifiye edip o bilgiyi alırım. İşte bu yüzden bu işi client tarafında değil server tarafında hallet diyorum. Umarım açıklayıcı olabilmişimdir. Lamerlardan koruyayım yeter diyorsan git Sanal makineler ve morphism kullanan bir execryptor edin onunla programını paketle. Böylece pekçok lameri programından uzak tutmuş olursun ama herşey biryere kadar bu bahsettiğim dinleme tekniğini akıl edecek biri çıkarsa ki (bu bir lamer olmayacaktır) client tarafında pek şansın olmaz.

Kolay gelsin.
Başlık: Ynt: Delphi - .Exe Bilgileri Hex Editorde Okunmasın Nasıl Şifrelerim ?
Gönderen: iyildirim - 02 Temmuz 2011, 22:10:18
Bu prograın kullandığı loginlerin veya daha iyisi loginlerin bağlı olduğu role'lerin  haklarını  sınırlandırın.  MsSQL de her bir tablo yada bir tablonun tek tek elemanlarının read, update, delete gibi haklarını belirleyebilirsiniz. Eğer silinme ve update işlemlerini istemiyorsanız bu haklarını role permission içerisinde vermezsiniz olur biter.

Ayrıca çok gerekiyorsa tek tek tabloların kolonlarına  (eski deyimle field) da bu hakların tanımlamak mümkün..

Ancak bunun yerine update delete gibi işlemlerde bu tip bağlantıların kullandığı login veya role'lere bu hakları vermek yerine update delete işlemlerini store procedure' ler üzerinden yapmak daha iyi. Bir store procedure'e execute hakkı verildiğinde bu procedure içerisinde güncellenen tablolara bu hakları vermek zorunda değilsiniz.  Yani işlem sizin store procedure de tanımladığınız şekilde yapılır..  Three tier yazmak da buna benzer ve daha iyi bir çözüm..  Web servisleri de..

Daha da sağlam olsun isterseniz, tabloların altına yazacağınız triggerlerde güncellenen veya silinen kayıtları yedek bir veritabanına aktarmak da mümkün. Bu şekilde şifreyi kaptırıp çeşitli tablolar isteğiniz dışında güncellense bile her hangi bir timestamp anına geri dönmekte mümkün olur.

Sadece basitce bir hex editörle şifrelerim görünmesin diyorsanız, arkadaşlar neler yapılabileceğini yazmışlar. Bende bu şekildeki bilgileri açık yazmak yerine 3DES ile şifrelerim..

Eğer VPN veya SSL 'i de kendin kurayım derseniz hellman-hiff (doğru yazdım umarım, yıllardır bakmıyorum. ) gibi algoritmalara da bakabilirsiniz.

Başlık: Ynt: Delphi - .Exe Bilgileri Hex Editorde Okunmasın Nasıl Şifrelerim ?
Gönderen: __TECH__ - 02 Temmuz 2011, 22:13:51
Alıntı YapBu kullanıcı için bazı kısıtlamalar olması lazım. o şekilde olur. Ya da  zaten internet olacaksa program kullanılmaz, internet üzerinden işlem yapılır.
Ozaman bu bilgiler webteki config.php gibi bir ayar dosyasında durur.  kullanıcılar zaten onu göremez.
Kullanıcı bilgisayarında kullanıcı adı ve şifre olur.  bununla siteye giriş yapılır her kullanıcının şifresi ve kul. adı farklıdır. yetkileri ve grubu da olur.

web sitesi girişleri üzerine değil hocam , delphi ile hazırlanmış serverdeki mssql veri tabanından bilgi ceken client bir yazılım için sordum yani server ip adresi kullanıcı bilgisayarındaki exe icerisinde , server taraflı yazılabilir hersey evet haklısınız ama client yazılım server ip adresini nerden okuyacakki servere baglanıpta server tarafındaki işlemleri gorsun ,  server bilgileri exe icinde olmak zorunda bilinmeyen bir algoritma yazarak bi care bulcaz artık
Başlık: Ynt: Delphi - .Exe Bilgileri Hex Editorde Okunmasın Nasıl Şifrelerim ?
Gönderen: Analyzer - 02 Temmuz 2011, 22:53:28
Selam,

Exe packer'lar var, pe protectorlar var vs. bir sürü program var. Tabi depacker'lar da var ancak depack edilmiş exe dosyasındaki sabitler PE yeniden oluşturulurken CRC ye göre tekrar düzenleniyor olması lazım. Deneyip görmekte fayda var :

www.exetools.com

Analyzer
Başlık: Ynt: Delphi - .Exe Bilgileri Hex Editorde Okunmasın Nasıl Şifrelerim ?
Gönderen: birumher - 04 Temmuz 2011, 15:30:25
Ne olursa olsun herhangi bir database server ı doğrudan internete açmak yanlış. Ne yaparsak yapalım client ın nereye bağlandığını bulmak çok kolay. Bunu şifrelemek yerine , benim çözüm önerilerim şöyle.
Aradaki bağlantı VPN yapılıp server ın direk internet erişimi kesilir.
Bir web service yazılıp işlemler onun üzerinden yapılabilir.
Delphi DataSnap kullanılabilir.
Eğer client tek bir yerden çalışacaksa buranın da sabit ip li olması sağlanır ve server sadece o ip den bağlantı kabul eder.
Başlık: Ynt: Delphi - .Exe Bilgileri Hex Editorde Okunmasın Nasıl Şifrelerim ?
Gönderen: __TECH__ - 04 Temmuz 2011, 15:34:08
hocam kullanıcı giriş kısmını webserverdeki bir asp dosyasından girdirsem mesela forma bir browser koyup direk sitemdeki o linke baglanıp ordan kullanıcı ve adını alsam sonra onu webserverdeki veri tabanımdan kullanıcıyı kontrol etsem eger dogru ise , web sayfası üzerindeki bir text edite serverin bilgilerini gondersem delphi yazılım da bu eger kullanıcı adı dogru ise bur text editten server bilgilerni alıp acılsa sonraki işlmeler tamamen delphi yazılımla server arasında olacak webservis devre dısı kalacaz ? bu işlemdede delphi yazılım aktif durumda iken , asp sitemden okudugu adresi bukmak mumkunmudur ?
Başlık: Ynt: Delphi - .Exe Bilgileri Hex Editorde Okunmasın Nasıl Şifrelerim ?
Gönderen: birumher - 06 Temmuz 2011, 10:04:05
Client server ile bağlantı kurduğu anda ne olursa olsun server adresi okunabilir.
Başlık: Ynt: Delphi - .Exe Bilgileri Hex Editorde Okunmasın Nasıl Şifrelerim ?
Gönderen: Burak B - 06 Temmuz 2011, 12:42:55
https://www.picproje.org/index.php/topic,34315.msg240576.html#msg240576 (https://www.picproje.org/index.php/topic,34315.msg240576.html#msg240576)
Başlık: Ynt: Delphi - .Exe Bilgileri Hex Editorde Okunmasın Nasıl Şifrelerim ?
Gönderen: engylm - 21 Eylül 2011, 11:16:37
UPX dene.

exe dosyası al UPX.exe nin üzerine bırak. 3 mb lık bir exeyi  1.4 mb civarına düşürür. ayrıca HEX editörlerle ve dede Dekompile  gibi programlarla bir şey göremezler.

Fakat yinede  server  kullanıcı adı şifre gibi verileri  exe içine gömmek yerine  XOR  gibi bir mantıkla şifreleyerek bir  text yada DLL içine gömmen daha mantıklı. server değiştiğinde her seferinde yazılımını değiştirmek zorunda kalacaksın.  Bigfish  adlı bir component var . senin belirlediğin 1 den fazla anahtar ile şifreleme yapıyor. kullanabilirsin.

http://upx.sourceforge.net/

UPX buradan indirebilirsin. benim olmazsa olmazımdır.
Başlık: Ynt: Delphi - .Exe Bilgileri Hex Editorde Okunmasın Nasıl Şifrelerim ?
Gönderen: Burak B - 21 Eylül 2011, 12:30:51
upx -d dosya_adı.exe = orjinal exe

Ayrıca scramble edilmiş olsa bile kolayca unpack edilir.
Başlık: Ynt: Delphi - .Exe Bilgileri Hex Editorde Okunmasın Nasıl Şifrelerim ?
Gönderen: Karahan - 03 Aralık 2011, 19:10:20
   Anladığım kadarıyla database'i korumak istiyorsun, bunun içinde koruma işini database tarafından yapabilirsin. Bu tip bir şeyi ben de yapmıştım, mssql'i bilmiyorum ama ben PgSQL kullandim, madem kullanıcılar db den sadece güncelleme yapacak o zaman ilk olarak tablolara yazma hakkını sadece yerel kullanıcılara tanıyabilirsin dahası hangi ip den db ye baglanılacağını db ye tanımlayabilirsin "programı kullananların ttkom vs den sabit ip almalarını istemelisin", db nin authentication protocol'unu sha,sha1,mdb, vs yapabilirsin, güncellemeleri table değilde bir view yada function tanımlayarak yapabilirsin, ben hiç kullanmadım ama PgSQL'de SLONY-I isimlli bir eş zaman yedekleme sunucu sistemi var daha ne diyeyim...Tüm bunları reklam yapmak için yazdığımı düşünebilirsin önemli değil ama eğer senin mssql de bu özellikler yoksa boşuna uğraşma derim. Biraz daha uğraşıp güvenliği paronoya ya çevirebilirsin ama madem güvenlik o kadar önemli db'ni internete açma derim.

   Yukarıdaki özellikleri barındıran sınırlı sayıda Database var, benim bildiğim ORACLE'da var.Bir de işletim sisteminin güvenliği kadar database'in güvenliği de bir o kadar önemli, kolay gelsin...