Friday, December 24, 2010

Zabawy w multiboota i odzyskiwanie systemu Windows 7

Gorący post, jestem świeżo po nocce spędzonej nad odzyskiwanie systemu, który znikł ;) ale po kolei. Wczoraj wpadłem na pomysł, aby zainstalować sobie jako drugi system Fedorę na służbowym laptopie. Konsekwencje pierwszego ruchu przepłaciłem wieloma godzinami ślęczenia nad tym laptopem.

Na dysku były dwie partycje, jedna do botowania dla Windows 7, a druga na system. Włożyłem Knoppixa, odpaliłem GParted i zmniejszyłem tą partycję, aby zrobić miejsce na nowy system. Po tej operacji sprawdziłem czy siódemka to przeżyła i okazał się, że nie, ale wtedy jeszcze nie wiedziałem, że partycja w ogóle stała się niewidoczna. O tym dowiedziałem się dopiero jak próbowałem pod montować ją z LiveCD Fedory, gdzie Fedora krzyczała coś o złym ostatnim sektorze. Dane nie były widoczne! W tym czasie podczas próby odpalenia siódemki zgłaszała się konsola odzyskiwania. Długo mi zajęło dojście do tego jak to odkręcić. Okazało się, że rozwiązaniem była modyfikacja tabeli partycji tak, aby partycja, którą zmniejszyłem nadal "rozciągała" się do końca dysku. Wpisałem takie parametry przy pomocy polecenia sfdisk. Po tej operacji dane znów zaczęły być widoczne z Live CD, bo Windows 7 nadal nie startował, a nawet wyglądał na bardziej zepsuty niż był, bo nawet konsola odzyskiwania nie była dostępna i nie była to wina zepsutego MBR-a. Przy okazji tego też "przećwiczyłem" w dwie strony, więc może to przez to.

Następnie ponownie zmniejszyłem partycję ale tym razem nie linuksowym narzędziem a windowsowym ;) Acronis, który dostępny jest na Hiren's Boot CD. Zainstalowałem na nowo utworzonej partycji Fedorę i mogłem dostać się do plików siódemki, ale nadal nie mogłem jej uruchomić. Oczywiście nie miałem oryginalnych płyt instalacyjnych od tego laptopa przy sobie, o instalce Office 2010 nie wspomnę. Podobno można pobrać obraz z serwera Microsoftu jak się ma licencję, ale wszystko było w pracy, a ja to robiłem w domu. Dlatego tak bardzo mi zależało, aby odzyskać istniejącą na dysku instalację.

