Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Logowanie z licencją AutoIT


Rekomendowane odpowiedzi

Opublikowano

Witam. Mam program i chciałbym go sprzedawać z miesięczną licencją. Wyglądało by to tak, że ktos kupuje program i dostaje login i hasło które daje mu dostęp do programu na miesiąc a po miesiącu musi kupić od nowa. Ale chciałbym żeby to było tak że nawet jak ktos mi zdekompiluje program to nie ciekną dane. Ma ktos jakies pomysły?

Opublikowano

Możesz użyć coś w tym stylu:

GENERATOR KODU:

;GENERATOR KODÓW

#include <Crypt.au3>
#include <GUIConstantsEx.au3>

GUICreate("GENERATOR KODU")

$hDate = GUICtrlCreateInput("", 100, 5, 200, 20)
GUICtrlCreateLabel("Data ważności:",10, 5)
$hLogin = GUICtrlCreateInput("", 100, 35, 200, 20)
GUICtrlCreateLabel("Login:",10, 35)
$hBtn = GUICtrlCreateButton("Ok", 100, 75, 60, 20)
GUISetState()


Do
   $msg = GUIGetMsg()
   Sleep(25)
Until $msg=$GUI_EVENT_CLOSE Or $msg=$hBtn

$sDate = "#" & GUICtrlRead($hDate) & "#"
If StringRegExp($sDate, "^#[0-3][0-9][0-1][0-9]20[0-9][0-9]#$") Then  ;sprawdzenie poprawności danych
   $sLogin ="Dodatkowy kodzik" & GUICtrlRead($hLogin)      ;dodatkowy kod celem utrudnienia złamania
   _Crypt_Startup()
   $bEnCrypt = _Crypt_EncryptData($sDate, $sLogin, $CALG_DES)
   $sKod = Hex($bEnCrypt)
   ConsoleWrite($sKod & @LF)
Else
   MsgBox(16, "Szyfrowanie:", "Błęd daty")
EndIf

DESZYFRATOR DANYCH:

;DESZYFRATOR KODU

#include <Crypt.au3>
#include <GUIConstantsEx.au3>

GUICreate("DESZYFRATOR")
$hKod = GUICtrlCreateInput("", 100, 5, 200, 20)
GUICtrlCreateLabel("Kod:",10, 5)
$hLogin = GUICtrlCreateInput("", 100, 35, 200, 20)
GUICtrlCreateLabel("Login:",10, 35)
$hBtn = GUICtrlCreateButton("Ok", 100, 75, 60, 20)
GUISetState()

Do
   $msg = GUIGetMsg()
   Sleep(25)
Until $msg=$GUI_EVENT_CLOSE Or $msg=$hBtn

$bKod = Binary("0x" & GUICtrlRead($hKod))
$sLogin = "Dodatkowy kodzik" & GUICtrlRead($hLogin) ;dodatkowy kod celem utrudnienia złamania
_Crypt_Startup()
$bDeCrypt = _Crypt_DecryptData($bKod, $sLogin, $CALG_DES)

$sDate = BinaryToString($bDeCrypt)

If StringRegExp($sDate, "^#[0-3][0-9][0-1][0-9]20[0-9][0-9]#$") Then    ;sprawdzenie poprawności danych
   $sDate = StringMid($sDate, 2, 8)
   MsgBox(64, "Deszyfracja:", $sDate)
Else
   MsgBox(16, "Deszyfracja:", "Błędny kod lub login")
EndIf

Po zdekodowaniu musi wyjść #, osiem cyfr (z dodatkowymi ograniczeniami) i znowu #. Szansa na przypadkowe wystąpienie takiego układu po wpisaniu błędnego kodu lub loginu jest minimalna.

Zdekodowany kod jest datą ważności programu. Na wejściu programu sprawdzasz czy nie minęła już data ważności licencji.

Generator musi być pilnie strzeżony. Dodatkowo kod programu musisz potraktować jakimś obfuskatorem, aby maksymalnie utrudnić dekompilację i analizę kodu.

Jak coś niejasne, to pytaj.

Opublikowano

Ok dzięki. Teraz tak. użyłem generatora kodów i dostałem jakiś długi kod np 391404642CF30B99E411AB3A1D21FD15 i sobie go wpisałem do deszyfratora i wyszła mi data jaką wpisałem w generatorze. To znaczy, że ja komuś kto kupił program mam dać login i ten długi kod czy login i kod z deszyfratora. Po drugie jak mam zaaplikować ten cały schemat do mojego programu z kąd mój program będzie wiedział, że ten kod to kod z generatora. Prosiłbym o jakąś instrukcję. Dzięki bardzo mi pomogłeś.

Opublikowano

Myślałem, że dasz sobie już radę, ale jak nie to rozbudowałem nieco kod, aby był w pełni funkcjonalny.

