Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: trinnn1 25. 06. 2012, 11:18:22

Název: Uzavřený kód v Jave
Přispěvatel: trinnn1 25. 06. 2012, 11:18:22
Jak je to s Javou kdybych chtěl vytvořit uzavřený kód? Platí se za to něco Oraclu?
Název: Re:Uzavřený kód v Jave
Přispěvatel: branchman2 25. 06. 2012, 11:41:02
Keby si chcel upravit JDK alebo JRE a uzavriet zdrojaky, tak ano, je treba sa dohodnut (otazka je sice formulovana aj takto, ale toto nepredpokladam).

Ak chces len spravit program, ktory bude napisany v Jave a bude pouzivat Javovske libraries, tak netreba platit nikomu nic.
Název: Re:Uzavřený kód v Jave
Přispěvatel: trinnn1 25. 06. 2012, 12:30:16
ted polozim jednu obzvlast hloupou otazku, tak me prosim nekamenujte :): lze vytvořit jar soubor tak aby z toho nebyl pro cizí uživatele zjistitelný kód?

a pokud bych vytvořil program, který by si někdo chtěl ode mě koupit, bude po mě Oracle něco chtít?
Název: Re:Uzavřený kód v Jave
Přispěvatel: slanecek 25. 06. 2012, 13:01:43
Ne, Oracle po tobě nebude nic chtít.
Název: Re:Uzavřený kód v Jave
Přispěvatel: Kojot 25. 06. 2012, 13:03:53
V Jave nedelam, takze to ber jen jako nastrel. V Jave, .NET a podobnych VM je vetsinou k dispozici nejaka moznost nacteni kodu z pameti. U Javy je to myslim ClassLoader. Je tedy mozne mit vse, krome nejakeho zavadece, zasifrovano pres nejaky klic v souboru, ktery se pak nacte, rozkoduje a spusti. Nevim jestli Java podporuje i pripadnou ochranu proti cteni pameti apod., ale jako zakladni jednoducha ochrana to muze stacit. Klic k odkodovani muze byt urceny na miru k pocitaci, uzivateli, nebo stazen z internetu.
Název: Re:Uzavřený kód v Jave
Přispěvatel: trinnn1 25. 06. 2012, 13:05:19
Díky dost si mi pomohl...
Název: Offtopic
Přispěvatel: Ivan 25. 06. 2012, 13:12:29
Muzes nejak poodhalit o co presne ti jde? Na prvni pohled to vypada, ze nemas zadny velky zkusenosti z programovanim, ale na druhou stranu predpodladas, ze prave tvuj kod bude natolik zajimavej ze bude nekomu stat za reverzovani.

Jak pro Javu tak i pro .Net existuji docela schopne de-kompilatory.
Název: Re:Offtopic
Přispěvatel: trinnn1 25. 06. 2012, 13:39:12
Muzes nejak poodhalit o co presne ti jde? Na prvni pohled to vypada, ze nemas zadny velky zkusenosti z programovanim, ale na druhou stranu predpodladas, ze prave tvuj kod bude natolik zajimavej ze bude nekomu stat za reverzovani.

Jak pro Javu tak i pro .Net existuji docela schopne de-kompilatory.
řekněme, že dělám na jednom projektu (programu), který má komerční potenciál a potřeboval jsem vědět jak je to s použitím javy jako prostředku pro výrobu onoho programu tak, aby to případná konkurence neměla tak jednoduchý...
samozřejmě kód to nebude nijak objevný, spíš relativně obsáhlý a jeho tvorba zabere nějaký čas - a nerad bych aby byl zbytečný...
Název: Re:Uzavřený kód v Jave
Přispěvatel: slanecek 25. 06. 2012, 13:43:06
Všechno se dá okopírovat a nepotřebuješ k tomu nějaký hacking. Prostě si naprogramuješ vlastní verzi tvého programu s vlastním kódem.

To programuješ ty?
Název: Re:Uzavřený kód v Jave
Přispěvatel: DK 25. 06. 2012, 13:43:54
java obfuscator, pripadne to zkompiluj do exe
Název: Re:Offtopic
Přispěvatel: Rax 25. 06. 2012, 15:08:55
řekněme, že dělám na jednom projektu (programu), který má komerční potenciál a potřeboval jsem vědět jak je to s použitím javy jako prostředku pro výrobu onoho programu tak, aby to případná konkurence neměla tak jednoduchý...

