Działanie na określonym komputerze

0

Witam, chciałem zrobić logowanie przed uruchomieniem właściwej części mojego programu. Nie chcę jednak aby każdy mógł uruchomić kopię i dlatego wpadłem na pomysł aby znaleźć coś co dla każdego komputera jest unikalne i nie wiem po pierwsze co to może być, i tym bardziej jak połączyć to z moim programem. Proszę o jakieś pomysły i propozycje umieszczenia tego w moim logowaniu (może się ono odbywać od razu jeśli program wykryje tą unikalną cechę, a jeśli nie pokaże komunikat, który mówić będzie o tym, że programnie może być uruchomiony na tym komputerze).

0

http://stackoverflow.com/questions/4550672/delphi-get-mac-of-router - Tutaj sobie zobacz jak można MAC pobrać, powinno starczyć do twoich zastosowań.

0

Adres MAC można zmienić, bardziej unikalna rzeczą mógłby być identyfikator produktu systemu Windows - jest tylko jeden na komputer.

0

Adres MAC można zmienić, bardziej unikalna rzeczą mógłby być identyfikator produktu systemu Windows - jest tylko jeden na komputer.

Serial windowsa też można zmienić, zwłaszcza jeżeli mówimy o crackowanych windowsach. Jak ktoś chce to obejść to i tak to obejdzie.
Generalnie najlepiej jest to bazować na serialach dysków, MACach, informacjach o procesorze (tam też można pobrać serial) ale domyślam się że autor wątku nie ma pojęcia o asmie ani rejestrze więc o czym my w ogóle mówimy. :)

0

ja do tego bym dał uwierzytelnianie przez połączenie ze serverem np http i coś pobawić się z dynamicznym kluczem uwierzytelniania żeby było ciężko zrobić cracka ;]
ale do tego dochodzi php ew perl

0

coś pobawić się z dynamicznym kluczem uwierzytelniania żeby było ciężko zrobić cracka ;]

No jasne, bo zablokowanie połączenia i zmiana zachowania po błędzie jest super trudna do napisania. Kolega chyba cracków nie pisał :) .

ja do tego bym dał uwierzytelnianie przez połączenie ze serverem np http

Okej, i co ci to daje? Chodzi przecież o rozpoznanie komputera, a nie o ... ?!?!

Czytam twój post, czytam ponownie. Dla upewnienia się czytam jeszcze raz i ... ciągle nie widzę sensu. Ktoś pomoże?

Ja patrzę na autora i już przestaje się zastanawiać nad sensem bo jego jest brak. Taka specyfika tego autora.

@proqix: Chyba nie rozumiesz że chodzi o to jak rozpoznać to że program jest uruchamiany z danego komputera.

0

Proponuję ID płyty głównej, tego się chyba(?) nie da zmienić. Ewentualnie jeszcze nr seryjny dysku twardego i z tego wyciągnąć jakieś CRC np.

edit
Podaje link do strony z gotowym źródłem jakiegoś ID itp.
http://theroadtodelphi.wordpress.com/2010/12/02/generating-a-unique-hardware-id-using-delphi-and-the-wmi/

0

Proponuję ID płyty głównej

Wiesz jak to wyciągnąć? Bo każdy głupi umie powiedzieć co jest niezmienne w kompie, tylko trudniej jest powiedzieć jak to pobrać.

Ewentualnie jeszcze nr seryjny dysku twardego i z tego wyciągnąć jakieś CRC np.

Nie CRC tylko jakiś hash porządny np. SHA-256 z solą. Domyślam się że seriala dysku też nie umiesz pobrać... Ale jak autor wątku chce to mogę poszperać bo gdzieś to mam.

0

to po c**** dawać hasło itp. i tak crack zaraz wyjdzie... czyż nie ?
PS
nie ma neta nie ma korzystania z aplikacji proste i logiczne...

albo lepiej jebnij zabezpieczenia takie że sama analiza czy sprzęt się zgadza bedzie mieć 10 MB ?

0

to po c**** dawać hasło itp. i tak crack zaraz wyjdzie... czyż nie ?

Raczej: Jaki to ma związek z tematem.

nie ma neta nie ma korzystania z aplikacji proste i logiczne...

  1. Gratulacje że ograniczasz możliwość używania aplikacji legalnym użyszkodnikom! To takie logiczne, bo cracker i tak nie będzie musiał mieć neta...

albo lepiej jebnij zabezpieczenia takie że sama analiza czy sprzęt się zgadza bedzie mieć 10 MB ?

Właśnie się składa że piszę narzędzie do obfuskacji i po jego zastosowaniu rozmiar mojej DLLki wzrasta o pare kilobajtów (i jest wolniejsza o pare taktów maszynowych - wszystko w asmie). To jest straszna strata w porównaniu do twojego wymuszania połączenia z internetem.

@proqix, Nie widzę związku tego co piszesz z tematem więc bądź łaskaw skończyć/pisać ontopic. Thx

0

Chodzi mi bardziej trochę o gotowca. Takiego żebym mógł już stworzyć to zabezpieczenie i włączyć w programie.

0

Chodzi mi bardziej trochę o gotowca. Takiego żebym mógł już stworzyć to zabezpieczenie i włączyć w programie.

Patrz: Mój pierwszy post, tam dałem link do gotowca... widzę że nie łaska była przeczytać.

0

Wpadłem po pewnym czasie na taki pomysł

@echo off
@echo ------------------------------ >> ipconfig.txt
@echo %date% %time% >> ipconfig.txt
@echo ------------------------------ >> ipconfig.txt
ipconfig /all >> ipconfig.txt

To pisze się w jakim kolwiek edytorze tekstowym, np. notatnik i wyświetlają się nam informacje o wszelkich konfiguracjach systemu windows (w pliku tekstowym ipconfig.txt). Co zrobić żeby program rozpoznał jaka jest konfiguracja (konkretne jej linijki, bo ip się może zmieniać oczywiście, zobaczcie z resztą na waszych komputerach) i zalogował do następnej formy jeśli będą się zgadzać. Aha. Nie chcę żeby to się zapisało w notatniku i żeby każdy to mógł w nim zmienić, więc ta ostatnia linijka

ipconfig /all >> ipconfig.txt

jest tylko dla was żebyście to sprawdzili.

0

Twój pomysł nie jest głupi, ale mało praktyczny; W tym wypadku:

@echo off
@echo ------------------------------ >> ipconfig.txt
@echo %date% %time% >> ipconfig.txt
@echo ------------------------------ >> ipconfig.txt
ipconfig /all >> ipconfig.txt

posługujesz się zwykłym bat'em, który nie dość, że bardzo łatwo można zmodyfikować, to jeszcze ma małe zastosowanie w tym wypadku; Istnieje wiele kodów (w sieci) do pobierania adresów IP, MAC itd., więc nie ma sensu dokładać sobie roboty; Jeżeli przekierujesz strumień do pliku, będziesz musiał napisać mały parser, który z takiego pliku wyciągnie potrzebne informacje, po czym wsadzi je w zmienne, a sam plik usunie; Trochę to więcej roboty, niż pogrzebanie w sieci i sprawdzenie krótkich kodów napisanych najprawdopodobniej w WinAPI;


Na zachęte - krótki kod pobierający MAC adres karty sieicowej:

function GetMACAdress: string;
var
  NCB: PNCB;
  Adapter: PAdapterStatus;

  URetCode: PChar;
  RetCode: char;
  I: integer;
  Lenum: PlanaEnum;
  _SystemID: string;
  TMPSTR: string;
