Site hosted by Angelfire.com: Build your free website today!
Everything is Byte !

Author-συγγραφέας: +Malattia

Translation-μετάφραση: basdog22

ΕΚΘΕΣΗ ΓΙΑ ΤΟ 2ο PROJECT


Ενδιαφέρουσα ιδέα από τον basdog22.Υπάρχουν πολλές μη ελληνικές εκθέσεις εκεί έξω που είναι 
αρκετά ενδιαφέρουσες.Ο basdog22 ανέλαβε την μετάφραση μίας εξ αυτών,γραμμένη από έναν 
σημαντικό +HCUker,και έμπειρο steganalyst,τον +Malattia.Όπως αναφέρει ο basdog στο mail που
μας έστειλε:

- Μερικά λόγια απο μένα
Όταν στην ΜΑΣΚ αποφασίστηκε το επόμενο project να είναι το Pe format
αμέσως μου ήρθε στο μυαλό αυτή η έκθεση του +malattia.Δεν ξέρω γιατί
(ελάχιστα για το PE Format έχει) αλλά κάθε φορά που σκέφτομαι ΡΕ η
έκθεση αυτή γυρνάει στο μυαλό μου.
PaintShop Pro Cracking λοιπόν όπως λέμε "Πώς να χρησιμοποιήσετε το
SoftICE για να σπάσετε ένα πρόγραμμα".
Αν και η τεχνική που παραθέτει εδω δεν είναι απο αυτές που χρησιμοποιούνται
καθημερινά πιστεύω οτι θα βοηθήσει όλους μας να καταλάβουμε μερικά
πραγματάκια όσων αφορά το Pe format και τις ιδιότητές του. Παραθέτω
την έκθεση όπως ακριβώς την έγραψε ο ίδιος εκτός απο μερικές
πληροφορίες που έχουν να κάνουν με το θαυμάσιο του site
http://malatia.cjb.net .




Εργαλεία:  PaintShop Pro ???! :)

Δυσκολία:  Μέτριο

 

   - Εισαγωγή
   - Πρόλογος
   - Τα πάντα είναι Byte
   - Δομή και χάος: Headers Vs. Extensions
   - Βρίσκοντας την δομή σε ένα αρχείο
   - Περι Zip αρχείων
   - Περι φορμά εικόνων
   - Dumping
   - Μηδενικά
   - Παίζοντας με το χάος
   - Σπάζοντας με το Psp
   - Εκτελέσιμες εικόνες
   
   - ACKNOWLEDGEMENTS

   Εισαγωγή
   ----------------------------------------------------------------------------
   Πρόλογος
Μερικοί απο εσάς περιμένανε πολύ για να διαβάσουν αυτό το αρχείο! άλλοι απλά
   δεν τους ένοιαζε. Για τους πρώτους πρέπει να απολογηθώ και να τονίσω οτι
   δεν υπάρχει δικαιολογία - Απλά έχασα την θέλησή μου να το τελειώσω και ξόδεψα
   μήνες για να την ξαναβρώ. Για τους άλλους, ελπίζω αυτό το κείμενο να σας
   μάθει κάτι που ίσως δεν ξέρατε και οτι την επόμενη φορά θα είστε με τους αλλους.
Κάτι ακόμη: η ιδέα να σπάσεις ένα πρόγραμμα με ένα image editor ΔΕΝ είναι
   δικιά μου. Την βρήκα στο web πρίν απο κάτι μήνες και δεν θυμάμαι την 
   διεύθυνση... αλλά ήθελα να ξέρετε οτι κάποιος άλλος είχε την αυθεντική ιδέα.
   Άν τύχει και βρείτε την σελίδα, πείτε το μου για να βάλω την διεύθυνση στην    
   έκθεση.
----------------------------------------------------------------------------
   Τα πάντα είναι Byte
Τα πάντα είναι byte. Βέβαια αυτό δεν θα ακουστεί και τόσο παράξενο στους
   περισσότερους απο σας.Οτιδήποτε υπάρχει στον δίσκο ενός Η/Υ, είτε είναι 
   ήχος, ταινία ή αυτό το αρχείο κειμένου, πρέπει πρώτα να μετατραπεί σε δυαδικό
   σύστημα. Αυτό μας φέρνει μερικά ερωτήματα: Άν όλα μοιράζονται το ίδιο φορμά,
   τότε γιατί τρέχω μερικά αρχεία ενώ άλλα τα παίζω; Μπορώ να διαβάσω ένα 
   εκτελέσιμο; Μπορώ να ακούσω μια εικόνα; Η απάντηση είναι "οχι" και    "ναι":
   διότι υπάρχει κάτι που λέει στο σύστημα τι να κάνει. Και βέβαια γίνεται 
   πρόσπαθήσατε ποτέ να γράψετε στην γραμμή εντολών του Linux την εντολή:
   cat /usr/bin/netscape >/dev/dsp ; :)
   ----------------------------------------------------------------------------
   Δομή και Χάος: Headers Vs. Extensions
