Programista 1/2019 (80)
Programista 1/2019 (80)
Część 1 – przygotowanie środowiska
Na rynku dostępnych jest wiele narzędzi wspomagających inżynierię wsteczną oprogramowania lub – szerzej mówiąc – plików binarnych. Zarówno ich możliwości, jak i ceny są bardzo zróżnicowane. Projekt radare2 [2] (w skrócie r2) służył do analizy i deasemblacji kodu. Przy tym pozostawał do niedawna jedną z najbardziej rozbudowanych opcji darmowego oprogramowania wydawanego na licencji open source. Wszystko to pomimo wielu niedociągnięć i błędów, które mogą skutkować różnymi podatnościami, zaprezentowanymi między innymi przez Kamila Frankowicza z zespołu CERT.pl [1]. Radare2 udostępniając zarówno interfejs graficzny (Cutter [3]), jak i CLI oraz rozbudowane API, pozwala na automatyzację pracy i wspiera szeroką gamę architektur – to również jedno z podstawowych narzędzi w arsenale wielu graczy podczas potyczek w zawodach CTF. Niedawno opublikowane oprogramowanie Ghidra [4] wyposażone jest między innymi w dekompilator, którego kod źródłowy właśnie trafił do repozytorium Github [5], co może wywołać sporo zamieszania w świecie analizy wstecznej i zmusić developerów radare2 do większego wysiłku.
Kwestie związane z wyrównaniem pamięci (ang. memory alignment) potrafią mieć niebagatelny wpływ na wydajność kodu, a czasami także na jego stabilność. Jeszcze do niedawna standard języka C++ dość wstrzemięźliwie określał narzędzia, za pomocą których programista mógł specyfikować wyrównanie struktur danych. Lukę uzupełniały same kompilatory, dostarczając – z definicji nieprzenośnych – rozszerzeń i atrybutów. Przenośność można było uzyskać poprzez mozolne i ostrożne implementowanie własnych mechanizmów alokacji pamięci. Dopiero standard C++17 został wzbogacony o elementy umożliwiające przenośne specyfikowanie wymagań dotyczących wyrównania pamięci.
W trakcie nauki programowania lub podczas testowania różnych rozwiązań zwykle tworzymy wiele małych projektów. Później, podczas pracy nad czymś poważniejszym, może pojawić się potrzeba zrobienia czegoś, „co już kiedyś chyba pisaliśmy”. Przeszukiwanie starych projektów będzie łatwiejsze, jeśli dla każdego z nich stworzymy prostą stronę HTML z odpowiednimi linkami. W tym artykule chciałbym zaproponować takie rozwiązanie.
Wirtualna czy rozszerzona rzeczywistość – swego czasu zapowiadane jako rewolucja, która wpłynie na każdy aspekt naszego życia. Korporacje stanęły do wyścigu zbrojeń, dzięki czemu w nasze ręce trafiły takie narzędzia jak HoloLens, Oculus Rift czy Playstation VR. Ostatecznie pomimo całego szumu, jaki występował wokół tych pojęć – wciąż pozostają one niszą lub ciekawostką na stoiskach firm IT podczas targów pracy. Czym zatem w tym wszystkim jest pojęcie WebXR i jakie problemy pomoże nam rozwiązać?
„Od kiedy pamiętam, pokutuje sztywny podział na ścisłych i humanistów. Ja myślę, że człowiek jest całością, a tworzenie takich dychotomii jest zupełnie niepotrzebne. Mam marzenie, aby zniknął podział na ścisłych i humanistów, by znów zapanowała równowaga” – mówi Michał Bartyzel na temat Soft Skilli oraz ich znaczenia w świecie programistów i programistek.
Rozmowa z Piotrem Koniecznym, szefem zespołu bezpieczeństwa niebezpiecznik.pl, firmy zajmującej się włamywaniem na serwery innych firm za ich zgodą w celu namierzenia błędów bezpieczeństwa w ich infrastrukturze teleinformatycznej, zanim zrobią to prawdziwi włamywacze.
BTree jest uporządkowaną strukturą danych podobną do zrównoważonego binarnego drzewa przeszukiwań. Podstawowa różnica polega na tym, że węzły w BTree mogą posiadać więcej niż dwoje dzieci. Drzewiasta forma sprawia, że podstawowe operacje, takie jak wstawianie, usuwanie i wyszukiwanie elementu, zajmują czas proporcjonalny do wysokości drzewa, czyli O(log(liczba elementów w strukturze)). Zwiększone rozgałęzienie BTree sprawia, że jego wysokość jest zdecydowanie mniejsza niż wysokość zrównoważonego binarnego drzewa przeszukiwań zawierającego te same elementy. Sprawia to, że – mimo tej samej klasy złożoności operacji na tych strukturach danych – BTree w wielu zastosowaniach, takich jak bazy danych czy systemy plików, charakteryzuje się znacząco większą wydajnością.
Dlaczego pracując w branży IT, warto ciągle poszerzać swoją wiedzę? Czy Internet Rzeczy jest technologią przyszłości? Jakie cechy są najbardziej pożądane wśród programistów embedded? O swojej pracy opowiada Piotr Janas – obecnie Dyrektor Sektora IoT w Comarch, który swoją przygodę z firmą rozpoczął w 2005 roku od programu stażowego.
Z perspektywy algorytmów i struktur danych żywot przeciętnego programisty jest dosyć nudny, bo zamyka się przeważnie na generycznej wersji List. Tymczasem my zostawiliśmy ten typ już daleko za sobą i zdążyliśmy poznać znacznie więcej ciekawych struktur, jak na przykład listy, kopce, tablice haszujące czy drzewa. Czas wykonać kolejny krok – tym razem poznamy jedną z najbardziej elastycznych struktur danych, jaką jest graf.
Chaos w projekcie. Odwieczne starcia programistów z ludźmi „od biznesu”. Legacy takie, że strach patrzeć. Greenfield robiony na hura. Takie sytuacje znamy wszyscy. A gdyby tak spróbować do analizy wymagań projektowych podejść w sposób nieco inny, nastawiony na wymianę informacji między programistami a biznesem? To właśnie myśl przewodnia Event Stormingu. Z tego artykułu dowiemy się, czym jest Event Storming, jak przebiega i jakie korzyści może wnieść do naszego projektu.
Czy można zobrazować i udokumentować architekturę oprogramowania w zaledwie czterech krokach? Zgodnie z założeniami modelu C4 większość systemów można przedstawić za pomocą maksymalnie czterech diagramów w sposób na tyle szczegółowy, że umożliwi on implementację architektury systemowej przez zespoły programistyczne. Postanowiliśmy sprawdzić te założenia – przedstawiamy zarówno zasady dokumentowania architektury, jak i szczegółowy przykład użycia C4 w praktyce.
Niedawno – po roku przerwy – odbył się kolejny CTF z marką CONFidence. Tym razem zmienił się organizator – zamiast drużyny Dragon Sector1 (który zajmuje się organizowaniem Dragon CTF2 na konferencji PWNing3) konkurs został przygotowany przez zespół p44. Na zawodników czekało 16 zadań z różnych kategorii. Najliczniej reprezentowana była kategoria „reverse engineering” i to na zadaniu właśnie z tej kategorii skupimy się w poniższym artykule.5