Sprzętowy identyfikator w C#

Sprzętowy identyfikator komputera

Krótki snippet w C# dla .NET 4 (jak skorygowali mnie koledzy, zadziała także od .NET 2) pobierający sprzętowy identyfikator maszyny, wykorzystując interfejs WMI, podobne algorytmy stosowane są w aplikacjach, których klucze licencyjne przypisywane są do jednego komputera

using System.Management;
using System.Security.Cryptography;

/// 
/// pobiera sprzętowy identyfikator maszyny korzystając z interfejsu WMI
/// 
/// identyfikator sprzętowy w formie hasha SHA1
public static String hardwareId()
{
    // tymczasowy string
    String tempString = "";

    // "baza danych", z której pobieramy informacje o systemie
    String wmiScope = @"root\CIMV2";

    // tabela zapytań WMI i pobieranych elementów
    String[,] wmiQueries = new String[,]
    {
        { "SELECT ProcessorId FROM Win32_Processor", "ProcessorId" },
        { "SELECT Caption FROM Win32_Processor", "Caption" },
        { "SELECT Manufacturer FROM Win32_Processor", "Manufacturer" },
        { "SELECT Caption FROM Win32_BIOS", "Caption" }
    };

    // wywołujemy kolejne zapytania WMI
    for (int i = 0; i < wmiQueries.GetLength(0); i++)
    {
        try
        {
            // wykonaj zapytanie WMI
            ManagementObjectSearcher searcher = new ManagementObjectSearcher(wmiScope, wmiQueries[i, 0]);

            // zbuduj string z kolejnymi elementami odpowiedzi po zapytaniach WMI
            foreach (ManagementObject obj in searcher.Get())
            {
                tempString += obj[wmiQueries[i, 1]].ToString();
            }
        }
        catch (ManagementException exception)
        {
            // loguj błąd odczytu danych z WMI
        }
    }

    // generuj hash SHA1 ze wszystkich zebranych danych WMI
    SHA1 hash = SHA1CryptoServiceProvider.Create();

    // ciąg znaków zamień na tablicę bajtów
    byte[] plainTextBytes = Encoding.ASCII.GetBytes(tempString);

    // oblicz hash SHA1
    byte[] hashBytes = hash.ComputeHash(plainTextBytes);

    // konwertuj hash SHA1 na postać tekstową (i usuń zbędne znaki "-")
    tempString = BitConverter.ToString(hashBytes).Replace("-", "");

    return tempString;
}

Więcej o WMI na CodeProject:
http://www.codeproject.com/KB/system/WQLByExample.aspx

Praca w ArcaBit

ArcaBit to polski producent oprogramowania antywirusowego ArcaVir, wywodzący się z MksVir-a. Całą smutną historię rozdzielenia się części pracowników i utworzenia ArcaVir oraz o późniejszych wielu sporach moża przeczytać na forach obu firm oraz na portalu DobreProgramy.pl.

Dzisiaj ciekawe opinie o pracy w tej firmie znalazłem na forum 4programmers, a docelowo znajdują się na portalu o pracy GoWork, jeden z ciekawszych cytatów:

Właściciele mają samochody za kilkaset tysięcy [każdy] a w biurze nie ma nawet sprzątaczki.
Jest biuro na parterze i tam ludzie mają grafik, kto i kiedy sprząta [myje podłogi, odkurza i czyści kible – tak kible]. Biuro na piętrze jest sprzątane przez Panią W. [odkurzanie, mucie naczyń, kurze i kible]. Warto nadmienić że Pani W. jest szefową biura a mimo wszystko w godzinach pracy w elegandzkim stroju – sprząta.
Najlepsza było przyjęcie wigilijne – było owszem ciasto i Cola i ….. no niestety nic więcej nie było.
Okropne dziadostwo

Oryginalny wpis:

http://www.gowork.pl/opinie_czytaj2,33733,0,0

PS.
Dzisiaj wyszedł news o upadłości firmy MKS, R.I.P gorszego dziadostwa antywirusowego nie widziałem, jeszcze w czasach wersji DOS-owej skasował mi połowę exeków z dysku, a w czasach Windowsa nie chcieli ze mną nawet rozmawiać o false-positivach w moich pierwszych exe-pakerach.

Exe protector za 50 PLN

Czasami dostaje różne propozycje współpracy czy napisania jakiegoś programu, jednak głupota niektórych ludzi jest aż zabawna (przykro to stwierdzić, ale rodacy przodują w tego typu rzeczach), niedawno otrzymałem intratną propozycję stworzenia prostego exe-protectora w assemblerze, z komentarzami etc., do pracy inżynierskiej dla jednego czuczona.