Ostatecznie udało mi się to zrobić dzięki innej płycie instalacyjnej (też Windows 7 Pro x86) i narzędziu
Bootrec.exe (http://support.microsoft.com/kb/927392)... ufff. Oczywiście było trzeba odbudować magazynu BCD - cokolwiek to znaczy to jest odpowiednikiem gruba w Linuksie. Oczywiście samo odbudowanie jeszcze nic nie dało :), tzn. dało, ale jak później zauważyłem z Live CD nie na tej partycji (czyli pierwszej 100MB), na której powinno to się znajdować - zrobiłem to na systemowej (katalog Boot). Ale to już nie był taki problem, wystarczyło w grubie zmienić, aby nie startował z pierwszej partycji tylko z drugiej i w końcu...

Co mogę powiedzieć po tej zabawie? Na pewno to, iż Windows nie jest takim surowym (raw) systemem jak Linux. Czyli stworzenie w czymkolwiek partycji, wrzucenia gruba i plików ze starego systemu do nowo utworzonej partycji pod Linuksiem załatwiłoby sprawę, a tu tak nie ma.
Poza tym dawno już się nie bawiłem w konfigurowanie Fedory na desktop i jak na nowo doceniłem Debiana i wydanie stabilne, które po prostu działa.

Wednesday, December 22, 2010

!Debian Community

To blog zdecydowanie techniczny, ale dlaczego nie pisać tu o innych problemach, nie koniecznie technicznych, takich jak aspekty uczestnictwa w społeczności technicznej?
Dla mnie osobiści to nie nowość, nie raz przerabiałem ten problem - jego sens. Pozwolę sobie przytoczyć mały cytat - a co, muszę się pożalić - z mojej strony GNU, Linux, Debian:
Uzyskasz pomoc od społeczności
Społeczność Debiana jest bardzo aktywna i chętnie pomaga swoim użytkownikom. W sieci jest wiele materiałów na temat systemu Linux. Na polskim forum Debiana dziennie pojawia się kilkadziesiąt postów. Jeżeli będziesz miał problem z systemem lub sprzętem to istnieje duże prawdopodobieństwo, że rozwiązanie zostało już opisane. Możesz uzyskać odpowiedz na forum, grupach dyskusyjnych poświęconychDebianowi oraz ogólnie Linuksowi lub oficjalnej polskiej liście mailingowej. Musisz jednak pamiętać, że osoby pomagające robią to tylko z dobrych chęci.
Tak właśnie napisałem w tamtym roku. Pozwoliłem sobie pogrubić pewien fragment, mówiący o tym, kiedy można liczyć na społeczność Debiana. Trudno mówić w imieniu społeczności, ale jestem jej aktywnym członkiem i pozwolę sobie opisać tutaj pewne przykre sytuację, które niestety mają miejsce.

Szczerze powiem, że sam jestem zadowolony, z tego jak to wtedy ująłem: "Jeżeli będziesz miał problem z systemem lub sprzętem" patrząc na to dzisiaj. Doskonale pasuje to do tematu, który chcę poruszyć, a mianowicie chamstwa w tej społeczności i pytania czy warto się dla niej poświęcać.

Jak wiadomo Linux jest otwarty dla wszystkich i dzięki temu zdobył taką popularność, ale to nie znaczy, że nie ma wad, że ten medal nie ma drugiej strony. Prawda jest tak, że kończy mi się piwo i nie mam co robić, albo mam już wszystkiego dość :). Poważnie to jest to temat wart pisania, ostatnio dużo nad tym myślałem. Szukałem złotego środka, kompromisu między udzielaniem się w społeczności, a robieniem czegoś dla siebie. Wynikiem tego myślenia jest ten blog, ale zanim o tym zacznę pisać pozwolę sobie przytoczyć świeży przykład niewdzięczności i demotywacji http://debian.linux.pl/threads/21292-BASH-wyra%C5%BCenia-regularne-grepa.

To wątek na forum, w którym autor zarejestrowany w grudniu tego roku i posiadający tylko 4 wypowiedzi i tylko w tym jednym wątku. Mówiąc krótko zarejestrował się tylko po to, aby uzyskać rozwiązanie. Pisze na początku, że szuka sposobu na coś, nie ważne czego. Dostaje rozwiązania - trzy, w tym moje w AWK. Po czym pisze, że potrzebuje rozwiązania, które wykorzystuje tylko wybranych narzędzi itp., aha praca domowa! O nie. Odpisałem, że my tu nie rozwiązujemy prac domowych, a przynajmniej ja nie będę poświęcał swojego czasu na szukanie jak to samo zrobić w narzędziach, których ma użyć. Jaką dostałem odpowiedz można sobie przeczytać. Wkurza mnie to, że jeszcze mu pomogłem, bo problem został w sumie rozwiązany. Powiem krótko, gdybym nie był redaktorem tego portalu i nie wiedział, że ta odpowiedz zostanie zaraz usunięta odpisałbym mu podobnie jak w kawałku "Na spidzie": ja Cię serdecznie pieprze! To właśnie po to powstał ten blog, abym mógł tu pisać co mi się tylko podoba, a nie co wypada, a czego nie.

