Thread View: pl.comp.lang.asm
20 messages
20 total messages
Started by Bartosz Wójcik
Tue, 24 Jun 2008 09:46
mutacja kodu asm
Author: Bartosz Wójcik
Date: Tue, 24 Jun 2008 09:46
Date: Tue, 24 Jun 2008 09:46
10 lines
1215 bytes
1215 bytes
Czesc, Szukam jakichs nowych pomyslow na mutacje kodu x86 w celu utrudnienia jego analizy, rozbijanie instrukcji na serie innych, zmiana codeflow, dodawanie junkow, instrukcji zasmiecajacych, procedur to juz mam zrobione. Chodzi mi o cos, co sprawi, ze kod bedzie jeszcze bardziej trudny do przeanalizowania (bez maszyn wirtualnych bo to osobna dzialka). -- Bartosz Wójcik | www.pelock.com
Re: mutacja kodu asm
Author: lgromanowski
Date: Tue, 24 Jun 2008 10:13
Date: Tue, 24 Jun 2008 10:13
37 lines
2519 bytes
2519 bytes
On 24 Cze, 11:46, Bartosz Wójcik <antis...@dont.use.it> wrote: > Czesc, > > Szukam jakichs nowych pomyslow na mutacje kodu x86 w celu utrudnienia jego > analizy, rozbijanie instrukcji na serie innych, zmiana codeflow, dodawanie > junkow, instrukcji zasmiecajacych, procedur to juz mam zrobione. Chodzi mi > o cos, co sprawi, ze kod bedzie jeszcze bardziej trudny do przeanalizowania > (bez maszyn wirtualnych bo to osobna dzialka). > Czesc, nie są to jakies nowe metody (ale jesli ich nie masz to moga sie przydac): - tablica instrukcji rownowaznych w zaleznosci od rozmiaru rozkazow np: xor eax, eax <=> mov eax, 0 <=> xor ebx,ebx; mov eax, ebx itp. - tablica nop-ow w zaleznosci od rozmiarow nop mov eax, eax xchg ebx, ebx itp. i wrzucanie tego losowo w rozne czesci kodu, sporo fajnych rozwiazan bylo w starych (DOS) generatorach VX (jesli dobrze pamietam nazwy to np. mutagen, g2 itp.). Jesli chodzi o zaburzanie przebiegu programu to ukrywanie rozkazow w innych rozkazach i nastepne skok w "srodek normalnego" rozkazu (z glowy przykladu nie podam, bo nie pamietam, ale gdzies w domu mialem i jak znajde to podam) bylo kiedys ciekawym rozwiazaniem. pozdrawiam, Lukasz
Re: mutacja kodu asm
Author: Wojciech Muła
Date: Tue, 24 Jun 2008 15:47
Date: Tue, 24 Jun 2008 15:47
15 lines
1580 bytes
1580 bytes
On Tue, 24 Jun 2008 11:46:34 +0200 Bartosz Wójcik <antispam@dont.use.it> wrote: > Szukam jakichs nowych pomyslow na mutacje kodu x86 w celu utrudnienia > jego analizy, rozbijanie instrukcji na serie innych, zmiana codeflow, > dodawanie junkow, instrukcji zasmiecajacych, procedur to juz mam > zrobione. Chodzi mi o cos, co sprawi, ze kod bedzie jeszcze bardziej > trudny do przeanalizowania (bez maszyn wirtualnych bo to osobna > dzialka). Kod samomodyfikujący się, jakaś kompresja, kodowanie (nawet głupi xor z jakąś stałą). Możesz też stałe zapisywać wprost w segmencie kodu -- disasemblery się pewnie trochę pogubią. w.
Re: mutacja kodu asm
Author: re-l
Date: Wed, 25 Jun 2008 15:09
Date: Wed, 25 Jun 2008 15:09
6 lines
1373 bytes
1373 bytes
Z tym samomodyfikujacym sie kodem to bym sobie darowal, gdyz kazdy antyvirus odrazu okrzyknie ze twoj program to virus/spyware mimo iz twoj program jest niewinny (tak dziala ta cala heurystyka). Uwazaj tez na odpowiednie flagi dla kawalka pamieci z pod ktorego chcesz wykonywac kod, bo vista jest bardzo restrykcyjna jesli o to chodzi. (caly mechanizm DEP)
Re: mutacja kodu asm
Author: Bartosz Wójcik
Date: Thu, 26 Jun 2008 15:24
Date: Thu, 26 Jun 2008 15:24
19 lines
1750 bytes
1750 bytes
On Wed, 25 Jun 2008 17:09:08 +0200, re-l wrote: > Z tym samomodyfikujacym sie kodem to bym sobie darowal, gdyz kazdy antyvirus > odrazu okrzyknie ze twoj program to virus/spyware > mimo iz twoj program jest niewinny (tak dziala ta cala heurystyka). Z tym samomodyfikujacym kodem jest problem, jesli np. jakis fragment zostal poddany mutacji i zmieniony zostal codeflow, gdzie tu cos modyfikowac potem? Jest jeszcze kwestia keszowania procesora, po kazdorazowym nadpisaniu bufora trzeba odczytac bajt z pamieci, zeby mu sie "odetkalo". > Uwazaj tez na odpowiednie flagi dla kawalka pamieci z pod ktorego chcesz > wykonywac kod, bo vista jest bardzo restrykcyjna jesli o to chodzi. > (caly mechanizm DEP) DEP jest bardzo restrykcyjny juz od XP SP2 :), wiec o to sie nie martwie. -- Bartosz Wójcik | www.pelock.com
Re: mutacja kodu asm
Author: Bartosz Wójcik
Date: Thu, 26 Jun 2008 15:25
Date: Thu, 26 Jun 2008 15:25
12 lines
1358 bytes
1358 bytes
On Tue, 24 Jun 2008 17:47:15 +0200, Wojciech Muła wrote: > Kod samomodyfikujący się, jakaś kompresja, kodowanie (nawet głupi xor > z jakąś stałą). Możesz też stałe zapisywać wprost w segmencie kodu -- > disasemblery się pewnie trochę pogubią. ..akurat nie o to mi chodzi, bardziej by mi zalezalo na jakichs ciekawych pomyslach co do mutacji samego kodu (a nie jego szyfrowania np. polimorficznymi algosami) -- Bartosz Wójcik | www.pelock.com
Re: mutacja kodu asm
Author: re-l
Date: Fri, 27 Jun 2008 07:05
Date: Fri, 27 Jun 2008 07:05
16 lines
1818 bytes
1818 bytes
ale co chcesz mutowac, odpalasz exeka, on sie mutuje i zapisje na dysku w innej postaci ? czy exek laduje sie do pamieci, a potem mutuje swoj 'segment kodu' ? i niby jak by to mialo ochronic przed reverse-engineringiem. triki w stylu 'zmien cos 100 rozkazow dalej, bo jeszcze nie jest w code cache'u' owszem spowoduja ze debugger/disassembler beda widzialy co innego niz to co sie obecnie naprawde wykonuje ale sa bardzo ryzykowne na obecnej architekturze wielordzeniowej, bo tak naprawde nie wiesz, czy to 100 rozkazow dalej bedzie wykonywal jeszcze ten sam rdzen, jaki jest rozmiar code cache'a itp. itd. i czy na procku ktory wyjdzie za 2 lata to jeszcze bedzie dzialalo. ... oczywiscie to 100 rozkazow to tak z palca wyssane :)
Re: mutacja kodu asm
Author: Bartosz Wójcik
Date: Fri, 27 Jun 2008 14:21
Date: Fri, 27 Jun 2008 14:21
24 lines
2138 bytes
2138 bytes
On Fri, 27 Jun 2008 09:05:21 +0200, re-l wrote: > ale co chcesz mutowac, odpalasz exeka, on sie mutuje i zapisje na dysku w > innej postaci ? > czy exek laduje sie do pamieci, a potem mutuje swoj 'segment kodu' ? > i niby jak by to mialo ochronic przed reverse-engineringiem. ...kod, np. kod jakiejs procedury jednej wybranej :) co do reversingu, to czy widziales kiedys zmutowany kod? > triki w stylu 'zmien cos 100 rozkazow dalej, bo jeszcze nie jest w code > cache'u' owszem spowoduja ze debugger/disassembler beda widzialy co innego niz to co sie obecnie > naprawde wykonuje ale sa bardzo ryzykowne na obecnej architekturze wielordzeniowej, > bo tak naprawde nie wiesz, czy to 100 rozkazow dalej bedzie wykonywal jeszcze ten sam > rdzen, jaki jest rozmiar code cache'a itp. itd. i czy na procku ktory wyjdzie za 2 lata to > jeszcze bedzie dzialalo. oczywiscie to 100 rozkazow to tak z palca wyssane :) dlatego napisalem, ze trzeba odczytac nadpisany kod (wystarczy 1 bajt), tak sie obecnie robi przy samomodyfikujacym kodzie, ale samomodyfikujacy kod mnie nie interesuje. -- Bartosz Wójcik | www.pelock.com
Re: mutacja kodu asm
Author: Wojciech Muła
Date: Fri, 27 Jun 2008 16:23
Date: Fri, 27 Jun 2008 16:23
8 lines
1282 bytes
1282 bytes
Bartosz Wójcik <antispam@dont.use.it> wrote: > co do reversingu, to czy widziales kiedys zmutowany kod? Z ciekawości: daj jakiś mało rozbudowany przykład kodu przed i po mutacji. w.
Re: mutacja kodu asm
Author: Bartosz Wójcik
Date: Fri, 27 Jun 2008 23:41
Date: Fri, 27 Jun 2008 23:41
37 lines
2306 bytes
2306 bytes
On Fri, 27 Jun 2008 18:23:28 +0200, Wojciech Muła wrote: > Z ciekawości: daj jakiś mało rozbudowany przykład kodu > przed i po mutacji. > > w. "mov eax, [edx + 4]" 2-krotna mutacja, bez zmiany flow, bez junkow, ogolnie bez niczego ciekawego 1. 00000000: 33C7 xor eax,edi 00000002: B8DBA3FFFF mov eax,0FFFFA3DB 00000007: 0FB6C4 movzx eax,ah 0000000A: 354D807F15 xor eax,0157F804D 0000000F: 0FBAF0A3 btr eax,0A3 00000013: 8B84826CFC01AA mov eax,[edx][eax]*4[-055FE0394] 2. 00000000: D3D0 rcl eax,cl 00000002: B8757F0000 mov eax,000007F75 00000007: 98 cwde 00000008: 8D801F817F4E lea eax,[eax][04E7F811F] 0000000E: 0D630A4000 or eax,000400A63 00000013: 8B84020DF53FB1 mov eax,[edx][eax][-04EC00AF3] z wieksza grupa instrukcji mozna robic wiecej (np. wymieniac rejestry, przewidywac wykorzystanie rejestrow w procedurach WinAPI), aha kod nie dba o flagi (takie bylo zalozenie, zeby za duzo syfu z pushfd nie wyszlo) -- Bartosz Wójcik | www.pelock.com
Re: mutacja kodu asm
Author: Wojciech Muła
Date: Sat, 28 Jun 2008 10:42
Date: Sat, 28 Jun 2008 10:42
77 lines
2812 bytes
2812 bytes
On Sat, 28 Jun 2008 01:41:03 +0200 Bartosz Wójcik
<antispam@dont.use.it> wrote:
> > Z ciekawości: daj jakiś mało rozbudowany przykład kodu
> > przed i po mutacji.
> >
> > w.
>
> "mov eax, [edx + 4]"
>
> 2-krotna mutacja, bez zmiany flow, bez junkow, ogolnie bez niczego
> ciekawego
>
> [...]
Można sobie łatwo z tym poradzić --- przekonwertować kod asemblerowy
wprost na C, skompilować z optymalizacją i większość śmieci znika. Dla
próby przepisałem ręcznie te dwa kawałki i gcc -O3 ładnie wyprowadził
wszystkie stałe. Przy odrobinie wysiłku można napisać automatyczny
translator asm -> C.
Kod dla drugiego przykładu:
---
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
int main(int argc, char* argv[]) {
uint32_t eax, edx, tmp;
int16_t ax;
//mov eax,000007F75
eax = 0x000007F75;
//cwde
ax = (eax & 0xffff);
eax = ax;
//lea eax,[eax][04E7F811F]
eax += 0x04EC00AF3;
//or eax,000400A63
eax |= 0x000400A63;
//mov eax,[edx][eax][-04EC00AF3]
tmp = eax - 0x04E7F811F;
// i tutaj odczyt z pamięci, spod adresu edx + tmp
printf("eax = %d, edx = %d, addr = %d\n", eax, edx, tmp);
return 0;
}
---
To co wyprodukował gcc (przycięte):
---
main:
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
pushl %ebp
movl %esp, %ebp
pushl %ecx
subl $20, %esp
movl $4262220, 12(%esp) <--- wyniki
movl $0, 8(%esp) <--- obliczeń
movl $1321241195, 4(%esp) <---
movl $.LC0, (%esp)
call printf
addl $20, %esp
xorl %eax, %eax
popl %ecx
popl %ebp
leal -4(%ecx), %esp
ret
---
w.
Re: mutacja kodu asm
Author: Bartosz Wójcik
Date: Sat, 28 Jun 2008 11:07
Date: Sat, 28 Jun 2008 11:07
17 lines
1835 bytes
1835 bytes
On Sat, 28 Jun 2008 12:42:11 +0200, Wojciech Muła wrote: > Można sobie łatwo z tym poradzić --- przekonwertować kod asemblerowy > wprost na C, skompilować z optymalizacją i większość śmieci znika. Dla > próby przepisałem ręcznie te dwa kawałki i gcc -O3 ładnie wyprowadził > wszystkie stałe. Przy odrobinie wysiłku można napisać automatyczny > translator asm -> C. no tak, ale miales tylko 1 instrukcje bez dodatkowych utrudnien oraz innych zaleznosci, jesli chcesz przysle ci jakis "zyciowy" fragment kodu na pelnych opcjach :) ale ogolnie wiesz o co mi juz chodzi, szukam dodatkowych mozliwosci mutacji kodu -- Bartosz Wójcik | www.pelock.com
Re: mutacja kodu asm
Author: Wojciech Muła
Date: Mon, 30 Jun 2008 15:15
Date: Mon, 30 Jun 2008 15:15
9 lines
1526 bytes
1526 bytes
"re-l" <xxx@spam.no> wrote: > co do mutacji - mozna by ja rozszezyc o zakres intowych instrukcji sse / mmx > wtedy mozna dopiero zagmatwane rzeczy robic. Polecam Bartkowi przyglądnąć się uważniej instrukcji PSHUFB -- to jest killer. :) w.
Re: mutacja kodu asm
Author: Bartosz Wójcik
Date: Mon, 30 Jun 2008 15:51
Date: Mon, 30 Jun 2008 15:51
10 lines
1587 bytes
1587 bytes
On Mon, 30 Jun 2008 17:15:10 +0200, Wojciech Muła wrote: > Polecam Bartkowi przyglądnąć się uważniej instrukcji > PSHUFB -- to jest killer. :) no i o to mi chodzi od samego poczatku :), jakies przyklady kosmicznych rzeczy, trudnych do zrozumienia, wiecej prosze :) -- Bartosz Wójcik | www.pelock.com
Re: mutacja kodu asm
Author: Wojciech Muła
Date: Mon, 30 Jun 2008 17:26
Date: Mon, 30 Jun 2008 17:26
20 lines
2084 bytes
2084 bytes
Bartosz Wójcik <antispam@dont.use.it> wrote: > On Mon, 30 Jun 2008 17:15:10 +0200, Wojciech Muła wrote: > > > Polecam Bartkowi przyglądnąć się uważniej instrukcji > > PSHUFB -- to jest killer. :) > > no i o to mi chodzi od samego poczatku :), jakies przyklady kosmicznych > rzeczy, trudnych do zrozumienia, wiecej prosze :) Jest jeszcze taki trik -- realizacja BSF za pomocą koprocesora (albo SSE). Po konwersji int -> float w wykładniku liczby zmiennoprzecinkowej znajduje się pozycja pierwszego ustawionego bitu: fld uint32 fstp [mem64] ; (mem64 >> 52) - 1023 = BSF uint32 Tak BTW ludzie z tego korzystali w czasach, gdy BSF było żałośnie powolne. w.
Re: mutacja kodu asm
Author: Wojciech Muła
Date: Mon, 30 Jun 2008 17:31
Date: Mon, 30 Jun 2008 17:31
11 lines
1692 bytes
1692 bytes
Bartosz Wójcik <antispam@dont.use.it> wrote: > no tak, ale miales tylko 1 instrukcje bez dodatkowych utrudnien oraz innych > zaleznosci, jesli chcesz przysle ci jakis "zyciowy" fragment kodu na > pelnych opcjach :) Jeśli możesz podeślij już zdisasemblowany. I w żadnym razie nie podawaj co to wcześniej było. :) W przyszłą niedzielę się pobawię, bo sam jestem ciekaw, czy gcc pomoże. w.
Re: mutacja kodu asm
Author: Wojciech Muła
Date: Mon, 30 Jun 2008 19:10
Date: Mon, 30 Jun 2008 19:10
24 lines
2368 bytes
2368 bytes
On Mon, 30 Jun 2008 19:26:09 +0200 Wojciech Muła <wojciech_mula@poczta.null.onet.pl.invalid> wrote: > Jest jeszcze taki trik -- realizacja BSF za pomocą koprocesora (albo > SSE). Po konwersji int -> float w wykładniku liczby > zmiennoprzecinkowej znajduje się pozycja pierwszego ustawionego bitu: Korzystając z cech liczb zmp. można przesuwać w lewo lub prawo liczby nawet 52-bitowe (w kodzie 32-bitowy -- 31-bitowe). Np. masz jakąś 10-bitową stałą, to binarnie będzie: xx_xxxx_xxxx. Teraz możesz wstawić przed najbardziej znaczącym bitem jedynkę, np. na pozycji 15: 1000_00xx_xxxx_xxxx. Po konwersji na liczbę zmp. typu double (64 bity) masz coś takiego: S wwwwwwwwwww 000_00xx_xxxx_xxxx_0..0 | 11 bitów 52 bity mantysy | wykładnika bit znaku Tylko trzeba sobie dobrać tak przesunięcie, żeby jednym nierzucającym się w oczym MOVem odczytać z pamięci odpowiedni kawałek mantysy. :) w.
Re: mutacja kodu asm
Author: Wojciech Muła
Date: Mon, 30 Jun 2008 21:10
Date: Mon, 30 Jun 2008 21:10
14 lines
1820 bytes
1820 bytes
On Mon, 30 Jun 2008 17:51:27 +0200 Bartosz Wójcik <antispam@dont.use.it> wrote: > On Mon, 30 Jun 2008 17:15:10 +0200, Wojciech Muła wrote: > > > Polecam Bartkowi przyglądnąć się uważniej instrukcji > > PSHUFB -- to jest killer. :) > > no i o to mi chodzi od samego poczatku :), jakies przyklady > kosmicznych rzeczy, trudnych do zrozumienia, wiecej prosze :) To jeszcze zerknij na PSADBW. w.
Re: mutacja kodu asm
Author: Bartosz Wójcik
Date: Tue, 01 Jul 2008 21:34
Date: Tue, 01 Jul 2008 21:34
9 lines
1624 bytes
1624 bytes
On Mon, 30 Jun 2008 23:10:49 +0200, Wojciech Muła wrote: > To jeszcze zerknij na PSADBW. tylko zdajesz sobie sprawe, ze uzywanie SSE3 jest malo realne (a nawet SSE2) :), moze znasz jakies ciekawe zastosowanie std instrukcji? -- Bartosz Wójcik | www.pelock.com
Re: mutacja kodu asm
Author: Wojciech Muła
Date: Tue, 01 Jul 2008 21:54
Date: Tue, 01 Jul 2008 21:54
18 lines
2050 bytes
2050 bytes
On Tue, 1 Jul 2008 23:34:04 +0200 Bartosz Wójcik <antispam@dont.use.it> wrote: > On Mon, 30 Jun 2008 23:10:49 +0200, Wojciech Muła wrote: > > > To jeszcze zerknij na PSADBW. > > tylko zdajesz sobie sprawe, ze uzywanie SSE3 jest malo realne (a nawet > SSE2) :), Sorry, wylazły moje zboczenia. :) > moze znasz jakies ciekawe zastosowanie std instrukcji? Używasz do czegoś BSF lub BSR? Próbowałeś robić coś z tymi dziwacznymi instrukcjami do BCD: AAA, DAS, itp.? w.
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