Binärdatei zurück in assembler/c umformen

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

Binärdatei zurück in assembler/c umformen

Beitragvon murph » Dienstag 30. Mai 2006, 15:43

hi!
ich wollte eigentlich einen pythoninterptreter etwas abändern, die begrüzung sollte umgeschrieben werden. Ich weiß, das ist spielkram^^
nun habe ich mir den interpreter kompiliert, aber wusste nicht, wo ich die begrüßung suchen sollte und dachte mir, dass es am einfachsten wäre, der Interpreter zu dekompilieren, habe aber daür keine passende software gefunden, die suchparameter sind zu ungenau ("binärdatei c assembler dekompilieren"). Ich weiß allerdings, dass es sowas gibt, habe aber nie einen namen davon gesehen, damals ging es um treiber, habs nur in nem forum gesehen.
Habt ihr Erfahrung/Tipps/...?
ryu
User
Beiträge: 41
Registriert: Dienstag 7. Februar 2006, 19:34

Beitragvon ryu » Dienstag 30. Mai 2006, 19:32

Du weißt aber schon, das Python Opensource ist, und du denn Quellcode auf [url]python.org[/url] runterladen kannst?
Eigentlich besteht kein Grund das ganze zu disassemblieren, vorallem da der so gewonnene Code fast immer schlecht und manchmal sogar kaputt ist.
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

Beitragvon murph » Dienstag 30. Mai 2006, 19:39

habs schon gemacht^^ hab was gefunden: boomerang.
mein prob beim python-interpreter ist, dass der auf eine diskette passen soll, sprich, die module müssen weg!
also wenn ich mir mal die makefile ankucken würde und daraufhin das eine oder andere rausnehmen könnte-kein problem.
Deshalb der aufwand, aujßerdem ist man nachher immer schlauer^^

zb mache aus

Code: Alles auswählen

#include <stdio.h>
int main (int argc, char *argv[])
{
   FILE *fi, *fo;
   char *cp;
   int c;

   if (argc != 4){
      printf("Usage:  crypto  <key>  <input_file>   <output_file>\n");
      exit (-1);
   }
   if ((cp = argv[1]) && *cp!='\0')  {
      if ((fi = fopen(argv[2], "rb")) != NULL)  {
         if ((fo = fopen(argv[3], "wb"))  != NULL)  {
            while ((c = getc(fi)) != EOF)  {
               if (!*cp) cp = argv[1];
               c ^= *(cp++);
               putc(c,fo);
            }
            fclose(fo);
         }
         fclose(fi);
      }
   }
}


Code: Alles auswählen

// address: 0x80484a8
int main(int argc, char* argv[], char** envp) {
    int local0;       // r24{77}
    int local1;       // r24{100}
    char local12;       // r8
    char local14;       // tmpb
    int local2;       // r24{152}
    int local3;       // r24{116}
    int local4;       // r24{87}
    int local5;       // r24{50}
    int local6;       // r24{52}
    int local7;       // r24{224}
    int local8;       // r29
    int local9;       // r24

    *(int*)(%esp - 4) = local8;
    if (argc == 4) {
        local5 = argv + 4;
        local6 = *(int*)local5;
        *(int*)(%esp - 12) = *(int*)local5;
        local7 = local6;
        if (*(int*)local5 != 0) {
            local9 = *(int*)local5;
            local7 = local9;
            if (*(int*)*(int*)local5 != 0) {
                local9 = argv + 8;
                *(int*)(%esp - 56) = 0x80486fc;
                *(int*)(%esp - 60) = *(int*)local9;
                local0 = fopen(*(int*)local9, "rb");
                local7 = local0;
                *(int*)(%esp - 20) = local0;
                if (local0 != NULL) {
                    local4 = argv + 12;
                    *(int*)(%esp - 56) = 0x80486ff;
                    *(int*)(%esp - 60) = *(int*)local4;
                    local1 = fopen(*(int*)local4, "wb");
                    *(int*)(%esp - 16) = local1;
                    if (local1 != NULL) {
                        for(;;) {
                            *(int*)(%esp - 60) = local0;
                            proc1();
                            *(int*)(%esp - 8) = local2;
                            if (local2 == -1) {
                                break;
                            }
                            local14 = *(int*)*(int*)(%esp - 12);
                            if (local14 == 0) {
                                local3 = argv + 4;
                                *(int*)(%esp - 12) = *(int*)local3;
                            }
                            local12 = *(int*)*(int*)(%esp - 12);
                            *(int*)(%esp - 8) = local2 ^ (int) local12;
                            *(int*)(%esp - 12)++;
                            *(int*)(%esp - 56) = local1;
                            *(int*)(%esp - 60) = local2 ^ (int) local12;
                            putchar(local2 ^ (int) local12);
                        }
                        *(int*)(%esp - 60) = local1;
                        fclose(local1);
                    }
                    *(int*)(%esp - 60) = local0;
                    local9 = fclose(local0);
                    local7 = local9;
                }
            }
        }
        local9 = local7;
    } else {
        *(int*)(%esp - 60) = 0x80486c8;
        puts("Usage:  crypto  <key>  <input_file>   <output_file>");
        *(int*)(%esp - 60) = -1;
        exit(-1);
    }
    return local9;
}
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 30. Mai 2006, 19:50

murph hat geschrieben:mein prob beim python-interpreter ist, dass der auf eine diskette passen soll, sprich, die module müssen weg!

Ich habe einen fast vollständigen Python-Interpreter in 2,43 MB gepackt, wenn man noch mehr Module abschafft dann kommt man vielleicht auf 1,44 MB. Alles ohne kompilieren.

murph hat geschrieben:also wenn ich mir mal die makefile ankucken würde und daraufhin das eine oder andere rausnehmen könnte-kein problem.

Du weißt schon, dass man aus dem Interpreter nicht einfach irgendetwas rausnehmen kann? Sonst gibts Segfaults. Und Module kann man auch so löschen, da muss man nichts de/rekompilieren.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

Beitragvon murph » Dienstag 30. Mai 2006, 20:15

kannst du mir deine verklienerte version mal schicken?
ich habe nur den unübersichtlichen source-code(==sehr viel arbeit)
und ich habe eine uuu-version, wo ich aber auch keinen überblick habe, wann welche header und welche c-sources in welcher beziehung aufgerufen werden; ein teil des programmes ist vorkompiliert°!
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 30. Mai 2006, 20:24

Ich schick dir eine PN mit der URL.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

Beitragvon murph » Mittwoch 31. Mai 2006, 11:44

THX!

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder