Liczby, ciąg dalszy…

Wcześniej omówione zostały bity i bajty. Bity i bajty mogą reprezentować liczby, tekst, czas lub inne informacje. W informatyce śledczej najczęściej będziemy jednak interpretować liczby. Kilka koncepcji wymaga dodatkowego rozwinięcia.

Wielkość liczby

Jak wcześniej już wspominałem, praca informatyka śledczego jest lustrzanym odbiciem pracy programisty. Programista systemów operacyjnych lub aplikacji będzie tworzył struktury danych, które będą później analizowane przez specjalistę digital forensics. Oczywiście nie wszystkie dane będą obiektem zainteresowań, a tylko te istotne z puntu widzenia konkretnej sprawy i zwykle znajdziemy je zapisane w rejestrze Windows, różnego rodzaju logach i plikach.  Wracając do liczb, przed ich użyciem  programista, lub samo środowisko programistyczne decyduje jakiego typu zmiennej użyć. Najlepszym wyborem będzie zmienna, która użyje jak najmniejszej ilości pamięci w stosunku do wartości liczby jaką będzie zawierać.

Jeżeli więc, jako programista,  będziemy zamierzali utworzyć zmienną przechowującą wiek naszego użytkownika, wystarczy nam 1 bajt, gdyż jego najwyższa wartość to 255. Powinno to wystarczyć nawet dla wieloryba grenlandzkiego, który dożywa 200 lat. Jeżeli w zmiennej chcemy zawrzeć wszystkie dni w roku, potrzebne będą już dwa bajty gdzie najwyższa wartość to 65535. Dla większych liczb, użyjemy 4 lub 8 bajtów.  Jak widać jest to ściśle z koncepcją bajtów, słów, wordów i qwordów.

Liczby ujemne

Innej zmiennego typu zmiennej programista użyje jeżeli będzie chciał zapisać liczbę ujemną. Istnieje kilka metod, jednak najczęściej spotykaną w pracy informatyka śledczego będzie notacja “oznakowana” (signed). Oznacza to, że pierwszy bit, czyli ten najistotniejszy, czyli ten po lewej stronie liczby będzie znakiem plusa lub minusa. Plus to 0 a minus to 1. Oznacza to, że w liczbie 8, 16, 32 czy 64 bitowej, do zapisu wartości będziemy mogli użyć jednego bitu mniej. Kilka ciekawszych przykładów liczby 8-bitowej:

  • W notacji oznakowanej 00000001 to 1 a 10000001 to -1
  • 11111111 – w notacji oznakowanej (signed) będzie oznaczało -127 a w nieoznakowanej (unsigned) 255
  • 01111111 – w obu notacjach będzie oznaczało 127
  • 10000000 i 00000000 w notacji oznakowanej będą oznaczały zero.
  • i tak dalej…

Patrząc tylko na liczbę, jako ciąg bitów nie można odróżnić oznakowanej od nieoznakowanej. DIgital forensic ekspert będzie musiał starać się to wydedukować analizując dany program i wygenerowane przez niego dane.

Ułamki, czyli liczby zmiennoprzecinkowe

Z ułamkami informatyk śledczy nie styka się zbyt często. Dlaczego? Istnieją dwa powody:

  • Również programiści ich unikają. Ułamki i operacje na nich wymagają dużych zasobów procesora dlatego zawsze jeżeli tylko można zastępuje je się liczbami całkowitymi. W jaki sposób? Poprzez zwiększenie danej liczby o wymaganą ilość miejsc po przecinku. Jeżeli na przykład chcemy podać czas z dokładnością do tysięcznej sekundy, na przykład 3,125s użyjemy 3125  milisekund raczej niż wskazanego wcześniej ułamka.
  • Liczby ułamkowe używane są głównie do przedstawienia danych lub  operacji matematycznych, które nie są zwykle przedmiotem wnikliwej analizy śledczej.  Na przykład dane z arkuszy kalkulacyjnych nie wymagają zwykle dodatkowej analizy.

Jak wiadomo w systemie binarnym istnieją jedynie zera i jedynki. Nie ma znaku przecinka. Jak zatem zapisać ułamek dziesiętny? Daną liczbę na przykład 32-bitową rozbija się na trzy segmenty:

  • Znak – jeden bit, decydujący czy liczba będzie dostatnia, czy ujemna,
  • Wykładnik – 8 bitów decydujących, w którym miejscu znajdzie się przecinek
  • Mantysa – pozostałe bity przedstawiające daną liczbę, ale bez przecinka.

 

 

 

 

 

 

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *