Raspberry Pi – Aplikacja z mechanizmem zabezpieczenia przed kopiowaniem na inne urządzenia

Kilka lat temu napisałem prostą aplikację w języku C, która miała być wykonywana na jednym urządzeniu. Aplikacja miała służyć do uruchamiania wyświetlania pliku AVI przez odtwarzacz Totem. Do kodu jako ciekawostkę dodałem funkcję która zawierała unikalny numer procesora ARM w celu zablokowania przed możliwością uruchomienia na innym urządzeniu. Zabezpieczenie jest bardzo skuteczne, ponieważ każdy procesor ARM wykorzystywany przez Raspberry Pi ma unikalny numer seryjny. Poniżej dla zainteresowanych zamieszczam kod aplikacji w języku C

#include <cstdlib>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <inttypes.h>
#include <unistd.h>
#include <stdio.h>
#include <termios.h>
#include <term.h>
#include <curses.h>
#include <unistd.h>
 
/* dane do zabezpieczenia na WZORZEC :-)
 
cat /proc/cpuinfo (w raspberry pi)
 
Serial : 000000000000000d //ZABEZPIECZENIE UNIKALNY SERIAL NUMBER PROCESORA TYPU ARM
 
cat /var/log/dmesg 
 
microcode: CPU0 sig=0x206a7, pf=0x1, revision=0x0
  
*/
 
using namespace std;
 
char *WZORZEC = "WYBRANY_CIAG_Z_PROC_CPUINFO_LUB_Z_VAR_DMESG";
char *WZORZEC2 = "WYBRANY_CIAG_Z_PROC_CPUINFO_LUB_Z_VAR_DMESG";
  
long int POZYCJA = 1;
   
void Przesun_o_1(char *s)
{
    char *pom = s;
  
    while ((*pom ++ = *(s + 1)) != '')
        s ++;
    POZYCJA ++;
}
 
 
 int cpuinfo(void){
    char wz[sizeof WZORZEC + 1];
    int a, c;
    FILE *fp = fopen("/proc/cpuinfo", "r");
  
    if (fp == NULL){
         
    }
    for (a = 0; a <= strlen(WZORZEC); a ++){
        c = getc(fp);
        if (c == EOF && a < strlen(WZORZEC))
        {
             
            fclose(fp);
            return (0);
        }
        wz[a] = c;
        wz[a + 1] = '';
    }
        int x1 = 0;
    do
    {
        if (!strcmp(wz, WZORZEC))
        {
             
                        x1 = 1;
        }
        else
        {
            Przesun_o_1(wz);
        }
    } while ((wz[strlen(WZORZEC) - 1] = getc(fp)) != EOF);
  
    if (fp) fclose(fp);
        if (x1 == 1){
            
            return(1);
        }
        if (x1 == 0){
            return (0);
        }
}
 
  int cpuinfo2(void){
    char wz[sizeof WZORZEC2 + 1];
    int a, c;
        
//W RAZIE POTRZEBY ZMIANA NA PLIK /var/log/dmesg
    FILE *fp = fopen("/proc/cpuinfo", "r");
  
    if (fp == NULL){
 
    }
    for (a = 0; a <= strlen(WZORZEC2); a ++){
        c = getc(fp);
        if (c == EOF && a < strlen(WZORZEC2))
        {
             
            fclose(fp);
            return (0);
        }
        wz[a] = c;
        wz[a + 1] = '';
    }
        int x1 = 0;
    do
    {
        if (!strcmp(wz, WZORZEC2))
        {
                        x1 = 1;
        }
        else
        {
            Przesun_o_1(wz);
        }
    } while ((wz[strlen(WZORZEC2) - 1] = getc(fp)) != EOF);
  
    if (fp) fclose(fp);
        if (x1 == 1){
            
            return(1);
        }
        if (x1 == 0){
            return (0);
        }
}
  
 
  
int main(int argc, char** argv) {
   int status = cpuinfo();
   int status2 = cpuinfo2();
   if ((status == 1) && (status2 == 1)){
          execl ("/bin/sh", "sh", "-c","totem /FILMY/film.avi","");
    }else{
       printf("Houston mamy problem :-) ...");
       return 0;
    }
}

Spraykatz – Pozyskiwanie uprawnień do kont użytkowników w Active Directory

Niedawno zapoznałem się z nowym narzędziem do pozyskania uprawnień użytkowników w sieciach Active Directory. Jest to właśnie wymieniony w tytule Spraykatz. Program jak nazwa wskazuje wykorzystuje popularnego mimikatz-a do dekodowania plików dump pozyskanych z zrzutów pamięci LSASS i w odróżnieniu od mimikatz-a pozwala na zdalne skanowanie hostów znajdujących wewnątrz domeny Active Directory. Wywoływany jest z poziomu konsoli w oparciu o następującą składnię:

./spraykatz.py -u ADLocalAdm -p PassSecret -t 192.168.1.0/24

Gdzie parametr -u oznacza login użytkownika domeny Active Directory o prawach administratora lokalnego komputera lub konto użytkownika Active Directory, które posiada członkostwo w lokalnej grupie administratorów, parametr -p jego hasło a -t jest to skrót od target o dotyczy pojedynczego IP lub zakresu adresów IP, które będą podlegać skanowaniu.

Strona autora https://github.com/aas-n/spraykatz