Πίνακας περιεχομένων

Η JavaScript είναι μια σύγχρονη γλώσσα προγραμματισμού που δημιουργεί τεράστιο και δυναμικό περιεχόμενο ιστότοπου. Είναι ενδιαφέρον ότι λειτουργεί με βάση την αρχή του μονού νήματος. Αυτό σημαίνει ότι μπορείτε να εκτελέσετε μόνο μία λειτουργία κάθε φορά. Τα αντικείμενα μπορούν να δημιουργηθούν απευθείας και οι μεταβλητές δεν έχουν σταθερούς στατικούς τύπους.

Η JavaScript είναι εύκολη για πολλούς προγραμματιστές ιστού και ο κώδικας εφαρμογής της είναι προσβάσιμος από χρήστες και οποιονδήποτε. Αυτό είναι το πιο δύσκολο μέρος της χρήσης JavaScript για προγραμματιστές ιστότοπων. Με αυτόν τον τρόπο, πολλοί επιτιθέμενοι μπορούν εύκολα να αποκτήσουν πρόσβαση και να εκμεταλλευτούν ευπάθειες κώδικα ιστότοπου και δεδομένων που μπορούν να βλάψουν τον ιστότοπο και την επιχείρηση.

Για να ξεπεράσουν ή να αποθηκεύσουν τον κώδικα που δημιουργείται από τη JavaScript, οι προγραμματιστές χρησιμοποιούν μια τεχνική που ονομάζεται JavaScript Obfuscation. Σε αυτό το άρθρο, θα εξερευνήσετε το JavaScript Obfuscator, πώς μπορείτε να προστατεύσετε και να αποθηκεύσετε τον κώδικα JS και τη σημασία του JS obfuscator.

Η διαδικασία για την ασφάλεια του κώδικα, κατά την οποία οι προγραμματιστές αλλάζουν ή τροποποιούν τον βασικό κώδικα σε μια προβληματική μορφή που δεν μπορεί να γίνει εύκολα κατανοητή από τον άνθρωπο, διασφαλίζοντας παράλληλα τη σωστή εκτέλεση του κώδικα. Σε αντίθεση με την κρυπτογράφηση (η οποία απαιτεί ένα κλειδί για την αποκωδικοποίηση του τροποποιημένου κώδικα), η συσκότιση δεν απαιτεί κανένα κλειδί για την αναδιάρθρωση του βασικού κώδικα. 

Ο κύριος σκοπός αυτής της διαδικασίας είναι να αποτρέψει ή να σταματήσει τη μη εξουσιοδοτημένη πρόσβαση, την αντίστροφη μηχανική και την κλοπή πνευματικής ιδιοκτησίας.

Η συσκότιση μπορεί να εξυπηρετήσει διάφορους σκοπούς και οφέλη λόγω των οποίων χρησιμοποιείται, μερικά από τα οποία δίνονται παρακάτω:

Η συσκότιση προστατεύει τον κώδικά σας και τις ευαίσθητες πληροφορίες από κλέφτες και επιτιθέμενους στον κυβερνοχώρο, επιτρέποντας έτσι το απόρρητο του έργου σας.

Οι μπερδεμένοι κώδικες μπορεί να δυσκολέψουν τους χάκερ να τους εντοπίσουν σφάλματα, ώστε να μπορούν να χρησιμοποιηθούν για κακόβουλους σκοπούς.

Η συσκότιση θα εξασφαλίσει ένα ανταγωνιστικό πλεονέκτημα διασφαλίζοντας τις μοναδικές εφαρμογές των τακτικών και των στρατηγικών κάποιου.

Ορισμένοι κώδικες περιλαμβάνουν ευαίσθητες πληροφορίες, κλειδιά ή λογική που είναι σημαντικά για τη λειτουργία, αλλά δεν πρέπει να εκτίθενται στο κοινό, αποτρέποντας τη διαρροή των πληροφοριών σας και βοηθώντας τις πληροφορίες να είναι μόνο για εσάς.

Ακολουθεί ένα παράδειγμα ενός JavaScript Obfuscator:

Ο βασικός κώδικας της λέξης Hello in the JS μοιάζει με αυτό:

συνάρτηση greet(όνομα) {

    επιστροφή "Γεια σας, " + όνομα + "!";

}

Η λειτουργία της συσκότισης μετατρέπει τον ακόλουθο κώδικα σε αυτό:

συνάρτηση _0x2c56(_0x1a73){return 'Γεια σας, '+_0x1a73+'!';}

Και οι δύο κωδικοί έχουν το ίδιο νόημα και η έξοδος τους δεν έχει ως αποτέλεσμα καμία διαφορά, αλλά η διαφορά τυπογραφικού λάθους έχει ως αποτέλεσμα σημαντική προστασία του κώδικα. Τα πολύπλοκα πράγματα είναι πάντα πιο δύσκολα προσβάσιμα.

Η λειτουργία της συσκότισης JS φαίνεται παρακάτω

Η όλη διαδικασία ακολουθεί ορισμένα βήματα όπως: 

Εδώ, η αντικατάσταση των περιγραφικών ονομάτων μεταβλητών γίνεται με συμβολοσειρές χωρίς νόημα (π.χ., το όνομα χρήστη γίνεται a1b2c3)

Ένα παράδειγμα δίνεται παρακάτω για να κατανοήσουμε καλύτερα

Αρχικός κωδικός:

συνάρτηση calculateTotal(τιμή; φόρος) {

    τιμή επιστροφής + (τιμή * φόρος).

}

Αυτός ο κώδικας μπορεί να μοιάζει με αυτό μετά από συσκότιση

Συγκεχυμένος κώδικας:

συνάρτηση _0x45a1(x,y){return x+(x*y);}

Είναι επίσης γνωστό ως κρυπτογράφηση συμβολοσειράς. Είναι μια διαδικασία με την οποία ευαίσθητα δεδομένα, όπως διευθύνσεις URL ή κλειδιά API, κωδικοποιούνται με συμβολοσειρές μέσα στον κώδικα. Ακολουθεί ένα παράδειγμα κρυπτογράφησης συμβολοσειράς:

Πρωτότυπος κωδικός:

const apiKey = "ABC123";

Η συγκεχυμένη έκδοση δίνεται παρακάτω.

Συγκεχυμένος κώδικας:

const _0x3d2a = "\x41\x42\x43\x31\x32\x33";

 Σε σύντομη μορφή γνωστή ως ισοπέδωση κώδικα. Οι σύνθετες δομές κώδικα απλοποιούνται, τα σχόλια καταργούνται για να μειωθεί όσο το δυνατόν περισσότερο η αναγνωσιμότητα.

Πρωτότυπος κωδικός:

Ένας απλός κώδικας μπορεί να μοιάζει με αυτό 

συνάρτηση checkAccess(χρήστης) {

    if (user.role === "admin") return true;

    αλλιώς επιστρέψτε ψευδής.

}

Μπερδεμένος κώδικας:

Συνάρτηση _0x1a2b(_0x3c4d) {

    return _0x3c4d["\x72\x6f\x6c\x65"] === "\x61\x64\x6d\x69\x6e" ? !0x0 : !0x1;

}

 Η αναγνωσιμότητα μειώνεται σημαντικά, όπως παρατηρείται από τη διαφορά μεταξύ των δύο κωδικών που παρουσιάζονται παραπάνω.

Είναι παρόμοιο με το Code flattening &; control flow Alteration. Είναι η προσθήκη ανούσιων αποσπασμάτων κώδικα στον αρχικό κώδικα για να γίνει λιγότερο αναγνώσιμος.

συνάρτηση validateInput(input) {

    εάν (input.length > 5) επιστρέψτε true.

    αλλιώς επιστρέψτε ψευδής.

    // Νεκρός κωδικός παρακάτω

    const x = 10;

    console.log("Αυτό δεν τρέχει ποτέ");

}

Η έκδοση εισαγωγής νεκρού κώδικα (Obfuscated) αυτού του κώδικα μοιάζει  με αυτό:

συνάρτηση validateInput(input) {

    if (input.length > 5) {

        // Νεκρός κώδικας που δεν κάνει τίποτα χρήσιμο

        const unusedVar = Math.random() * 100;

        console.log("Αυτό είναι μέρος του νεκρού κώδικα: ", unusedVar);

        Επιστρέψτε αληθής.

    } αλλιώς {

        // Περισσότερα νεκρό κώδικα παρακάτω

        ας fakeCondition = input.includes("μυστικό");

        if (fakeCondition) {

            console.log("Αυτή η κατάσταση είναι ψεύτικη και άσχετη").

        }

        επιστροφή ψευδής.

    }

    // Μη προσβάσιμος νεκρός κωδικός

    const x = 10;

    const y = 20;

    console.log("Αυτό δεν θα εκτελεστεί ποτέ, αλλά μπερδεύει τους επιτιθέμενους: ", x + y);

}

