« 1 2 3
Autor Zpráva
Petr ZZZ
Profil
maks:
Mluvím o živé ukázce, na kterou odkazuji, ne o zvýrazňování kódu zde ve vláknu.
maks
Profil
Petr ZZZ:
já také. Zvýrazňovač ve vláknech má jiné zbarvení. V živých ukázkách se používá zbarvení ze Sublime Textu (pro úplnost, název atributu na Živé ukázce vidím ve FF zeleně, což je správně).
Petr ZZZ
Profil
maks:
Obávám se, že si stále nerozumíme. Nemám na mysli zbarvení řetězce „onclick“ ani tady ve vláknu, ani na živých ukázkách, ale chování řetězce "Text" v bílém poli vpravo dole ve Str4wberryho obfuskovaném kódu zde a v Jokerově (nezdařeném?) rozluštění obfuskace zde. V prvním případě řetězec "Text" na kliknutí levým myšítkem (proto jsem psal "na onclick") zčervená, ve druhém ne.
maks
Profil
Petr ZZZ:
aha. Tak tedy:

V původním Jokerově kódu je "TEXT" červený po kliknutí (událost onclick se spouští kliknutím na element). Až tehdy se mu přiřadí class=cerveny a aplikuje se CSS styl.

V Jokerově příspěvku se vrtat nechci, ale konzole vyhazuje po kliknutí "ReferenceError: toggle is not defined".
Petr ZZZ
Profil
maks:
Jestli si nepleteš Jokera se Str4wberrym, prosím o živou ukázku „původního Jokerova kódu“, ve kterém "Text" po kliknutí zčervená, protože mně se ji (tu živou ukázku), jak už jsem psal, vyrobit nepodařilo.
1Pupik1989
Profil
Joker: Já už našel sla.ckers.org/forum/read.php?24,28687

Ale samozřejmě hned jdu luštit, pak editnu. :)
Joker
Profil
Petr ZZZ:
Je to kratší, ale text na onclick nezčervená. :-)
Musíš -stejně jako u té první ukázky- v nastavení JS (na rozkliknutí té šipky vedle JS) nastavit umístění skriptu na </head>.

(při umístění do window.onload se celý ten kód obalí do funkce a funkce toggle a toggleClass jsou pak definované jen v kontextu té funkce, proto si to stěžuje, že toggle neexistuje.)
Petr ZZZ
Profil
Joker:
Díky, máš pravdu, už to funguje! :-)
IdemeNaHavaj
Profil
Str4wberry:
Ako si to zamaskoval?
Týmto?
Str4wberry
Profil
Postupně jsem to prohnal asi přes pět obfuskátorů. :–)
shaggy
Profil
IdemeNaHavaj:
Skôr tipujem, že použil prvý výsledok z google: http://www.jsobfuscate.com/index.php

edit: tak nie celkom :-)
peta
Profil
1Pupik1989: "hoďte kus obfuskovaného kódu" http://www.volny.cz/peter.mlich/hry/chess.htm
Str4wberry : Zajimave, to by bylo pracnejsi lustit nez ty viry, co se nam tu objevuji.
1Pupik1989
Profil
Petr ZZZ:
Tak Pupiku, kdy začneš luštit? :-)

function toggle(element,color){
  element.className.match(color) ? element.className=element.className.replace(color,"") : element.className += ""+color;
};

toggleClass beru jako matení nepřítele. :)

Takže kdybych to přepsal pro sebe, tak by to vypadalo asi:

function toggle(element,color){
  var className = element.className;
  element.className = (className.search(color) == -1 ? className+color : className.replace(color,''));
}


Po vypsání do konzole to vypadalo asi takto:
var _0xab05=["\x63\x6C\x61\x73\x73\x4E\x61\x6D\x65","\x6D\x61\x74\x63\x68","","\x72\x65\x70\x6C\x61\x63\x65","\x20"];var _0x59a5=[_0xab05[0],_0xab05[1],_0xab05[2],_0xab05[3],_0xab05[4]],_0x93ae=[_0x59a5[0],_0x59a5[1],_0x59a5[2],_0x59a5[3],_0x59a5[4]];function toggleClass(_0xaadex4,_0xaadex5,_0xaadex6){_0xaadex4&&(_0xaadex4[_0x93ae[0]]=_0xaadex4[_0x93ae[0]]==_0xaadex6?_0xaadex5:_0xaadex6)};function toggle(_0xaadex4,_0xaadex5){_0xaadex4[_0x93ae[0]][_0x93ae[1]](_0xaadex5)?_0xaadex4[_0x93ae[0]]=_0xaadex4[_0x93ae[0]][_0x93ae[3]](_0xaadex5,_0x93ae[2]):_0xaadex4[_0x93ae[0]]+=_0x93ae[4]+_0xaadex5}; 