Komerční potenciál věcí v Javě je blízký nule, respektive program se dá prodat pouze párkrát a potenciální konkurenci dáváš zdrojáky jako na stříbrném podnose. Obfuskátor je asi taková překážka jako cedulka Zákaz vstupu.

Aby to konkurence měla aspoň těžší, je třeba použít nějakou pokročilou techniku ochrany jako třeba self-modifying code, hrátky se zásobníkem a podobně a to je v Javě prakticky nemožné.

Poměrně dobré úspěchy jsou s externím hardwarovým klíčem připojeným přes USB, ale to leze do peněz.
Název: Re:Uzavřený kód v Jave
Přispěvatel: Rax 25. 06. 2012, 15:13:51
V Jave nedelam, takze to ber jen jako nastrel. V Jave, .NET a podobnych VM je vetsinou k dispozici nejaka moznost nacteni kodu z pameti. U Javy je to myslim ClassLoader. Je tedy mozne mit vse, krome nejakeho zavadece, zasifrovano pres nejaky klic v souboru, ktery se pak nacte, rozkoduje a spusti. Nevim jestli Java podporuje i pripadnou ochranu proti cteni pameti apod., ale jako zakladni jednoducha ochrana to muze stacit. Klic k odkodovani muze byt urceny na miru k pocitaci, uzivateli, nebo stazen z internetu.

Žádný program na světě nelze ochránit před vyčtením kódu nebo dat z RAM a aby byl program funkční, musíš dříve nebo později dešifrovat, takže útočník si na to počká a prostě si to zkopíruje.
Název: Re:Uzavřený kód v Jave
Přispěvatel: Night 25. 06. 2012, 15:20:48
Skôr Ti doporučím spraviť to ináč. Sprav servrovú aplikáciu, ktorá bude mať všetku funkcionalitu na serveri a zákazníkovi daj len jednoduchého klienta, ktorý bude komunikovať so serverom. Zákazník nebude mať na svojej strane žiadny kód a prístup k serveru zabezpečíš jednoducho napríklad cez meno a heslo, alebo ako len chceš.
Název: Re:Uzavřený kód v Jave
Přispěvatel: trinnn1 25. 06. 2012, 15:48:07
s Javou začínám, takže chápu, že některý otázky mohou být pro znalce stupidní...
jinak díky za všechny reakce pomohlo mi to udělat si o tom komplexnější obraz...

Skôr Ti doporučím spraviť to ináč. Sprav servrovú aplikáciu, ktorá bude mať všetku funkcionalitu na serveri a zákazníkovi daj len jednoduchého klienta, ktorý bude komunikovať so serverom. Zákazník nebude mať na svojej strane žiadny kód a prístup k serveru zabezpečíš jednoducho napríklad cez meno a heslo, alebo ako len chceš.

aplikace musí používat server (na sdílení dat, mezi dvěma uživateli), chtěl jsem ale mít i desktop pro offline práci...
teď to asi udělám tak, že to bude primárně webová aplikace, kterou po nějaký době uvolním jako open-source i na desktopy...
chci prostě zabránit tomu (jsem trošku paranoidní), aby po měsíci co bude aplikace vypuštěna, někdo prostě nevzal její kód nepřidal tam jednu dvě funkce na víc a nevydával to za svůj výtvor...
Název: Re:Uzavřený kód v Jave
Přispěvatel: Petr_Svetr 25. 06. 2012, 16:02:37
Vystupem z jakehokoliv prg jazyka je mikrokod, ktery zpracuje procesor. Jakakoliv ochrana je k nicemu, protoze prinejhorsim z toho holt dostanes assembler. Obejit to nijak nelze - pokud by to bylo technicky mozne, a nekdo to umel, byl by dneska milionar.
Nejlepsi varianta je asi ta server-clinet aplikace. Ale zase - pokud nemas dost zkusenosti, tak ti server nekdo hackne raz dva. Navic zase muze odchytavat komunikaci mezi klientem a server a odtud taky lze ziskat nejake informace, nebo predstavu, jak to asi funguje.
Citace
chci prostě zabránit tomu (jsem trošku paranoidní), aby po měsíci co bude aplikace vypuštěna, někdo prostě nevzal její kód nepřidal tam jednu dvě funkce na víc a nevydával to za svůj výtvor...
navic tohle nechapu - chces to vydavat jako OS, ale zaroven chces zdrojak tajit? Vykradani kodu prece brani licence - jeji poruseni je trestne vymahatelne...
Realne  - sance, ze ti ty zdrojaky nekdo ukradne je mnohem mensi, nez pravdepodobnost, ze to vubec dotahnes do produkce. No flame, kazdy nejak zacina....
Název: Re:Uzavřený kód v Jave
Přispěvatel: trinnn1 25. 06. 2012, 16:39:27
máš pravdu, teď mi to došlo...:D
jak řikám, sem začátečník a některý spojitosti (pro někoho nad slunce jasný) mi docházej pomalejc...
vlastně když někdo použije můj kód tak já to vlastně taky mohu zjistit, protože jeho aplikace taky nebude nijak zašifrovaná :D - měl sem obavy z toho dokazování...
Název: Re:Uzavřený kód v Jave
Přispěvatel: Rax 25. 06. 2012, 17:11:39
Skôr Ti doporučím spraviť to ináč. Sprav servrovú aplikáciu, ktorá bude mať všetku funkcionalitu na serveri a zákazníkovi daj len jednoduchého klienta, ktorý bude komunikovať so serverom.

To funguje, ale málokdo je ochoten za tohoto holuba na střeše zaplatit nějakou významnou částku a ve spoustě firem je přístup na internet z technických nebo politických důvodů nemožný, takže vyžadují kompletní dodávku software přímo na jejich hardware.
Název: Re:Uzavřený kód v Jave
Přispěvatel: Waseihou 25. 06. 2012, 17:20:32
Pokud by jsi chtěl jít do extrému, tak můžeš zkusit do své aplikace implementovat prvky whitebox cryptography. To je metoda která umožní "schovat" šifrovací klíč třeba od AES do kódu tak že ani vlastnictí zdrojáku nepomůže, pokud nějak chytře nahákuješ kusy kódu na dešifrování tak by jsi teoreticky mohl udělat zdroják který nejde lousknout respektive nepoběží bez "krabice", a krabice může chtít tahat data ze sítě a nebo si vynutit vykonání určité činnosti a tu kontrolovat.

Příklad na generování zdrojáku dekryptoru AES pro konkréní klíč: http://files.rsdn.ru/45067/aesig.zip
vytvoří decryptor který dešifruje AES podle tebou zadaného klíče, sice je to v c ale asi by nebyl problém předělat to tak aby to generovalo javu. Samozřejmě je také možné to použít na vlastní FUD crypter těmi kdo dělají malware. Souborek doporučuji zálohovat, je to masíčko ;) Exáčům nevěřit, zdroják je ale ok...

Prakticky se to dá použí na implementaci DRM a možná i pro vynucení funčnosti uzlu v síti p2p tak aby je to donutilo uploadovat, ale tuto možnost zatím prověřuji. Třeba udělat stavový automat a stavy nějak hnát šifrovaně přes tu krabici a výstup použít k verifikaci chování, nevím.

Jinak spolu s obfuskátorem získáte něco horšího než BLOB a přitom to můžete šířit pod GPL...
Název: Re:Uzavřený kód v Jave
Přispěvatel: slanecek 25. 06. 2012, 17:25:28
Waseihou, to je vlastně úplně stejný princip, na jakém fungují online hry typu WoW a Diablo 3, ne? Že to některá data streamuje ze serveru a bez toho to nefunguje.
Název: Re:Uzavřený kód v Jave
Přispěvatel: Waseihou 25. 06. 2012, 17:35:03
No ten program co jsem dal odkaz neumí nic jiného než vygenerovat zdroják který dešifruje data zašifrovaná pomocí AES nějakým klíčem. Jak s tím naložíte je už jen na vás, není jednoduché vymyslet co s tím. Vlastností která to činí zajímavým je že by ani ze zdrojáku nemělo být snadné klíč uhodnout a nebo ho změnit. Takže obfuskujete a zašifrujete zdroják a hodíte do pole, vytvoříte decryptor včetně skrytého klíče, a pak při startu programu rozšifrujete kód do paměti a pustíte to. Na oba zdrojáky hodíte GPL GNU licenci a můžete používat i GPL knihovny aniž byste je porušili. Tahle metoda se ale primárně používá pro skrývání virů - hledejte FUD crypter, a bacha na antiviry, toto chování programu už dnes zkouší detekovat, ale to už pak váš crypter není FUD ;)