Autor | Zpráva | ||
---|---|---|---|
Petr ZZZ Profil |
#1 · Zasláno: 1. 12. 2013, 10:28:31
maks:
Mluvím o živé ukázce, na kterou odkazuji, ne o zvýrazňování kódu zde ve vláknu. |
||
maks Profil |
#2 · Zasláno: 1. 12. 2013, 10:29:45
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 |
#4 · Zasláno: 1. 12. 2013, 11:11:15
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 |
#5 · Zasláno: 1. 12. 2013, 11:25:52
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 |
#6 · Zasláno: 1. 12. 2013, 11:42:46
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 |
#8 · Zasláno: 1. 12. 2013, 12:08:52
Joker:
Díky, máš pravdu, už to funguje! :-) |
||
IdemeNaHavaj Profil |
|||
Str4wberry Profil |
#10 · Zasláno: 1. 12. 2013, 13:24:31
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 |
#12 · Zasláno: 3. 12. 2013, 07:58:54
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 |
#14 · Zasláno: 3. 12. 2013, 21:05:49
|
||
1Pupik1989 Profil |
#15 · Zasláno: 3. 12. 2013, 22:58:07
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 :) _=[]|[];$=_++;__=(_<<_);___=(_<<_)+_;____=__+__;_____=__+___;$$=({}+"")[_____]+({}+"")[_]+({}[$]+"")[_]+(($!=$)+"")[___]+(($==$)+"")[$]+(($==$)+"")[_]+(($==$)+"")[__]+({}+"")[_____]+(($==$)+"")[$]+({}+"")[_]+(($==$)+"")[_];$$$=(($!=$)+"")[_]+(($!=$)+"")[__]+(($==$)+"")[___]+(($==$)+"")[_]+(($==$)+"")[$];$_$=({}+"")[_____]+({}+"")[_]+({}+"")[_]+(($!=$)+"")[__]+({}+"")[__+_____]+({}+"")[_____]+({}+"")[_]+({}[$]+"")[__]+(($==$)+"")[___]; ($)[$$][$$]($$$+"('"+$_$+"')")() 2. alert([_, $, __, ___, ____, _____, $$, $_$]); //1,0,2,3,4,5,constructor,cool code
3. alert(($)[$$][$$]($$$+"('"+$_$+"')"));
function anonymous() { alert('cool code') } 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 |
||
Joker Profil |
#20 · Zasláno: 4. 12. 2013, 12:47:59
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 |
#21 · Zasláno: 4. 12. 2013, 13:03:29
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 |
#23 · Zasláno: 4. 12. 2013, 13:29:03
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 |
#24 · Zasláno: 4. 12. 2013, 14:13:23
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 |
#25 · Zasláno: 4. 12. 2013, 14:14:41
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 |
#26 · Zasláno: 4. 12. 2013, 15:22:58
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 |
#27 · Zasláno: 4. 12. 2013, 15:49:22
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.
|
||
Časová prodleva: 10 let
|
0