To jsem pak prostě znovu zkopíroval a zase nechal vypsat v konzoli. To už pak vypadalo takto:
var _0xab05=["className","match","","replace"," "];var _0x59a5=[_0xab05[0],_0xab05[1],_0xab05[2],_0xab05[3],_0xab05[4]],_0x93ae=[_0x59a5[0],_0x59a5[1],_0x59a5[2],_0x59a5[3],_0x59a5[4]];function toggleClass(_0xaadex4,_0xaadex5,_0xaadex6){_0xaadex4&&(_0xaadex4[_0x93ae[0]]=_0xaadex4[_0x93ae[0]]==_0xaadex6?_0xaadex5:_0xaadex6)};function toggle(_0xaadex4,_0xaadex5){_0xaadex4[_0x93ae[0]][_0x93ae[1]](_0xaadex5)?_0xaadex4[_0x93ae[0]]=_0xaadex4[_0x93ae[0]][_0x93ae[3]](_0xaadex5,_0x93ae[2]):_0xaadex4[_0x93ae[0]]+=_0x93ae[4]+_0xaadex5}; 

Potom už šlo jen o přejmenování proměnných a smazání těch dvou polí.


//edit: Nezačal jsem hned luštit. Po 5 minutách to můj obří mozek zapomněl. :D Ale trvalo to asi 5 - 10 minut.
Joker
Profil
1Pupik1989 [#13]:
No, skoro :-)
1Pupik1989
Profil
Já vím že už to bylo rozluštěno, ale chtěl jsem to zkusit. :) Víc mě zaujalo to co jsem odkazoval, to zpětně rozkódovat nejde, takže už člověk musí přemýšlet.
peta
Profil
[#6] 1Pupik1989
tvuj link sla.ckers.org/forum/read.php?24,28687
To je taky zajimavy :)
_=[]|[];$=_++;__=(_<<_);___=(_<<_)+_;____=__+__;_____=__+___;$$=({}+"")[_____]+({}+"")[_]+({}[$]+"")[_]+(($!=$)+"")[___]+(($==$)+"")[$]+(($==$)+"")[_]+(($==$)+"")[__]+({}+"")[_____]+(($==$)+"")[$]+({}+"")[_]+(($==$)+"")[_];$$$=(($!=$)+"")[_]+(($!=$)+"")[__]+(($==$)+"")[___]+(($==$)+"")[_]+(($==$)+"")[$];$_$=({}+"")[_____]+({}+"")[_]+({}+"")[_]+(($!=$)+"")[__]+({}+"")[__+_____]+({}+"")[_____]+({}+"")[_]+({}[$]+"")[__]+(($==$)+"")[___]; ($)[$$][$$]($$$+"('"+$_$+"')")()
1. pspad preformatovat na strukturovany css
2. alert([_, $, __, ___, ____, _____, $$, $_$]); //1,0,2,3,4,5,constructor,cool code
3. alert(($)[$$][$$]($$$+"('"+$_$+"')"));
function anonymous() {
alert('cool code')
}
Mimochodem, forum chybne to cisluje zpravy na druhe strance, pupikova zprava neni 6, ale 6+20.
Moderátor Joker: Ne, není. A čísluje se v rámci stránky.
Odmazán přivolávač moderátorů
IdemeNaHavaj
Profil
1Pupik1989:
Víc mě zaujalo to co jsem odkazoval, to zpětně rozkódovat nejde, takže už člověk musí přemýšlet.
na čo si odkazoval? nevidím od teba odkaz.. čo nejde rozkódovať?

edit: aha už viem.. este keby som vedel ktory soft alebo online web takto koduje
1Pupik1989
Profil
peta: Vím že jen vyskočí alert, spíš mě zajímalo jak došel k tomu zakódování. Musím zjistit jak to s těmi binárními operacemi myslí.

IdemeNaHavaj: Z telefonu se mi hrozně blbě píšou bb kódy, tak odkaz není v url.

//edit: Tak už mu to je jasné.
$$$=(($!=$)+"")[1]+(($!=$)+"")[2]+(($==$)+"")[3]+(($==$)+"")[1]+(($==$)+"")[$];

Převádí objekty a hodnoty na string.

1. (($!=$)+"") vrátí false a znak na indexu 1 je "a"
2. (($!=$)+"") vrátí false a znak na indexu 2 je "l"
3. (($==$)+"") vrátí true a znak na indexu 3 je "e"
4. (($==$)+"") vrátí true a znak na indexu 1 je "r"
5. (($==$)+"") vrátí true, $ = 0 a znak na indexu 0 je "t"

Docela fikané. :)
peta
Profil
<p onclick='toggle(this, "cervena")'>Text pro kliknuti</p>
<script>
eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('f 9=["\\c\\e\\a\\h\\h\\l\\a\\i\\d","\\i\\a\\k\\c\\m","","\\n\\d\\j\\e\\a\\c\\d","\\o"];f 7=[9[0],9[1],9[2],9[3],9[4]],5=[7[0],7[1],7[2],7[3],7[4]];g q(6,8,b){6&&(6[5[0]]=6[5[0]]==b?8:b)};g p(6,8){6[5[0]][5[1]](8)?6[5[0]]=6[5[0]][5[3]](8,5[2]):6[5[0]]+=5[4]+8};',27,27,'|||||_0x93ae|_0xaadex4|_0x59a5|_0xaadex5|_0xab05|x61|_0xaadex6|x63|x65|x6C|var|function|x73|x6D|x70|x74|x4E|x68|x72|x20|toggle|toggleClass'.split('|'),0,{}))
</script>

1. pspad preformatovat na strukturovany css
2. alert(function(p,a,c,k,e,d){...})
3. ve FF
_0xaadex4 = document.getElementsByTagName('P')[0];
_0xaadex5 = "cervena";
reg = /([\[\]])/gm;
a = toggle.toSource().toString()
    .replace(new RegExp('_0xaadex4','gm'),'el')
    .replace(new RegExp('_0xaadex5','gm'),'str')
    ;
x = '_0x93ae';
for (i=0;i<eval(x).length;i++)
    {
    a = a.replace(new RegExp((x+'['+i+']').replace(reg,'\\$1'),'gm'),'\''+eval(x)[i]+'\'')
    }

alert([_0xab05, _0x59a5]) //className,match,,replace, ,className,match,,replace, 
alert(_0x93ae) // className,match,,replace, 
alert(a);
---
function toggle(el,str) {
    el['className']['match'](str)?el['className']=el['className']['replace'](str,''): el['className']+=' '+str
}
//toggleClass - neni vyuzito
Ale potrapilo mne to asi 1h, pac jsem 30 min vymyslet reg. vyrazy. Prestalo fungovat (jestli to fungovalo nekdy) '$0', pokud neni zadny kod ozavorkovany ().
Joker
Profil
peta:
_=[]|[];$=_++;__=(_<<_);___=(_<<_)+_;____=__+__;_____=__+___;$$=({}+"")[_____]+({}+"")[_]+({}[$]+"")[_]+(($!=$)+"")[___]+(($==$)+"")[$]+(($==$)+"")[_]+(($==$)+"")[__]+({}+"")[_____]+(($==$)+"")[$]+({}+"")[_]+(($==$)+"")[_];$$$=(($!=$)+"")[_]+(($!=$)+"")[__]+(($==$)+"")[___]+(($==$)+"")[_]+(($==$)+"")[$];$_$=({}+"")[_____]+({}+"")[_]+({}+"")[_]+(($!=$)+"")[__]+({}+"")[__+_____]+({}+"")[_____]+({}+"")[_]+({}[$]+"")[__]+(($==$)+"")[___]; ($)[$$][$$]($$$+"('"+$_$+"')")()

Nefunguje (při vyhodnocení v F12 v IE10). $$ je NaN a pak se to rozsype.

Jinak to sice na první pohled vypadá ujetěji, ale v principu je to pořád to stejné a úplně stejný je i postup „deobfuskování“.

Krom toho jakýkoliv příklad obfuskace kódu nemůže nic změnit na tom, že odpověď na původní otázku:
„Dá sa rozkódovať zakódovaný javascript?“
je ano.

Schopnost ho „rozkódovat“ (popsat jeho činnost) je hlavní vlastnost počítačového programu.
Požadavek na program který nepůjde „rozkódovat“ je asi tak nesmyslný, jako chtít třeba kuchařský recept kterému by nikdo nedokázal porozumět, ale zároveň by podle něj dokázal udělat to dané jídlo.
1Pupik1989
Profil
Ještě dodám, že deobfuskovat umí třeba i sám google chrome a krásně to i nafotmátuje.

Rozkódovat do původní formy kód nepůjde, ale do čitelné vždy.
peta
Profil
Joker: Stezuj si na foru, viz link ve zprave Dá sa rozkódovať zakódovaný javascript?
Na druhou stranu, tim lepe, aspon je IE vuci takovemu kodu odolnejsi :)

