Autor | Zpráva | ||
---|---|---|---|
MPavel Profil |
#1 · Zasláno: 6. 2. 2013, 07:28:51
Dobré ráno.
Dostal som sa k pomerne rozsiahlej aplikácii, postavenej na javaskriptu. Neviem sa v nej zorientovať, lebo niektoré časti sú zašifrované. Predpokladám, že toto je šifrovací mechanismus. function ob() { var Z = atob("CiAhIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE5NT1BRUlNUVVZXWFlaW1xdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+"), L = atob("QGFiY2VmZ2hpam5vcHFyc3p7fH1+dHV2d3h5QUJDREVGCltdR0hJIkpLTE5NT1BkUVJTVFVWV1hZWmtsbV5fYCBcISMkJSYoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj8n"); Da = []; Qa = []; for (var ia = 0; ia < L.length; ia++) Da[L.charCodeAt(ia)] = Z.charAt(ia), Qa[L.charCodeAt(ia)] = ia; if ((typeof window.console !== 'undefined') && (typeof window.console.log == 'undefined')) window.console.log = function () {}; } function vb(e) { Da === m && ob(); for (var t = "", n = 0; n < e.length; n++) t += Da[e.charCodeAt(n)]; return t } function Ob(e) { var t, n, r, i; Qa === m && ob(); if (gb !== m && gb[e]) return gb[e]; n = Qa[e.charCodeAt(0)] + 96 * Qa[e.charCodeAt(1)]; t = 0; r = 2; for (i = 1; r < e.length;) t += Qa[e.charCodeAt(r)] * i, i *= 96, r++; gb !== m && (gb[e] = Nb.substr(t, n)); return Nb.substr(t, n) } <form action="#" name="form1"> Sem zadaj výraz : <input type="Text" id="vstup"> <input type="Button" value="Prevod" OnClick="vystup.value=....."> Tu bude výsledok : <input type="Text" id="vystup" readonly> A neviem ako na to. Vedel by mi niekto pomôcť, poradiť, nakopnúť správnym smerom? |
||
ShiraNai7 Profil |
#2 · Zasláno: 6. 2. 2013, 11:28:12
Na první pohled to jen nahrazuje určité znaky za jiné a naopak. Plnohodnotnou šifrou bych to určitě nenazýval. Taky to asi nebude kompletní kód.
|
||
margin Profil * |
#3 · Zasláno: 6. 2. 2013, 12:16:48
ShiraNai7:
„Na první pohled to jen nahrazuje určité znaky za jiné a naopak.“ Použité kódování převádí každé 3 původní bajty na 4 kódované znaky ASCII, takže se řetězec nebo soubor o 1/3 nafoukne. |
||
wtf Profil * |
#4 · Zasláno: 6. 2. 2013, 13:04:41
|
||
ShiraNai7 Profil |
#5 · Zasláno: 6. 2. 2013, 14:19:18
margin:
To vím, ale ty base64 řetězce jsou tam čistě pro sekvence znaků pro nahrazení. Ve výsledku se base64 nepoužívá. Nebo to je v jiné části kódu, kterou MPavel neuvedl. |
||
MPavel Profil |
#6 · Zasláno: 6. 2. 2013, 18:07:50
Ďakujem za reakcie.
Obfuscator - dobrá myšlienka, ktorá mi nepomôže a naviac myslím nieje správna Doplním ďaľšie časti kódu: Takto vyzerá kód function pa(e, t, n, r) { return n ? Ob("q@f\n") + n + '">' + (Ob("F@Xrb") + t + Ob("}@8rb") + t + Ob("w@nsb") + t + Ob("o@5a") + t + Ob("i@\nD") + e + Ob("i@[sb") + (r ? r : "") + Ob("h@df")) + Ob("h@f]") : Ob("F@Xrb") + t + Ob("}@8rb") + t + Ob("w@nsb") + t + Ob("o@5a") + t + Ob("i@\nD") + e + Ob("i@[sb") + (r ? r : "") + Ob("h@df") } function P(d, c) { var a = this; H(a, J.prototype); a.Oa(d, c); a.clip = m; a.g = []; a.g[0] = new Ua(0); a.g[1] = new Ua(1); a.g[2] = new Ua(2); a.g[3] = new Ua(3); a.g[4] = new Ua(4); a.g[5] = new Ua(5); a.g[6] = new Ua(6); eval(Ob("ca)eg")); eval(Ob(" @,fg")); eval(Ob("YhNgg")); eval(Ob("rbcrg")); eval(Ob(" @{zg")); eval(Ob(" @2zg")); eval(Ob("maR{g")); eval(Ob("9bq}g")); Nechcem sem kopírovat celý kód, ak by sa na to chcel niekto pozrieť, kludne pošlem. Ide mi v podstate o to, že by som rád vedieť, ako to celé funguje. Ak to ale nepreložím do "normálnej" podoby, nepohnem s tím - viem sa zorientovať v kódu a vysvetliť si funkci, neviem kód vytvoriť. A preto by som bol rád, keby mi niekto blbovzdorne vedel vysvetliť (alebo pomôcť) ako z týchto písmeniek urobím také, ktoré dokáže moja šedá kôra mozgová spracovať. Vopred vďaka všetkým, ktorí sa nad tím zamyslia. |
||
_es Profil |
#7 · Zasláno: 6. 2. 2013, 18:46:40
MPavel:
„Ide mi v podstate o to, že by som rád vedieť, ako to celé funguje.“ Ide o to, aby bol kód znečitateľnený. Ak sa snažíš z JS niečo naučiť, tak z materiálov určených na výuku, nie z hotových kódov, ešte k tomu úmyselne nečitaľných. Tento kód napríklad nie je „šifrovaný“: code.jquery.com/jquery.min.js. Pochopíš z neho „ako funguje“? Ak dostaneš po eliminovaní „šifrovacích“ a „dešifrovacích“ funkcií niečo podobné, pochopíš „ako to celé funguje“? |
||
MPavel Profil |
#8 · Zasláno: 6. 2. 2013, 19:31:00
_es:
Ano, v tom máš pravdu. Rozdiel je iba v tom, že u mojho kódu presne viem ČO robí, ale neviem AKO... |
||
_es Profil |
#9 · Zasláno: 6. 2. 2013, 19:42:06
MPavel:
„neviem AKO...“ Čo „ako“? Ako funguje funkcia eval si snáď nájsť vieš. Definície funkcií v tom kóde asi tiež. Nechápem teda, v čom chceš poradiť...
„Je mi jasné, že v prípade potreby volám funkciu Ob, ktorá mi z šifry spraví čitateľnú časť kódu. Mňa by ale zaujímalo, ako to dešifrovať.“ Argument pri volaní funkcie eval je ten „dešifrovaný“ kód. No k čomu ti to bude...
|
||
Časová prodleva: 4 dny
|
|||
MPavel Profil |
#10 · Zasláno: 10. 2. 2013, 08:05:21
Dobré ráno.
Aj keď _es pochybuje že mi to k niečomu bude, pokúšam sa z nečitateľného textu urobiť čitateľný. A nechápem okrem iného jednu vec. Začiatok stránky: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=utf-8"> <TITLE>Prevodník - decoder</TITLE> </HEAD> <BODY> <script> (function () { function ob() { var Z = atob("CiAhIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE5NT1BRUlNUVVZXWFlaW1xdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+"), L = atob("QGFiY2VmZ2hpam5vcHFyc3p7fH1+dHV2d3h5QUJDREVGCltdR0hJIkpLTE5NT1BkUVJTVFVWV1hZWmtsbV5fYCBcISMkJSYoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj8n"); Da = []; Qa = []; for (var ia = 0; ia < L.length; ia++) Da[L.charCodeAt(ia)] = Z.charAt(ia), Qa[L.charCodeAt(ia)] = ia; if ((typeof window.console !== 'undefined') && (typeof window.console.log == 'undefined')) window.console.log = function () {}; } function vb(e) { Da === m && ob(); for (var t = "", n = 0; n < e.length; n++) t += Da[e.charCodeAt(n)]; return t } function Ob(e) { var t, n, r, i; Qa === m && ob(); </script> <form name="form1"> Sem zadaj výraz : <input type="Text" id="vstup"> <input type="Button" value="Prevod" OnClick="vystup.value = Ob(vstup.value)"> Tu bude výsledok : <input type="Text" id="vystup" readonly> </form> </BODY> </HTML> |
||
Davex Profil |
#11 · Zasláno: 10. 2. 2013, 11:41:07
MPavel:
„Ale podľa mňa deklarovaná je.“ Je deklarovaná v izolovaném kontextu a tím globálně neviditelná. Viz Časté potíže, zajímavosti a poučné debaty » Uchování hodnot proměnných v anonymních funkcích — lexikální uzávěry. |
||
preca1 Profil |
#12 · Zasláno: 10. 2. 2013, 11:48:22
Zdravim,
funkci Ob definuješ v anonymní funkci, takže není viditelná v tzv. globálním prostoru, kde jí používáš ty. |
||
MPavel Profil |
#13 · Zasláno: 10. 2. 2013, 14:51:06
Odkaz som preštudoval, ale múdry z toho niesom. Chápem podstatu problému ako "nevidím niečo, čo je zavreté v škatulke, a preto to nemôžem zavolať". Čo ale neznamená že to nejde. Otázka je ako to som z linku zatiaľ nepochopil, no aj tak vďaka za nasmerovanie.
|
||
Davex Profil |
#14 · Zasláno: 10. 2. 2013, 21:13:01
Řešení se přímo nabízí - umístit ty funkce mimo anonymní funkci.
|
||
MPavel Profil |
#15 · Zasláno: 11. 2. 2013, 05:59:02
Davex:
OMG. 50 na krku spôsobuje, že najjednoduchšie riešenie človek vôbec neberie do úvahy. Vďaka, skúsim ... |
||
Časová prodleva: 11 let
|
0