Λοιπόν, τι κάνει ένα λειτουργικό να καταλάβει τι αρχείο προσπαθείτε να ανοίξετε;
   Υπάρχουν διαφορετικοί τρόποι: Ο χειρότερος για παράδειγμα απλά κοιτάζει την    
   επέκταση του αρχείου. Ένας καλύτερος τρόπος, είναι να κοιτάξει στο header 
   ή σε μία συγκεκριμένη σειρά απο bytes του αρχείου, τα οποία (σχεδόν πάντα)
   αναγνωρίζουν ακριβώς τον τύπο του αρχείου. Μαντέψτε ποιόν τρόπο χρησιμοποιούν
   τα Windows ;)
Παράδειγμα #1: στον σκληρό σας δίσκο, βρείτε όλα τα αρχεία που έχουν επέκταση    
   ".jar". Μετά αντιγράψτε ένα σε κάποιο άλλο φάκελο και μετονομάστε το σε 
   ".zip". Τώρα διπλό κλίκ πάνω του και... Το αρχείο ανοίγει όπως θα άνοιγε
   κάθε ΖΙΡ αρχείο.
Παράδειγμα #2 : Αντιγράψτε το αρχείο shdoclc.dll απο τον φάκελο c:\windows\system\
   σε κάποιο άλλο φάκελο και μετονομάστε το σε shdoclc.html... χα... άν διπλοκλικάρετε
   πάνω του μερικά περίεργα θα συμβούν...
Γιατί; Τί έγινε;
Στην πρώτη περίπτωση, τα αρχεία JAR δεν είναι τίποτα άλλο απο αρχεία ZIP με άλλη
   επέκταση. Έτσι, αφού τα Windows αναγνωρίζουν τα αρχεία σύμφωνα με την επέκτασή
   τους,δέν είναι ικανά να ανοίξουν το αρχείο μέχρι να αλλάξεις την επέκταση σε zip.
Στην δεύτερη περίπτωση, το αρχείο shdoclc.dll περιέχει κώδικα html για να 
   δημιουργήσει διάφορες σελίδες, αλλά ΔΕΝ είναι ένα αρχείο HTML. είναι ένα 
   εκτελέσιμο, έτσι άν προσπαθήσεις να το ανοίξεις σαν HTML θα δείς κάτι
   περίεργους κώδικες... και μια περίεργη συμπεριφορά του περιηγητή, αφού
   εκτελεί τον κώδικα απο πολλές σελίδες μαζί.
Όπως μπορεί να καταλάβατε, αυτή η μέθοδος είναι πολύ buggy, γιατί δεν σου δίνει
   να καταλάβεις με τι προσπαθείς να δουλέψεις. Η χειρότερη περίπτωση είναι όταν
   μερικοί ιοι αντιγράφουν τον εαυτό τους μέσω ταχυδρομείου ώς συνημένο με διπλή    
   επέκταση (όπως .txt.com ή .mp3.pif). άν έχεις αφήσει την επιλογή "απόκρυψη γνωστών
   επεκτάσεων αρχείων" ενεργή, μπορεί να μην προσέξεις οτι είναι εκτελέσιμα    
   και να τα τρέξεις με διπλό κλίκ. Σε άλλες περιπτώσεις, αυτός ο περιορισμός
   μπορεί να είναι χρήσιμος σε μας όπως θα δείτε στην συνέχεια. 
Τί μπορούμε να κάνουμε για να είμαστε σίγουροι οτι αναγνωρίζουμε ένα αρχείο;
   Ακόμη και άν σε μερικές περιπτώσεις δεν μπορείς να είσαι σίγουρος, μπορείς 
   να έχεις καλύτερα αποτελέσματα χρησιμοποιώντας τους λεγόμενους "file analyzers",
   που τρέχουν σε Windows και Linux. Τα πρώτα μπορείτε να τα κατεβάσετε στο:
http://www.programmerstools.org/
   
   Ενώ στο Linux έχουμε την εντολή File που μας δίνει αναλυτική ενημέρωση για τον
   τύπο και χρακτηριστικά του αρχείου.
   ===================================================================================
   Όσοι ασχολούντε με Linux Reversing...το ξέρω δεν είναι πολλοί ;=) μπορούν να    
   κατεβάσουν την Αγγλική έκδοση της έκθεσης. Σε αυτό το σημείο υπάρχει ανάλυση
   της εντολής File και θεώρησα καλό να μην την παραθέσω.
----------------------------------------------------------------------------
   Πέρι αρχείων Zip
Το πιο ενδιαφέρον στα αρχεία ZIP είναι οτι κρατούν πληροφορίες για τα 
   συμπιεσμένα αρχεία τους στα τελευταία bytes της αρχειοθήκης. Αυτό σημαίνει οτι
   μπορείς να προσθέσεις ότι θέλεις ή να κάνεις μερικές αλλαγές και πολλά προγράμματα
   όπως το Winzip κάτω απο Windows ή το unzip κάτω απο linux, θα τα ανοίξουν
   χωρίς προβλήματα. 
----------------------------------------------------------------------------
   Πέρι αρχείων και φορμά εικόνων
Όπως είδατε,τα προγράμματα αποσυμπίεσης ZIP αρχείων δεν έχουν πρόβλημα αν
   προσθέσετε κάτι στην αρχή των αρχείων ΖΙΡ. Αντιθέτως, υπάρχουν μερικά φορμά    
   εικόνας που δεν έχουν πρόβλημα να ανοίξουν αν προσθέσεις κάτι στο τέλος τους.    
   Αυτό γίνεται διότι στον header τους, το πλάτος και το ύψος είναι συγκεκριμένα
   και έτσι όλα τα bytes ενδιάμεσα παραλείπονται. Αυτό δουλεύει στα .gif και .jpg    
   και ενωμένα με τις ιδιότητες των ΖΙΡ αρχείων αυτό σημαίνει οτι μπορείς να ενώσεις
   ένα JPG και ένα ZIP αρχείο (η εικόνα πρώτα, το συμπιεσμένο στο τέλος) και κάτω    
   απο Windows να ανοίγεις το πρώτο αρχείο και το δεύτερο αλλάζοντας απλά την 
   επέκταση του αρχείου!!!
Η τεχνική αυτή χρησιμοποιήθηκε πολύ απο warez groups που θέλανε να κρύψουν τα
   πειρατικά προγράμματα σε εικόνες... Έξυπνο ;=)
   ----------------------------------------------------------------------------
   Dumping
Άν θέλεις να μελετήσεις ένα αρχείο, πρέπει να έχεις ένα πρόγραμμα που σε αφήνει    
   να το ανοίξεις και να δείς τα περιεχόμενά του σε raw format στην οθόνη. Ένας
   hex editor είναι ενα καλό εργαλείο γι αυτή τη δουλειά, ακόμη καλύτερα αν μπορείς
   να αλλάξεις την απεικόνιση απο hex σε ascii, το καλύτερο αν σε αφήνει να το
   αποσυναρμολογήσεις κιόλας. Άλλο ένα εργαλείο είναι το list.com του Vernon Buerg,
   που σου δίνει την δυνατότητα να ανοίξεις ΜΕΓΑΛΑ αρχεία κάθε τύπου, μορφοποίηση σε
   αscii ή hex, να αναζητήσεις strings πολύ γρήγορα και ούτο καθεξής.
Αφού βρείτε τα εργαλεία που σας κάνουν μάθετε να τα δουλεύτε και θα δείτε οτι    
   πολλά μοτίβα επαναλαμβάνονται σε αρχεία ίδιου τύπου.Ακόμη θα μάθετε και πολλά
   χρήσιμα πράγματα όπως:
 - Πολλοί ιοι βάζουν το όνομά τους σε μερικά συγκεκριμένα bytes στην αρχή του
   αρχείου που μολύνουν, έτσι ανοίγοντας ένα αρχείο με ένα dumper όχι μόνο θα
   αποφύγετε την μόλυνση αλλά θα καταλάβετε και ποιός ιός είναι.Και αφού κυκλοφορούν
   πολλά trojan το να ανοίγεις με ένα dumper τα attachments είναι μια πολύ καλή
   ιδέα.
 - Το ξέρετε οτι το CuteFTP σώζει τους κωδικούς σας στις μακροεντολές του;
   Το ξέρω οτι μπορείς να ανοίξεις τα αρχεία αυτά με το Σημειωματάριο αλλά
   αυτό το παράδειγμα ήταν για να σας δείξει οτι θα πρέπει να προσπαθείς να
   ανοίξεις ΚΑΘΕ αρχείο στον δίσκο σου. Έτσι, αν μόλις ξέχασες τον κωδικό σου
   αρχίζεις να καταγράφεις μια μακροεντολή συνδέεσαι με το site σου και σώζεις
   την μακροεντολή. Θα καταλήξεις να έχεις ένα αρχείο κειμένου σαν αυτό:
 Host 123.123.123.123
   RemoteDir /home/httpd/mywebsite
   LocalDir D:\mywebsite
   Retry 20
   Login Normal
   User myusername
   Pass mypassword
   Connect
 
   ----------------------------------------------------------------------------
   Μηδενικά
Κρίνοντας απο τα αρχεία που υπάρχουν στον σκληρό σας, κάθε φορμά έχει τιμές που
   εμφανίζονται σε συγκεκριμένες θέσεις, ή πιο συχνά απο άλλες.Ο λόγος που ονόμασα    
   αυτή την παράγραφο μηδενικά είναι γιατί αυτές οι τιμές είναι συνήθως μηδενικά αλλά
   όχι πάντα.
Για παράδειγμα, τα αρχεία κειμένου μπορεί να έχουν ένα CR (ή CR+LF) περίπου κάθε
   80 χαρακτήρες. Το μέγεθος της γραμμής δεν είναι πάντα το ίδιο αλλά μπορείς να    
   βρείς μερικές ομοιότητες και σε μερικές περιπτώσεις να καταλάβεις οτι το αρχείο
   περιέχει κείμενο ακόμη και αν είναι κρυπτογραφημένο. Γι αυτές τις περιπτώσεις
   μια καλή γνώση του πίνακα ASCII μπορεί να βοηθήσει... 
============================================================================
   Παίζοντας με το Χάος
   ----------------------------------------------------------------------------
Σπάζοντας με το Psp
   Πολλοί θα αναρωτηθούν γιατί να χρησιμοποιήσω ένα πρόγραμμα σαν το PaintShop pro
   για να σπάσω κάτι ενω υπάρχουν τόσα άλλα εργαλεία;;; Λοιπόν, η απάντηση είναι
   απλή... Το όνομα της έκθεσης είναι "Τα πάντα είναι Byte" και παρακάτω ο +malatia
   μας το δείχνει με τον καλύτερο τρόπο:
Σε αυτό το παράδειγμα, θα προσπαθήσουμε να σπάσουμε ένα μικρό πρόγραμμα,το CrackMe 
   του Cruehead v1.0. Μπορείτε να το κατεβάσετε απο το http://3564020356.org/tutes/crackme.zip
Τώρα,ξέρουμε λόγω softice οτι στο 401243 στην μνήμη υπάρχει ένα jz (0x74) που πρέπει
   να το αλλάξουμε σε jmp (0xEB). Πώς μπορούμε να το βρούμε στο αρχείο που υπάρχει    
   στον σκληρό σας;
   Υπάρχουν πολλοί τρόποι να το κάνετε, εξαρτάται απο τι εργαλεία έχετε (βέβαια δεν έχετε
   ένα hex editor ;=) )
- Άν έχετε ενα disassembler ή κάποιο πρόγραμμα που σας δείνει δεδομένα για τα sections,
   μπορείτε να διαβάσετε το RVA και το Offset και να υπολογίσετε το σωστό offset μέσα στο
   αρχείο:
 Offset στο αρχείο = (Address) - (Imagebase) - (RVA) + (Offset ενός section)
 Για παράδειγμα, στην περίπτωση έχουμε τα εξής δεδομένα για το CODE section:
 Object01: CODE 
   RVA: 00001000 
   Offset: 00000600 
   Size: 00000600 
   Flags: 6000020
 και το Imagebase είναι 00400000. Τότε το σωστό offset της εντολής στο 
   401243 είναι:
 401243-401000+600 = 843 (σε HEX βέβαια)
- Αν δεν έχεις ενα disassembler ούτε ένα Pe viewer τότε μπορεί να θέλεις να
   χρησιμοποιήσεις το PaintShop pro!!!
   ΠΡΟΣΟΧΗ: Αυτό δεν είναι εύκολο και μπορεί να σας φανεί και καθόλου ευχάριστο,
   αν πρέπει να ψάξεις πολλά δεδομένα ή μια πολύ κοινή ακολουθία απο bytes. Αλλά
   σε αυτή την περίπτωση ευτυχώς δεν είναι τόσο δύσκολο και θα έχετε την ευκαιρία
   να βρείτε το μέρος που θα γίνει η αλλαγή μέσα στην εικόνα... θα σας δείξω αυτή    
   την τεχνική σε λίγα λεπτά.
Αν τώρα αναρωτιέστε πώς στην ουσία μπορείτε να χρησιμοποιησετε ενα image 
   editing tool για να δουλέψετε σε δεδομένα αντι για εικόνες,θα σας εξηγήσω...  
Άν θελετε να ανοίξετε ένα αρχείο, διατηρώντας την δυαδική του μορφή,πρέπει να το
   ανοίξετε σαν RAW. Δεν ξέρω πως λέγεται μέσα σε άλλες εφαρμογές, αλλά αυτό που πρέπει 
   να δείτε είναι μια εικόνα σε σκάλα του γκρί. Όπου κάθε pixel είναι ένα byte μέσα στο
   αρχείο που ανοίξατε. Ακόμη αφού το μέγεθος της εικόνας δεν δίνεται μέσα στο αρχείο
   (ΟΛΑ τα byte είναι pixels) πρέπει να επιλέξετε ένα μέγεθος μόνοι σας. Καλό μέγεθος    
   είναι το 100 (ή 1000, αν το αρχείο είναι τεράστιο) για πλάτος και για ύψος οτιδήποτε
   που αν πολλαπλασιαστεί με το πλάτος να μας δίνει το μέγεθος του αρχείου (ή κάτι    
   μεγαλύτερο. Δεν μας πειράζει να προσθέσουμε μηδενικά στο τέλος). Στο παράδειγμά μας
   το μέγεθος είναι 12288 bytes, θα διαλέξουμε πλάτος=100 και ύψος=130.
   Άν θέλετε να διαβάσετε πιά τιμή είναι ένα byte (ενα pixel), απλά βάλτε το
   "dropper" ή "color picker" πάνω απο αυτό το pixel και click.Άν απο την άλλη 
   θέλετε να αλλάξετε ένα byte, απλά επιλέξτε size 1 brush ή pencil το χρώμα που    
   θέλετε και κλίκ πάνω στο pixel/byte που θέλετε να αλλάξετε.
   
   Άν θελετε να ψάξετε για μια ακολουθία απο bytes... ακόμη δεν ξέρω αν είναι δυνατόν
   (πιθανώς με το GIMP, αλλά με το PSP με τίποτα). Η τεχνική που χρησιμοποιώ είναι η εξής: 
- Ανοίγουμε το αρχείο σαν RAW και αυξάνουμε το βάθος χρώματος σε 16 εκατ. χρώματα.
   - Χρησιμοποιούμε το "color replacer" για να αντικαταστήσουμε ένα byte (ας πούμε "74")
   με ένα φωτεινό χρώμα (Κόκκινο ή Πράσινο. Αφού η αυθεντική εικόνα είναι σκάλα του γκρί,
   κάθε άλλο χρώμα θα φαίνεται φωτεινό). Άν τα πάτε καλά με επεξεργασία εικόνας μπορείτε
   να διαλέξετε μεγαλύτερο μέγεθος απο "1" για το "brush" σας ενώ αν είστε άνετοι 
   σε θέματα μορφοποίησης εκτελέσιμων μπορείτε να επιλέξετε να αλλάξετε τα χρώματα μόνο 
   στην περιοχή κώδικα.
   - Τώρα κάντε το ίδιο με το byte που προηγείται αυτού που επιλέξατε πρίν (με άλλο χρώμα 
   φυσικά). Απο δώ και πέρα λαμβάνουμε υπόψιν μόνο τις ακολουθίες των χρωματισμένων    
   pixel.
   - Στο τέλος, θυμηθείτε να κλείσετε αυτή την έκδοση του αρχείου. Δεν θέλετε να δουλέψετε με
   μια εικόνα 16 εκατ. χρωμάτων αλλά με το παλιό εκτελέσιμο raw αρχείο.
Σημείωση: Όλοι οι αριθμοί που ασχολούμαστε τώρα είναι 16δικοί, μάθετε να τους μετατρέπετε
   σε δεκαδικούς γρήγορα ή κάντε το SoftICE να το κάνει για σας με την εντολή "?"
Άν κάνετε το παραπάνω με το crackme.exe θα σας δείξει το σωστό μέρος σε 2 βήματα.
   Θα μπορείτε να δείτε μόνο 2 χρωματιστά pixels στην εικόνα, απο τα οποία το δεξιότερο
   είναι αυτό που πρέπει να αλλάξετε. Οι συντεταγμένες του αν το ανοίξατε με 100χ130
   είναι 15,21. Άν κιόλας είχατε το offset του byte μέσα στο αρχείο θα μπορούσατε να
   βρείτε τις σωστές συντεταγμενες απλά διαιρώντας το offset με το πλάτος και κρατώντας
   το αποτέλεσμα σαν y, το υπόλοιπο σαν χ. Στην περίπτωσή μας:
0x843 = 2115 dec
   2115 / 100 = 21 = y
   2115 % 100 = 15 = x
Τώρα έχετε τις σωστές συντεταγμένες,πρέπει απλά να διαλέξετε το χρώμα που θέλετε
   (0xEB = 235) και να "βάψετε" το σωστό pixel για να σπάσετε το πρόγραμμα.Σώστε το αρχείο
   σαν τεστ.raw και μετονομάστε το σε crackme.exe!!!
   Είναι σπασμένο...
----------------------------------------------------------------------------
   Εκτελέσιμες εικόνες
Ούφ, όταν άρχισα να γράφω την έκθεση ήμουν πολύ φρέσκος με το θέμα αλλά
   έχει περάσει πολύς χρόνος και φοβάμαι οτι δεν θυμάμαι όλα όσα είχα βρεί.
   Δεν πειράζει,θα προσπαθήσω να τα εξηγήσω βήμα προς βήμα και θα τα δοκιμάζω
   όσο γράφω... Ελπίζω να μην είναι ακαταλαβήστικα ;)
Το πρώτο πράγμα που με οδήγησε να σκεφτώ μια εικόνα που είναι και εκτελέσιμο
   την ίδια στιγμή ήταν το σπάσιμο με το Psp που σας έλεγα παραπάνω.Είδαμε οτι
   είναι δυνατόν να δείς ένα εκτελέσιμο σαν εικόνα αλλά αυτή ήταν χωρίς νόημα...
   είναι δυνατόν να φτιάξεις μια "καλή" εικόνα που είναι εκτελέσιμο επίσης;;;
Και βέβαια είναι,αλλά πρέπει να δούμε μερικέςλεπτομέρειες πρώτα:
- Οι εφαρμογές των Windows έχουν ένα προκαθορισμένο φορμά (ΡΕ) που απαιτεί
   απο αυτές να έχουν μια κεφαλίδα γεμάτη απο δεδομένα που δεν μπορείς να 
   μετακινήσεις. Αυτό σημαίνει οτι το πάνω μέρος της εικόνας θα είναι γεμάτο
   απο σκουπίδια εκτός και αν χρησιμοποιήσεις κάτι άλλο εκτός ΡΕ. Αυτός είναι
   ο λόγος που αποφάσισα να δουλέψω με αρχεία τύπου .com γραμμένα σε ASM και
   τροποποιημένα με το χέρι.
- Ακόμη και αν δημιουργήσεις ένα .com αρχείο πρέπει να αρχίζει με λίγο 
   κώδικα, έτσι τουλάχιστον λίγα bytes θα υπάρχουν στην αρχή της εικόνας. Δεν
   είναι και τόσο μεγάλο πρόβλημα αφού θα γίνουν μικρές τελείες στην πάνω 
   αριστερή γωνία της εικόνας (Θα δούμε πως μπορούμε να τις κάνουμε σχεδόν
   αόρατες αργότερα). 
- Όσο πιο πολύπλοκα θέλουμε τα δεδομένα να κρυφτούν τόσο χαμηλότερου επιπέδου
   γλώσσα πρέπει να χρησιμοποιήσουμε. Μπορούμε να φτιάξουμε ένα πρόγραμμα σε
   C και να το βελτιώσουμε ώστε να δουλεύει σαν εικόνα αλλά θα είναι ευκολότερο
   να το φτιάξουμε σε ASM απο την αρχή.
- Δεν χρειάζεται να πώ (θα πρέπει να το μάθατε απο το κομμάτι "σπάσιμο με το
   Psp ) οτι υπάρχει ένας συσχετισμός μεταξύ τιμών byte και χρωμάτων κλίμακας
   του Γκρί. Όταν λοιπόν 0χ00 είναι μαύρο το 0xff θα είναι άσπρο. Ένα 
   unconditional jump (0xEB) θα είναι φωτεινό ενώ ένα conditional (0x74,0x75)
   θα είναι πιο σκοτεινό. Κατα τον ίδιο τρόπο όσο μεγαλύτερα είναι τα άλματα
   τόσο φωτεινότερα θα γίνονται αλλά θυμηθείτε οτι άν ένα άλμα είναι κοντινό
   αλλά αρνητικό θα είναι φωτεινότερο απο ένα μακρινό θετικό. Μην τραβάτε τα
   μαλλιά σας ακόμη γιατι μόλις άρχισα με το χαρούμενο μέρος.