Jako, że nie chciało mu się szukać niczego w sieci, zaproponowałem mu 400 PLN, gdyż taki prosty template posiadam w swojej kolekcji, jest przetestowany, sprawny, kompatybilny i oto jak potoczyła się dalsza dyskusja:

Czuczon: Ty mi proponowałeś protektor za 400zł
Czuczon: kolega mi proponuje za 50zł

Czuczon: ile byś za to chciał? z przekazaniem praw autorskich, zebym to mogl uzyc jako pracy inżynierskiej
Ja: 400 PLN
Czuczon: przesadzasz z tą ceną
Ja: to napisz sam
Ja: to proste
Czuczon: kolega mi dał źródła protektora co szyfruje AES’em, ale to za trudne do ogarnięcia, nie rozumiem tego kodu :/
Czuczon: a wiesz może jak trzeba przerobić kod, żeby nie był plagiatem?
Ja: wiem
Ja: trzeba go solidnie pozmieniac na tak samo dzialajace instrukcje i funkcje
Czuczon: czyli np. przepisanie go na inny język programowania wystarczy?
Czuczon: mówie o C++ -> Asm
Ja: no jak ci sie uda
Czuczon: troche problem bo na klasach pisany, prawie 100% obiektowo

Dyskusja na tym się zakończyła, gdyż nie byłem w stanie zaproponować bardziej konkurencyjnej ceny do 50 PLN :). Tak szczerze mówiąc to nie wiem co tacy ludzie myślą, że takie rzeczy na drzewie rosną i że to pisze się z buta i jeszcze ma wszystko działać, a nie zdają sobie sprawy ile wiedzy w to zostało włożone, czasu na napisanie, na przetestowanie na różnych OS-ach, nawet takiego głupiego exe-protectora doh!

Jeśli mieliście podobne przypadki równie intratnych zleceń, napiszcie w komentach, pośmiejemy się razem 🙂

Narzędzia do analizy aplikacji .NET

Analiza aplikacji .NET

Zestaw narzędzi do analizy .NET-owych aplikacji znacznie różni się od klasycznych narzędzi dla zwykłych aplikacji x86 / x64, odmienna architektura kodu wymusiła utworzenie całej gamy dedykowanych narzędzi dla plików wykonywalnych .NET, spróbuję przedstawić kilka z nich, które mogą się przydać w reversingu.

Dekompilacja kodu

Pierwszym i podstawowym narzędziem, które chyba zna większość osób zajmujących się analizą oprogramowania i nie tylko jest dekompilator .NET Reflector.

.NET Reflector

.NET Reflector

Pozwala on na dekompilację plików wykonywalnych z formatu kodu przejściowego CIL (Common Intermediate Language) do kodu wysokiego poziomu w wybranym lub ulubionym przez nas języku np. C#, VB# etc.

Jest to najbardziej znany dekompilator i nie tylko, gdyż dzięki całej masie wtyczek umożliwia np. modyfikację plików binarnych (wtyczka Reflexil), debugowanie aplikacji (wtyczka Deblector) i wiele innych czynności związanych z analizą kodu.

Ostatnio .NET Reflector stracił na popularności, gdyż projekt od początku istnienia był darmowy, jednak po przejęciu go przez firmę Red Gate Software (notabene twórców obfuscatora SmartAssembly, z czego można wysnuć teorię spiskową, że chcieli ograniczyć dostęp do jednego z najpopularniejszych narzędzi do analizy aplikacji) i początkowych zapewnień o utrzymaniu jego darmowego statusu, po jakimś czasie został przekształcony w komercyjną wersję, z najtańszą licencją za 35 USD. W Internecie można jednak znaleźć złamane kopie jak również całkowicie zrekompilowane (wraz ze źródłami), bardziej odporne na narzędzia zabezpieczające.

Strona domowa — www.reflector.net

Lista wtyczek  — http://reflectoraddins.codeplex.com/

Telerik JustDecompile

Darmowy dekompilator firmy Telerik, raczej dla niewymagających użytkowników, ponieważ liczba dostępnych opcji (lub ich brak) nie powala na kolana, nie można nawet przejrzeć kodu w postaci IL, nie mówiąć o innych rzeczach, jest tu tylko dekompilator i wyszukiwarka referencji.

Strona domowa — www.telerik.com/products/decompiler.aspx

IL DASM

Warto wspomnieć również o tym narzędziu, chociaż z mojego doświadczenia wynika, że jest ono raczej mało używane, to deasembler dla .NET-owych binariów firmy Microsoft dołączany do SDK .NET-a oraz dostarczany wraz z Visual Studio.

