Pokaż wszystkie posty
Posty z podanym tagiem:
"Co tam mam na warsztacie, czyli HWFramework";
"HiperDrop 0.0.1";
"Rozszerzenia w C/C++/GCC, egzamin na Technika Informatyka";
"C i lokalne tablice o "zmiennej" wielkości (UPDATE)";
"Częściowa inicjacja tablic w C/C++";
"CONFidence 2.0, materiały, SilkProxy 0.0.1";
"C/C++ i próba zastąpienia ifów matematyką";
"Losowe przemyślenia, odsłona druga";
"Art of file, czyli graficzne interpretacja plików";
"CONFidence 2009 ESET crackme - rozwiązanie";
"ANSI Escape Codes dla Windows 7 RC";
"Jak sobie ułatwić życie, czyli skrypty GDB wbudowane w assemblerowe źródło";
"Po marcowym compo 3h GDPL";
"Automagiczna lista funkcji w C++";
"Ent v.0.0.3";
"ExcpHook ver 0.0.5-rc2";
"CloseHandle ciekawsze niż myślałem";
"Return-oriented exploiting";
"SIN*COS";
"Supportu dla ANSI escape codes w cmd.exe i skryptach BAT";
"OpenGL w skryptach .BAT";
"Światłowór - czyli jak przesłać dane z CPC 464 na PC nie mając potrzebnych kabelków";
"Wolność dla wszystkiego, czyli kompletne anihilowanie pamięci procesu";
".S.k.y.";
"Format bug, Vista i %n";
"Brakująca funkcja gettimeofday i race condition";
"Włókna w nici, czyli fibers vs threads.";
"Metaball, Python+Pygame+Psyco i SDL+C++";
"Funkcje typu "naked" w gcc/g++";
Wszystkie posty z danym tagiem są wyświetlone poniżej.
2010-07-27:
hwframework:medium:c++
Po CONFidence stwierdziłem, że fajnie byłoby się pobawić różnymi starymi rozwiązaniami sprzętowo-software'owymi, typu ANTIC i P/M, HAM6, itd. Jak to osiągnąć?
Czytaj dalej...
2010-07-20:
hiperdrop:reverse engineering:easy:windows:c++
Przeglądając ostatnio katalogi na dysku znalazłem trochę narzędzi które z jakiegoś powodu ukrywałem i do tej pory nie opublikowałem. Zastanawiam się nad dokończeniem ich podstawowej funkcjonalności i wrzuceniu w końcu na sieć. W każdym bądź razie, jednym z takich narzędzi (które prawie bez zmian nadawało się do publikacji) jest HiperDrop - prosty, konsolowy, tool do zrzucania pamięci procesu, pod Windows.
Czytaj dalej...
2010-06-23:
c:c++:easy:gcc:funny
Zarówno GCC, oraz inne kompilatory, jak i same standardy języków C/C++, przewidują pewne rozszerzenia języka, które zazwyczaj adresują jakiś problem, bądź też dodają nową funkcjonalność. Tych rozszerzeń jest masa - w zasadzie każdy popularny kompilator ma niemałą listę takich dodatków, i oczywiście nie zamierzam ich wszystkich opisywać w tym poście. Wspomnę natomiast o dwóch: atrybucie init_priority dla globalnych inicjacji obiektów w GCC C++, oraz znaku dolara ($) w nazwach zmiennych - rozszerzeniu pojawiającym się w różnych miejscach. Przy okazji tego ostatniego, zaprezentuje jedno zadanie z tegorocznego testu na Technika Informatyka (który od dwóch dni krąży po sieci).
Czytaj dalej...
2010-04-17:
c:c++:code:easy
Czas na jakiś bardziej techniczny post. Dostałem kilka dni temu pytanie, które pozwolę sobie zacytować: "[...] dlaczego nie powinno się deklarować zmiennych w taki sposób: int a = 50; int b[a];". Chodzi tutaj oczywiście o tablice lokalne, które mają wielkość zależną od jakiejś zmienne, być może nawet zależnej od użytkownika/wejścia. Swoją odpowiedź cytuje poniżej:
Czytaj dalej...
2010-02-01:
c:c++:easy:programming:asm:x86
Otrzymałem mejlowo (od luqa który zgodził się na publikacje korespondencji ;>) pytanie dotyczące wartości niezainicjowanych elementów częściowo zainicjowanej lokalnej tablicy:
Czytaj dalej...
2009-11-23:
confidence:confidence 2.0:lecture:c++:python:security
Poniżej zamieszczam linki do prezentacji (PDF) z mojej prelekcji "Practical security in computer games", oraz wersję 0.0.1 alpha SilkProxy. O tym ostatnim parę słów: jest to multi-tunel napisany w C++, skryptowalny w Pythonie, który może służyć kilku do kilku rzeczy, takich jak analiza protokołu, fuzzing ruchu sieciowego puszczonego przez tunel, czy jako proxy. Wersja którą publikuje to wersja którą używałem podczas badań do prezentacji, i jest to wersja robocza, tj. nie wszystko jeszcze działa jak bym chciał, interfejs jest nieudokumentowany i brakuje jeszcze części funkcjonalności - tak więc póki co jest to raczej ciekawostka dla programistów niż coś z czego faktycznie można korzystać. Niemniej jednak zachęcam do rzucenia okiem (w pliku http.py jest prosty przykład użycia; uruchamia się to ./SilkProxy skrypt.py, samo ./SilkProxy też zadziała; do skompilowania trzeba posiadać pythona z headerami/libami do C, oraz GCC (może być MinGW)) ;>
Czytaj dalej...
2009-11-06:
c:c++:code:easy
Jak nauczyły nas stare procesory i kompilatory, if'y bywają kosztowne - każdy if tłumaczony jest na jeden lub dwa skoki (w zależności czy to if czy else if), a skoki miały zwyczaj czyścić kolejkę instrukcji do wykonania w CPU, przez co były dość kosztowne. W związku z czym szukało się innych metod na zapisanie serii if'ów, np. za pomocą operacji matematycznych lub logicznych, które były mniej kosztowne (gdy występowały w niewielkiej ilości) niż skoki które czyściły kolejkę instrukcji. Oczywiście nowe procesory pozwalają na oznaczenie bardziej prawdopodobnych skoków (druga grupa prefiksów, prefiksy 2E (branch not taken) i 3E (branch taken)), a nowe kompilatory C/C++ pozwalają oznaczyć czy warunek w if będzie bardziej czy mniej prawdopodobny (patrz __builtin_expect), a nawet można skorzystać z profilerów i samemu sformułować if'y tak aby testowały zawsze te mniej czy bardziej prawdopodobne warunki (oczywiście trzeba wiedzieć jak kompilator tłumaczy kod, ale nie jest to specjalnie trudne). Niemniej jednak czasami nachodzi człowieka ochota żeby zastąpić parę if'ów jakimś ładnym działaniem matematycznym, a tym samym... utrudnić sobie życie ;>
Czytaj dalej...
2009-07-05:
php:c:c++:funny:security:malware:windows
Z powodów różnych na moim blogu kapkę cicho się zrobiło ostatnio, ale zapewniam że to przejściowe. Niemniej jednak czas zacząć nadrabiać zaległości, i napisać o tym i owym.
Czytaj dalej...
W niedzielę po raz kolejny postanowiłem pobawić się w wizualizację plików. Wizualizacja plików to temat długi i szeroki, i nawet są strony jej poświęcone, na których to autorzy prezentują kolorowe bitmapki przedstawiające pliki - często 1 do 1, czyli 3 kolejne bajty w pliku traktowane są jako wartości RGB. W moim przypadku natomiast zamiast RGB, będzie X i Y.
Czytaj dalej...
2009-05-20:
re:easy:confidence:crackme:c++
W końcu jakiś techniczny post! A post poświęcony będzie crackme ESET'u, które to było do połamania na tegorocznej edycji CONFidence z numerkiem 2009. Crackme (przygotowanym specjalnie na confidence) pozwoliłem sobie udostępnić (@Marcin/Jakub w razie czego dajcie znać, to zdejmę ;>), tak aby osoby nieobecne na confi również mogły się pobawić:
Czytaj dalej...
2009-05-12:
windows:bat:re:winapi:easy:asm:c:c++:tools
Wczoraj j00ru dał mi znać że mój add-on do cmd.exe, dodający jakże to ważną funkcjonalność (tj kolorki), nie funkcjonuje poprawnie na Windows 7 RC - w związku z czym rzuciłem okiem, i tak oto powstała wersja 0.004d!
Czytaj dalej...
2009-04-05:
asm:easy:c++:debuging:gdb
Wyrażenie "assemblerowe źródło" mi jakoś nie leży, ale po 15 minutach straconych na próbę wymyślenia czegoś lepszego, co określało by źródło kawałka funkcji stworzonej w assemblerze, i jednocześnie było dość zwięzłe, stwierdziłem że musi zostać. Wracając do tematu, a w zasadzie dopiero go rozpoczynając, dzisiaj będzie o pewnym sposobie którym się wspomogłem podczas gonitwy za bugiem w pewnej dość rozbudowanej funkcji napisanej w asmie (dialekt NASM). Ów funkcja miała wyszukiwać w obrazie biblioteki (w pamięci, MACH-O) adres podanej metody z podanej klasy (objc), z podanej biblioteki na OS X, i składała się z trzech czy czterech zagłębień pętli. No i oczywiście nie działała jak należy, a ręczne debugowanie tego przyjemne nie było (potem się okazało że cały pomysł nie do końca działa, ale to historia na inny dzień).
Czytaj dalej...
2009-03-16:
gamedev:c++:opengl:windows:linux:easy:game
Wczoraj wieczorem od godziny 17:00 do 20:00 odbyło się trzygodzinne compo zorganizowane przez GDPL (a konkretniej przez meehav'a). Tematem przewodnim była 'gra w której jest za równo świnia jak i krowa' (oryginalny temat, przyznaje). Mimo ogólnego braku czasu, stwierdziłem że 3h w niedzielę wieczorem znajdę, i (po akceptacji propozycji przez górę - czyli moją ukochaną żonę ;>) również udało mi się wziąć udział.
Czytaj dalej...
2009-03-09:
c++:medium:assembler:windows:linux:macosx
Historia zaczyna się jak zwykle. Pisałem pewną aplikację, która generowała pewne pliki testowe. Pliki były do siebie podobne, więc wyciągnąłem wspólny czynnikprzed nawias - zrobiłem generowanie wspólnej podstawy pliku, a potem porobiłem funkcje które zmieniały podstawowy plik (file shader, tylko w GF 15200 GTX! ;>), po czym ów nowy plik był zapisywany. Oczywiście musiałem posiadać pewną tablicę/wektor z tymi funkcjami, którą grzecznie uzupełniałem o każdą dopisaną funkcję. Po 38 funkcji się znudziłem...
Czytaj dalej...
2009-03-02:
re:entropy:easy:c++
Jest pewien tool, stworzony przeze mnie i j00ru, który już jakiś czas temu miałem wrzucić na sieć, ale jakoś tak kod był niepiękny, i nigdy nie było czasu żeby go uładnić. Aż w końcu w weekend będąc u rodziców wziąłem laptopa i przepisałem kod na czysto.
Czytaj dalej...
2009-02-03:
excphook:re:windows:security:c++
Wczoraj udało mi się posiedzieć chwilkę nad ExcpHook'iem, w związku z czym prezentuje dzisiaj wersję 0.0.5-rc2 (to jest drugi release candidate wersji alpha 0.0.5, tak, wiem, mam dziwne numerowanie wersji).
Czytaj dalej...
2009-02-02:
winapi:windows:c++:easy:re
Sprawiłem sobie parę dni temu książkę "Windows Via C/C++ (Wydanie piąte)" by Jeffrey Richter i Christophe Nasarre, ot tak aby doszlifować moje WinAPI. Pomysł zakupu okazał się bardzo dobry - już na 50 stronie znalazłem pewną przydatną reverserowi ciekawostkę, którą pozwolę sobie zacytować:
Czytaj dalej...
2009-01-31:
medium:windows:c++:asm:security:buffer overflow:return-oriented exploiting
Dzisiaj będzie trochę strikte technicznego security - napiszę co nie co o technice zwanej "return-oriented programming" lub "return-oriented exploiting" lub "ret-to-libc bez wywołań funkcji" lub "ret-to-anything". Jak zwykle podzielę się swoimi spostrzeżeniami co do ów techniki, ponieważ jak zwykle papierki zacząłem czytać po użyciu techniki, zamiast przed nią (to to moje upodobanie do odkrywania koła na nowo).
Czytaj dalej...
Dzisiejszy post nie będzie już o cmd.exe i BATach. Zamiast tego dzisiaj będzie trochę rysowania w C++, a konkretniej rysować będziemy nie my, a funkcje sin oraz cos.
Czytaj dalej...
2009-01-16:
windows:bat:re:winapi:easy:asm:c:c++
Begin teh Update
Czytaj dalej...
2009-01-14:
bat:windows:easy:opengl:c++
Zgodnie z obietnicą, dzisiaj będzie o wykorzystaniu OpenGL w skryptach .BAT. Chciałbym jednak od razu przypomnieć, że .BAT z szybkością dużo wspólnego nie ma ;> (mimo to pod koniec co nie co o optymalizacji napiszę i tak).
Czytaj dalej...
2009-01-02:
cpc464:easy:windows:c++:winapi
W oczekiwaniu na nowy programator (który pewnie przyjdzie "pod koniec tygodnia") stwierdziłem że przydałoby się przerzucić zrzut RAM'u z Amstradzika na PCta. Powstało pytanie - jak to zrobić nie mając żadnych kabelków, dyskietek, etc? Okazuje się że jest pewien (pewnie nie jeden), bardzo zabawny moim zdaniem, sposób ;D
Czytaj dalej...
2008-11-22:
c++:assembler:windows:winapi:medium
Siedząc w pokoju hotelowym na PyCONie naszło mnie żeby sprawdzić co się dzieje jeśli wyczyści się procesowi całą pamięć (lub proces sam sobie ją wyczyści). "Wyczyści" w znaczeniu uwolni co się da (VirtualFree oraz UnmapViewOfFile), a resztę w miarę możliwości wyzeruje. Eksperyment miał za zadanie sprawdzić przy okazji jak zareaguje na to system, oraz inne aplikacje.
Czytaj dalej...
2008-11-06:
c++:gfx:code:easy
Niecałe pół roku temu stwierdziłem że przydała by mi się animowana tapetka, generowana realtime, ale bez użycia akceleracji 3D (tj. bez OpenGL/D3D). Dodatkowymi założeniami był FPS - mógł być bardzo niski, na poziomie 2-3 klatek na sekundę, oraz wykorzystanie kilku core'ów (do 4rech). Jak to w życiu bywa, naklepałem troszkę kodu, po czym zająłem się innymi rzeczami. Efekt może powalający nie wyszedł, ale zdecydowałem się i tak opisać to co mi wyszło - może kogoś to zainteresuje ;> (na obrazki, z wyjątkiem height mapy, można klikać; kod źródłowy dla Windowsa/Maca/Linuxa i filmik są na końcu postu).
Czytaj dalej...
2008-10-22:
vista:windows:winapi:c:c++:format bug:security:easy
Rozmawiałem ostatnio z oshogbo z mojego teamu o format bugu, i gdy doszliśmy do testowania przykładowego kodu, okazało się że to co powinno działać - tag %n, nie działa. Co ciekawe, problem wydawał się dotyczyć jedynie Windowsa Vista, ponieważ na XP wszystko śmigało aż miło. Postanowiłem kapkę wgłębić się w problem, i oto co się dowiedziałem...
Czytaj dalej...
2008-10-13:
c:c++:race condition:windows:easy:winapi
Dzisiaj będzie post wyrwany z kontekstu. Post będzie dotyczył funkcji gettimeofday na Windowsie, a raczej jej braku.
Czytaj dalej...
2008-08-26:
windows:winapi:c:c++
Zainspirowany postem noglorp'a na OpenRCE zdecydowałem się pobawić w końcu fiberami pod Windowsem, i okazało się że to całkiem interesujący temat.
Czytaj dalej...
2008-08-25:
python:c++:easy
2008-08-18:
c:c++:assembler
Ostatnio miałem okazję tworzyć w C++ (MinGW g++) pewną małą bibliotekę do runtime-patchów. W pewnym momencie zaszła potrzeba stworzenia funkcji w całości w assemblerze, bez żadnych dodatków ze strony kompilatora, czyli po prostu chodziło o funkcję "naked". Niestety, o ile kompilatory rodem z Redmond udostępniają atrybut __declspec(naked) dla x86 [Visual C++ Language Reference - naked (C++)], to kompilatory z GNU Compiler Collection obsługują "naked" jedynie w portach kompilatorów dla ARM, AVR, IP2K i SPU [Using the GNU Compiler Collection (For GCC version 4.3.0) - Function Attributes]. Powstał więc pewien problem który miałby kilka rozwiązań:
Czytaj dalej...