Thread View: pl.comp.lang.asm
9 messages
9 total messages
Started by czterdziesci.cztery
Sat, 24 Jan 2009 17:50
Instrukcja w locie w asemblerze.
Author: czterdziesci.cztery
Date: Sat, 24 Jan 2009 17:50
Date: Sat, 24 Jan 2009 17:50
13 lines
1470 bytes
1470 bytes
Witam, Mam pytanie. Czy możliwe jest generowanie w locie instrukcji asemblera. Na przykład pobieranie jakiś danych z segmentu danych i przekształcanie tego w dowolną instrukcję? Przyszło mi to do głowy, bo zetknąłem się z programem, który prawie w całości jest zakodowany w segmencie danych, a raczej na pewno nie generuje nowego execa. pozdr B.
Re: Instrukcja w locie w asemblerze.
Author: Wojciech Muła
Date: Sat, 24 Jan 2009 19:03
Date: Sat, 24 Jan 2009 19:03
22 lines
1835 bytes
1835 bytes
czterdziesci.cztery@gmail.com wrote: > Mam pytanie. Czy możliwe jest generowanie w locie instrukcji > asemblera. Na przykład pobieranie jakiś danych z segmentu danych i > przekształcanie tego w dowolną instrukcję? > Przyszło mi to do głowy, bo zetknąłem się z programem, który prawie w > całości jest zakodowany w segmencie danych, a raczej na pewno nie > generuje nowego execa. Oczywiście, tylko aplikacja musi zadbać o prawa dostępu do segmentów oraz stron (żeby można było wykonywać i odczytywać), oraz oczywiście poprawnie wygenerować kod. Tu masz przykład: http://swtch.com/~rsc/regexp/, a dokładnie: http://swtch.com/~rsc/regexp/regexp-x86.c.txt -- program generuje kod stosownie do swoich potrzeb (w tym wypadku dopasowanie wyrażeń regularnych). w. -- Kupię: http://wmula.republika.pl/kupie.html
Re: Instrukcja w locie w asemblerze.
Author: CC
Date: Sat, 24 Jan 2009 22:53
Date: Sat, 24 Jan 2009 22:53
14 lines
1953 bytes
1953 bytes
On 24 Sty, 20:03, Wojciech Muła <wojciech_m...@poczta.null.onet.pl.invalid> wrote: > Tu masz przykład:http://swtch.com/~rsc/regexp/, a dokładnie:http://swtch.com/~rsc/regexp/regexp-x86.c.txt-- program > generuje kod stosownie do swoich potrzeb (w tym wypadku > dopasowanie wyrażeń regularnych). Rozumiem, że kluczowa w całym przykładzie jest uniksowa funkcja mprotect. Ciekawi mnie źródło tej funkcji, a w szczególności jak wygląda ustawianie flagi PROT_EXEC. Spróbuję poszukać. Może wiesz jaki jest jej odpowiednik w Windows? A może znasz jakiś przykład generowania kodu w locie w czystym asemblerze? cc.
Re: Instrukcja w locie w asemblerze.
Author: Wojciech Muła
Date: Sat, 24 Jan 2009 23:30
Date: Sat, 24 Jan 2009 23:30
30 lines
2161 bytes
2161 bytes
CC <czterdziesci.cztery@gmail.com> wrote: > On 24 Sty, 20:03, Wojciech Muła > <wojciech_m...@poczta.null.onet.pl.invalid> wrote: > > Tu masz przykład:http://swtch.com/~rsc/regexp/, a dokładnie:http://swtch.com/~rsc/regexp/regexp-x86.c.txt-- program > > generuje kod stosownie do swoich potrzeb (w tym wypadku > > dopasowanie wyrażeń regularnych). > > Rozumiem, że kluczowa w całym przykładzie jest uniksowa funkcja > mprotect. Ciekawi mnie źródło tej funkcji, a w szczególności jak > wygląda ustawianie flagi PROT_EXEC. Spróbuję poszukać. W Linuksie jest do tego specjalna funkcja systemowa o numerze 125 -- to już jest grzebanie po tablicy stron i aż takie szczegóły chyba nie są Ci potrzebne. > Może wiesz jaki jest jej odpowiednik w Windows? VirtualProtect, VirtualProtectEx. Nigdy nie używałem, ale wyglądają podobnie jak mprotect. > A może znasz jakiś przykład generowania kodu w locie w czystym > asemblerze? Niestety nie. w. -- Kupię: http://wmula.republika.pl/kupie.html
Re: Instrukcja w locie w asemblerze.
Author: CC
Date: Sun, 25 Jan 2009 00:49
Date: Sun, 25 Jan 2009 00:49
5 lines
1667 bytes
1667 bytes
Czyli rozumiem, żeby wykonać w locie kod muszą zostać użyte funkcje "mprotect" "posix_memalign"? Może wiesz jaki jest windowsowy odpowiednik tej drugiej? cc.
Re: Instrukcja w locie w asemblerze.
Author: CC
Date: Sun, 25 Jan 2009 10:25
Date: Sun, 25 Jan 2009 10:25
20 lines
2331 bytes
2331 bytes
<wojciech_m...@poczta.null.onet.pl.invalid> wrote: > > Rozumiem, że kluczowa w całym przykładzie jest uniksowa funkcja > > mprotect. Ciekawi mnie źródło tej funkcji, a w szczególności jak > > wygląda ustawianie flagi PROT_EXEC. Spróbuję poszukać. > > W Linuksie jest do tego specjalna funkcja systemowa o numerze 125 -- > to już jest grzebanie po tablicy stron i aż takie szczegóły chyba > nie są Ci potrzebne. > Jeśli dobrze zrozumiałem ustawienia tej flagi to kwestia systemu operacyjnego a nie asemblera. Bo chyba system operacyjny ma nieograniczony dostęp do całej dostępnej pamięci. Ale czy takie generowanie instrukcji w locie nie spowoduje jakiś problemów na przykład z programami antywirusowymi? Czy można np. zblokować dla takiego programu dostęp czytania z obszaru w którym generowany byłby w locie kod? cc.
Re: Instrukcja w locie w asemblerze.
Author: Wojciech Muła
Date: Sun, 25 Jan 2009 12:52
Date: Sun, 25 Jan 2009 12:52
29 lines
2408 bytes
2408 bytes
CC <czterdziesci.cztery@gmail.com> wrote: > <wojciech_m...@poczta.null.onet.pl.invalid> wrote: > > > Rozumiem, że kluczowa w całym przykładzie jest uniksowa funkcja > > > mprotect. Ciekawi mnie źródło tej funkcji, a w szczególności jak > > > wygląda ustawianie flagi PROT_EXEC. Spróbuję poszukać. > > > > W Linuksie jest do tego specjalna funkcja systemowa o numerze 125 -- > > to już jest grzebanie po tablicy stron i aż takie szczegóły chyba > > nie są Ci potrzebne. > > Jeśli dobrze zrozumiałem ustawienia tej flagi to kwestia systemu > operacyjnego a nie asemblera. Bo chyba system operacyjny ma > nieograniczony dostęp do całej dostępnej pamięci. Tak, to już robota systemu operacyjnego. > Ale czy takie generowanie instrukcji w locie nie spowoduje jakiś > problemów na przykład z programami antywirusowymi? Czy można np. > zblokować dla takiego programu dostęp czytania z obszaru w którym > generowany byłby w locie kod? W podobny sposób działają programy pakujące pliki wykonywalne (np. upx) i nie słyszałem, żeby były problemy z antywirusami. w. -- Kupię: http://wmula.republika.pl/kupie.html
Re: Instrukcja w locie w asemblerze.
Author: CC
Date: Sun, 25 Jan 2009 14:48
Date: Sun, 25 Jan 2009 14:48
39 lines
3162 bytes
3162 bytes
On 25 Sty, 13:52, Wojciech Muła <wojciech_m...@poczta.null.onet.pl.invalid> wrote: > > Ale czy takie generowanie instrukcji w locie nie spowoduje jakiś > > problemów na przykład z programami antywirusowymi? Czy można np. > > zblokować dla takiego programu dostęp czytania z obszaru w którym > > generowany byłby w locie kod? > > W podobny sposób działają programy pakujące pliki wykonywalne (np. upx) > i nie słyszałem, żeby były problemy z antywirusami. > A propos UPX, ten mój program, który spowodował, że zawitałem na tę grupę chyba nie jest jakąś odmianą UPX. Porównałem sobie kody i zauważyłem, że program spakowany UPX zawiera odwołania do funkcji: VirtualProtect VirtualAlloc VirtualFree a ten mój ma kilka funkcji ale systemowe to tylko: CreateFileA lstrcpy InitCommonControls Idąc tym tropem wnioskuję, że może używa własnego odpowiednika VirtualProtect, albo nie jest to generowanie w locie. Właśnie. Funkcja CreateFileA podsunęła mi myśl prześledzenia odwołań do plików. I znalazlem taki kwiatek co być może wszystko wyjaśnia: example.exe:1235 FASTIO_QUERY_OPEN c:\program files\Example \example.exe.temp Oczywiście po uruchomieniu nie ma śladu po tym tempie. Pytałem o generowanie pliku w locie, a być może wcale to nie jest generowanie w locie tylko stworzenie nowego rozpakowanego execa i jego uruchomienie. Bardzo dziękuję za odpowiedź na mojego posta. Ten przykład w C, który zamieściłeś jest bardzo interesujący. Sporo się dowiedziałem. Chyba czas na poważne zainteresowanie się asemblerem... cc.
Re: Instrukcja w locie w asemblerze.
Author: Bartosz Wójcik
Date: Wed, 28 Jan 2009 13:53
Date: Wed, 28 Jan 2009 13:53
25 lines
2365 bytes
2365 bytes
On Sun, 25 Jan 2009 13:52:36 +0100, Wojciech Muła wrote: >> Ale czy takie generowanie instrukcji w locie nie spowoduje jakiś >> problemów na przykład z programami antywirusowymi? Czy można np. >> zblokować dla takiego programu dostęp czytania z obszaru w którym >> generowany byłby w locie kod? dynamiczne generowanie kodu nie jest typowa czynnoscia wykonywana przez programy, chociaz taka technike stosuja frameworki .NET/JAVA (JIT), wiec softy AV nie powinny sie do tego przyczepiac > W podobny sposób działają programy pakujące pliki wykonywalne (np. upx) > i nie słyszałem, żeby były problemy z antywirusami. UPX ma caly statyczny loader :), w locie to jedynie dane rozpakowuje do odpowiednich sekcji w kwestii pakerow problemy byly, sa i beda :), moze nie w UPX bo to bardzo popularny soft, ale zrob swojego pakera/protektora, a szybko sie przekonasz na wlasnej skorze o tym, ze wiekszosc softow AV to kupa gowna, ktora nie potrafi obsluzyc nieznanych pakerow wskutek czego markuje takie exeki jako potencjalnie zainfekowane -- Bartosz Wójcik | www.pelock.com
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads