Development z Zapomnianej Strony

..:: Paweł Hofman .NET Portal ::..
maj
30

Obfuscator dla .NET

by Paweł | Tags:

Jakby tu zabezpieczyć swoje programy .NET-owe?

Szukałem, szukałem i znalazłem – darmowy obfuscator Eazfuscator.NET. Mnogość funkcji oraz wsparcie dla wszystkich współczesnych wersji platformy Microsoft .NET stawia go moim zdaniem na równi z płatnymi wersjami wielu innych firm znanych na rynku. Jedyne, czego życzyłbym sobie jeszcze w tym zestawie, to wsparcie dla Mono (chociaż samej manipulacji metadanymi), ale i tak duże wrażenie robi zaangażowanie autora w ten projekt przez tyle lat!

Życzę dalszej i równie dużej motywacji.



Kontynuując post o samym tworzeniu repozytorium i dostępie do niego z poziomu terminala Linuxa, warto też wspomnieć, że tak samo łatwo skonfigurować go można na Windowsie.

Otóż tunel ssh definiujemy w sekcji [tunnels] pliku (ścieżka dla Windows 7):

C:\Users\<użytkownik>\AppData\Roaming\Subversion\config

 

Wygląda on mniej więcej tak:

ssh = “C:/Programy/Putty/plink.exe” –P <port SVN> –l <użytkownik>
                                  –i “C:/Users/<użytkownik>/.ssh/id_rsa”

Wyjaśniając:

  1. Przy użyciu programu plink (wchodzącego w skład ‘paczki’ putty, którą trzeba pobrać i zainstalować wcześniej), utrzymywane będzie połączenie ssh do serwera.
  2. Plik klucza prywatnego id_rsa, nie jest wymagany, a jedynie stanowi ułatwienie, aby nie wprowadzać hasła przy każdorazowym dostępie do serwera (a ich żądań może być wiele nawet przy jednorazowej aktualizacji plików, czy pobieraniu/przeglądaniu repozytorium).

 

 

Jest jeszcze druga wersja tego tunelu, która pozwala na jednoczesne korzystanie z TortoiseSVN. Wygląda ona tylko nieznacznie inaczej:

ssh = “C:/Program Files/TortoiseSVN/bin/TortoisePlink.exe” –P <port SVN> –l <użytkownik>
                                 –i “C:/Users/<użytkownik>/.ssh/id_rsa”

 

 

Do repozytorium dostajemy się później standardowo poleceniem:

svn co svn+ssh://<ścieżka>

oraz aktualizujemy:

svn up .

Gotowe!



Słowem wstępu – jak to już wcześniej opisałem udało mi się reanimować router. Model całkiem niezły i radość tym większa, że teraz mając dwa, na jednym można poeksperymentować. Jak zatem da się go jakoś mądrze wykorzystać? Otóż w sieci domowej miło jest mieć jakiś serwerek, gdzie poprzez zwykłe otoczenie w Windowsie można by trzymać kopie swoich dokumentów, zdjęć, filmów i mieć do nich zawsze dostęp. Lub też utrzymywać inne repozytorium (jak SVN, git czy mercurial) albo uderzyć z zupełnie innej strony i postawić sobie stronkę WWW na własne potrzeby. Małe uwagi w tym miejscu:

  • ta dobra – opisywany model ma dwa wyjścia USB, także w teorii na brak miejsca nie musimy narzekać, bo zawsze można jakiegoś pendrive’a, czy dysk podpiąć
  • ta lepsza – w porównaniu do normalnego PC, który musiałby pełnić podobną rolę, router nie ma w ogóle wentylatorów, czyli nie hałasuje oraz nie zużywa tyle prądu!
  • i w końcu ta zła – na standardowym firmware’rze tego nie osiągniemy i trzeba się nieco nagimnastykować, aby wgrać alternatywne oprogramowanie.

Przeglądając Internet natrafimy na takie zastępcze firmware’y jak: OpenWrt, DD-Wrt, Tomato, Oleg czy dziesiątki tysięcy ich klonów, które jedyne co wniosły, to odbiły się w którymś momencie od głównej gałęzi kodu, wypuściły serię koszulek czy kubków z nazwą nowego projektu i zamarły...

Po krótkiej analizie zdecydowałem się na OpenWRT. Głównie z tej przyczyny, iż jest on ciągle rozwijany i niedawno wyszła nowa wersja (o kryptonimie BackFire 10.03). Ponadto posiada bardzo dużą ilość pakietów, które realizują w zasadzie wszystkie funkcjonalności, których wymagałem, a ilość pomocy i poradników na jego temat jest przeogromna.

A zatem po kolei:

  1. Zaznajamiamy się z tematem. Polecam poczytanie przewodników – jak wypalić, co i gdzie zmieniać, jak zachowywać się w przypadku błędów, czy jak dogrywać pakiety. Mnogość informacji znajduje się na stronie samego OpenWRT, jego polskim portalu oraz tego oto jednego zapaleńca z eko.one.pl.
  2. Kompilujemy! Nic bardziej mylnego! To jest największy złodziej czasu oraz sprawca zepsutego humoru! Niestety po instalacji Debiana na maszynie wirtualnej, zaaplikowaniu pakietów z narzędziami dla developera oraz ściągnięciu źródeł samego OpenWRT (z ich SVNa oraz później poprzez make download) i po 3-ch zmarnowanych wieczorach poddałem się. Za każdym razem coś się nie chciało skompilować. Ponadto budowanie równoległe (make –j3) dawało jeszcze bardziej dziwaczne błędy. W dodatku cały czas istnieje obawa, że nie mamy doświadczenia i, że czegoś zapomnimy dodać, marnując jeszcze więcej czasu przy konfiguracji. Dlatego też skierowałem się w inną stronę...
  3. Instalujemy gotowy plik obrazu firmware’u *.trx, który już ktoś dla nas przygotował. Tutaj kolejna uwaga: na pewno nie ten ze strony OpenWRT :) Powód jest prozaiczny – te obrazy nie zawierają standardowo wkompilowanego w kernel wsparcia do USB. Niby nic wielkiego, bo przecież można to później dograć. Jednak nie pozwoli to na wykonanie jednej sztuczki, zwiększającej pamięć, o której mowa w następnych punktach. Tutaj znajdziemy odpowiednio skompilowane wersje.
  4. Poprzez panel sterowania Windowsa 7 dodajemy sobie nową funkcję – program tftp.
  5. Wprowadzamy router Asusa w stan gotowości do wgrania firmware’u (trzymając wciśnięty przycisk reset przez 10sek zaraz po włożeniu kabla zasilającego).
  6. Ustawiamy ręcznie adres IP swojej karty sieciowej tak, aby widziała ona router (czyli 192.168.1.20/255.255.255.0; często też jeśli wcześniej zmieniliśmy adres podsieci wymagana może być zmiana ‘1’ na inną wartość)
  7. Wykonujemy polecenie:

    tftp –i 192.168.1.1 PUT openwrt-brcm47xx-squashfs.trx

    czekamy aż wszystko się wyśle, później router się uruchomi sam ponownie i aż będziemy się mogli zalogować poprzez usługę telnet.
  8. Wymieniona wersja nie posiada oczywiście żadnego interfejsu graficznego (czy też konfiguracji poprzez www), dlatego wszystko od tej pory wykonujemy na konsoli, edytując wartości w plikach konfiguracyjnych. Dodatkowymi atutami będą: znajomość poleceń systemu Linux oraz programów telnet, Putty.
  9. Po zalogowaniu zmieniamy hasło (poleceniem passwd) po czym logujemy się ponownie używając Putty.
  10. Teraz widząc, że nasz router ma tylko 32MB pamięci RAM  – rozszerzamy ją dodając pamięć wirtualną swap. Wszystko opisane jest bardzo przystępnie tutaj. Polega to głównie na sformatowaniu pendrive’a i podzieleniu go na dwie partycje: (1) pliku wymiany swap o pojemności 256MB oraz (2) danych.
  11. Teraz widzimy, że router ma nie więcej niż 4MB przestrzeni, na którą możemy coś wgrać. Jest to stanowczo za mało nawet na nasze pakiety (tj.: obsługę polskiego kodowania, moduły do Subversion, Pythona, Mercuriala, Sambę itp). Plus jest taki, że już mamy pendrive’a podpiętego do USB (koniecznie obsługa USB musi być wkompilowana w kernel – zachęcam do poczytania o partycji ‘overlay’ oraz jak działa system plików squashfs oraz jffs). Teraz też możemy pokazać mu, że można wykorzystać drugą partycję, aby to ona stała się ‘fizyczną’ pamięcią zapisywalną routera. Robimy zatem wszystko zgodnie z tym poradnikiem. Pamiętajmy jednak, że zmiana podstawowej partycji do zapisu danych spowoduje, że wszystkie ustawienia, które do tej pory zmieniliśmy na routerze zostaną zastąpione tymi, które są zapisane na pendrive’ie i jeśli był on pusty wcześniej tzn. że zostaną użyte domyślne i całą konfigurację trzeba przeprowadzić od nowa.
  12. Dwie ostatnie rady są o tyle dobre, że nie trzeba już nic robić, aby przekierowywać instalowane pakiety, czy w ogóle martwić się o miejsce na samą konfigurację routera. Wszystkie sztuczki z modyfikowaniem ‘destination’ dla opkg, czy dodawaniem nowych folderów do zmiennej środowiskowej $PATH idą do lamusa.
  13. Dodatkowo dodajemy i tak dysk na USB albo drugi pendrive, na którym będziemy przechowywać faktycznie pliki z danymi!

O samej konfiguracji serwisów wpis niebawem. Trzymam kciuki, że ten poradnik w takiej formie ocali komuś trochę czasu!



Jakiś czas temu awarii uległ mój router Asus WL-500gP. Sam moment zejścia trwał dość długo, bo około miesiąca i objawiał się dosyć dziwnie, w różnych etapach żywotności. Aż w końcu pewnego dnia, umarł, a później cudownie ożył! Ale po kolei.

Najpierw zastałem go resetującego się raz po raz. Było to o tyle ciekawe, iż na pierwszy rzut oka wpływ na to miało uruchamianie się WiFi. Zazwyczaj to po zapaleniu tej lampki następował restart. Dla tego routera dostępna jest cała gama nieoficjalnych firmwarów, więc pierwsze co w tym momencie przychodzi do głowy, to wgrać inny. W oryginalnym zapewne był błąd, który akurat mnie dopadł (po 2-ch latach użytkowania, ale zawsze). Spróbowałem openWRT i Oleg dla Asus WL-500gX. Router pochodził jeszcze tydzień i znów zaczął zachowywać się niestabilnie.

Tym razem objawy były dużo bardziej zaskakujące. Zaraz po podłączeniu do prądu zapalały się wszystkie lampki (all lights on) od tej z zasilaniem poprzez połączenia sieciowe (mimo, że kable nie były włożone) i WiFi. Dalej nie robiło się już nic. I tutaj się trochę poddałem, bo wszystko wskazywało na jakieś uszkodzenie sprzętowe. Po rozkręceniu obudowy, napięcia jakoś wyglądały, kondensatory się ładowały, zatem to musiała być pamięć FLASH, gdzie zapisany był bootloader lub sam firmware i nic nie jest uruchamiane, bo nic się nie da odczytać. Wszystko idzie w krzaki. W takim stanie router ten przeleżał dłuższy czas, aż w forum Asusa znalazłem potencjalną przyczynę mojego problemu – uszkodzony zasilacz!

Otóż oryginalny zasilacz (POWER SUPPLY UMEC UP0181B-05PE; +5V, 2.5A = 12.5W) ma tę własność, iż psuje się dobitnie tak, że daje podczas pracy zbyt niskie parametry prądu. To co jest najciekawsze to to, iż daje on w ogóle jakieś napięcie i natężenie, ale zbyt małe, aby pozwolić routerowi na poprawne uruchomienie. Wyjściem okazała się tutaj wymiana tego elementu, co kosztuje nieco ponad 20 PLN (wliczając dostawę do domu). Oprócz napięć, ważny jest typ końcówki, który w tym wypadku ma wymiary 2.1/5.5. Wiele innych modeli dLink oraz Linksys również używa tego zasilacza, dlatego jego zakup nie jest trudny.

Wszystko wróciło do porządku (i początku)!



VisualSVN oprócz wersji klienta SVN, od niedawna udostępnia również instalator, który pomaga w łatwy i przyjemny sposób udostępniać usługę SVN-serwer na własnych serwerach developerskich poprzez HTTP/HTTPS. Razem z binariami do zarządzania repozytorium, instalowany jest serwer Apache (lub to co jest z niego wymagane) oraz autorski panel administracyjny. Poprzez niego zakładane są repozytoria, przypisywane uprawnienia użytkowników oraz generowane (przypinane) certyfikaty SSL dla połączeń HTTPS.

To co ucieszyć może domorosłych programistów i administratorów to fakt, iż nawet darmowa wersja pozwala na wykorzystanie go w pracach nad komercyjnymi produktami. Dodatkowym atutem jest fakt, iż bardzo łatwo integruje się z domeną Active Diretory.