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/