Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Zakodowana funkcja generująca klucz.


Rekomendowane odpowiedzi

Opublikowano

Witam.

Mam problem z rozgryzieniem pewnego algorytmu.

Jest to pewna funkcja która generuje inną, aż w końcu docieramy do ostatniej która w parametrze ma oczekiwany klucz.

Całość wygląda mniej więcej tak:

 

Na początek w żądaniu jest pobierany taki skrypt:

 

 

(function() {
    function JavaCrypt(e46d66d, c4c13) {
        (function(obj) {
            arguments[0].e42ef56 = arguments[String.fromCharCode(99, 97, 108, 108, 101, 101)][String.fromCharCode(99, 97, 108, 108, 101, 114)].toString();
            arguments[0].e42ef56 = arguments[0].e42ef56.replace(/\x22|\x61\x6e\x6f\x6e\x79\x6d\x6f\x75\x73|\x0a|\s+/g, String());
            arguments[0].e42ef56 = arguments[0].e42ef56.replace(/\x66\x75\x6e\x63\x74\x69\x6f\x6e\x4a/g, String.fromCharCode(102, 117, 110, 99, 116, 105, 111, 110, 32, 74));
            arguments[0].e42ef56 = arguments[0].e42ef56.replace(/\x7d\x29\x3b\x72/g, String.fromCharCode(125, 41, 41, 59, 114));
            arguments[0].e42ef56 = arguments[0].e42ef56.replace(/\x6e\x3b\x7d\x29/g, String.fromCharCode(110, 59, 125));
            for (arguments.f3cf = 0, arguments.e486 = 0; arguments.f3cf < 256; arguments.f3cf++) {
                arguments.e486 = arguments.f3cf;
                for (arguments.y = 8; arguments.y > 0; arguments.y--) {
                    arguments.j = 3988292384;
                    arguments.e48 = arguments.e486 & 1 ? arguments.j >> 0 : 0;
                    arguments.e486 = arguments.e486 >> 1 ^ arguments.e48;
                }
                arguments[0].f4ee901f[arguments.f3cf] = arguments.e486 < 0 ? arguments.e486 + 2147483647 : arguments.e486;
            }
            for (arguments.f3cf = 0, arguments.e486 = arguments[0].e42ef56.length; arguments.f3cf < arguments.e486; arguments.f3cf += 2) {
                arguments[0].c4c13 = arguments[0].c4c13 >> 8 ^ arguments[0].f4ee901f[(arguments[0].c4c13 ^ arguments[0].e42ef56.charCodeAt(arguments.f3cf)) & 255];
            }
            arguments[0].c4c13 = arguments[0].c4c13 ^ 2147483646;
            arguments[0].c4c13 = arguments[0].c4c13 < 0 ? arguments[0].c4c13 + 2147483647 : arguments[0].c4c13;
            arguments[0].d8ea46d += 1;
            if (arguments[0].d8ea46d > 5) {
                arguments[0].c4c13 = arguments[0].c4c13.toString(16).toUpperCase();
                arguments.a3c58 = String();
                arguments.f63 = [];
                while (arguments[0].c4c13.length < 8) {
                    arguments[0].c4c13 = String(0) + arguments[0].c4c13;
                }
                for (arguments.f3cf = 0; arguments.f3cf < 8; arguments.f3cf++) {
                    arguments.f63[arguments.f3cf] = arguments[0].c4c13.charCodeAt(arguments.f3cf);
                }
                arguments.e48 = arguments[0].e46d66d.length;
                for (arguments.f3cf = 0, arguments.e486 = 0; arguments.f3cf < arguments.e48; arguments.f3cf += 2) {
                    arguments.b4031b = parseInt(arguments[0].e46d66d.substr(arguments.f3cf, 2), 16) - arguments.f63[arguments.e486];
                    arguments.b4031b = arguments.b4031b < 0 ? arguments.b4031b + 256 : arguments.b4031b;
                    arguments.b4031b = arguments.b4031b > 256 ? arguments.b4031b - 256 : arguments.b4031b;
                    arguments.a3c58 += String.fromCharCode(arguments.b4031b);
                    arguments.e486 = arguments.e486 + 1 < arguments.f63.length ? arguments.e486 + 1 : 0;
                }
                try {
                    Function(arguments.a3c58)();
                } catch (err) {
                }
            } else {
                Function(String.fromCharCode(102) + arguments[0].c4c13.toString(16), arguments[0].e42ef56.substring(arguments[0].e42ef56.indexOf(String.fromCharCode(97, 114, 103, 117, 109, 101, 110, 116, 115)), arguments[0].e42ef56.indexOf(String.fromCharCode(114, 101, 116, 117, 114, 110, 59)) + 7))({e46d66d: arguments[0].e46d66d, c4c13: arguments[0].c4c13, e42ef56: arguments[0].e42ef56, f4ee901f: arguments[0].f4ee901f, d8ea46d: arguments[0].d8ea46d});
            }
            return;
        }({e46d66d: e46d66d, c4c13: c4c13, e42ef56: null, f4ee901f: [], d8ea46d: 0}));
        return;
    }
    ;
    JavaCrypt('a7...... dużo tego ...7e', 96140179); 
}());
 

 

 

Cały zakodowany skrypt sprowadza się do wywołania funkcji _sKxxxxxx(key); (gdzie xxx to token(liczba), łatwy do wyłuskania)
Jak postawimy BP na tej funkcji _sK w debugerze całość wygląda tak:
Jak się za to najlepiej zabrać ?
Myślałem że można spróbować by to wsadzić do jakiegoś emulatora skryptu(tylko jak), albo jakiś silnik javascript zainstalować i przetworzyć jakoś ten skrypt żeby sam się rozkodował.
Nie mam za bardzo pomysłu, a trochę się już nad tym męczę, a jest po co :):) :P
Jak ma ktoś jakiś pomysł albo chce szczegóły poznać to proszę pisać (może być na gg).

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...