Nie dość, że pomagasz ludziom, nic z tego nie masz, robisz do dla idei, to jeszcze musisz wysłuchiwać takich komentarzy. Co do uczenia się podczas rozwiązywania problemów innych to szczerze powiem, że rzadko się to zdarza. Zdecydowanie więcej się uczę przerabiając konkretny temat. Owszem, jak temat jest ciekawy można się coś nowego nauczyć szukając rozwiązania, ale w ponad 90% przypadków jest to czytanie rzeczy, które już wiesz, albo Cię nie interesują. Można to porównać do kupowania gazet o tematyce informatycznej, a książek. Pięć gazet nie nauczy Cię tyle, co dobra książka o konkretnym temacie, a kosztuje tyle samo.

Tak więc proszę się nie dziwić takim tekstom np. na stronie Jak mądrze zadawać pytania:
Nie zamierzamy poświęcać naszego czasu na odpowiedzi ludziom niechętnym do samodzielnego myślenia - odróbcie więc swoją pracę domową, zanim zadacie jakiekolwiek pytanie. Tacy ludzie są pożeraczami naszego czasu - zabierają go nam bez opamiętania, marnują każdą chwilę, którą moglibyśmy poświęcić innemu, bardziej interesującemu zagadnieniu lub osobie, która bardziej zasługuje na naszą odpowiedź. Tych pierwszych nazywamy 'łajzami' ('losers', z historycznych względów wymawiane często jako 'lusers').
Przytoczona sytuacja to tylko wierzchołek góry lodowej, takim przypadkom w zasadzie nie powinno się poświęcać tyle czasu jak ja tu to robię. Niestety temat jest o wiele bardzie nieprzyjemne i poważniejszy. W 2007 roku portal jakilinux.org opublikował artykuł (tłumaczenie) Dlaczego odszedłem — wywiad z deweloperem jądra Conem Kolivasem, z którego można wyczytać, że problemy istnieją - w tym wypadku trochę innego kalibru.
Jestem redaktorem portalu debian.linux.pl i mam tam również swój blog, do niedawna chętnie dokonywałem w nim wpisów. Powiem szczerze, że decyzja o stworzeniu nowego bloga była dojrzała, nie była pochopna podjęta pod wpływem emocji. Była bardziej wyryta przez sytuacje, które niestety regularnie się powtarzały. Sam byłem świadkiem tego jak jedne z moderatorów zrezygnował ze swojej fuchy po tym, jak otrzymał od kolegi po fachu pewną wiadomość. Sam również tego doświadczyłem, dostosowałem się do uwag, ale nie podobało mi się to zupełnie. Tak właśnie powstał ten blog i świadomość jaki jest optymalny sens społeczności i udzielania się w niej. Miałem duży dylemat. Wiedziałem, że chcę mieć swoje "podwórko", gdzie nikt nie będzie mi mówił jak mam pisać pewne zwroty, a z drugiej strony wiedziałem, że te same teksty, które tam publikuję na prywatnym blogu nie będą odwiedzane przez taka dużą ilość osób. Jak wiemy, nie ma większej zapłaty niż rekordowy licznik odwiedzin ;).

Tak więc musiałem się nauczyć, że społeczność owszem, ale tylko wtedy, gdy z danym tekstem chcę trafić do wielu odbiorców, taki multicast. Myślałem, że na tamtym blogu będę mógł pisać to, co nie nadaje się na artykuł, ale mimo wszystko zawiera przydatne informację. Myliłem się, nie czułem się tam wolny. Poza tym chciałem mieć coś tylko swojego, np. notatki dla siebie.

Oczywiście nie zamierzam tutaj stwierdzić, że nie warto, że nie ma sensu, ale trzeba być wyrafinowanym, czy nam się to podoba czy nie. Pamiętam jak od czasu do czasu natrafiałem na informację, że developerzy rzadko odpowiadają na e-maile, albo strona www jakiegoś projektu nie była aktualizowana przez dłuższy czas (mimo, iż kod rozwijany jest na bieżąco). Wygląda na to, iż osoby wkładające najwięcej wysiłku w świat open source wolą swój kod od kontaktów z jego "fanami".