Θέλουμε να γράψουμε ένα πρόγραμμα ΚΑΙ να δημιουργήσουμε μια εικόνα με κάποιο
   νόημα. Η μέθοδος που θα σας πώ δεν είναι η επίσημη αλλά είναι ο τρόπος που 
   εγώ έφτιαξα τα παραδείγματα. Άν βρείτε κάτι καλύτερο πείτε το και θα το 
   προσθέσω εδώ.
Το πρώτο που έκανα ήταν να δημιουργήσω ένα πρόγραμμα που θα είχε πολύ άδειο
   χώρο μέσα του. Σκέφτηκα οτι μερικά pixels διασκορπισμένα μέσα σε ένα τεράστιο
   χώρο θα ήταν λιγότερο διακριτά ειδικά μετά την εισαγωγή μιας πραγματικής εικόνας
   ανάμεσά τους. Ένα πολύ εύκολο κομμάτι κώδικα για να τυπώνει μια φράση στην
   οθόνη:
 mov ah, 09h
   mov dx, offset id_msg
   int 21h
   ret
   id_msg db "Hello world",13,10,"$"
Ας το αλλάξουμε με αυτό τον τρόπο:
 mov ah, 09h
   jmp lbl00
   db 1323 dup 0ffh
   lbl00:
   mov dx, offset id_msg
   jmp lbl01
   db 1323 dup 0ffh
   lbl01:
   int 21h
   jmp lbl02
   db 1323 dup 0ffh
   lbl02:
   ret
   id_msg db "Hello world",13,10,"$"
Τι έκανα;
   Μόλις πρόσθεσα μερικά κενά ανάμεσα στις εντολές. 
   Γιατί 1323;
   Είναι ο αριθμός των κενών που θα μου δώσει ένα αρχείο ακριβώς 4000 byte σε μέγεθος
   και εφόσον θα το ανοίξουμε με ένα πρόγραμμα επεξεργασίας γραφικών το μέγεθος    
   μετράει.
   Γιατι 0xFFs και όχι μηδενικά;
   Φίλε μου δεν σκέφτεσαι μεθοδικά. Αυτό που εμείς θεωρούμε μηδενικά είναι άσχημα
   μαύρα σημεία μέσα στην όμορφη εικόνα μας ενώ τα FF είναι άδεια άσπρα κουτάκια
   μέσα στην εικόνα μας! ;=)
Τώρα, ας ανοίξουμε το αρχείο με το Psp: 4000 είναι 50χ80 σαν raw εικόνα σε
   κλίμακα του Γκρί. Με αυτό τον τρόπο κάθε byte θα διαβάζεται σαν μοναδικό
   pixel. Τώρα μπορούμε να διαλέξουμε διαφορετικούς τρόπους για να κρύψουμε τα    
   δεδομένα μας:
- Ζωγράφισε τυχαίο "θόρυβο" γύρω απο τα pixel του κώδικα ώστε να μην βρίσκονται
   εύκολα. Βέβαια αυτό είναι ένα βρώμικο και απλό κόλπο που χρησιμοποιείς αν 
   ξεμείνεις απο φαντασία. Δεν θα δημιουργήσει εικόνα αλλά ένα σωρό απο pixel.
- Δοκίμασε να ζωγραφίσεις κάτι με νόημα αλλά κάτι που να μην μπλέκεται πολύ
   με τα δεδομένα
- Βελτίωσε. Αυτή είναι η δυσκολότερη επιλογή που μπορείς να κάνεις αλλά μπορεί
   να είναι αυτή με το καλύτερο αποτέλεσμα. Θα πρέπει να δουλέψεις με μια 
   προυπάρχουσα εικόνα και να ρυθμίσεις το πρώτο άλμα ώστε να δείχνει σε 
   μέρος όπου ο επόμενος κώδικας θα έχει χρώματα που μοιάζουν με τα χρώματα
   της εικόνας. Μετα ρύθμισε το δεύτερο άλμα ώστε ο κώδικας μετα απο αυτό καθώς
   και το τρίτο άλμα θα είναι καλά κρυμένα μέσα στην εικόνα κτλ κτλ...
   Δύσκολο αλλά ικανοποιητικό. Το χρησιμοποίησα για να δημιουργήσω τον 4ο 
   γρίφο στην σελίδα μου και ένα καλό κομμάτι του κώδικα είναι αόρατο...
