» »

[Java] Obfuscatorji

[Java] Obfuscatorji

drejc ::

Zanima me, kerga priporocate. Fajn je, da zadeva pade pod lesser gpl license, ni pa nujno.

Pravtako me zanima, ce ima kdo izkusnje z obfuscatorji (retroguard recimo) in servlet based appsi. Je treba rmi metode pustit pr mer kompletno? Vse public tudi? Treba kej pazit na castanje? Obstaja še kak drug način zavarovanja razredov javinih?

Obfuscatat (z retroguardom) neke lokalne aplikacije&appletemi ne dela problemov, problemi so z servleti, ki ze po difoltu ne gredo skozi, ko pa gredo je pa ponavadi takrat, ko izklopim warninge in je war oz. jar neuporaben s strani tomcata.

Hvala.

Nerdor ::

Če programiraš v JSP ali uporabljaš JSF, mogoče še JSTL ali Struts tage, ti v bistvu TomCat obfuscatonira v izvorno kodo "tvojaStrnaInNekaj.java". Mislim, da to počne (modul?) Catalina v TomCatu. Oziroma, ti jih Catalina zgnerira izvorno kodo, da se prevedejo (JSP,JSF,Struts) kot servleti. Ta (izvorna) koda je že dokaj obfucotonirana, se ti ne zdi??
Drugače pa to ni DotNet, da bi kr obfukotoniral kodo :D .
Drugače pa. keep experimenting, ne bom trdil, da se ne da obfucionirati servlet kodo ;) .

Sergio ::

Ja pazi, brezveze je obfuscatat kodo, ki je server-generated.

Pojdi cez lastne razrede, in obfuskiraj kodo, ki si jo napisal sam, hkrati pa tudi pazi, da se ne bodo spreminjala imena metod, ki so inheritana iz superklasov.

Sej to ni nic drugega kot pameten refactor nad kodo. Ki pa mora bit _pameten_.

Sej obfuskator lahko gres pisat tudi sam. Ukini vse komentarje, naredi si seznam spremenljivk, ki jih pa poimenuj _1, _11, _111, _1111, itd. :)

Potem pa imena metod spremeni v _l, _l1, _l11, itd.

That'll do.

Mater, stavek bi v anglescini zvenel bolj slovensko ;-)
Tako grem jaz, tako gre vsak, kdor čuti cilj v daljavi:
če usoda ustavi mu korak,
on se ji zoperstavi.

BigWhale ::

Zgodovina sprememb…

  • spremenil: BigWhale ()

drejc ::

Nerdor: si loh mal bl konkretn kaj catalina nardi?

Sergio: vbistvu je stvar way too big (20mb spisane kode) in je ogromn castanja...drgac pa last resort je

BW: lol :)

Zgodovina sprememb…

  • spremenil: drejc ()

Sergio ::

drejc: razumem. BTW, če je stvar nek lepo organiziran projekt, si lahko poskusiš vzeti eno popoldne, pa naredi tole

1) DLjaj Eclipse
2) Z Eclipse Refactor toolom preimenuj vse razrede v classxxxx, kjer je xxxx random stevilo
3) Vrzi ven vse whitespace znake

Pa bo dosti obfuscatano. :)
Tako grem jaz, tako gre vsak, kdor čuti cilj v daljavi:
če usoda ustavi mu korak,
on se ji zoperstavi.

BigWhale ::

> 3) Vrzi ven vse whitespace znake

Hmmm?Sepravibomojtextcistobrezpresledkov?

JerKoJ ::

Kaj sploh hoces - varovanje sourca (*.java) al bytecode (*.class)

za source se mores zatec k postopkom, ki jih je sergio predlagu
drgac pa kaksen hex editor pa class na roke popravljat :D
ceprov ziher tut na tej stopnji obstajajo kaksna orodja
dost pa pomaga ze javac -g:none
(pomagajo tudi prejsnja preimenovanja, white space removal pa
ne)

borchi ::

a lahko nekdo na hitro pove za nevedneže kaj to sploh je? mi je zapela beseda za oko.
l'jga

Zgodovina sprememb…

  • spremenil: borchi ()

Nerdor ::

JOJ Folk! Glejte, velik nesmisel je obfukiranje (skremblanje, kakor hočete) bytekode!!! Z byte-kodo ne počneš ničesar!= Anede!

