SMC



  • ich nehm mal an, 0x42, 0xC3 stellt den Opcode "mov edx, 42h" dar, ja?
    und das funktioniert also so? ausprobiert? erstaunlich!



  • und wo ist das "ret" ????



  • 0x42 0xC3 bedeutet:

    inc edx
    ret 0
    


  • ok.
    Und funktioniert der Code nun, oder nicht?



  • ich hab des schon 20 mal und in verschiedenen variationen ausgeführt. JA!



  • das seh ich anders, oder was bedeutet das hier

    Fakt ist, dass sich ein Segment, in das geschrieben werden kann nicht ausfuehren laesst.
    Wahrscheinlich wird fuer den Aufruf von jf2 ein neuer "Code"-Descriptor erstellt, der auf die gleiche Speicherstelle zeigt, in die vorher geschrieben wurde. (vielleicht auch nochmal -bg-s Beitrag durchlesen, er hat das praktisch auch schon geschrieben 😉 )



  • hmm, irgendwie find ich das immer noch etwas merkwürdig:

    24:       ((nfp_t) (void *) jf)();
    00401064 8D 45 FE             lea         eax,[ebp-2]
    00401067 8B F4                mov         esi,esp
    00401069 FF D0                call        eax
    0040106B 3B F4                cmp         esi,esp
    0040106D E8 CE 22 00 00       call        __chkesp (00403340)
    25:       jf2();
    00401072 8B F4                mov         esi,esp
    00401074 FF 55 F4             call        dword ptr [ebp-0Ch]
    00401077 3B F4                cmp         esi,esp
    00401079 E8 C2 22 00 00       call        __chkesp (00403340)
    


  • kommt zwar etwas verzögert, aber jetz weiß ihc, _warum_s geht:

    The idea behind: There is a syscall sys_mprotect which allows a program to change the flags for (nearly) every page (i only tested pages in the section .bss). A page is the smallest memory unit available for virtual memory management. On the x86 architecture this page is 4KB. But as i noticed we didn't need this call to make a page in the section .bss executable, because on x86 a readable page is also a executable page, and the section .bss is read/write.

    aus http://linuxassembly.org/articles/smc.html



  • Das interessante bei dem obfuscated-2-Programm ist übrigens, dass es nur funktioniert, wenn man VC auhc ein Release erstellen lässt. Im Debug-Modus bekommt man nämlich nicht 2 sondern 1245054 wiel da ja die ursprünglichen Registerbelegungen nicht so ganz stimmen (sprich edx ist vorher nicht 0) 🙂

    [ Dieser Beitrag wurde am 27.09.2002 um 13:56 Uhr von TriPhoenix editiert. ]



  • Wie machen das eigentlich die Kopierschütze, z.B. Safedisc? Die EXE-Datei ist ja fast vollständig kodiert, nachdem der Kopierschutz abgefragt wurde wird ja dekodiert und ausgeführt, dies muss ja auch im Speicher stattfinden. Ob die das genauso machen wie das Programm weiter oben?


Anmelden zum Antworten