Κατ' αρχάς να ζητήσω συγγνώμη για την λίγο... "ετεροχρονισμένη" απάντηση σε ένα σχετικά παλιό post... αλλά πιστεύω οτι το θέμα είναι αρκετα ενδιαφέρον και (ίσως) απασχολεί αρκετούς φίλους. Ήδη αισθάνομαι άσχημα που χρησιμοποίησα στην προηγούμενη πρόταση μου την λέξη "ίσως", αλλά ίσως! δεν έχω πολύ άδικο: Το section αυτό (για code security) κατά την ταπεινή μου αποψη είναι ή θα έπρεπε να ανήκει στην ομάδα με την μεγάλη επισκεψιμότητα και με την μεγαλύτερη συχνότητα σε απαντήσεις... Δηστυχώς όμως δεν είναι έτσι...

Και αυτό κάτι σημαίνει... τεσπα...
Τέρμα οι γκρίνιες.... ας έρθουμε λίγο στο "ψητό".
Υπάρχουν πολλοί τρόποι και πολλές τεχνικές να κάνεις το πρόγραμμα σου δύσκολο στο κάθε επίδοξο cracker. Ο τίτλος του post σου είναι "Πως να δυσκολεψω(σε επιεπδο κωδικα) καποιον που θελει να κανει reverse engineering;" που κατά την γνώμη μου είναι πολύ σωστός. Διότι, έναν καλό cracker που έχει και τα κατάλληλα εργαλεία, μπορείς μόνο να τον δυσκολέψεις.
Όπως πολύ σωστά ανέφεραν και οι υπόλοιποι φίλοι, το "μπέρδεμα" ή το... "θόλωμα" του κώδικα είναι κάτι,... δεν είναι όμως το παν. Είναι απλά ένα κομμάτι του παζλ που λέγεται anti-cracking.
Υπάρουν όμως κι άλλα κομμάτια (μπορεί) πιο σημαντικά.
Αυτά είναι:
1. Τεχνικές antidebugging: Μια πραγματικά πολύ αξιόλογη αναφορά βρίσκεται εδώ:
http://www.securityfocus.com/infocus/1893. Θα μπορούσα να σου αναφέρω κι άλλα παραδείγματα αλλά διαβάζοντας και κατανοόντας το παραπάνω κείμενο νομίζω είναι μια καλή αρχή για να μπείς στο κλίμα. Το να σε φορτώσω με περισσότερα infos απλά θα χάναμε τον στόχο...
2. Τεχνικές self-encryption. Ίσως έχεις διαβάσει για τους λεγόμενους πολυμορφικούς ιούς που έχουν την ικνανότητα να πολλαπλασιάζονται κρύβοντας κάθε φορά τον εαυτό τους μέσα στον εαυτό τους!! με μια διαφορετική μορφή κωδικοποίησης. Μπορείς (με την ίδια λογική) να κάνεις encrypt το πρόγραμμα σου ή κομμάτια αυτού και να τα κάνεις decrypt run-time κατά βούληση και κατ' απαίτηση. Το θέμα αυτό είναι πραγματικά δύσκολο αλλά και προκλητικό μαζί. Για μια καλή αρχή, μπορείς να ρίξεις μια ματιά εδώ:
http://tinyurl.com/6jju36 .
3. Τεχνικες Packing και Unpacking του εκτελέσιμου: Εδώ υπάρχει πολύ "πράμα"... Θα πρότινα όμως να μην χρησιμοποιήσεις κάποιο γνωστό packer μιας και οι περισσότεροι υποψήφιοι crackers το πρώτο πράμα που κάνουνε όταν αποφασίσουνε να ασχοληθούνε με το "άθλημα", είναι να κατεβάσουμε όλους τους un-packers... του "εμπορίου"... (
http://www.exetools.com/unpackers.htm).
4. Code hiding... Εδώ έρχεται η πρόταση σου για το που θα κρύψεις το password. Κατ' αρχάς μπορείς να το κρυπτογραφίσεις με DES με MD5 με BLOWFISH... με ότι θέλεις... Μετά θα έρθει η ώρα να το κρύψεις...
Χμ... πού όμως??
Απ' οτι είδα... έχουνε πέσει αρκτές ιδέες... π.χ. στο registry, μέσα σε ένα άλλο αρχείο... σε μια DLL...κλπ κλπ...
Να προτείνω κάτι?
Έχεις σκεφτεί να κρύψεις μέσα στο ίδιο σου το executable αλλά στο run time... και μάλιστα κάθε φορά που καλείτε το πρόγραμμα σου, να του αλλάζεις και.... θέση!!
Δεν μποορώ να σου δώσω περισσότερες λεπτομέρειςα επάνω σε αυτό... απλά ψάξε για να λεγόμενα "code caves" μέσα στον κώδικα ενός ececutable. Εν ανάγκη δημιούργησε μόνος σου πολλά τέτοια και "παίξε" με αυτά....

...
Το πιασες το υπονοούμενο .... ε?.. αν όχι "googled" 4 a while...

Το σημαντικό είναι να μην χρησιμοποιείς μόνο ΜΙΑ μέθοδο ή τεχνική anticracking, πράγμα που κάνουνε τα περισσότερα εμπορικά προγράμματα προστασίας. Εφόσων ο cracker βρει το αδύνατο σημείο σου... είσαι off. Να χρησιμοποιείς πολλές τεχνικές αντι-cracking και εάν είναι δυνατόν αυτές να αλλάζουνε κάθε φορά (βλέπε polymorphic)... Τότε κάνεις τη ζωή του cracker (εκεί που λέει "Σ ΕΣΠΑΣΑ") πραγματικό εφιάλτη!!!
Happy anti-cracking...
Nothing to declare...