Sunday, December 12, 2010

Świat według Google, czyli "live within the browser"

Już za czasów Netscape wyobrażano sobie taką przyszłość, iż przeglądarka stanie się platformą i Windows przestanie być dominującą platformą. W połowie lat 90 nie było jeszcze wystarczająco rozwiniętych technologii ale dziś już są i Google to pokazuje.

Wizja Google jest następująca: wszystko jest w sieci, użytkownikowi do życia wystarczy tylko przeglądarka.
Wszystkie dane oraz kod aplikacji będzie przechowywany na serwerze, laptop Cr-48 jest tylko terminalem - jak kiedyś.
Tak więc mamy klienta (Chrome OS) i serwer (Linux LAMP). Użytkownik chcący skorzystać z sieć nie musi być administratorem swojego komputera. Administracja będzie scentralizowana a używanie aplikacji biznesowych oraz przestrzeni dyskowej płatne.

Oto film demonstrujący jak bezpieczne są nasze dane w takim modelu.


A tu Google przedstawia swoją wizje.



Co ciekawego tam zobaczymy? Hy
Loginem do notebooka z Chrome OS jest nasze konto w Google


Google ma nadzieję w ciągu 10-15 lat przepisać większość aplikacji w technologii Web. W ich wyszukiwaniu oraz zakupie ma pomóc witryna chrome.google.com/webstore.


Dla biznesu specjalistyczne potrzeby będą dostarczane poprzez pulpit zdalny do wirtualnych serwerów z aplikacjami. Tym ma się zając firma Citrix, czyli XenServer. Ma to na celu oszczędzić pieniądze i sprzęt.



Tak więc za parę lat nic nam nie będzie potrzebne poza dostępem do sieci.


Jedyną rzeczą, która mnie zainteresowała w tej koncepcji to tzw. back-end, czyli Google App Engine działający na Linuksie krótko mówiąc.

Ważną rolę będą odgrywać również technologie po stronie klienta jakie jak HTML5 i JavaScript.

Saturday, December 11, 2010

Czego szukał świat w 2010 roku

Linux kernel exploit - full-nelson.c

 Dan Rosenberg na liście Full-Disclosure opublikował kod exploita, który podobno potrafi zdobyć uprawnienia roota z lokalnego systemu. Przetestowałem jego kod na trzech systemach:

Debian Squeeze

na serwerze
Debian Lenny

i Fedorze 13
Fedora 13
Jak widać na żadnym się nie udało, mimo iż podatność dotyczy Linux Kernel <= 2.6.37, ale...



 *  * The particular symbols I resolve are not exported on Slackware or Debian
 *  * Red Hat does not support Econet by default
 *  * CVE-2010-3849 and CVE-2010-3850 have both been patched by Ubuntu and
  *     *  Debian

 http://www.securityfocus.com/bid/45072

Przy okazji usłyszałem o pewnej opcji sysctl, która poprawia bezpieczeństwa:

modules_disabled:

A toggle value indicating if modules are allowed to be loaded
in an otherwise modular kernel.  This toggle defaults to off
(0), but can be set true (1).  Once true, modules can be
neither loaded nor unloaded, and the toggle cannot be set back
to false.

Wednesday, December 8, 2010

Przeciążenie operatora przypisania

Podczas pisania programu zbiór klas, które stworzyłem dosyć się rozrósł i nieuchronnie sposób kodowania zmierzał do korzystania z zaawansowanych właściwości języka C++. Pierwszym wartym opisania jest operator przypisania, czyli "=". Dlaczego warto go używać, a raczej trzeba.

Po pierwsze zacząłem programować bardziej w stylu programowania kompozycyjnego niż obiektowego - jeszcze nie wiem czy to dobry pomysł. Zastanawiam się nad wprowadzeniem dziedziczenia ponieważ zdarza się, że muszę definiować takie same metody w różnych klasach np. set_name(string).
Operator przypisania (operator=) jest przydatny podczas takiego projektowania:

class A
{
int a;
};

class B
{
A _a;
public:
void set_a (A);
void set_a2 (int);
};

Jak widzimy mamy dwie wersję funkcji set_a(). Pierwsza pobiera argument typu a więc w definicji funkcji zostaje tylko przypisać do do tego mieszczącego się w klasie b.

void B::set_a (A _newa)
{
_a = _newa;
}

I tu pojawia się potrzeba implementacji operatora przypisania.
Z drugiej zaś strony, gdy chcielibyśmy ukryć wewnętrzną budowę klasy A (hy po co...) należałoby użyć drugiej wersji metody


void B::set_a2 (int _newval)
{
// np. set()
_a.set(_newval);;
}

Problem pojawia się wtedy, gdy klasa A ma wiele właściwości i nadal "rośnie". Wtedy prototyp i definicja metody nie wygląda czytelnie.

Tak, teraz mamy dwie drogi. Albo definiujemy klasę B jako dziedziczącą po A i mamy w klasie B bezproblemowy dostęp do składowych klasy A w sekcji protected, albo używamy kompozycji. Mimo wszystko dziedziczenie nie rozwiązuje problemu kopiowania obiektów, które de fakto zawierają wiele danych. Tworzenie dynamicznych obiektów i wskaźniki do nich jako składowe w tym przypadku uprościłyby sprawę. Wtedy nie ma potrzeby kopiowania składowej po składowej. Usuwamy starą pamięć i do wskaźnika przypisujemy wartość nowego obiektu. Podpatrzyłem taki pomysł w źródłach projektu Scintilla w pliku Editor.h:

Editor &operator=(const Editor &) { return *this; }

Ta definicja przeciążonego operatora bardzo mi się podoba jednak moja jeszcze jest inna:

class Location
{

private:
string    name;
t_classroom classroom_table;

public:
Location& operator= (const Location& cp);
};


Location& Location::operator= (const Location& cp)
{
if (this != &cp)
{
name = cp.name;
classroom_table = cp.classroom_table;
}
return *this;
}

Przy okazji odkryłem pewną właściwość C++, o której nie wiedziałem, albo nie pamiętam. Jak widzimy zmienna name jest prywatna, a jednak w definicji operatora używamy jej jakby była publiczna. Sprawdziłem to pisząc odpowiedni kod i okazuje się, że prywatne dane dla innego obiektu tego samego typu wcale nie są taki prywatne. Dopiero kiedy spróbujemy użyć prywatnej zmiennej w metodzie innej klasy zobaczymy komunikat o tym, iż zmienna jest prywatna.

Pseudokod ułatwi zrozumienia działania przeciążenia operatora przypisania:

Location a, b;
//a.operator=(b);
a = b;

Tak to wygląda po rozwinięciu przez kompilator. Teraz pytanie dlaczego referencje? Aby nie kopiować argumentu formalnego funkcji. Dlaczego nie wskaźnik? Bo operacja przypisania wtedy wyglądałaby tak:

&a = &b;

Prawda, że ładnie?
Jeszcze dlaczego argument jest const? Aby nie zmienić jego zawartości.

Należy pamiętać o tym, że każdy typ, z którego korzystamy w nowym typie, gdzie definiujemy operator przeciążenia również musi posiadać taką funkcji, ponieważ będzie ona w takim przypadku wywoływana rekurencyjnie.

Sunday, December 5, 2010

Personalizacja BackTrack na VirtualBox

Po instalacji na wirtualnym dysku:

login: root
hasło: toor

startx


Instalujemy VBoxLinuxAdditions, umożliwi m.in. ustawienie większej rozdzielczości



Ustawiamy sieć, w moim przypadku to sieć wewnętrzna za innym linuksem na wirtualu


/etc/network/interfaces

auto eth0
#iface eth0 inet dhcp
iface eth0 inet static
        address 192.168.44.44
        netmask 255.255.255.0
        network 192.168.44.0
        broadcast 192.168.44.255
        gateway 192.168.44.1








Ustawiamy automatycznie uruchomianie konfiguracji sieci

update-rc.d networking defaults





Montujemy zasób sieciowy. Można manualnie:

mount -t vboxsf vboxshare /mnt/

lub automatycznie


/etc/fstab
vboxshare       /mnt/vboxshare  vboxsf  defaults        0       0

Saturday, December 4, 2010

TCP SYN Flooding

Najpierw RFC 4987


Rozpoznanie

Hping ma opcję -i (interval), która określa jak często mają być generowane i wysyłane pakiety.

-i X
X to sekundy albo uX mikrosekundy, czyli 1/1000000s.

Ale ale, czytamy dokładnie: "Wait the specified number of seconds or  micro  seconds  between sending  each  packet".


Czyli to odstęp wyrażony w s. albo μs.

--fast    
             Alias for -i u10000. Hping will send 10 packets for second.

--faster
              Alias  for -i u1. Faster then --fast ;) (but not as fast as your
              computer can send packets due to the signal-driven design).


 --flood
              Sent packets as fast as possible, without taking care to show
              incoming replies.  This is ways faster  than  to  specify  the
              -i  u0 option.


Hy jeżeli 1μs to 1 000 000 część sekundy, a odstęp między pakietami wynoś 10 000 to czemu wychodzi 10 pakietów?

1 000 000 / 10 000 = 100 a nie dziesięć.

Sprawdziłem opcję --fast i rzeczywiście wysyła dokładnie 10 pakietów na sekundę, a przecież 10 000 x 10 to 100 000 a nie milion! Chyba wynika to z tego, że wysłanie jednego pakietu zajmuje karcie 10 mikrosekund (100/10) i wtedy rzeczywiście wychodzi 10 pakietów. W takim razie 1 000 000 / 10 mówi nam, że karta może wysłać maksymalnie 100 000 pakietów - teoretycznie.

Walimy
35263÷9,569=3685,129062598 pakietów na sekundę.

Na Debianie, na Windows XP na port SMB system stopował całkowicie.

Tcpdump

fedora1 port > 4700  --SYN--> 192.168.42.1:22 // chcę pogadać
192.168.42.1:22  --SYN-ACK--> fedora1 port > 4700 // OK
fedora1 port > 4700  --RST--> 192.168.42.1:22 // a już mi się nie chcę :)


Nawiązane połączenia

Thursday, December 2, 2010

Personalizacja SciTE

Co zmieniamy w .SciTEUser.properties:
# Globals
position.width=800
position.height=960
horizontal.scrollbar=0
toolbar.visible=0

# Element styles
caret.width=2
caret.line.back=#FFFED8

# Sizes and visibility in edit pane
line.margin.visible=1

# Indentation
tabsize=4
indent.size=4

# Unicode
code.page=65001

# Checking
save.session=1

# Global default styles for all languages
if PLAT_GTK
font.base=font:!Bitstream Vera Sans Mono,size:9

# Default
style.*.32=$(font.base),back:#FAFCFA,fore:#000000

Kopiujemy plik cpp.properties do katalogu domowego (tego samego, w którym znajduje się .SciTEUser.properties) i zmieniamy:

keywordclass.cpp2=cout cin string vector pair list iterator

# keywords2 is for highlighting user defined keywords or function calls or similar
#keywords2.$(file.patterns.cpp)=file
keywords2.$(file.patterns.cpp)=$(keywordclass.cpp2)

Na razie wystarczy.

http://www.scintilla.org