pprogramowanie;

// blog o programowaniu i branży IT

rss

Połączenie assemblera i C++

12 sierpnia 2014, kategoria: C++
assembler-cpp

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 całość kilka często używanych trików. Artykuł jest skierowany dla użytkowników darmowego kompilatora GCC, ponoć w Visual Studio wiele problemów znika.

Konwencje wywoływania funkcji

9 sierpnia 2014, kategoria: C++
konwencje-funkcji

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ć ich podstawowe rodzaje, szczególnie bawiąc się w reverse engineering.

Dll Injection

6 lipca 2014, kategoria: C++
dll-injection

Szykuje się artykuł, opisujący wykonanie techniki DLL Injection. Do napisania artykułu przymierzałem się już wiele miesięcy temu, miał być pierwszym dotyczącym reverse engineeringu. Ciągle odwlekałem go na później, ponieważ kiepsko u mnie z czasem, a chciałem napisać go solidnie. Umiejętność wykonania DLL Injection wiele razy przyda Ci się, szczególnie w programach edytujących pamięć innych aplikacji.

Lista inicjalizacyjna

14 marca 2014, kategoria: C++
lista-inicjalizacyjna

W niniejszym artykule omówię listę inicjalizacyjną w języku C++. Jest ona bardzo często używana podczas bardziej rozbudowanych projektów programistycznych. Zastosowanie listy inicjalizacyjnej jest niezbędne podczas używania zaawansowanych mechanizmów programowania obiektowego.

Polimorfizm i metody wirtualne

11 marca 2014, kategoria: C++
polimorfizm_funkcje_wirtualne

Polimorfizm jest filarem programowania obiektowego, nie tylko jeżeli chodzi o język C++. Daje on programiście dużą elastyczność podczas pisania programu. Polimorfizm jest ściśle związany z metodami wirtualnymi. Złe operowanie mechanizmem polimorfizmu może znacznie spowolnić działanie aplikacji i doprowadzić do poważnych błędów.

Konstruktory

6 marca 2014, kategoria: C++
konstruktory

W języku C++ istnieje wiele rodzajów konstruktorów. Ich implementacja w klasach jest bardzo łatwa i nie sprawia problemów nawet początkującym programistom. Drobny problem z konstruktorami może pojawić się w bardziej zaawansowanych przypadkach np. podczas dziedziczenia.

Subclassing i zwiększanie funkcjonalności aplikacji

3 stycznia 2014, kategoria: C++
subclassing

Kolejny artykuł dotyczący ingerencji w aplikacje trzecie, opisujący podstawową technikę zwiększania funkcjonalności innych procesów. Głównym wątkiem który poruszę, będzie zastosowanie subclassingu w połączeniu z dll injection. Jak zwykle na ruszt weźmiemy grę Saper dostępną w systemie Windows XP.

Odczytywanie pamięci wskaźnikami generycznymi

3 stycznia 2014, kategoria: C++
wskazniki-generyczne

Czy zastanawiałeś się kiedyś do czego przydają się wskaźniki generyczne? Jednym z ciekawych zastosowań wskaźników generycznych jest odczytywanie pamięci. W połączeniu z dll injection uzyskujemy na prawdę wygodne narzędzie. Możliwe, że ten artykuł nie zmieni Twojego życia, jednak postanowiłem opisać w nim tę prostą metodę. W tym artykule przeczytasz o tym, jak odczytywać pamięć procesu po wstrzyknięciu do niego biblioteki DLL (dll injection).

Klasy

14 grudnia 2013, kategoria: C++
klasy

Klasy w C++ są bardzo ważnym narzędziem w rękach programisty. Klasy są fundamentem programowania obiektowego. Z pomocą klas będziesz mógł tworzyć lepszy kod, a co najważniejsze będzie on bardzo dobrze zorganizowany. Ucząc się klas i programowania obiektowego, powinieneś znać podstawy języka i umieć pisać proste programy proceduralne.

Lista procesów

4 sierpnia 2013, kategoria: C++
lista-procesow

Podczas pisania różnego typu trainerów do gier lub programów monitorujących system, zachodzi potrzeba wyświetlania listy procesów uruchomionych w systemie. Lista procesów dostarcza nam wielu informacji takich  jak np nazwa, identyfikator czy ID. Istnieje kilka metod na wyświetlenie uruchomionych procesów. Przedstawię wszystkie metody które znam i opiszę jedną której zawsze używam.

Dll Injection - wywoływanie funkcji z parametrami

23 lutego 2013, kategoria: C++
dll-injection

Pierwszy artykuł o dll injection wywołał duże zainteresowanie. Wiele osób szuka informacji na temat pisania trainerów do gier, których główną funkcjonalnością jest wywoływanie funkcji gier w określonym momencie. W poprzednim artykule trochę kiepsko opisałem sam moment wywoływania funkcji. Funkcje wywoływane w pierwszym artykule są funkcjami bez parametrów. Dziś postaram się opisać jak szukać parametrów funkcji oraz jak je wywoływać.

Przekazywanie argumentów do funkcji

26 stycznia 2013, kategoria: C++
funkcje-parametry

Funkcje nie byłyby tak użyteczne, gdyby nie dało się do nich przekazywać argumentów. Osoby zaczynające przygodę z programowaniem często mylą sposoby ich przekazywania. Warto poznać różnice jakie istnieją w przekazywaniu argumentów do funkcji z użyciem różnych metod.

Struktury

16 stycznia 2013, kategoria: C++
struktury

Struktury to złożone typy danych pozwalające przechowywać różne informacje. Za pomocą struktur możliwe jest grupowanie wielu zmiennych o różnych typach w jeden obiekt. Strukturę można nazywać obiektem lub pojemnikiem czy też rekordem. Dzięki strukturom można w prosty sposób organizować zbiory danych, bez konieczności korzystania z tablic (np. bardzo niewygodnie tworzyć bazę danych na tablicach).

Lista jednokierunkowa

15 stycznia 2013, kategoria: C++
lista-jednokierunkowa

Lista jednokierunkowa jest strukturą o dynamicznie zmieniającej się wielkości. Listę można opisać jako uszeregowany zbiór elementów. Każdy element zawiera jakieś dane oraz wskazuje na swojego następcę. Cechą listy jednokierunkowej jest to, że można przeglądać ją tylko w jedną stronę, od początku do końca.

Gra saper

14 stycznia 2013, kategoria: C++
saper

Gra Saper została napisana w 1981. Jest dostępna w każdej wersji systemu Windows. Polega na odkrywaniu zaminowanej planszy tak, aby nie trafić na minę. Gra działa na bardzo prostej zasadzie i nie wymaga zaawansowanego trybu graficznego, mimo tego potrafi wciągnąć na wiele godzin.  Sapera można łatwo napisać w dowolnym języku np. w C++ na dodatek używając zwykłej konsoli i nie używając żadnych elementów graficznych (obrazków).

Tablice dynamiczne

12 stycznia 2013, kategoria: C++
tablice-dynamiczne

Tablice dynamiczne jednowymiarowe oraz dwuwymiarowe są ściśle związane ze wskaźnikami. Użycie wskaźników to jedyna metoda uzyskania tablicy dynamicznej. Istnieje duża potrzeba na używanie tablic dynamicznych, programista ma nad nimi pełną kontrolę. Możemy decydować o ich wymiarach (kształcie) oraz o wielkości.

Wskaźniki

9 stycznia 2013, kategoria: C++
wskazniki

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 wskaźnikami znacznie przyśpiesza wydajność programu, zmniejsza zużycie pamięci oraz skraca kod źródłowy.

Używanie timerów

6 stycznia 2013, kategoria: C++
timer-1

Timer to kontrolka odpowiedzialna za wykonywanie określonego kodu, co określoną ilość sekund. Timery znane są przede wszystkim użytkownikom środowisk takich jak Delphi, C++ Bulider, Visual Basic oraz platformy .NET. W ich przypadku utworzenie kontrolki timera ogranicza się wyłącznie do przeciągnięcia go na formę i dodania odpowiedniego kodu. Timery są na tyle wygodne, że często są wręcz nadużywane.

Dll Injection - wywoływanie funkcji

4 stycznia 2013, kategoria: C++
dll-injection

Dll Injection jest to technika pozwalająca uruchomić dowolny kod w pamięci innego procesu, przez zmuszenie procesu do załadowania obcego pliku DLL. Istnieje wiele sposobów na wykonanie Dll injection, wszystkie mają pewne wady i zalety. W artykule opiszę w jaki sposób wywołać funkcję innego procesu posługując się Dll Injection.

CodeCave

7 sierpnia 2012, kategoria: C++
codecave

Każda uruchomiona aplikacja posiada swoją pamięć (pamięć procesu). Technika DllInjection pozwala programiście na wstrzyknięcie kodu do uruchomionego procesu, dzięki czemu można poszerzyć go o nowe funkcje, lub wywoływać istniejące funkcje procesu w dowolnym momencie. Jedną z wielu technik wstrzykiwania kodu jest korzystanie z codecave.

Ukrywanie funkcji WinApi

2 sierpnia 2012, kategoria: C++
ukrywanie-funkcji-winapi

Maskowanie funkcji WinAPI może się nam przydać kiedy antywirusy internetowe czepiają się naszego programu. Dla testów napisałem program w C++, który podczas startu dodaje się do autostartu (rejestr) a następnie łączy się z losowym serwerem przez winsock. Po tych czynnościach program się zamykał. Przeskanowałem go na skanerze internetowym, wynik skanu to 8/43. Aż 8 antywirusów wykryło zagrożenie.

Odczytywanie baseaddress

26 lipca 2012, kategoria: C++
base-adress

Poruszając temat adresu bazowego można by się rozpisać na dziesiątki stron, należało by zacząć od budowy plików wykonywalnych Windows, o nagłówkach i sekcjach (np. PE Header) oraz adresach RVA i VA (relatywnych i bezwzględnych). Informacje na ten temat można znaleźć w internecie. Ja podam kilka najważniejszych faktów.

Edycja pamięci procesów

25 lipca 2012, kategoria: C++
edycja-pamieci-procesow

Windows udostępnia nam funkcje pozwalające odczytywać i zapisywać pamięć innych procesów. Służą do tego ReadProcessMemory i WriteProcessMemory. Przed odczytaniem pamięci procesu musimy uzyskać jego uchwyt (HANDLE) i posiadać odpowiednie prawa dostępu. Najlepszym darmowym programem do operacji na pamięci procesu jest CheatEngine oraz TSearch. Naszą aplikacją testową będzie Saper, ponieważ tę grę każdy posiada.