[ grizzly @ 07.09.2008. 22:18 ] @
| Napravio sam jednu aplikaciju (svoju prvu :) ) za koju ce uskoro krenuti prodaja sto ce reci da je programiranje gotovo, osim jedne bitne stvari a to je ZASTITA.
Kada neko bude zeleo aplikaciju (vrlo je specificna i mali je broj potencijalnih interesenata) ja ili neko od kolega sa kojima sam radio cemo otici i "instalirati" korisniku program. Kazem "instalirati" jer su to obicni .class fajlovi koje cemo prekopirati na korisnikov racunar. E sad posto je takva homogena grupa potencijalnih korisnika vrlo je bitno da se spreci da jedan covek jednostavno odnese folder sa koleginog racunara i iskopira kod sebe, tacnije da program ne radi na tom drugom racunaru. Mislim da sam dovoljno objasnio sta me muci.
Na pretrazi foruma es izlazi 19200 rezultata ali od toga je 95% za zastitu kopiranja sa CDa a ostalo je za .NET. Na forumu java 1 odgovor (mozda ja ne znam da postavim pitanje) i to oko JME. U stvari jedna tema i nijedan odgovor... Guglam vec par dana i ne mogu reci da sam nasao nesto koristno pa ako imate neke sugestije dajte.
Unapred hvala! |
[ augustus @ 07.09.2008. 22:30 ] @
Eto zasto ja volim hosted resenja! :) Dignes aplikaciju kod sebe na
serveru i lepo korisnici plate da je koriste i gotovo! Sad to samo kod
onih koji imaju net.
Neka ideja da pokupis prilikom instalacije podatke sa tog racunara i na
osnovu njih kreiras kljuc. Posle aplikacija kad se startuje procita
podatke sa racunara kriptuje ih i uporedi sa kljucem koji si ti kreirao
ranije i ako ne pase jbg vozdra. Valjda nece nositi nekom hakeru da
provali :)
[ Mister_rap @ 07.09.2008. 22:35 ] @
Ova varijanta je skroz ok, a ako su manje zahtevni korisnici dovoljno je i kopiranje nekog fajla na nekoj lokaciji i onda prilikom startovanja proveris da li taj fajl postoji ili ne i to je to...
Naravno ako prodajes neko ozbiljnije resenje treba ti i ozbiljnija zastita 
[ debeli brka @ 08.09.2008. 00:08 ] @
moram da pitam, da li neko zna kako pomocu jave pokupiti neke podatke vezane za konkretan racunar (cini mi se da System.getProperty nema takve mogucnosti)?
[ grizzly @ 08.09.2008. 00:34 ] @
Upravo to, ja sam isto smislio kao sto augustus kaze, i to je upravo onoliko koliko sam mislio da idem u zastiti. Jednostavno da ne moze copy-paste. Mislio sam da putem System.getProperty() pokupim cd key windowsa (ne znam zasto sam to mislio da moze) i bas to da odradim sa jednim fajlom koji ce se proveravati na start-upu. cd key naravno ne moze, jedino sto i malo lici na ovo sto mi treba, a da se dobije sa getProperty() je "user.name" sto nije najzgodnije, mada ce pre biti razlicito to od racunara do racunara nego cd key...
Kako uzeti broj hard diska, ima li ploca neku identifikaciju koja se moze ucitati ili tako nesto?
[ nemnesic @ 08.09.2008. 01:40 ] @
[ abyss @ 08.09.2008. 07:51 ] @
@nemnesic
Stranica ne postoji, na sta si tacno mislio?
[ zigizig @ 08.09.2008. 08:28 ] @
Meni se čini da i kada napraviš tu vrstu zaštite od kopiranja neko može da dekompajlira .class fajlove i da ti prčka po kodu pa i da nađe deo koda vezan za zaštitu.
Eventualno da provučeš sve .java fajlove kroz obfucator-e i sl.(recimo ProGuard) alate koji će učiniti kod toliko nerazumljivim da se svako ko hoće da ti crack-je kod u startu smori :)
[ grizzly @ 08.09.2008. 09:15 ] @
Provuci cu kroz obsfucator (dajte rec na srpskom :)) svakako, mada nema realne potrebe al cisto da naucim nesto novo. Realnija opasnost je copy-paste...
[ grizzly @ 08.09.2008. 09:54 ] @
@ nemnesic
bacio sam pogled na JNI i to mi je prejako cini mi se za ovo sto meni treba. Trebalo bi da zavrsim to za par dana, a ucenje JNI moze da potraje, plus ne znam C++, plus nisam siguran u stabilnost takvog resenja jer cu ja morati da ga sklepam.
Link ne radi, jel bi mogao u par reci da kazes sta se pricalo na temi pa da proguglam?
[ Cyberghost @ 08.09.2008. 13:18 ] @
Jedna varijanta je da zastitis tako sto ces iscitati serijski broj hard diska ali tu Java zakazuje
jer ne moze "sama" to da odradi nego mora de koristi neka mini aplikacija recimo u "C" jeziku pa da se
kao sto je Nemnesic rekao uz pomoc JNI pokrene aplikacija i proveri serijski broj diska, ta je zastita
efikasna, koristimo je u firmi vec duze vreme ali nije Java !!!
Mislim da resenje sa fajlom smestenim negde u fajl sistemu moze lepo da se odradi posao, moze cak
da se napravi instalacija InstallShield-om koja ce sve sama da uradi, postavljanje classpath-ova,
install zeljenog fajla ....
Javi kako napreduje !
[ nemnesic @ 08.09.2008. 15:08 ] @
kako ne radi evo ponovo:
http://forums.sun.com/thread.jspa?forumID1&threadIDh3640
i jos jedan
http://www.rgagnon.com/javadetails/java-0580.html
da kao sto je Cyberghost rekao jedno od resenja je da citas HD serial
number. ali java to sama ne moze tako moras nesto sam da sredis
[ Dejan Lozanovic @ 08.09.2008. 16:03 ] @
Zastita i java nazalost/ili na srecu ( zavisno iz cije perspektive gledas :) ) jednostavno ne idu zajedno. Javine klase je mnogo lako dekompajlirati i raditi sa njima, i pitanju da cak i da obfrukujes klase tako da ne moze da se dekompajlirani kod ponovo kompajlirati, napadac prosto izvuce kljucni metod koji generise kljuc, i ubaci ga u keygen, ili sa druge strane ako cak provuces celu zastitu kroz JNI, uvek moze taj magicni if da se zaobidje preko http://jakarta.apache.org/bcel/ i da stavi uvek true ili false da se vraca kao rezultat. Tako da veruj mi prosto ne vredi ulagati neke extra velike napore da bi napravio zastitu za javu.
[ augustus @ 08.09.2008. 16:12 ] @
[ abyss @ 08.09.2008. 17:41 ] @
[ Cyberghost @ 08.09.2008. 18:33 ] @
Uzmimo primer, prodali smo aplikaciju i napravili smo jednostavnu zastitu tipa sakriveni fajl ili jos lakse MAC adresa
mrezne kartice. Da li stvarno postoji kupac takvog softvera ko ce da se zamlacuje da razbije zastitu, taj koji
to uspe da uradi taj ga zna i sam napisati. Zastitili se nisu ni veliki sistemi, prvi M$, Nero, Antivirusi i ostalo, tako da
ukoliko aplikacija nije "planetarno" vazna postavi jednostavnu zastitu i ako bas hoces provuces kroz obfuscator te klase,
veruj mi da niko nece biti toliko zaludan da razbija glavu i da provaljuje to.
[ abyss @ 08.09.2008. 18:37 ] @
A postoji li parce koda koje bi pod linux-om citalo ser. broj hdd-a? kao onaj VB skript?
[ nemnesic @ 08.09.2008. 18:52 ] @
@abyss
mozda ovako nesto?
hdparm -i /dev/hda
[ Cyberghost @ 08.09.2008. 19:08 ] @
Aplikacija za zastitu preko serijskog broja HDD-a radi i iscitava ispravan broj HDD-a (pazi cuda),
uporedio sam brojem koji je iscitan u Clipper aplikaciji i poklapa se.
Ajd sad da vidimo kako da se zaobidje, ako neko ima vremena da se igra !!!
[ MarkoBalkan @ 08.09.2008. 20:28 ] @
jednu od mogučnosti žaštite je da staviš neki event za koji ti znaš, npr
shift->a,f ili nešto.
pojavi se prozor koji te pita password, a password je zapisan u fileu kao i ime računala i password.
kad uneseš password, u jedan file zapisuješ ime računala, user i password.
a text fila kodiraš sa nekim algoritmom.
na pokretanje provjeriš da li su user i ime računala zapisani u fileu jednaki dotičnom na kojem se izvršava aplikacija.
ili može biti i vidljiv gumb za login.
[ Eurora3D Team @ 08.09.2008. 20:43 ] @
@grizzly
Evo imas celu stvar (ako se radi o windowsu)
Procedura :
Snimi ovo sto sam napisao kao NekiFajl.vbs u instalacionom folderu. Kad odes da instaliras pusti ga da bi dobio Serial.txt (sa brojem HD-a C) u istom folderu i onda obrisi vbs fajl.
Code:
'GetHDSerial.vbs
'Citanje
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set colDrives = objFSO.Drives
Set objDrive = colDrives.item("C")
Dim str
str = objDrive.SerialNumber
'Upis u fajl Serial.txt
Set FSO = CreateObject("Scripting.FileSystemObject")
Set FS = FSO.CreateTextFile("Serial.txt")
FS.Write str
FS.Close
U aplikaciji koristi drugu funkciju sa strane http://www.rgagnon.com/javadetails/java-0580.html iz @nemnesic-ove poruke.
Znaci u javi negde na pocetku izvedi ovu fn sa parametrom C kao ime drajva
Code:
public static String getSerialNumber(String drive) {
String result = "";
try {
File file = File.createTempFile("realhowto",".vbs");
file.deleteOnExit();
FileWriter fw = new java.io.FileWriter(file);
String vbs = "Set objFSO = CreateObject(\"Scripting.FileSystemObject\")\n"
+"Set colDrives = objFSO.Drives\n"
+"Set objDrive = colDrives.item(\"" + drive + "\")\n"
+"Wscript.Echo objDrive.SerialNumber"; // see note
fw.write(vbs);
fw.close();
Process p = Runtime.getRuntime().exec("cscript //NoLogo " + file.getPath());
BufferedReader input =
new BufferedReader
(new InputStreamReader(p.getInputStream()));
String line;
while ((line = input.readLine()) != null) {
result += line;
}
input.close();
}
catch(Exception e){
e.printStackTrace();
}
return result.trim();
}
i posle toga iz jave procitaj Serial.txt i uporedi stringove. Ako nisu isti ili Serial.txt ne postoji prekini program i to je to
Normalno ako ljudi znaju sami da ocitaju broj HD-a i naprave Serial.txt za drugi PC cela ova zastita pada u vodu (eventualno bi mogao da txt stavis negde drugo da nije toliko ocigledno ili da ubacis jos nesto u txt fajl posle serijskog broja). Ovo je instant resenje tek da ne moze da se samo iskopira i da radi
poz
[ nemnesic @ 08.09.2008. 21:00 ] @
a mozes da umesto ovog Serial.txt korisitis embedded DB firebird. Pa
je lepo zakljucaj tako da i ako oni znaju da citaju SERIAL ne mogu da
srede firebird db.
:)
nn
[ abyss @ 08.09.2008. 21:10 ] @
Tema ide u pogresnom smeru, sve sto pominjete moze da se izbegne sa "//"...
Jedina metoda koja je koliko-toliko delotvorna je custom classloader i native kriptovanje (i dekpritovanje) klasa
za koje ne postoji (barem ja nisam nasao) opensource resenje...
[ Aleksandar Đokić @ 09.09.2008. 02:14 ] @
idi na zamajavanje crackera :) procitaj nekoliko stavki i samo jednu, npr. serial hdd-a proveri, i to ne direktno nego ga npr. da izgleda kao datum ili tako nesto
[ Cyberghost @ 09.09.2008. 08:37 ] @
Citat: abyss: Tema ide u pogresnom smeru, sve sto pominjete moze da se izbegne sa "//"...
Ovo mi nije jasno, bi li pojasnio malo ?
Evo sta cu pokusati da napravim:
Posto sada mogu sa lakocom da iscitam serijski broj diska, evo kako
cu pokusati da napravim zastitu (registraciju) od kopiranja (premestanja)
aplikacije.
1. Nakon pokretanja, aplikacija cita jedan TXT fajl ili tabelu u bazi
u kojoj se nalazi zapisan kljuc aplikacije, datum, rok trajanja ....
Ukoliko tamo ne nadje validan kljuc pojavljuje se poruka za aktivaciju programa,
od korisnika se trazi serijski broj da unese i nakon toga on dobije
site code, koji je u sustini kodiran folder aplikacije, datum, broj HDD
, rok trajanja aplikacije, i po potrebi maksimalan broj korisnika aplikacije ...
slika 1 i slika 2
2. U drugoj aplikaciji programer unese podatke od korisnika, serijski broj
i site code, nakon cega se generise aktivacioni kod, slika 3
3. Korisnik aplikacije ukuca aktivacioni kod, koji u TXT fajl ili
tabeli baze upisuje kljuc za otkljucavanje aplikacije, opet kriptovan, slika 4.
4. Kada aplikaciju pokrenemo sledeci put, u fajlu se nalazi kljuc
koji radi reverzno kriptovanje i u njemu se nalazi zapisan, serijski broj HDD,
putanja do izvrsnog fajla i jos neki podaci.
Cela fora je uraditi dobro kriptovanje, odnosno maskiranje bitnih podataka u aktivacionom kljucu.
Evo kako izgleda kljuc zapisan u bazi: GFHHIRMSMNORURU 27.08.08 u njemu se nalazi
serijski broj hdd-a, putanja do .exe fajla datum aktivacije, datum isteka aktivacije, max broj korisnika aplikacije.
[ abyss @ 09.09.2008. 09:12 ] @
>aplikacija cita jedan TXT fajl ili tabelu u bazi
>u kojoj se nalazi zapisan kljuc aplikacije, datum, rok trajanja ....
>Ukoliko tamo ne nadje validan kljuc pojavljuje se poruka za aktivaciju programa,
Uzmes dekompajler i dobijes source klase, i onda iskomentarises proveru ("//"),
iskompajliras i vratis na mesto. Aplikacija vise i ne proverava kljuc a radi...
[ abyss @ 09.09.2008. 13:49 ] @
Zanimljivo da ni onaj vb skript, ni "hdparm -i /dev/hda" a ni Everest ne daju isti serijski broj...
Čak vb skript daje negativan broj ??!??
[ Dejan Lozanovic @ 09.09.2008. 14:21 ] @
Citat: abyss: >aplikacija cita jedan TXT fajl ili tabelu u bazi
>u kojoj se nalazi zapisan kljuc aplikacije, datum, rok trajanja ....
>Ukoliko tamo ne nadje validan kljuc pojavljuje se poruka za aktivaciju programa,
Uzmes dekompajler i dobijes source klase, i onda iskomentarises proveru ("//"),
iskompajliras i vratis na mesto. Aplikacija vise i ne proverava kljuc a radi...
A trojke su djuro sta ? :)
http://www.javasvet.net/doc/25/index.html
Mislim da ce ovaj clanak pomoci makar malo ljudima da shvate da je tesko zastiti java programe.
[ obucina @ 09.09.2008. 21:33 ] @
Zaboravi na zastitu ako koristis Javu. Prosto zaboravi, nema je. Npr, pogledaj Zend Studio - onog dana kada izadje nova verzija, izadje i generator kljuceva. Limewire isto.
[ grizzly @ 09.09.2008. 22:50 ] @
Tema zaista ne ide u smeru koji meni treba, ali ne mari bitno da se nesto desava.
Aplikacija je vrlo jednostavna, dekompajliranje nema svrhe, ko ga bude primenjivao neka mu bude, jedino cu ja to provuci kroz obsfucator cisto da malo vidim kako se to radi i koje rezultate daje...
Meni treba jednostavno zastita od copy/paste programa, za pocetak razmisljajte kako bi zastitili folder sa java programom od svoje devojke koja studira filoloski :) Ona bi verovatno probala samo da prebaci taj folder kod sebe na racunar, e to ne bi trebalo da radi!
Nisam sad kod kuce par dana, jedva da imam pristup netu, pa ne mogu da se udubljujem u neka od predlozenih resenja. Sve jedno zahvaljujem svima, i nastavite da predlazete.
Nije neiskoristiv pristup sa nekim "podmetnutim" fajlom van ovog foldera, cudi me da sam promasio tu poruku iako je jedna medju prvima.
Mnogo bolje bi bilo ocitavanje harda, mada mislim da nemam vremena da to implementiram i istestiram preko VBa ili Ca, svejedno ljudi hvala za kod!
Linkove cu pogledati kad se vratim, pa javljam kako ide...
[ mihajilo @ 10.09.2008. 17:42 ] @
Citat: za pocetak razmisljajte kako bi zastitili folder sa java programom od svoje devojke koja studira filoloski :)
Ona bi verovatno probala samo da prebaci taj folder kod sebe na racunar, e to ne bi trebalo da radi!
ona ni to ne bi znala ona bi probala neki shortcut sa desktopa da kopira na taj drugi racunar :) ,da li ona uopste zna sta je folder ?:)
nego dobar predlog je ako se te firme kace na internet da napravis neke web servise jednostavne i za svaku registraciju upises podatke na bazi kojoj pristupa taj web servis a koja se nalazi na nekom serveru koji ti koristis.kada se pokrene aplikacija ona poziva taj web servis saljuci podatke o registraciji koji se na serveru porede sa onima upisanim u bazu. naravno taj kljuc mora da bude vezan za neki hardwer i da se generise pri pokretanju aplikacije,na primer da aplikacija pokupi neke serijske brojeve hardwera pa da ih salje kao requst servisu,a da oni budu zapisani u bazi,response servisa moze biti yes/no jer ne treba ti nista posebno vec samo odgovor da li je na tom racunaru legalan softver.mada ovo bi te dosta kostalo,a ipak ako korisnici ti placaju pretplatu vredi,ali naravno ako oni mogu da dekompajliraju mogu da izostave poziv servisa za proveru registracije,ali u tom slucaju mogu i sam tvoj program da naprave jer su dovoljno upuceni u struku,tako da i nece kupiti program od tebe.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|