begin
  Result    := '';
  _SystemID := '';
  Getmem(NCB, SizeOf(TNCB));
  Fillchar(NCB^, SizeOf(TNCB), 0);

  Getmem(Lenum, SizeOf(TLanaEnum));
  Fillchar(Lenum^, SizeOf(TLanaEnum), 0);

  Getmem(Adapter, SizeOf(TAdapterStatus));
  Fillchar(Adapter^, SizeOf(TAdapterStatus), 0);

  Lenum.Length    := chr(0);
  NCB.ncb_command := chr(NCBENUM);
  NCB.ncb_buffer  := Pointer(Lenum);
  NCB.ncb_length  := SizeOf(Lenum);
  RetCode         := Netbios(NCB);

  i := 0;
  repeat
    Fillchar(NCB^, SizeOf(TNCB), 0);
    Ncb.ncb_command  := chr(NCBRESET);
    Ncb.ncb_lana_num := lenum.lana[I];
    RetCode          := Netbios(Ncb);

    Fillchar(NCB^, SizeOf(TNCB), 0);
    Ncb.ncb_command  := chr(NCBASTAT);
    Ncb.ncb_lana_num := lenum.lana[I];
    // Must be 16
    Ncb.ncb_callname := '*               ';

    Ncb.ncb_buffer := Pointer(Adapter);

    Ncb.ncb_length := SizeOf(TAdapterStatus);
    RetCode        := Netbios(Ncb);
    //---- calc _systemId from mac-address[2-5] XOR mac-address[1]...
    if (RetCode = chr(0)) or (RetCode = chr(6)) then
    begin
      _SystemId := IntToHex(Ord(Adapter.adapter_address[0]), 2) + '-' +
        IntToHex(Ord(Adapter.adapter_address[1]), 2) + '-' +
        IntToHex(Ord(Adapter.adapter_address[2]), 2) + '-' +
        IntToHex(Ord(Adapter.adapter_address[3]), 2) + '-' +
        IntToHex(Ord(Adapter.adapter_address[4]), 2) + '-' +
        IntToHex(Ord(Adapter.adapter_address[5]), 2);
    end;
    Inc(i);
  until (I >= Ord(Lenum.Length)) or (_SystemID <> '00-00-00-00-00-00');
  FreeMem(NCB);
  FreeMem(Adapter);
  FreeMem(Lenum);
  GetMacAdress := _SystemID;
end;
0

Może ktoś mi na koniec wytłumaczyć jak zrobić żebym gdzieś w programie napisał jaki ma być MAC na tym komputerze, (a właściwie na kilku żeby korzystać z programu mogło wiele osób) i jeśli program wykryje dzięki kodowi pobierającemu MAC (podanemu powyżej) z komputera otworzył kolejną formę programu?
Proszę o pomoc.

0
klebor98 napisał(a)

jak zrobić żebym gdzieś w programie napisał jaki ma być MAC na tym komputerze

A skąd My mamy wiedzieć, w jaki sposób i gdzie chcesz przechowywać informacje o tym, jaki MAC adres ma być prawidłowy? Jak widać w dolnej części podanego przeze mnie algorytmu widać wyraźnie, że rezultatem funkcji jest łańcuch (prościej po prostu zobaczyć na pierwszą linię definicji funkcji), stąd można wywnioskować, że jeśli masz gdzieś zapisany poprawny MAC adres to wystarczy te dwa łańcuchy sprawdzić odpowiednią funkcją (np. CompareText) czy są takie same; Jeśli tak - aplikacja została uruchomiona na właściwej maszynie, jeśli nie - to pirat; Zauważ jeszcze to, że formatowanie adresu MAC powinno być takie same w obu łańcuchach (czyli XX-XX-XX-XX-XX-XX); Jeśli będą różne - funkcja zawsze będzie kłamać (zwracać wartość różną od 0);

No i jeśli w pewnym miejscu w programie sprawdzisz to to będziesz wiedział co dalej robić; Jeśli adresy są takie same - wyświetlasz kolejny formularz (czy co tam innego chcesz), a jeśli nie to informację stopującą;

To, w jakim miejscu i w którym momencie odbędzie się sprawdzanie poprawności adresów MAC zależy jedynie od Ciebie i Twojego projektu, bo nikt z Nas nie ma zielonego pojęcie co, gdzie i kiedy chcesz wykonać w programie;

Jeżeli masz problem z tworzeniem formularzy i innymi tego typu rzeczami to proponuję zapoznać się z kursem programowania w delphi, bo wygląda na to, że masz problemy nie dlatego, że masz gdzieś bug'a i nie możesz go zlokalizować, tylko nie masz wystarczającej wiedzy z podstaw by to zrobić; Jeśli tak jest to odsyłam do działu poświęconemu programowaniu w delphi, a mianowicie Kompendium Programisty - Delphi;

0

Jakiś czas temu natknąłem się na to: Jak odczytać numer seryjny dysku
Chyba nawet kiedyś użyłem tego w jakimś programie. Może okaże się pomocne.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.