Do generatora dodałem tylko etykietkę z opisem formatu daty i możliwość wpisywania daty z separatorami (np. 29-04-2017. Separator może być dowolny, bo do tworzenia kodu wszystkie znaki nie będące cyframi są ignorowane.

;GENERATOR KODÓW

#include <Crypt.au3>
#include <GUIConstantsEx.au3>

$sDodatkowyKodSzyfrujacy = "Dodatkowy kodzik"

GUICreate("GENERATOR KODU")
$hDate = GUICtrlCreateInput("", 100, 5, 200, 20)
GUICtrlCreateLabel("Data ważności:" & @LF & "DDMMRRRR",10, 5)
$hLogin = GUICtrlCreateInput("", 100, 35, 200, 20)
GUICtrlCreateLabel("Login:",10, 35)
$hBtn = GUICtrlCreateButton("Ok", 100, 75, 60, 20)
GUISetState()

Do
   $msg = GUIGetMsg()
   Sleep(25)
Until $msg=$GUI_EVENT_CLOSE Or $msg=$hBtn

$sDate = "#" & StringRegExpReplace(GUICtrlRead($hDate), "[^0-9]", "") & "#"
If StringRegExp($sDate, "^#[0-3][0-9][0-1][0-9]20[0-9][0-9]#$") Then  ;sprawdzenie poprawności danych
   $sLogin = $sDodatkowyKodSzyfrujacy & GUICtrlRead($hLogin)      ;dodatkowy kod celem utrudnienia złamania
   _Crypt_Startup()
   $bEnCrypt = _Crypt_EncryptData($sDate, $sLogin, $CALG_DES)
   $sKod = Hex($bEnCrypt)
   ConsoleWrite($sKod & @LF)
Else
   MsgBox(16, "Szyfrowanie:", "Błąd daty")
EndIf

Więcej dopisałem w deszyfratorze:

1. Zapis i odczyt danych logowania w pliku INI. Dzięki czemu kod i login trzeba wpisywać tylko raz (o ile nie uległ zmianie).

2. Sprawdzenie, czy licencja jest ważna ze względu na aktualną datę.

3. Komunikat o poprawności logowania z wyświetleniem daty ważności licencji.

;DESZYFRATOR KODU

#include <Crypt.au3>
#include <GUIConstantsEx.au3>

$sDodatkowyKodSzyfrujacy = "Dodatkowy kodzik"  ;dodatkowy kod celem utrudnienia złamania

;odczyt kodu i loginu z pliku
$sCode  = IniRead ("licence.ini", "LICENCJA", "code", "" )
$sLogin = IniRead ("licence.ini", "LICENCJA", "login", "" )

GUICreate("DESZYFRATOR")
$hKod = GUICtrlCreateInput($sCode, 100, 5, 210, 20)
GUICtrlCreateLabel("Kod:",10, 5)
$hLogin = GUICtrlCreateInput($sLogin, 100, 35, 210, 20)
GUICtrlCreateLabel("Login:",10, 35)
$hBtn = GUICtrlCreateButton("Ok", 100, 75, 60, 20)
GUISetState()

Do
   $msg = GUIGetMsg()
   Sleep(25)
Until $msg=$GUI_EVENT_CLOSE Or $msg=$hBtn

;zapis kodu i loginu do pliku
IniWrite("licence.ini", "LICENCJA", "code", GUICtrlRead($hKod))
IniWrite("licence.ini", "LICENCJA", "login", GUICtrlRead($hLogin))

$bKod = Binary("0x" & GUICtrlRead($hKod))
$sLogin = $sDodatkowyKodSzyfrujacy & GUICtrlRead($hLogin)
_Crypt_Startup()
$bDeCrypt = _Crypt_DecryptData($bKod, $sLogin, $CALG_DES)

$sDate = BinaryToString($bDeCrypt)

If StringRegExp($sDate, "^#[0-3][0-9][0-1][0-9]20[0-9][0-9]#$") Then    ;sprawdzenie poprawności danych
   $iDateLimit = Number(StringMid($sDate, 6, 4) & StringMid($sDate, 4, 2) & StringMid($sDate, 2, 2))
   $iDateActual = Number(@ & @ & @MDAY)
   If $iDateActual>$iDateLimit Then
      MsgBox(16, "Deszyfracja:", "Data ważności licencji minęła")
      Exit
   EndIf
Else
   MsgBox(16, "Deszyfracja:", "Błędny kod lub login")
   Exit
EndIf

MsgBox(64, "Deszyfracja:", "KOD PRAWIDŁOWY" & @LF & _
           "Data ważności: " & StringMid($sDate, 2, 2) & "-" & StringMid($sDate, 4, 2) & "-" & StringMid($sDate, 6, 4), 3)

;Dalsza
;
;część
;
;programu

Masz już gotowca i musisz tylko dopisać właściwą część programu.

Uwaga, na początku kodu masz $sDodatkowyKodSzyfrujacy = "Dodatkowy kodzik" - jest to dodatkowy kod szyfrujący utrudniający ewentualne złamanie kodu.

Możesz zamiast "Dodatkowy kodzik" wstawić swój, ale koniecznie jednakowy (!) w generatorze i deszyfratorze.

A teraz jak to działa i co należy robić aby udzielić licencji:

1. Na podstawie podanego przez licencjobiorcę loginu i daty ważności licencji generujesz kod, który mu zwracasz razem z loginem. Przed wydaniem dobrze jest sprawdzić na swojej kopi programu, czy wszystko jest w porządku.

Uwaga generator musi być pilnie strzeżony! Utrata generatora, to utrata panowania nad programem.

2. Licencjobiorca wpisuje do okna logowania otrzymany od ciebie kod i login.

3. Program rozkodowuje kod i sprawdza czy to co otrzymał po dekodowaniu ma właściwy format daty.

4. Program sprawdza czy data nie jest już przedawniona, jeżeli tak to wyświetla komunikat i kończy działanie. Jeżeli data nie jest przedawniona, to realizowana jest dalsza część programu.

 

Szansa, że wpisując na pałę kod i login uda się uruchomić program jest mniej więcej taka jak szansa trafienie 6 w totka.
Łatwiej jest przerobić kod programu, więc program z deszyfratorem należy obowiązkowo skompilować po obfuskacji, aby maksymalnie utrudnić dekompilację i analizę.

 

Jakby coś jeszcze niejasne to pytaj.

Opublikowano

Stary jesteś moim mistrzem. Uczę się AutoIT pisząc ten program nic wcześniej nie pisałem w tym języku. Tyle co nauczyłem się podstaw pętli, zmiennych if'ów w C++. Jak zarobie coś na tym programie to ci przeleje 5 dyszek na konto. Wielkie dzięki.

Opublikowano

Wszystko działa. Jeszcze jedno sugerując się tym zapisywaniem do pliku .ini danych, żeby nie trzeba było cały czas wpisywać chciałem zrobić taką bazę danych w której miałbym wszystkie loginy i kody. Wszystko jest zrobione ale nie działa dopisywanie, bo za każdym razem jak chcę wygenerować nowy kod i login to on zastępuje poprzedni a chciałbym żeby była linijka odstępu i był kolejny login i kod. 

Opublikowano

Prościej będzie użyć zwykłego pliku tekstowego.

Oto kod generatora z dodaną rejestracją wygenerowanych kodów:

;GENERATOR KODÓW

#include <Crypt.au3>
#include <GUIConstantsEx.au3>

$sDodatkowyKodSzyfrujacy = "Dodatkowy kodzik"

GUICreate("GENERATOR KODU")
$hDate = GUICtrlCreateInput("", 100, 5, 200, 20)
GUICtrlCreateLabel("Data ważności:" & @LF & "DDMMRRRR",10, 5)
$hLogin = GUICtrlCreateInput("", 100, 35, 200, 20)
GUICtrlCreateLabel("Login:",10, 35)
$hBtn = GUICtrlCreateButton("Ok", 100, 75, 60, 20)
GUISetState()

Do
   $msg = GUIGetMsg()
   Sleep(25)
Until $msg=$GUI_EVENT_CLOSE Or $msg=$hBtn

$sDate = "#" & StringRegExpReplace(GUICtrlRead($hDate), "[^0-9]", "") & "#"
If StringRegExp($sDate, "^#[0-3][0-9][0-1][0-9]20[0-9][0-9]#$") Then  ;sprawdzenie poprawności danych
   $sLogin = $sDodatkowyKodSzyfrujacy & GUICtrlRead($hLogin)      ;dodatkowy kod celem utrudnienia złamania
   _Crypt_Startup()
   $bEnCrypt = _Crypt_EncryptData($sDate, $sLogin, $CALG_DES)
   $sKod = Hex($bEnCrypt)
   ConsoleWrite($sKod & @LF)
Else
   MsgBox(16, "Szyfrowanie:", "Błąd daty")
   Exit
EndIf

$hFile = FileOpen("LicenceBase.txt", 1)
FileWriteLine($hFile, "Data utworzenia: " & @MDAY & "-" & @ & "-" & @YEAR)
FileWriteLine($hFile, "Data ważności..: " & StringMid($sDate, 2, 2) & "-" & StringMid($sDate, 4, 2) & "-" & StringMid($sDate, 6, 4))
FileWriteLine($hFile, "Login..........: " & GUICtrlRead($hLogin))
FileWriteLine($hFile, "Kod............: " & $SKod)
FileWriteLine($hFile, "---------------------------------------------------")
FileClose($hFile)

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...