> „Dá sa rozkódovať zakódovaný javascript?“
>> je ano.
Presne, o to mi slo, ukazat, ze to neni zas tak obtizne rozkodovat. Mnohem zajimavejsi je ten 10k kod pro sachy s pc logikou (ten kod neni muj vyplod), viz [#12] peta http://www.volny.cz/peter.mlich/hry/chess.htm

Joker:
[#16] peta - no jo, ale pak kliknuti na "#20 · Zasláno: Dnes, 12:47:59", ti javascript hodi do odpovedi [ #20 ], coz spatne zparuje se strankou, ne, pokud je jina nez aktualni? Takze, musis natvrdo hodit link.
Joker
Profil
1Pupik1989:
Rozkódovat do původní formy kód nepůjde, ale do čitelné vždy.
Přesně do původní podoby samozřejmě ne, ale to platí pro jakoukoliv změnu. Pokud mám jen změněný skript, není možné z něj poznat, v čem je změněný a jak vypadal předtím.
Není možné zjistit, jak se třeba obfuskovaná proměnná jmenovala původně, ale je možné zjistit její funkci v kódu a na základě toho vymyslet vhodné pojmenování.
Teoreticky kdyby původní kód byl prasácký a neokomentovaný, může „deobfuskací“ vzniknout čitelnější kód, než byl ten původní :-)

peta:
kliknuti na "#20 · Zasláno: Dnes, 12:47:59", ti javascript hodi do odpovedi [ #20 ], coz spatne zparuje se strankou
Ano, mám pocit, že se to už i probíralo. Ale změna číslování příspěvků by to stejně nevyřešila.
Možná by to šlo upravit, aby se na jiných stránkách než poslední vkládala celá URL, ale v tomto vlákně to je mimo téma.
peta
Profil
google = web Obfuscator online javascript
http://www.jsobfuscate.com/index.php - typ eval(function(p,a,c,k,e,d)
http://packer.50x.eu/ - typ eval(function(p,a,c,k,e,d)
http://colddata.com/developers/online_tools/obfuscator.shtml#obfuscator_view - nejaky druh kodovani pomoci String.fromCharCode(s.charCodeAt / s.charCodeAt
http://javascriptobfuscator.com/ - pomoci \x48\x65\x6C\
http://www.obfuscriptor.com/ - \u20ac\u20ac\u201a\u0192\ + komprese
http://htmlobfuscator.com/ - jakysi druh base64
Ale ten, co chtel pupik, jsem nenasel.
Chamurappi
Profil
Reaguji na Jokera:
chtít třeba kuchařský recept kterému by nikdo nedokázal porozumět, ale zároveň by podle něj dokázal udělat to dané jídlo
Když upravuji cizí skripty, tak si občas říkám, jak strašně hloupé a hnusné kódy dokážou lidi stvořit… takže asi nejlepší možná obfuskace je psát věci blbě. Sestavit odpudivý kuchařský recept, podle něhož žádný příčetný kuchař nechce vařit, přestože výsledné jídlo je poživatelné :-)

Není možné zjistit, jak se třeba obfuskovaná proměnná jmenovala původně, ale je možné zjistit její funkci v kódu
Čím je kód delší, tím je to těžší.
Třeba rozluštit skripty Google Maps API je docela fuška. Googlu se před rokem povedlo vyrobit kolizi s mými skripty a najít příčinu zabralo pár dní (a pak bylo pracné i obhájit, že máslo na hlavě má spíš Google).


Reaguji na peta:
Mnohem zajimavejsi je ten 10k kod pro sachy s pc logikou
Zbytečně dlouhé, šachy se vejdou i do 1 kB.

ti javascript hodi do odpovedi [ #20 ], coz spatne zparuje se strankou, ne, pokud je jina nez aktualni?
Na starších stránkách ti to do odpovědi nehodí. Ani na té poslední, pokud by tvůj příspěvek měl skončit jako první na další straně.
Změna číslování by tohle moc nevyřešila. Neřeš to tu.
Joker
Profil
Chamurappi:
asi nejlepší možná obfuskace je psát věci blbě. Sestavit odpudivý kuchařský recept, podle něhož žádný příčetný kuchař nechce vařit, přestože výsledné jídlo je poživatelné :-)
:-)
Jenže spousta lidí -pokud to dokáží u sebe rozchodit- nebude vůbec řešit, že je to blbě napsané.
To bys to musel napsat tak blbě, že bude horor ten skript vůbec někam přenést. Což jednak schopnému programátorovi dá fušku (protože má automaticky tendenci psát věci správně) a jednak to pak bude komplikovat život i jemu samotnému.

Čím je kód delší, tím je to těžší.
Ano, je to moc práce a většinou to nestojí za to. Ale dá se to udělat.
peta
Profil
Chamurappi: Zajimave, castecne i dobra inteligence, nicmene ted ma souper 5 kraloven a porad mi nedal mat :) Mozna 1k, dobra logika, ale to zakonceni nefunguje. Takze, ty si asi nepridam do sbirky.
« 1 2 3

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: