Uzyskiwanie haseł w programie Płatnik
Hasła trzymane są w rejestrze systemu Windows, hasło administratora w kluczu
HKEY_LOCAL_MACHINE\SOFTWARE\PROKOM Software SA\Płatnik\5.01.001\Admin
kolejnych wartościach AdmXX (każda zmiana hasła dodaje 1 wpis, aktualne hasło znajduje się w polu AdmXX o największej wartości XX). Przy instalacji wypełnianych jest kilka wartości początkowych, do Adm1 wpisywana jest aktaulna data, do Adm2 i 3 – imię i nazwisko administratora, do Adm4 początkowe hasło. Przy zmianie hasła do starego dopisywany jest znak ‘1’. Hasło może mieć maksymalnie 24 znaki.
Można zwalczyć wymuszanie zmiany hasła co miesiąc ustawiając w kluczu
HKLM\SOFTWARE\PROKOM Software SA\Płatnik\6.01.001\Parametry\LimitHasła
większa liczbę dni ważności hasła (domyślnie jest 30). Hasło bazy danych (ostatniej użytej) znajduje się w kluczu (pole Jet OLEDB:Database Password).
HKEY_LOCAL_MACHINE\SOFTWARE\PROKOM Software SA\Płatnik\5.01.001\Baza
Program do odzyskiwania zapomnianego hasła z programu płatnik. Za jego pomocą można odczytać aktualne hasło administratora, bazy danych, zmienić wymuszanie zmiany hasło co 30 dni. Wersja 4.5.1.0 ( WinXP, Win7 ) do poprawnego działania programu wymagany jest .NET 2.0 oraz biblioteki run-time Microsoft Visual C++ 2008 Redistributable Package do ściągnięcia ze strony Microsoft. Wersja 4.6.0.0 ( Win7, Win8, Win10 ) wymaga .net 4.0 oraz Visual C++ Redistributable for Visual Studio 2015

int main(int argc, char *argv[]) { char k[] = "lmnopqrstuvwxyz{"; int order[] = {0,1,2,3,4,0,3,5,2,1,5,4,3,6,6,2,4,2,2,4,3,2,7,7}; char *pkey[8], *haslo; int a,b,i,j; if (argc==2) haslo=argv[1]; else return -1; for (i=0;i<8;i++) strcpy(pkey[i]=new char[17],k); swap(pkey[0],8); swap(pkey[1],4);swap(pkey[1],1); swap(pkey[2],8);swap(pkey[2],1); swap(pkey[3],1); swap(pkey[4],4); swap(pkey[5],2); swap(pkey[6],2);swap(pkey[6],1); swap(pkey[7],4);swap(pkey[7],2);swap(pkey[7],1); for (i=0,j=0;i<(int)strlen(haslo);i=(++j)*2) { a=find(pkey[order[j]],haslo[i]); b=find(pkey[order[j]],haslo[i+1]); printf("%c",a+16*b); } return 0; }
#include <stdio.h> #include <string.h> void swap(char in[],int a) { int j=0,i,s; char temp; for (s=0;s<16;s=(++j)*2*a){ for (i=0;i<a;i++) { temp=in[i+s]; in[i+s]=in[i+s+a]; in[i+s+a]=temp; } } } int ascitohex(int a,int l) { int hex[2],i=0,temp=a; while (i<2) { hex[i++]=temp%16; temp=temp/16; } return hex[l]; } int main(int argc, char *argv[]) { char k[] = "lmnopqrstuvwxyz{"; int order[] = {0,1,2,3,4,0,3,5,2,1,5,4,3,6,6,2,4,2,2,4,3,2,7,7}; char *pkey[8], *haslo; int a,b,i; if (argc==2) haslo=argv[1]; else return -1; for (i=0;i<8;i++) strcpy(pkey[i]=new char[17],k); swap(pkey[0],8); swap(pkey[1],4);swap(pkey[1],1); swap(pkey[2],8);swap(pkey[2],1); swap(pkey[3],1); swap(pkey[4],4); swap(pkey[5],2); swap(pkey[6],2);swap(pkey[6],1); swap(pkey[7],4);swap(pkey[7],2);swap(pkey[7],1); for (i=0;i<(int)strlen(haslo);i++) { a=ascitohex(haslo[i],0); b=ascitohex(haslo[i],1); printf("%c%c",pkey[order[i]][a],pkey[order[i]][b]); } return 0; }
Informacje zaczerpnięte z http://platnik.fork.pl/