17 April 2013

Systemy liczbowe - wprowadzenie do crackingu

Dziś krótka wzmianka o systemach liczbowych. Charakteryzując narzędzia pracy crackera należy je podzielić na programy do czytania i pisania. Analitycy czytają w języku assembler i szesnastkowym systemie liczbowym, a tworzą oprogramowanie w przy pomocy kompilatorów C++ posługując się systemem dziesiętnym. W latach '90 kiedy zaczynałem przygodę z analizą kodów panowało przeświadczenie, że cracker powinien pisać w assemblerze - swoim naturalnym języku. Tak też robiłem - wszystko co pisałem miało mały rozmiar po kompilacji, ścisłą kontrolę kodu i prostą funkcjonalność. Kiedy pojawiły się systemy wielozadaniowe, wywłaszczenie czasu procesora, stronicowanie pamięci i inne cechy systemów opartych na trzeciej generacji procesorów x86 (układ 80386 z 1985 roku - 32-bitowa szyna adresowa, tryby rzeczywisty, chroniony, virtualny) okazało się, że i tak OS decydował o rzeczach najważniejszych. Należało wypracować kompromis pomiędzy niezależnością od bibliotek oraz pragmatyzmem. I tak narzędzia powstawały w C++, a cracki w assemblerze. Systemy liczbowe należy poznać dość dobrze, a szczególnie metody przeliczeń. Dlatego tutaj, tutaj, tutaj oraz tutaj można poznać podstawy. Szczególnie polecam skoncentrować się na systemie szesnastkowym, najczęściej wykorzystywanym do określania adresów, wartości liczbowych oraz wyświetlenia skompilowanego kodu. System dwójkowy (binarny) jest przereklamowany - ale należy go poznać kiedy uczył się będziesz operacji logicznych.