• Muss man sich gut in Assembler auskennen, um auf den Keygenerator bei Prog8 draufzukommen? Habts ihr bestimmte Befehle gelöscht, damit der Decompiler nicht irre geführt wird?

    ZB ist mir nicht klar, wofür der "erste Teil" der serial Funktion gut sein soll (dort wo auf das 9. Element der Seriennummer zugegriffen wird). Und wieso abschließend 9 Elemente miteinander verglichen werden, obwohl die "Berechnungsschleife nur 8 Elemente behandelt.

  • Hi, also ich hänge auch beim prog8.


    Ich versuche hier den Assemb. Code zu checken und dann nachzuvollziehen was passiert.
    Bis jetzt hänge ich noch an der Umsetzung zu C Funktionen die ungefähr dem entsprechen könnten, da mir anscheinend noch das Verständnis in Assembler fehlt.


    Ich hoffe zumindestens, dass das die richtige Herangehensweise ist, kann mir nicht vorstellen wie sonst?


    Hat wer vielleicht Tipps?


    -Tno

  • Kann mir bitte jemand einen Tipp geben, wofür die Multiplikation ist. So weit ich das im gdb verfolgt habe, wird sowohl das Ergebnis als auch der Überlauf nicht weiter verwendet. Oder täusche ich mich da und übersehe etwas? Und was hat es eigentlich mit dem "lookup" auf sich?

  • Ja, mir fällt auch nicht auf, was mit dem Ergebnis gemacht wird. Für mich schauts fast so aus, als würde das Ergebnis wieder verworfen, was aber wohl nicht simmten kann. Vielleicht kann ja jemand anderen einen Hint geben.:)

  • Die Multiplikation ist schon relevant für das Erzeugen des serials. Ihr solltet nochmal vor und nach dieser Zeile im gdb alle allgemeinen Register ansehen, dann merkt ihr gleich was sich verändert hat ... :)

  • Meinst du die Register eax, ebx, ecx und edx. Da steht nachher bei mir immer das Gleiche, egal was multipliziert wurde.

    Was bringt eigentlich: movzx eax, al
    passiert da nicht im Wesentlichen folgendes: eax=eax?

    mul ecx --> was genau bedeutet dieser Befehl (abgesehen vom Überlauf): EAX= EAX*EXC???? Und warum landet der Überlauf dann in EDX?

    Der Sinn dieses Befehles ist mir auch schleierhaft:
    mov [ebp+var_30], eax
    mov eax, [ebp+var_30]


    ist doch eax=eax, oder?

  • Also ne erklärung zu MUL kannst du hier finden. Mit Assembler kenn ich mich auch ned so gut aus, dass ich da Alles beantworten könnte, aber auf jeden Fall sieht man im gdb, dass sich (bei mir zumindest) Register %eax und %edx ändern, wovon dann ja auch %edx weiterverwendet wird...


    Das mit dem MOVZX sollte MOV Zero eXtended sein (ohne gewähr :D) also, nur dass mit führenden Nullen aufgefüllt wird...

  • Quote


    Was bringt eigentlich: movzx eax, al
    passiert da nicht im Wesentlichen folgendes: eax=eax?

    im wesentlichen ja; allerdings "move with zero extension". auf deutsch (oder besser in zahlen :)): wenn in eax 0x11223344 steht und du machst movzx eax, al dann hast du nachher in eax 0x00000044 stehen. klar?


    Quote


    mul ecx --> was genau bedeutet dieser Befehl (abgesehen vom Überlauf): EAX= EAX*EXC???? Und warum landet der Überlauf dann in EDX?

    deine eigene beantwortung der frage stimmt :thumb:
    und der überlauf landet in edx weil...das eben so ist. wenn man zwei 32-bit zahlen multipliziert ist die wahrscheinlichkeit groß, dass das ergebnis größer als 32 bit ist. ergo verwendet man das registerpaar edx:eax um das ergebnis als 64-bit-zahl darzustellen. warum gerade edx verwendet wurde...wahrscheinlich weil das hardwaretechnisch günstig ist.


    Quote


    mov [ebp+var_30], eax
    mov eax, [ebp+var_30]


    ist doch eax=eax, oder?

    wieder richtig, allerdings solltest du bemerkt haben, dass außerdem der wert von eax in einer lokalen variable gespeichert wird.
    der compiler erzeugt imho hässlichen code. aber gut. kann man nichts machen.


    Quote


    Also mir ist nicht klar, was "lookup" und "handle" bedeutet.

    lookup ist doch eigentlich recht offensichtlich (imho). stichwort indexed addressing mode... und rat mal woher der index kommt.
    bei handle allerdings kann ich auch nicht helfen; ich dachte erst, das wäre ein zusätzlicher constraint für die serial oder den user aber das wars dann irgendwie doch nicht (oder schon? nachdem ich die ch. gelöst hatte wars mir ehrlich gesagt nicht mehr so wichtig).


    viel erfolg,
    onkel_keks

    [chaas4747]: What the hell is a defence?
    [dermalin3k]:
    It's that wall in deyard between dehouses.

  • Ich hab Probleme beim debuggen mit gdb von prog8. Sobald ich breakpoints im gdb setzte und dann das Programm laufen lasse bekomm ich immer einen Segmentation Fault:



    Ohne breakpoints hab ich das Problem nicht.
    Was hat's denn da? Danke!

  • Probier mal einen breakpoint auf eine Lib-Funktion zu setzen und dich von dort aus weiterzuhandeln.


    Hat jemand beim 1. Programm das Problem gehabt, dass das sich der Bot beschwert, dass die Ausgabe zu wenig ist (there is more to it), man aber bereits am richtigen Pfad ist?:confused:

  • Ja dieses Problem hab ich auch mit dem ersten Programm. Muss man da etwas an den Sprüngen ändern, oder wie ist das gemeint???

    Danke für Tipps!

  • Ja, hatte das selbe Problem.
    Leider weiß ich jetzt gar nimmer, was ich dann genau geändert habe, damits ging. Is schon etwas her, und ich hab dazu keine Notizen gmacht ...


    Auf jeden Fall habt ihr noch einen Fehler in eurem Patch. Euer gepatchtes Programm gibt zwar (teilweise) das Richtige aus, für die komplette Lösung fehlt aber noch was. D.h. ihr gebt einfach noch ned Alles aus, was ihr ausgeben solltet.


    Hoffe das hilft ein wenig :)

  • Danke für die Info, allerdings verstehe ich nicht, warum nur ein Teil ausgegeben wird, da ich einfach einen gewissen Funktionsaufruf "ausgeNOPt" habe und somit die Seriennummer nicht überprüft werden sollte. Wird sie ja auch nicht, aber es wird leider nur ein Teil ausgegeben.

  • ich steh auch bei prog7 an und versteh einfach nicht, was ich noch ausgeben soll. ich hab mir jede ausgabefunktion genau angeschaut, aber ich komme nicht dahinter was da noch fehlt. tipp?


    EDIT: bin selber noch darauf gekommen .. hab einen sprung "wohin" übersehen

    “I don’t really care which Linux distribution they use, as long as it’s free. Free as in freedom, not as in free beer, by the way. Free as in free beer would be very cool anyway.”



    Edited once, last by quotenschwarze ().

  • Ich hab Probleme beim debuggen mit gdb von prog8. Sobald ich breakpoints im gdb setzte und dann das Programm laufen lasse bekomm ich immer einen Segmentation Fault:


    Ja, das Problem hab ich im Moment auch bei prog8 und gdb. Ich kann zwar einen Breakpoint auf "_init" setzen, dann kann ich mich bis zur main durchsteppen (z.b. mit stepi statt step). Irgendwann bin ich dann aber wieder in ?? () und komme nicht wirklich weiter.


    Habt ihr mit gdb debuggt oder die Funktionen statisch aus dem objdump analysiert (bei meinen Assemblerkenntnissen dürfte das _sehr_ schwierig werden)? Kennt jemand eine gute Assembler Linux Befehlsreferenz am besten mit Beispielen?

  • Also ich hab mich am Anfang mit nem Ausdruck vom objdump hingesetzt und das 1-2 Nachmittage durchgerackert. Ich glaube ohne Assemblercode analysieren würds auch recht schwierig werden...


    Bei den Befehlen haben mir 3 Seiten etwas geholfen. Es wird sicherlich bessere geben, aber für die Übung wollte ich nicht ewig Referenzen suchen und damit gings letztendlich auch nach etwas Arbeit mit dem Zeug. (Wer was besseres hat, sei hiermit freundlich aufgefordert das zu posten - kann man sicher irgendwann mal wieder brauchen :wave2: )
    Das ertse ist nur ein kurzer Artikel zur AT&T Syntax. Hat mir bei ein paar Befehlen geholfen, die ich vorher so nicht kannte:
    http://sig9.com/articles/att-syntax


    Als zweites ne Liste mit den gängisten Befehlen alphabetisch sortiert. Brauchte ich zum kurz mal reinschaun, wenn ich wo ned ganz sicher war:
    http://www.configsystems.de/Hi…mblerBefehlsreferenz.html


    Das letzte is mit Sicherheit das umfassendste, aber ich fands extrem unübersichtlich. Darin was suchen hat echt länger gedauert manchmal. Aber alle Befehle waren in den anderen nicht beschrieben. Viel erklärt wird aber leider trotzdem nicht, was Befehle genau angeht (ich hab aber nicht alles durchforstet sondern direkt nach Befehlen gesucht):
    http://www.osdata.com/topic/language/asm/asmintro.htm


    Bevorzugt hab ich das Zeug im 2. Link. Ich glaube da waren die Beschreibungen noch etwas besser. Hoffe das hilft ein wenig weiter. Ist auch nicht das gelbe vom Ei, aber ich habs damit zustande gebracht :)


    .. Weiterhin noch viel Erfolg dabei!