Markus Rechberger / Reverse Engineering
 
StartSeite | MarkusRechberger/ | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern

ReverseEngineering

um nicht nach den sternen zu greifen fange ich mal an bei DOS welches mir vor 14 jahren noch gute dienste erwiesen hat...als game blues brothers (ein klassiker published 1991)

environment:
Microsoft(R) MS-DOS(R) Version 6.22
             (C)Copyright Microsoft Corp 1981-1994. 


Sowie:

                    .=[=]========== About ==============.                    
                    I                                   I                    
                    I            Borland C++            I                   
                    I                                   I                    
                    I            Version 3.1            I                    
                    I                                   I                    
                    I    Copyright (c) 1990, 1992 by    I                    
                    I                                   I                    
                    I    Borland International, Inc.    I                    
                    I                                   I                    
                    I                OK   _             I                    
                    I                                   I                    
                    `==================================='     
und featured by:
   Turbo Assembler  Version 3.1  Copyright (c) 1988, 1992 Borland International

auch nicht zu vergessen:
SOURCER zum disassemblen

Supported by:
dosemu-1.2.2.0

   File  Edit  Search  View  Options  Help
.----------------------- C:\DEVEL\ASM\AUFGABE1\TEST.ASM -----------------------¬
|.model small                                                                  ^
|.stack                                                                        #
|.data                                                                         #
|message   db "Hello world, I'm learning Assembly !!!", "$"                    #
|                                                                              #
|.code                                                                         #
|                                                                              #
|main proc                                                                     #
|   mov ax, seg message                                                        #
|   mov ds, ax                                                                 #
|                                                                              #
|   mov ah, 09                                                                 #
|   lea dx, message                                                            #
|   int 21h                                                                    #
|   mov ax, 4c00h                                                              #
|   int 21h                                                                    #
|main endp                                                                     #
|end main                                                                      #
|                                                                              #
|                                                                              #
|                                                                              #
|                                                                              v
 F1=Help                                             |  Line:1    Col:1        

Build:
tasm test.asm
tlink test.obj

soweit sogut interrupt 21h ist für systemoperationen verantwortlich, interrupt 10h für graphikoperationen...sofern ich meine alten CDs nochmal hervorgrabe werd ich noch n paar 6-7jahre alte school codes hervorkramen und uploaden :)

Sourcer

Ein altes aber anscheined doch noch immer mächtiges tool um software zu disassemblen

beispiel:
sr test.exe
----
man stelle das fileformat auf .asm um
target assembler tasm3.1 in dem fall
output file wurde von mir test1.asm genannt
und [G]o

tasm test1.asm

Turbo Assembler  Version 3.1  Copyright (c) 1988, 1992 Borland International
 
Assembling file:   test1.asm
*Warning* test1.asm(31) Reserved word used as symbol: TEST
Error messages:    None
Warning messages:  1
Passes:            1
Remaining memory:  410k                                                        

solangs hierbei bei nem warning bleibt soll's ok sein da's der erste versuch ist eine applikation zu zerlegen..

nächster schritt.. das ganze wieder zu ner exe file linken

C:\DEVEL\ASM\AUFGABE1\tlink test1.obj
Turbo Link  Version 5.1 Copyright (c) 1992 Borland International 

C:\DEVEL\ASM\AUFGABE1>test1
Hello world, I'm learning [[DIS]]Assembly !!!
C:\DEVEL\ASM\AUFGABE1>                  

... hier gehts dann mal irgendwann weiter ..

Debugging/Reverse engineering erschweren

Programme haben jeweils einen entry point, und endpoint welche man mittels objdump anzeigen kann. Dieser Entry point und Endpoint wird jedesmal aufgerufen sobald das Modul/Programm geladen bzw nachdem sich der Hauptcode beendet hat. Dieses Feature lässt sich jedoch auch leicht missbrauchen um Debugging zu erschweren (hab die eigentliche Option bereits in einem Buch gelesen, jedoch nicht wie man sie missbrauchen kann)..

/*
 * foobar2.c
 */

#include <stdio.h>

void foobar_init(void) __attribute__ ((constructor));
void foobar_fini(void) __attribute__ ((destructor));

void foobar_init(void) {
        printf("Good Morning, Foobar!\n");
        return ;
}

void foobar_fini(void) {
        printf("Good Night, Foobar!\n");
        return ;
}

int main() {
        printf("I'm Foobar!\n");
        return 1;
}

        #include <stdio.h>
        #include <sys/ptrace.h>
    
        void ptrace_trap(void) __attribute__ ((constructor));
    
        void ptrace_trap(void) {

            /*    
             * If ptrace fails here, means someone already ptrace()'ed us.
             */
    
            if (ptrace(PTRACE_TRACEME, 0, 0, 0) < 0) {
                exit(0);
            }
        }

        int main(int argc, char **argv) {
            printf("Hello World!\n");
            return 1;
        }

revenger@debian:/devel/c/fini$ ./main2
Hello World!
revenger@debian:/devel/c/fini$ gdb ./main2
GNU gdb 6.3-debian
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-linux"...Using host libthread_db library "/lib/tls/libthread_db.so.1".

(gdb) run
Starting program: /devel/c/fini/main2 

Program exited normally.

Source: http://neworder.box.sk/newsread.php?newsid=13727


StartSeite | MarkusRechberger/ | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern
Text dieser Seite ändern (zuletzt geändert: 1. Juli 2005 0:11 (diff))
Suchbegriff: gesucht wird
im Titel
im Text