Autor Zpráva
MPavel
Profil
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)
    }
Niektoré časti kódu sú potom v tvare Ob("o@Wf") alebo eval(Ob("0@+nh")) 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ť. A to tak, aby bolo možné do jedného poľa zadať šifru a v druhom sa ukázala rozšifrovaná. Niečo takéto
<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
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 *
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 *
Obfuscator
ShiraNai7
Profil
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
Ď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")
        }
Alebo
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
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
_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
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...
MPavel
Profil
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();
Koniec stránky
</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>
Je tam samozrejme celý kód funkčného skriptu. Problém je, že v chybovej konzoli dostanem iba "funkcia Ob nieje deklarovaná". Ale podľa mňa deklarovaná je. Neviete čo robím zle?
Davex
Profil
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
Zdravim,
funkci Ob definuješ v anonymní funkci, takže není viditelná v tzv. globálním prostoru, kde jí používáš ty.
MPavel
Profil
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
Řešení se přímo nabízí - umístit ty funkce mimo anonymní funkci.
MPavel
Profil
Davex:
OMG. 50 na krku spôsobuje, že najjednoduchšie riešenie človek vôbec neberie do úvahy. Vďaka, skúsim ...

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:

Prosím používejte diakritiku a interpunkci.

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