🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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.
#1879
Author: czterdziesci.cztery
Date: Sat, 24 Jan 2009 17:50
13 lines
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.
#1880
Author: Wojciech Muła
Date: Sat, 24 Jan 2009 19:03
22 lines
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.
#1881
Author: CC
Date: Sat, 24 Jan 2009 22:53
14 lines
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.
#1882
Author: Wojciech Muła
Date: Sat, 24 Jan 2009 23:30
30 lines
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.
#1883
Author: CC
Date: Sun, 25 Jan 2009 00:49
5 lines
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.
#1884
Author: CC
Date: Sun, 25 Jan 2009 10:25
20 lines
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.
#1885
Author: Wojciech Muła
Date: Sun, 25 Jan 2009 12:52
29 lines
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.
#1886
Author: CC
Date: Sun, 25 Jan 2009 14:48
39 lines
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.
#1887
Author: Bartosz Wójcik
Date: Wed, 28 Jan 2009 13:53
25 lines
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