Άν θέλεις να πειραματιστείς με την τεχνική, προτείνω να χρησιμοποιήσεις το
   παλιό καλό κόλπο με την τηλεόραση, που είναι λίγο δυσκολότερο απο τυχαίο
   θόρυβο και λίγο πιο εύκολο απο την βελτίωση. Η κεντρική ιδέα είναι να βάλεις
   όλο το θόρυβο (κώδικας) σε μια τετραγωνισμένη περιοχή και να την χρησιμοποιήσεις
   στην οθόνη της τηλεόρασης (θα φαίνεται οτι έχει χιονάκια). Βέβαια αυτός 
   δεν είναι ένας πραγματικός τρόπος να κρύβεις δεδομένα και δεν είναι αυθεντικός
   (ευχαριστώ ovid ;) αλλά έχεις τουλάχιστον κάτι με νόημα και το να έχεις
   μια τηλεόραση που λέει κάτι έξυπνο είναι πάντα καλό...
   Ακόμη και αν αυτό είναι πολύ εύκολο, θα πρέπει να κάνεις λίγη δουλειά πρίν
   μπορέσεις να κρύψεις δεδομένα μ αυτόν τον τρόπο. Θα πρέπει να διαλέξεις μια
   εικόνα πρίν αρχίσεις, να βάλεις τον θόρυβο σε μια περιοχή και να κανονίσεις    
   τα άλματα ώστε ο θόρυβος που δημιουργείται από τον κώδικα να μένει στην περιοχή
   αυτή.
 
   Εδώ είναι πώς το έκανα: 
- Πρώτα,βρήκα μια εικόνα με μια παλιά TV και την τροποποίησα ώστε το video
   να περιέχει άσπρο θόρυβο.
   - Μετά,διάλεξα ένα μέρος να βάλω τον κώδικα που θα ήταν εύκολο να θυμηθώ επίσης.
   Αποφάσισα να το επικολλήσω στα (50,30)
   - Αφού έπρεπε να γίνει άλμα κατευθείαν απο την αρχή στο 50,30 και η ανάλυση της εικόνας
   ήταν 239χ349, ήξερα οτι η offset απο την αρχή του αρχείου στο μέρος που έπρεπε    
   να πάω ήταν:
   249*30+50 = 7520 (0x1d60)
   και αφού το unconditioned άλμα χρειαζόταν 3 byte (ένα για τον opcode, 2 για
   την offset), ήξερα οτι η offset για το άλμα έπρεπε να είναι:
   249*30+50-3 = 7517 (0x1d5d)
   - Ο κώδικας για το εκτελέσιμο λοιπόν ήταν (ναι,είναι τόσο εύκολο.Φτιάξτε ένα πιο
   δύσκολο άν μπορείτε...)
 jmp lbl00
   db 7517 dup 0ffh
   lbl00:
   mov ah, 09h
   mov dx, offset id_msg
   int 21h
   ret
   id_msg db "Watch me, you silly slave!",13,10,"$"
- Ανοίγοντας το πρόγραμμα σαν εικόνα .raw με ανάλυση 249*οτιδήποτε και 
   επικόλληση τα δύο κομμάτια του κώδικα προσεχτικά τα 3 pixel στην αρχή
   τα υπόλοιπα να αρχίζουν στα 50χ30. 
 
Αυτά.Όμως η εικόνα είναι πολύ μεγάλη με αποτέλεσμα όταν το αρχείο σωθεί σαν    
   raw .com ΔΕΝ ΘΑ ΔΟΥΛΕΨΕΙ! Πρέπει να κρατήσεις μόνο ένα κομμάτι της εικόνας
   για παράδειγμα μόνο την οθόνη ΠΑΝΤΑ αρχίζοντας απο την πάνω δεξια γωνία φυσικά
   και μετά να το σώσεις για να έχεις ένα πρόγραμμα που δουλεύει. Μπορούμε να πούμε
   οτι έχουμε κάποια πρόσθετη ασφάλεια αλλά πιστεύω οτι υπάρχει ένα bug σε όσα
   κι άν έχω περιγράψει μέχρι τώρα. ;)
   ============================================================================
   Acknowledgements
I have to say a big, BIG thank you to all the +friends at 3564020356.org for    
   the fun and the satisfaction they give me every day: you never stop amazing me!
   A hug goes to all the friends of the groups I've been (and I'll always be,
   unless they kick me out ;)) part of: +HCU, RingZer0, RET (people, this one
   is new, go and give a look at their stuff ^__^).
   Another big hug goes to all the LOAnians: I haven't put LOA between groups 
   because it's not a group, it's a forma mentis and it's the best (physical or
   not) place I've been in the last years.
A "bravo" to anyone who had the strength to reach this point. I promise I'll
   stop exactly NOW.
+mala, April 2003


ΠΡΟΣΟΧΗ

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

 

BACK HOME