Programm analysieren (hacking)



  • Servus Leute,

    Ich hab mir ein Buch namens "Hacking" von Jon Erickson gekauft, um das Programmieren mit C tirfgründig zu erlernen und vorallem weil der Titel einfach super klingt.

    Nun bin ich dabei, mich durch dieses Buch durchzuarbeiten und bin jetzt an dem Punkt angelangt, wo ich ein einfaches Programm welches in einer for schleife 10 mal Hello World ausgeben soll, mit einem "mikroskob" untersuchen soll. Also auf binärer und hexadezimaler ebene. Im Buch enthalten ist eine Cd, welche den Pc auf Linuxumgebung bootet. Ich hab ein Laptop ohne CD laufwerk und habe dies also nicht gemacht. Ich verwende einen Lcc Compiler zum programmieren. Nun meine Frage:

    1. )im Buch wird dafür mit objdump angefangen und dann auf intel syntax formatiert, indem an objdump -M intel übergeben wird. Geht das nur in der Linuxumgebung oder auch auf meinem Windows 10 mit lcc compiler?

    2.) Im Buch ist die Rede von einem GNU Entwicklungstool mit einem Debugger namens GDB. Tut es auch der Debugger vom Lcc? Auf der nächsten Seite steht, dass Nachfolgend GDB verwendet wird, um den Zustand der Prozessorregister direkt vor dem Start des Programms anzugeben. Dann folgt das hier:

    Reader@hacking:~booksrc $ gdb -q. /a.out
    Using host libthread_db library .... usw
    Dann breakpoint 1, 0x0804837a in main ()
    (gdb) info registers
    eax 0xbffff894
    ecx 0x48e0fe81

    Usw.

    Wie kann ich mir so ein fenster anzeigen lassen?

    wäre echt sehr nice wenn mir jemand helfen könnte.

    Lg Demetum



  • Ich kann dir bei deinen Fragen grundsätzlich erstmal wenig helfen, allerdings vlt. bei deinem Linux Problem generell.

    1. Es gibt bei Windows das "Windows Sub System", damit kann man sich ziemlich bequem ein Linux auf sein Windows System drauf installieren (so ein bisschen ähnlich wie ne VM, nur eben einfacher)

    2. Es gibt Live Systeme, kann man sich auf einen USB Stick laden, entsprechend BIOS konfigurieren, damit man von einem USB Stick aus booten kann

    3. Dual boot: Wohl die komplizierste Lösung, aber zumindest aus meiner Sicht langfristig die beste (neben Windows löschen 😉 ), Linux auf seinem Rechner neben Windows installieren. Beim booten kann dann entschieden werden, was man grade braucht.



  • Installiere dir einfach eine VM mit Linux.

    Zu 1: objdump hat nichts mit dem Compiler zu tun, sondern ist ein Linux Konsolen Programm.



  • @Leon0402 Danke. Das gute an der CD ist halt, dass es nach dem neustart wieder weg ist. Es ist also nichts überschreibendes sondern eine Lernumgebung. Prinzipiel will ich nicht auf linux wechseln. Es geht mir darum, die Aufgaben nachzuvollziehen.



  • @axels ah okay. Aber inwiefern bringt mir das dann bei anderen Programmen? Also das was der Jon in seinem Buch erzählt. Kann ich dass dann also nicht systemûbergreifend machen? Wie würde denn dann eine Programmanalyse aussehen? Wie würde man das anstellen?



  • @Demetum Das ist bei der Live System Variante auch so ... nichts anderes wird (mit großer Wahrscheinlichkeit) auch auf der CD sein. Musst halt nur mal gucken, welche distro das gewesen wäre.

    Das die Umgebung weg ist, halte ich aber erstmal für einen Nachteil (bei den anderen genannten Möglichkeiten e.g. dual boot, vm, windows sub system wird per se, vorrausgesetzt alles richtig installiert, auch nichts überschrieben ... aber es wird natürlich in einem bestimmten Bereich gespeichert)

    VM wäre die schlechtere Alternative zu Windows Subsystem (aus meiner Sicht).

    Ob du produktiv zu Linux wechseln willst oder nicht, bleibt deine Sache. Aber im Bereich Entwicklung, hacking etc. hat Linux aus meiner Sicht die Nase vorne.
    Und generell würde ich empfehlen so zu arbeiten wie das Buch das tut (erstmal). Du wirst auch so überlicherweise Probleme bekommen ... vlt. hast du ne neuere version und die Kommandos haben sich geändert etc.
    Du machst es dir wirklich nicht leichter, wenn du das ganze direkt auf einem anderem Betriebssystem und mit anderen Applikation durchführst.
    Wenn du die Sachen verstanden hast etc. kannst du immer noch nach tools etc. suchen, die auf Windows gehen. Dann hast du mehr Erfahrung und dir fällt es vlt. auch leichter.

    Naiverweise würde ich auch sagen, gibt es vermutlich einen Grund, wenn ein Buch darauf pocht Linux zu nutzen, obwohl 99% der Bevölkerung Windows nutzt ^^



  • By the way:

    Es gibt einen Port der GNU Compiler collection names MinGW.
    https://sourceforge.net/projects/mingw/files/MinGW/Base/binutils/binutils-2.28/

    Habs nicht ausgetestet, da ich selbst Linux nutze, da sollten aber so Sachen wie objdump und auch der gdb drin sein.

    Am besten auch mit der Powershell arbeiten, die hat einige Linux Befehle drin etc. ... damit solltest du auch weniger Probleme bekommen.

    Aber grundsätzlich bleibt die Empfehlung, mache es erstmal so wie es im Buch steht, vor allem wenn du bei sowas wenig Ahnung hast.



  • Installiere dir Docker für Windows (Docker Desktop), da kannst du dir die Distribution deiner Wahl zusammenbasteln (docker build), inkl. der Unix-Tools (gdb,ddd,...), die du brauchst.
    docker ist bei weitem die bessere "Live-CD".



  • @Wutz
    Würde eher auf WSL 2 setzen ... soweit ich weiß wollte docker zuletzt sein backend auch darauf basieren lassen.

    Aber wenn es eben nicht auf dem System sein sollte, ist der live usb stick eben die beste Variante



  • Grundsätzlich ist das alles natürlich auch unter Windows möglich. Wäre halt nicht 1:1 das, was im Buch steht.
    lcc sagt mir jetzt nicht viel. Es gibt sicher viele Tools, die hier ähnliches leisten können. Du könntest z.B. auch einfach Visual Studio nehmen, das ist auch kostenlos. Da kannst du auch problemlos disassemblieren und debuggen. Da ist auch ein dumpbin Tool dabei, das so ähnlich wie objdump ist.
    Du brauchst nicht mal VS zum Kompilieren verwenden, das könntest du auch weiterhin mit lcc machen, wenn du unbedingt willst.

    Schadet aber sicherlich auch nicht, sich etwas mit Linux auszukennen.



  • Die Sache ist einfach, willst Du dem Buch folgen, solltest Du die CD in einer VM benutzen und dort Linux ausführen. Nur so ist sichergestellt, dass der Buchtext mit der Linux Umgebung übereinstimmt. Nimmst Du Windows, kann Dir das Buch nur bedingt weiterhelfen. Später kannst Du sicherlich das Wissen von Linux auf Windows in abgewandelter Form übertragen. Es gibt halt an einigen Ecken Designunterschiede, aber es schadet nicht diese zu kennen.



  • @Leon0402 sagte in Programm analysieren (hacking):

    Würde eher auf WSL 2 setzen ...

    WSL kann keine 32Bit Anwendungen ausführen, das ist manchmal schon sehr ärgerlich - docker kann.



  • @Wutz WSL 2 hat kein Problem mit 32 Bit Anwendungen.



  • @john-0 was bedeutet eigentlich VM?



  • @Demetum
    VM = Virtuelle Maschine