Kaj biti obfuskiranje (ali skremblanje, bolj po domače, ozr. "mešanje kode"). Namreč, v svetu DotNet-a obstaja skupen jezik, ki se imenuje MSIL (microsoft intermidiate lang.), ki zapiše nekakšne metaukaze, ki jih zgenerirajo razni C#, VB.Net in ostali CLR jeziki (jeziki, ki so napisani za specifikacijo DotNet).
Torej, če imaš samo *.exe, ali *.dll je dovolj, da s pomočjo disassemblerja (razhroščevalnika), raztaviš bytecode level v izvorno kodo!!! Seveda, samo logiko, BREZ KOMENTARJEV!!! Komentarji niso vpisani v MSIL kodo. Ker tako DotNet kot ostali kompajlerji vso nepotrebno navlako ZAVRŽEJO!
Torej, debugger ti razbere celotno logiko v izvorno kodo, brez komentarjev!!! Skrajno neugodno, zate kot programerja programa!!!

Kaj delajo potem obfuskatorji!?= Delajo "nesmiselno" logiko za nekoga, ki bo s pomočj oByte Debugerjom skušal sestaviti "logiko programa" nazaj v izvorno kodo.
Ker ni komentarjev, v reverse sestavljeni kodi, je toliko težje berljiva. Če pa obfuskator, primenuje spremenjivke s pomenljivimi imeni (npr.: int DolzinaBesede;) v čudaške znake (int XY$1234;) in dvomljive for zanke iteratorjev in tako naprej. Lahko zavede zlobnega bralca kode. ;)
Logika programa je še vednu tu, samo koda je namerno ponagajana, da zmede potencijalnega bralca.

Tako se dela, tako v DotNetu kot v Javi. Obfuskatorji so postali moderni s prihodom VS.Net 2003, s DotNetObfuscatorjem Comunity Editionom, anede!?

kopernik ::

Brezveze ... tole "skrivanje" kode. 99,99% uporabnikov vaših programov ali knjižnic ne bo zanimalo, kakšna je izvorna koda; tisti, ki pa bodo to hoteli, jih nič ne bo zaustavilo ...

Sergio ::

Hm, se ne strinjam :)

Prejsnje leto smo morali pri seminarski za APS2 implementirati razred, do katerega smo mel ZELO beden API. Vzeli smo .class, decompajlali v .java in videli, kaj je clovek hotel, da mi naredimo. All well ends well.

Ce bi sel obfuskirati kodo, mi definitivno ne bi imeli nobene koristi od vsega skupaj.

Je pa tudi nek odstotek radovednezev, ki bi radi pac videli, kako so se kaksne stvari naredile.

Ce se hoces odpikat ljubiteljev in radovednezev, pac obfuskatas kodo, pa je.
Tako grem jaz, tako gre vsak, kdor čuti cilj v daljavi:
če usoda ustavi mu korak,
on se ji zoperstavi.

kopernik ::

Ja, tudi v takih primerih se izkaže, da je bolje pustiti kodo takšno kot je.

Že večkrat sem moral decompajlat kak razred, ker npr. support od proizvajalca potrebuje vsaj en mesec, da se loti problema, in še dva meseca, da izda popravek. Če bi uporabili obfuskator, bi jaz potreboval vsaj trikrat več časa, da bi razvozlal, kakšna je logika tega razreda. Ampak, z malo več truda, bi tudi obfuscirano kodo razvozlal ...

Hotel sem samo povedati, da je v končni fazi zelo malo ali nič koristi od uporabe obfuskatorjev.

drejc ::

Kaj se pa da narest, če se omejim na win32 platformo? Obstaja kej boljšga kot obfuscatorji za security?


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Backengeneering [Reverse engeneering]

Oddelek: Programiranje
432874 (1152) jype
»

Dogodek Študent je Car - v Ljubljani (strani: 1 2 )

Oddelek: Novice / Ostala programska oprema
638591 (7694) Fury
»

ASP.NET(jezik C#) vs. PHP (strani: 1 2 )

Oddelek: Programiranje
7710196 (8840) Nerdor
»

kdo me gosti na svojem strezniku

Oddelek: Izdelava spletišč
101141 (989) Senzacionale
»

ASP.NET tutorial

Oddelek: Izdelava spletišč
122127 (1887) smash

Več podobnih tem