Pozwala on na przeglądanie struktury pliku oraz deasembling do kodu przejściowego w związku z czym nie jest tak poręczny w analizie jak .NET Reflector.

IL DASM

Simple Assembly Explorer

Jest to kolejny deasembler i edytor jednak już bardziej zaawansowany od IL DASM-a, posiadający masę opcji, pozwalających na łatwą modyfikację kodu IL, kopiowanie instrukcji, wycinanie, wszystko bardzo poręcznie skonstruowane, od jakiegoś czasu jest to mój faworyt jeśli chodzi o modyfikację .NET-owych plików binarnych.

Simple Assembly Explorer

SAE posiada system wtyczek oraz wbudowany deobfuscator, który może przydać się w analizie zabezpieczonych aplikacji.

Simple Assembly Explorer Deobfuscator

Jeśli chcesz nauczyć się podstaw programowania w IL, zmodyfikować szybko i sprawnie binaria to jest to idealne narzędzie.

Strona domowa — http://code.google.com/p/simple-assembly-explorer/

Dis#

Dis# to stosunkowo mało znany dekompilator, być może ze względu na to, że to komercyjne narzędzie, projekt dawno nie był aktualizowany, ale może być traktowany jako ciekawostka, gdyż posiada kilka interesujących cech jak wbudowany deobfuscator, edytor kodu pozwalający w prosty sposób zamieniać nazwy funkcji, zmiennych etc.

Dekompilator Dis#

Strona domowa — http://netdecompiler.com

Debuggery

Z moich obserwacji i doświadczeń wynika, że większość analiz związanych z .NET da się rozwiązać statycznie (w przeciwieństwie do natywnych aplikacji), jednak i tutaj może przydać się prześledzenie wykonywanego kodu.

Dotnet IL Editor (DILE)

Dile to prosty w obsłudze debugger dla .NET-owych aplikacji, troszkę przypomina debugger z Visual Studio.

DILE

Strona domowa http://sourceforge.net/projects/dile/

Identyfikatory

Dla aplikacji natywnych podstawowym identyfikatorem jest PEiD oraz częściej uaktualniany Protection ID (oraz kilka innych), dla .NET powstał odpowiednik PEiD o nazwie DNiD.

Identyfikator DNiD

Wykrywa on obecnie większość stosowanych zabezpieczeń stosowanych dla aplikacji .NET-owych. Do ściągnięcia lokalna kopia  — DNiD.v0.11-Rue.rar (384 kB)

Dumpery

Aplikacje .NET-owe obecnie rzadko rozprowadzane są w czystej formie po kompilacji, gdyż dzięki narzędziom takim jak .NET Reflector jest to praktyczne równoznaczne z rozprowadzaniem open source i większości wypadków do zabezpieczania używane są obfuscatory.

Część obfuscatorów oprócz modyfikacji kodu IL, całość aplikacji „opakowuje” w kod ładujący (z ang. loader) w formacie natywnym (x86), który zwykle deszyfruje całe .NET-owe assembly i dopiero w odszyfrowanej formie ładuje je do pamięci.

Taka forma zabezpieczenia nie pozwala na używanie narzędzi .NET-owych i wymagane jest najpierw zrzucenie z pamięci załadowanych assembly .NET-owych w celu dalszej analizy.

.NET Generic Unpacker

Projekt autorstwa Daniela Pistelli (obecnie pracujący nad IDA w HexRays), generyczny jak nazwa wskazuje dumper, który potrafi wykryć w pamięci obraz pliku wykonywalnego .NET mimo zewnętrznego natywnego loadera.

.NET Generic Unpacker

Strona domowa —  http://www.ntcore.com/netunpack.php

DotNetDumper

Prosty w użyciu dumper, który również posiada obsługę zrzucania z pamięci plików kilku rodzajów zabezpieczeń, generalnie z tymi dwoma dumperami można sobie poradzić z większością zabezpieczeń natywnych.

DotNet Dumper

Do ściągnięcia lokalna kopia  — DotnetDumper.zip (66 kB)

Oprócz dedykowanych dumperów, równie dobrze działają klasyczne metody przeszukiwania pamięci np. w OllyDbg w poszukiwaniu sygnatur .NET-owych aplikacji (np. stringów „_CorExeMain”).

Fixery

Po zrzuceniu z pamięci obrazu pliku .NET jest on często niezdatny do analizy w narzędziach takich jak .NET Reflector, wynika to ze zmian jakie wprowadzają najczęściej obfuscatory, aby dodatkowo utrudnić analizę. Tak zrzucone obrazy plików należy naprawić.

Universal Fixer

Universal Fixer

Do ściągnięcia lokalna kopia  — Universal_Fixer.zip (31 kB)

