Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Έστω ότι φτιάχνουμε κάτι σε .NET και θέλουμε να το κάνουμε όσο το δυνατόν πιο δύσκολο σε κάποιον να αποκτήσει πρόσβαση στο πηγαίο κώδικα, και κατ' επέκταση να τον πειράξει με injections κτλπ. Πείρε το μάτι μου πράγματα όπως το ILSpy τα οποία με έβαλαν σε σκέψεις. Υπάρχουν κάποιοι εμπορικοί obfuscators, όπως ο Dotfuscator, αλλά απ' ότι έχω διαβάσει στα forums είναι πανάκριβη η χρήση τους. Εδώ λοιπόν σκέφτηκα να φτιάξω ένα thread με συζήτηση για DIY / manual τρόπους που μπορεί να χρησιμοποιήσει κανείς για να κάνει το λογισμικό του κάπως πιο δύσκολο να πειραχθεί.

Έχω διαβάσει και σκεφτεί 2-3 πράγματα που θα μπορούσα να κάνω. Σχολιάστε τα να πάρουμε μια ιδέα για αυτά, και προτείνετε και εσείς αν θέλετε κάποιες μεθόδους για το ζητούμενο.

1) Compile σε native κώδικα. Υπάρχουν τρόποι να πάρεις MSIL και να το μετατρέψεις σε native κώδικα.

2) Να διαχωριστεί ο κώδικας σε ένα αριθμό Χ dll binaries, τα οποία θα αποθηκευτούν σε διαφορετικούς κρυφούς φακέλους. Ώστε να βάλουμε τον επίδοξο χάκερ να ψάχνει τους πολυάριθμους φακέλους στο σκληρό του δίσκο.

3) Να γίνει κρυπτογράφιση μέρος του κώδικα με ένα Χ κλειδί, και να αποκρυπτογραφείται όταν χρειάζεται να τρέξει.

4) Μια ιδέα ίσως πρωτότυπη:  Να μετονομάσω όλα τα ονόματα κλάσεων, πεδίων, συναρτήσεων κτλπ από Αγγλικά σε αρχαία Ελληνικά. Έτσι και να καταφέρει κάποιος να δει το source code, θα δυσκολευτεί ίσως λίγο να καταλάβει τι ακριβώς είναι το κάθε τι.

Συζητείστε. :)

Επεξ/σία από Alithinos
Δημοσ.

Φτιάχνεις ένα hash των αρχείων που έχεις στο server και δυο-τρεις φορές την ημέρα ελέγχεις αν άλλαξε κάποιο. Simple as that.

Δημοσ. (επεξεργασμένο)

Εαν καταλάβα καλά, το πρόβλημα που προσπαθείς να λύσεις είναι θεωρητικά ανεπίλυτο και δε θα μπορεί να εμποδίσει κάποιον που θέλει πολύ (και έχει τα απαραίτητα skills) να κάνει tamper.

Παρόλα αυτά, το ζήτημα είναι να κάνεις την δουλειά του πιο δύσκολη, που μπορεί σαφώς να γινει:

  • Η ιδεα 1. που ανέφερες (μετατροπή σε native κώδικα) θα σου επιφέρει τα μεγαλύτερα οφέλη.
  • Οι ιδέες 2. και 3. παρακάμπτονται πολυ εύκολα.
  • Η 4. είναι καλή μόνο αν το αυτοματοποιήσεις και τρέχει σαν build step. Αλλιώς δεν αξίζει να χαλάσεις το codebase σου για κάτι τέτοιο. Είμαι σίγουρος οτι υπάρχουν open-source projects που το κάνουν, δε χρειαζεται να πληρώσεις commercial tool. Με 10 δευτερόλεπτα googling βρήκα αυτό: https://www.obfuscar.com/

Μόνο το 1. ή το 4. πάντως να κάνεις, θα επιφέρει τα περισσότερα οφέλη.

 

Κάτι άλλο: Δεν είμαι σίγουρος τον λόγο που θές να κάνεις obfuscate τον κώδικά σου, αλλά εάν υπάρχει internet communication στο project, να ξέρεις ότι εάν είναι θεωρητικά δυνατό κάποιος να σε πειράξει, σημαίνει πως δεν κάνεις σωστά verify/authenticate/sanitize τα δεδομένα που σου στέλνει ο client. Σε τέτοια project λοιπόν, πρώτη προτεραιότητα, το σωστό client <-> server architecture πάνω απ'ολα.

Εάν είναι ολα offline και θες απλά να προστατέψεις τον κώδικα σου, καλώς, απλά υλοποίησε τις ιδέες πανω.

Επεξ/σία από vel0city
  • Like 1
Δημοσ.

Ευχαριστώ πολύ όλους για τις απαντήσεις!

  Στις 29/1/2019 στις 3:52 ΜΜ, vel0city είπε

Εαν καταλάβα καλά, το πρόβλημα που προσπαθείς να λύσεις είναι θεωρητικά ανεπίλυτο και δε θα μπορεί να εμποδίσει κάποιον που θέλει πολύ (και έχει τα απαραίτητα skills) να κάνει tamper.

Παρόλα αυτά, το ζήτημα είναι να κάνεις την δουλειά του πιο δύσκολη, που μπορεί σαφώς να γινει:

  • Η ιδεα 1. που ανέφερες (μετατροπή σε native κώδικα) θα σου επιφέρει τα μεγαλύτερα οφέλη.
  • Οι ιδέες 2. και 3. παρακάμπτονται πολυ εύκολα.
  • Η 4. είναι καλή μόνο αν το αυτοματοποιήσεις και τρέχει σαν build step. Αλλιώς δεν αξίζει να χαλάσεις το codebase σου για κάτι τέτοιο. Είμαι σίγουρος οτι υπάρχουν open-source projects που το κάνουν, δε χρειαζεται να πληρώσεις commercial tool. Με 10 δευτερόλεπτα googling βρήκα αυτό: https://www.obfuscar.com/

Μόνο το 1. ή το 4. πάντως να κάνεις, θα επιφέρει τα περισσότερα οφέλη.

Κάτι άλλο: Δεν είμαι σίγουρος τον λόγο που θές να κάνεις obfuscate τον κώδικά σου, αλλά εάν υπάρχει internet communication στο project, να ξέρεις ότι εάν είναι θεωρητικά δυνατό κάποιος να σε πειράξει, σημαίνει πως δεν κάνεις σωστά verify/authenticate/sanitize τα δεδομένα που σου στέλνει ο client. Σε τέτοια project λοιπόν, πρώτη προτεραιότητα, το σωστό client <-> server architecture πάνω απ'ολα.

Εάν είναι ολα offline και θες απλά να προστατέψεις τον κώδικα σου, καλώς, απλά υλοποίησε τις ιδέες πανω.

Επέκταση  

Offline είναι, θα κατεβάσει κάποιος τα binaries (exe, dlls) στον υπολογιστή του.

Δημοσ.

Τα πράγματα είναι απλά...αν ο κώδικας σου "αξίζει" πάντα θα υπάρχει κάποιος που θα μπορεί να τον αναλύσει και να τον σπάσει...1 obfuscator για αρχή και ένα πληρωτέο πρόγραμμα για Licensing δίνουν αρκετά αντικινητρα για κάποιους να ασχοληθούν....αν όμως "ασχοληθούν" δεν νομίζω ότι υπαρχει εμπόδιο

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...