Η τεχνική εντοπισμού σφαλμάτων στο JS είναι μοναδική και περιλαμβάνει δηλώσεις εντοπισμού σφαλμάτων, ανίχνευση κονσόλας και επιθέσεις χρονισμού για την παρεμπόδιση του κώδικα και του εντοπισμού σφαλμάτων.

setInterval(function(){

    if (typeof console._commandLineAPI !== 'undefined') {

        ειδοποίηση ("Εντοπίστηκε πρόγραμμα εντοπισμού σφαλμάτων!");

        window.location.href = "about:blank";

    }

}, 1000);

Ο ίδιος κώδικας, όταν τροποποιείται σε μια συγκεχυμένη έκδοση χρησιμοποιώντας το εργαλείο συσκότισης JS. Έχει γίνει πιο δύσκολο να κατανοηθεί και να αναλυθεί χρησιμοποιώντας ένα επιπλέον επίπεδο anti-debugging.

Συγκεχυμένος κώδικας:

(λειτουργία () {

    var _0x3c87 = ['_commandLineAPI', 'απροσδιόριστο', 'about:blank'];

    (λειτουργία (_0x4d1b99, _0x1ea782) {

        var _0x223b1b = συνάρτηση (_0x234219) {

            ενώ (--_0x234219) {

                _0x4d1b99['push'](_0x4d1b99['shift']())·

            }

        };

        _0x223b1b(++_0x1ea782);

    }(_0x3c87, 0x18f));

    var _0x4a68 = συνάρτηση (_0x4d1b99, _0x1ea782) {

        _0x4d1b99 = _0x4d1b99 - 0x0;

        var _0x223b1b = _0x3c87[_0x4d1b99]·

        _0x223b1b επιστροφής·

    };

    setInterval(συνάρτηση () {

        if (typeof console[_0x4a68('0x0')] !== _0x4a68('0x1')) {

            ειδοποίηση («Εντοπίστηκε πρόγραμμα εντοπισμού σφαλμάτων!»);

            window['τοποθεσία']['href'] = _0x4a68('0x2');

        }

    }, 0x3e8);

})();

Αυτά ήταν μόνο μερικά από τα απλά βήματα (τεχνικές) για το πώς ένα απλό και ουσιαστικό κομμάτι κώδικα μπορεί να μετατραπεί στο υψηλότερο επίπεδο δυσκολίας, κάνοντάς το να μοιάζει με έναν πολύ προηγμένο και περίπλοκο κώδικα χρησιμοποιώντας ένα εργαλείο συσκότισης.

Για τη βέλτιστη πρακτική συσκότισης στην JS, υπάρχουν αρκετές προτάσεις για την εφαρμογή της.

Λειτουργία αξιόπιστων obfuscators όπως JavaScript, Obfuscator ή UglifyJS για την αφαίρεση ισχυρών μετασχηματισμών.  

Η συσκότιση είναι το επίπεδο εκκίνησης της άμυνας. Ο συνδυασμός του με διαφορετικές τεχνικές, όπως αυστηρές δοκιμές, ασφαλείς πρακτικές κωδικοποίησης κ.λπ., μπορεί να προσθέσει μια άθραυστη προστασία στο έργο σας.

Αποθηκεύστε μια σαφή έκδοση του αρχικού κώδικα και ναύλωση για μελλοντικό εντοπισμό σφαλμάτων. Θα σας επιτρέψει να αποκτήσετε πρόσβαση στον αρχικό σας κώδικα, διευκολύνοντας έτσι τη διαδικασία τροποποίησης.

Μείνετε ενημερωμένοι σχετικά με τις αναδυόμενες απειλές και τροποποιήστε ανάλογα τις τακτικές συσκότισης.

Η ιδέα της συσκότισης προέκυψε από μια αίσθηση ηθικής προστασίας των έργων σας από κυβερνοεπιθέσεις. Έτσι, η κακή χρήση του μπορεί να οδηγήσει σε κακές περιστάσεις, όπως:

Οι εγκληματίες του κυβερνοχώρου χρησιμοποιούν συχνά την τεχνική συσκότισης για να αποκρύψουν τα επικίνδυνα σενάρια ή τα ποινικά μητρώα τους.