Zawsze aktualna kopia — http://forum.tuts4you.com/topic/25376-universal-fixer/

Deobfuscatory

Liczba obfuscatorów dostępnych na rynku jest ogromna, mogę śmiało powiedzieć, że przebija ilość dostępnych narzędzi zabezpieczających dla natywnych aplikacji. W związku z tak zmasowanym atakiem, powstały deobfuscatory dla wielu narzędzi, często zintegrowane i obsługujące wiele rodzajów zabezpieczeń.

de4dot

de4dot to aktywnie rozwijany deobfuscator obsługujący sporą listę zabezpieczeń, podstawa jeśli ktoś myśli poważnie o analizie oprogramowania .NET

Deobfuscator de4dot

Do ściągnięcia ze strony —  https://github.com/0xd4d/de4dot/downloads

Podsumowanie

Obecny stan zabezpieczeń .NET-owych może z początku przerazić i zniechęcić do dalszej analizy, ale jak widać istnieje wiele narzędzi, które potrafią ułatwić nam życie.

Celowo nie opisywałem tutaj gotowych unpakerów, które można z łatwością znaleźć samemu, gdyż nie zawsze sprawdzają się w działaniu i warto wtedy wiedzieć jak sobie poradzić bez ich pomocy.

Jeśli natknę się na jakieś ciekawe narzędzie to dopiszę je do artykułu, a jeśli wy znacie coś interesującego do analizy aplikacji .NET — opiszcie w komentarzach, a ja to przejrzę i z chęcią dodam opis do artykułu.

Na koniec jeszcze kilka linków, gdzie można znaleźć narzędzia do analizy .NET-owych aplikacji:

BlackStorm — http://portal.b-at-s.net/download.php?list.9

RCE Tool Library — http://www.woodmann.com/collaborative/tools/index.php/Category:.NET_Tools

Delma EXTRA z masłem

Delma EXTRA z masłem

Nic bardziej mnie nie denerwuje jak jawnie wciskana ciemnota o czym miałem okazję się przekonać, gdy znajomy podrzucił mi margarynę Delma EXTRA z masłem, nie jestem fanem margaryn (ciekawy artykuł o ich szkodliwości), no ale, że akurat nie miałem nic innego pod ręką, byłem szczęśliwy nawet z tego, zwłaszcza, że jak było napisane na opakowaniu – margaryna była z masłem.

Delma extra z masłem

Ilość masła w Delmie EXTRA z masłem

Słowo „z masłem” bije aż po oczach, w swojej naiwności byłem przekonany, że jest tam conajmniej 50% margaryny i 50% masła – o ja głupi! Z ciekawości spojrzałem na skład i śmiać mi się zachciało:

Delma extra z masłem skład

Zbliżenie na skład:

Delma extra z masłem

Czyli mówiąc krótko – Delma EXTRA z masłem zawiera JEDYNIE 0,5% masła! Czyli na 500g margaryny, otrzymujemy 2,5g masła, ile to jest? Mała łyżeczka, chyba nawet mniej!

To jawne naśmiewanie się z konsumenta i wykorzystywanie faktu, że większość ludzi nie zwraca uwagi na detale z tyłu opakowania, ale zapewne producent, firma Unilever Polska ma to głęboko gdzieś i tylko liczy zyski z naiwnych kosumentów

Następnym razem kupując ich produkty sprawdźcie czy również i inne margaryny np. z oliwą, zawierają tak samo dużo oliwy, bo wprawdzie może okazać się, że jest, ale zaledwie kropla…

PS. Jeśli ilość masła w Delmie miałaby odwzorowanie w napisie na opakowaniu, to powinno ono wyglądać tak:

Delma extra z masłem

Niestety przy takich proporcjach, wyraz „masło” jest zbyt mały, żeby dojrzeć go gołym okiem, ale dopiero wtedy byłoby to uczciwe wobec konsumentów.

Powiązany news – Wykop

Jeszcze ciekawy komentarz z Wykopu:

„Na blogu tagi: assembler, crackme, debugger, malware, engineering, reversing… a artykuł o margarynie ;).” – krejd

Ja też czasami coś jem 🙂

Rozwiązania konkursu Pimp My Crackme

Zgodnie z obietnicą, trochę spóźnioną, ale zawsze, publikuję opisy i rozwiązania wszystkich CrackMe z konkursu Pimp My Crackme.

SecurityNews – Pimp My Crackme (Solutions + Sources).zip

W międzyczasie powstało rozwiązanie oraz częściowy opis mechanizmu CrackMe j00ru na jego blogu.

Pozostałe CrackMe nie zostały od czasu ich opublikowania rozwiązane.