C'è un motivo per cui i siti Web legittimi utilizzano questo tipo di offuscamento?

8

Ho visto alcuni dei migliori 200 siti web (di Alexa) usando l'oscuramento nel codice javascript. Qualche idea sul perché lo fanno? La mia ipotesi è che lo fanno per prevenire lo scraping dei dati, ma non sono sicuro. Grazie.

Youtube

Booking.com

    
posta packetie 01.07.2016 - 01:16
fonte

2 risposte

2

Hai ricevuto buone informazioni dalla risposta e dai commenti, ma non hanno risposto esattamente alla domanda.

Il motivo per cui il codice offuscato viene utilizzato dipende dall'autore.

L'autore è un cretino : se l'autore sta scrivendo malware, il codice non-offuscato può essere facilmente analizzato dai controllori del malware utilizzando firme, presenza di token, pre-compilazione e altri metodi. L'autore in questo caso vuole che il malware si diffonda, quindi il codice viene offuscato per cercare di evitare il rilevamento.

(nota, questo non è legittimo, quindi non risponde alla tua domanda, ma l'ho aggiunto per i posteri)

L'autore sta usando il codice brevettato : se l'autore sta scrivendo il codice proprietario, sia in java / vbscript che nella libreria ActiveX che sta usando, il codice offuscato è il modo del programmatore per prevenire il casual hacker dall'apprendere e possibilmente sfruttare, rubare, trarre profitto o dare via questi segreti.

L'autore utilizza le funzioni segrete : se l'autore sta scrivendo un codice che utilizza funzioni segrete (non pubblicate) nelle librerie ActiveX, l'offuscamento dell'accesso a tali funzioni può attenuare l'hacker casuale dal vedere, utilizzare, e sfruttando questo codice. Anche se una pratica pericolosa, a volte, i programmatori usano la logica "backdoor" - qualcosa che non richiede autenticazione, o costosi controlli e saldi, ecc. Questo tipo di codice è talvolta chiamato codice "debug" - qualcosa di temporaneo, o qualcosa che è deliberatamente lasciato in produzione e quale "non dovrebbe" essere utilizzato.

L'autore sta codificando una password : se l'autore sta scrivendo un codice che contiene informazioni protette con hard-coding (una password), l'autore potrebbe voler tenere nascoste queste informazioni dall'hacker occasionale o da un Bot.

L'autore sta scrivendo un'e-mail : se l'autore sta scrivendo un codice che sta codificando una e-mail (ad esempio, come parte di un link "contattaci"), l'autore potrebbe voler mantenere questa informazione nascosta ai bot che cercano email per inviare spam.

L'autore utilizza il codice beta o deprecato : se l'autore sta scrivendo un codice che utilizza funzioni che non sono destinate a essere utilizzate nella produzione regolare, ad esempio il codice è deprecato o è in versione beta / alpha - quindi offuscarla, attenuerà chiunque cerchi di copiare, utilizzare, documentare o fare affidamento su questo. Qui, non c'è alcun tentativo di danneggiare il computer di qualcuno o di rubare codice.

L'autore ci sta usando un buon codice che fa scattare un falso positivo : se l'autore sta scrivendo un codice che ha una firma che è nota per attivare un falso positivo dai controllori del virus, l'autore potrebbe cercare di mitigare questo offuscando il codice, in modo da non far scattare l'allarme. Questo può sembrare simile al primo scenario, tranne che nel primo, l'autore è malevolo, mentre in questo caso, l'autore non sta cercando di sovvertire il sistema di nessuno.

The Casual Hacker : nota che qualsiasi hacker determinato vedrà tutto questo e facilmente analizzerà il codice secondo necessità. La sicurezza dei contenuti è generalmente considerata un santo graal. Tutto ciò che viene inviato a un cliente deve essere decodificato, decodificato o de-offuscato prima di essere utilizzato, e in ciò risiede la debolezza: una volta decodificato, decodificato o de-offuscato, il contenuto è accessibile.

    
risposta data 17.01.2017 - 19:38
fonte
6

Non è una sceneggiatura offuscata. è solo uno script minimizzato per un caricamento più veloce.

Questi sono alcuni esempi di script.

Script normale:

StackExchange.ready(function() {
    StackExchange.using("postValidation", function() {
        StackExchange.postValidation.initOnBlurAndSubmit($('#post-form'), 2, 'answer');
    });

    StackExchange.question.init({
        showAnswerHelp: true,
        totalCommentCount: 2,
        shownCommentCount: 2,
        highlightColor: '#F4A83D',
        backgroundColor: '#FFF',
        questionId: 128839
    });
    styleCode();
    StackExchange.realtime.subscribeToQuestion('162', '128839');
    StackExchange.using("gps", function() {
        StackExchange.gps.trackOutboundClicks('#content', '.post-text');
    });
});

Script ridotto a icona:

StackExchange.ready(function(){StackExchange.using("postValidation",function(){StackExchange.postValidation.initOnBlurAndSubmit($('#post-form'),2,'answer')});StackExchange.question.init({showAnswerHelp:true,totalCommentCount:2,shownCommentCount:2,highlightColor:'#F4A83D',backgroundColor:'#FFF',questionId:128839});styleCode();StackExchange.realtime.subscribeToQuestion('162','128839');StackExchange.using("gps",function(){StackExchange.gps.trackOutboundClicks('#content','.post-text')})});

Script offuscato (usando il mio metodo self):

var _0x1fc5 = ["\x30\x2E\x38\x28\x31\x28\x29\x7B\x30\x2E\x33\x28\x22\x34\x22\x2C\x31\x28\x29\x7B\x30\x2E\x34\x2E\x39\x28\x24\x28\x27\x23\x35\x2D\x61\x27\x29\x2C\x32\x2C\x27\x62\x27\x29\x7D\x29\x3B\x30\x2E\x63\x2E\x64\x28\x7B\x65\x3A\x66\x2C\x67\x3A\x32\x2C\x68\x3A\x32\x2C\x69\x3A\x27\x23\x6A\x27\x2C\x6B\x3A\x27\x23\x6C\x27\x2C\x6D\x3A\x36\x7D\x29\x3B\x6E\x28\x29\x3B\x30\x2E\x6F\x2E\x70\x28\x27\x71\x27\x2C\x27\x36\x27\x29\x3B\x30\x2E\x33\x28\x22\x37\x22\x2C\x31\x28\x29\x7B\x30\x2E\x37\x2E\x72\x28\x27\x23\x73\x27\x2C\x27\x2E\x35\x2D\x74\x27\x29\x7D\x29\x7D\x29\x3B", "\x7C", "\x73\x70\x6C\x69\x74", "\x53\x74\x61\x63\x6B\x45\x78\x63\x68\x61\x6E\x67\x65\x7C\x66\x75\x6E\x63\x74\x69\x6F\x6E\x7C\x7C\x75\x73\x69\x6E\x67\x7C\x70\x6F\x73\x74\x56\x61\x6C\x69\x64\x61\x74\x69\x6F\x6E\x7C\x70\x6F\x73\x74\x7C\x31\x32\x38\x38\x33\x39\x7C\x67\x70\x73\x7C\x72\x65\x61\x64\x79\x7C\x69\x6E\x69\x74\x4F\x6E\x42\x6C\x75\x72\x41\x6E\x64\x53\x75\x62\x6D\x69\x74\x7C\x66\x6F\x72\x6D\x7C\x61\x6E\x73\x77\x65\x72\x7C\x71\x75\x65\x73\x74\x69\x6F\x6E\x7C\x69\x6E\x69\x74\x7C\x73\x68\x6F\x77\x41\x6E\x73\x77\x65\x72\x48\x65\x6C\x70\x7C\x74\x72\x75\x65\x7C\x74\x6F\x74\x61\x6C\x43\x6F\x6D\x6D\x65\x6E\x74\x43\x6F\x75\x6E\x74\x7C\x73\x68\x6F\x77\x6E\x43\x6F\x6D\x6D\x65\x6E\x74\x43\x6F\x75\x6E\x74\x7C\x68\x69\x67\x68\x6C\x69\x67\x68\x74\x43\x6F\x6C\x6F\x72\x7C\x46\x34\x41\x38\x33\x44\x7C\x62\x61\x63\x6B\x67\x72\x6F\x75\x6E\x64\x43\x6F\x6C\x6F\x72\x7C\x46\x46\x46\x7C\x71\x75\x65\x73\x74\x69\x6F\x6E\x49\x64\x7C\x73\x74\x79\x6C\x65\x43\x6F\x64\x65\x7C\x72\x65\x61\x6C\x74\x69\x6D\x65\x7C\x73\x75\x62\x73\x63\x72\x69\x62\x65\x54\x6F\x51\x75\x65\x73\x74\x69\x6F\x6E\x7C\x31\x36\x32\x7C\x74\x72\x61\x63\x6B\x4F\x75\x74\x62\x6F\x75\x6E\x64\x43\x6C\x69\x63\x6B\x73\x7C\x63\x6F\x6E\x74\x65\x6E\x74\x7C\x74\x65\x78\x74", "\x72\x65\x70\x6C\x61\x63\x65", "", "\x5C\x77\x2B", "\x5C\x62", "\x67"]
eval(function(_0x5f63x1, _0x5f63x2, _0x5f63x3, _0x5f63x4, _0x5f63x5, _0x5f63x6) {
        _0x5f63x5 = function(_0x5f63x3) {
            return _0x5f63x3.toString(_0x5f63x2)
        };
        if (!_0x1fc5[5][_0x1fc5[4]](/^/, String)) {
            while (_0x5f63x3--) {
                _0x5f63x6[_0x5f63x5(_0x5f63x3)] = _0x5f63x4[_0x5f63x3] || _0x5f63x5(_0x5f63x3)
            }
            _0x5f63x4 = [function(_0x5f63x5) {
                return _0x5f63x6[_0x5f63x5]
            }];
            _0x5f63x5 = function() {
                return _0x1fc5[6]
            };
            _0x5f63x3 = 1
        };
        while (_0x5f63x3--) {
            if (_0x5f63x4[_0x5f63x3]) {
                _0x5f63x1 = _0x5f63x1[_0x1fc5[4]](new RegExp(_0x1fc5[7] + _0x5f63x5(_0x5f63x3) + _0x1fc5[7], _0x1fc5[8]), _0x5f63x4[_0x5f63x3])
            }
        }
        return _0x5f63x1
    }
    (_0x1fc5[0], 30, 30, _0x1fc5[3][_0x1fc5[2]](_0x1fc5[1]), 0, {}))

Vedi, quei 3 script sopra sono uguali (uguali).

    
risposta data 01.07.2016 - 05:03
fonte

Leggi altre domande sui tag