Η συσκότιση μπορεί επίσης να εισβάλει στην ιδιωτική ζωή κάποιου, να παρακολουθήσει σενάρια κ.λπ. Είναι πάντα σημαντικό να εξετάζεται η ορθή χρήση τέτοιων τεχνικών. Η διατήρηση της ισορροπίας μεταξύ αυτών των πραγμάτων είναι το πρώτο βήμα για την εκτέλεση συσκότισης.

Ενώ η χρήση συσκότισης για την προστασία του κώδικα και των έργων σας είναι πολύ ευεργετική, δεν είναι αλάνθαστη. Έχει ορισμένους περιορισμούς που μπορεί να σας ενοχλήσουν κατά τη χρήση του. Μερικά από τα ανεκπλήρωτα κενά του συζητούνται παρακάτω:

Εάν ο κώδικάς σας είναι συγκεχυμένος περισσότερο από όσο χρειάζεται, θα επηρεάσει αρνητικά το χρόνο εκτέλεσης του κώδικά σας, κυρίως εάν χρησιμοποιούνται δυναμικές μέθοδοι δημιουργίας ή περιττού κώδικα.

Οι έμπειροι χάκερ ή επιτιθέμενοι μπορούν να χρησιμοποιήσουν συσκότιση στον ήδη μπερδεμένο κώδικά σας, χωρίς τελικά να αφήνουν καμία προστασία του κώδικά σας.

Ο μπερδεμένος κώδικας είναι πάντα δύσκολο να διορθωθεί, να διατηρηθεί ή να αναπτυχθεί λόγω της προσθήκης περιττών γραμμών που χρησιμοποιούνται για την προστασία του. Είναι ακόμη πιο δύσκολο για προγραμματιστές που δεν ήταν μέρος της ομάδας ανάπτυξης του αρχικού κώδικα και του συγκεχυμένου κώδικα.

Συγκεκριμένες τεχνικές συσκότισης δεν είναι προσβάσιμες σε όλους τους φυλλομετρητές ή περιβάλλοντα, αυξάνοντας έτσι τις πιθανότητες τεχνικών προβλημάτων στην έξοδο ή τη λειτουργία του κώδικα.

Η συσκότιση JavaScript είναι ένα ισχυρό και ευεργετικό εργαλείο για την προστασία του κώδικα κάποιου από κλοπή, χάκερ, επιτιθέμενους, παραβίαση και αντίστροφη μηχανική. Ενώ είναι μια ασπίδα προστασίας για τις ευαίσθητες πληροφορίες και την πνευματική ιδιοκτησία που αποθηκεύονται στον υπολογιστή σας με κωδικοποίηση, δεν είναι μια μόνιμη ή ανίκητη λύση για την ασφάλεια.

 Ο κύριος του έργου δεν πρέπει να βασίζεται απλώς στη συσκότιση. Κατανοώντας και αποκτώντας αρκετή γνώση των τεχνικών, των πλεονεκτημάτων και των περιορισμών του, οι προγραμματιστές μπορούν να το κάνουν πιο πολύτιμο και αποτελεσματικό για την απόλυτη προστασία του κώδικά σας.

Ενώ έχει κάποια οφέλη, περιορισμούς και όλα όσα χρειάζεται μια διαδικασία ή τεχνική για να υπάρχει, η πραγματική της δύναμη έγκειται στο γεγονός ότι αποτελεί μέρος μιας πολυεπίπεδης αμυντικής στρατηγικής. Πρέπει να εξασκηθείτε αρκετά για να το κάνετε πιο αποτελεσματικό, χρήσιμο και παραγωγικό για εσάς από οποιονδήποτε άλλο. Βοηθά στη διασφάλιση της ακεραιότητας, της εμπιστευτικότητας και της αξιοπιστίας του κώδικα JavaScript στο συνεχώς εξελισσόμενο ψηφιακό τοπίο. 

Εν ολίγοις, είναι ένα εργαλείο που σας βοηθά να διατηρήσετε το απόρρητό σας και σας παρακινεί να σκεφτείτε πιο αποτελεσματικούς τρόπους για την προστασία των πληροφοριών σας.

Για περισσότερα εργαλεία για τη βελτιστοποίηση της ανάπτυξης ιστού, ρίξτε μια ματιά:

Για περισσότερα εργαλεία ασφαλείας, επισκεφθείτε την ενότητα Ασφάλεια UrwaTools.

UrwaTools Editorial

The UrwaTools Editorial Team delivers clear, practical, and trustworthy content designed to help users solve problems ef...

Εγκύκλιος

Μείνετε ενημερωμένοι με τα πιο πρόσφατα εργαλεία μας