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.
-
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?