



unit MainUnit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Registry;
type
TMainForm = class(TForm)
UsersCombo: TComboBox;
Label3: TLabel;
SerialLabel: TStaticText;
EncPassLabel: TStaticText;
DecPassLabel: TStaticText;
procedure FormShow(Sender: TObject);
procedure UsersComboChange(Sender: TObject);
private
{ Private declarations }
function GetVolumeSerial: string;
function GivePassword(UserName, EncPass, VolumeSerial: string): string;
public
{ Public declarations }
end;
var
MainForm: TMainForm;
implementation
uses StrUtils;
{$R *.dfm}
procedure TMainForm.FormShow(Sender: TObject);
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
if Reg.OpenKey('\Software\Paltalk',False) then
begin
Reg.GetKeyNames(UsersCombo.Items);
if UsersCombo.Items.Count>0 then
UsersCombo.ItemIndex := UsersCombo.Items.IndexOf(Reg.ReadString('cur_user'));
Reg.CloseKey;
end;
Reg.Free;
SerialLabel.Caption := GetVolumeSerial;
UsersComboChange(Self);
end;
function TMainForm.GetVolumeSerial: string;
var
SerialNo: Cardinal;
Tmp: Cardinal;
begin
GetVolumeInformation('C:\',nil,0,@SerialNo,Tmp,Tmp,nil,0);
Result := IntToHex(SerialNo,8);
end;
procedure TMainForm.UsersComboChange(Sender: TObject);
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
Reg.OpenKey('\Software\Paltalk\'+UsersCombo.Text,False);
EncPassLabel.Caption := Reg.ReadString('pwd');
Reg.CloseKey;
Reg.Free;
DecPassLabel.Caption := GivePassword(UsersCombo.Text,EncPassLabel.Caption,SerialLabel.Caption);
end;
function TMainForm.GivePassword(UserName, EncPass,
VolumeSerial: string): string;
var
i,j,k: Integer;
MixedUserSerial: string;
begin
while (Length(UserName)+Length(VolumeSerial)>0) do
begin
if Length(UserName)>0 then
begin
MixedUserSerial := MixedUserSerial + LeftStr(UserName,1);
Delete(UserName,1,1);
end;
if Length(VolumeSerial)>0 then
begin
MixedUserSerial := MixedUserSerial + LeftStr(VolumeSerial,1);
Delete(VolumeSerial,1,1);
end;
end;
i := Length(MixedUserSerial);
MixedUserSerial := MixedUserSerial + MixedUserSerial + MixedUserSerial;
j := 0;
while Length(EncPass)>0 do
begin
k := StrToInt(LeftStr(EncPass,3));
Delete(EncPass,1,4);
k := k - j - $7A - Byte(MixedUserSerial[i]);
Result := Result + Char(k);
Inc(j);
Inc(i);
end;
end;
end.
i,j,k: Integer;
MixedUserSerial: string;
begin
while (Length(UserName)+Length(VolumeSerial)>0) do
begin
if Length(UserName)>0 then
begin
MixedUserSerial := MixedUserSerial + LeftStr(UserName,1);
Delete(UserName,1,1);
end;
if Length(VolumeSerial)>0 then
begin
MixedUserSerial := MixedUserSerial + LeftStr(VolumeSerial,1);
Delete(VolumeSerial,1,1);
end;
end;
i := Length(MixedUserSerial);
MixedUserSerial := MixedUserSerial + MixedUserSerial + MixedUserSerial;
j := 0;
while Length(EncPass)>0 do
begin
k := StrToInt(LeftStr(EncPass,3));
Delete(EncPass,1,4);
k := k - j - $7A - Byte(MixedUserSerial[i]);
Result := Result + Char(k);
Inc(j);
Inc(i);
end;
#include <iostream>
#include <windows>
int main() {
char filesys[9];
char vollabel[13];
char buf[4] = "C:\\";
unsigned long flen,flgs,sn ; /* (only sn used) */;
int x = GetVolumeInformation(buf,vollabel,12L,&sn,&flen,&flgs,filesys,8L);
std::cout << sn;
return 0;
}

Users browsing this forum: No registered users and 0 guests