Płatnik – hasło

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

Płatnik - hasłoProgram 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

Platnik_S

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/