pprogramowanie;

Krótko i zwięźle na temat programowania

fbrss

Połączenie assemblera i C++

12 sierpnia 2014, kategoria: C++

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.

Czytaj więcej >>

Konwencje wywoływania funkcji

9 sierpnia 2014, kategoria: C++

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.

Czytaj więcej >>

Dll Injection

6 lipca 2014, kategoria: C++

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.

Czytaj więcej >>

Lista inicjalizacyjna

14 marca 2014, kategoria: C++

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.

Czytaj więcej >>

Polimorfizm i metody wirtualne

11 marca 2014, kategoria: C++

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.

Czytaj więcej >>

Konstruktory

6 marca 2014, kategoria: C++

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.

Czytaj więcej >>

Subclassing i zwiększanie funkcjonalności aplikacji

3 stycznia 2014, kategoria: C++

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.

Czytaj więcej >>

Odczytywanie pamięci wskaźnikami generycznymi

3 stycznia 2014, kategoria: C++

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ę.

Czytaj więcej >>

Klasy C++

14 grudnia 2013, kategoria: C++

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. Czytaj więcej >>

Całkowanie numeryczne C++

17 listopada 2013, kategoria: C++

Całkowanie numeryczne jest to zagadnienie z metod elementów skończonych (MES). Korzystając z całkowania numerycznego możemy obliczyć wartość dowolnej całki jednowymiarowej oznaczonej. Wynik jest zawsze obarczony pewnym błędem, ponieważ wartość całki w C++ liczona jest w przybliżeniu.

Czytaj więcej >>

Lista procesów

4 sierpnia 2013, kategoria: C++

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.

Czytaj więcej >>

Dll Injection – wywoływanie funkcji z parametrami

23 lutego 2013, kategoria: C++

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ć. Czytaj więcej >>

Przekazywanie argumentów do funkcji C++

26 stycznia 2013, kategoria: C++

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. Czytaj więcej >>

Struktury C++

11 stycznia 2013, kategoria: C++

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). Czytaj więcej >>

Lista jednokierunkowa C++

3 stycznia 2013, kategoria: C++

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. Czytaj więcej >>

Tablice dynamiczne

13 grudnia 2012, kategoria: C++

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.  Czytaj więcej >>

Gra saper

25 listopada 2012, kategoria: C++

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).

Czytaj więcej >>

Wskaźniki

27 lipca 2012, kategoria: C++

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ść czasową programu, zmniejsza zużycie pamięci oraz skraca kod źródłowy.

Czytaj więcej >>

Koncepcja generatora plików

27 lipca 2012, kategoria: C++

Przedstawię prostą metodą często używaną przez programistów, do stworzenia programu w stylu generatora. Generator ma za zadanie utworzyć plik wykonywalny i przekazać mu pewne parametry wpisane przez użytkownika.

Czytaj więcej >>

Używanie timerów

27 lipca 2012, kategoria: C++

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.

Czytaj więcej >>

Dll Injection – wywoływanie funkcji

27 lipca 2012, kategoria: C++

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.

Czytaj więcej >>

CodeCave

27 lipca 2012, kategoria: C++

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 metod wstrzykiwania kodu jest korzystanie z codecave.

Czytaj więcej >>

Ukrywanie okna konsoli

26 lipca 2012, kategoria: C++

W języku C++ wyskakujące okno konsoli jest czymś oczywistym. Możemy je ukryć za pomocą odpowiednich funkcji API ale jest to dosyć brzydki zabieg. Na dodatek okienko mignie podczas startu i będziesz widoczne przez pół sekundy. Za pomocą funkcji GetConsoleWindow() pobieramy HWND okna naszej konsoli. Następnie za pomocą ShowWindow() ukrywamy. Również za pomocą tej samej funkcji okno można w dowolnym momencie pokazać. Czytaj więcej >>

Ukrywanie funkcji WinApi

26 lipca 2012, kategoria: C++

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.

Czytaj więcej >>

Odczytywanie baseaddress

26 lipca 2012, kategoria: C++

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.

Czytaj więcej >>

Edycja pamięci procesów

26 lipca 2012, kategoria: C++

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.

Czytaj więcej >>