Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Betriebssysteme (https://www.delphipraxis.net/27-betriebssysteme/)
-   -   Herausfinden ob PW zu dem Benutzerkonto passt (https://www.delphipraxis.net/54075-herausfinden-ob-pw-zu-dem-benutzerkonto-passt.html)

Harry M. 30. Sep 2005 12:13

Re: Herausfinden ob PW zu dem Benutzerkonto passt
 
Um zu Testen ob des Pass richtig ist habe ich mir einen Service geschrieben. Mit dem ging es dann problemlos weil dieser mit erhöten Rechten läuft. Mit normalen Programmen wirds nicht gehen.

Übrigens:
Was wollt ihr den noch Brute Forcen? Die Zeiten sind vorbei :lol: Ich bastel grad was da schmeiß ich den Hash rein und des Pass kommt in ca 30-60 Sek raus bei grösseren Sachen dauerts halt einige sekunden länger. Aber wie geht habe ich grad vergessen :lol:

Luckie 30. Sep 2005 12:16

Re: Herausfinden ob PW zu dem Benutzerkonto passt
 
Dann zeig mal etwas Code, das würde bestimmt hier jeden interessieren. Und wie sieht der Service aus? Wozu braucht er die erhöhten Rechte? Mit SSPI geht es eben auch ohne.

Und wie sieht deine Hash Methode aus? Benutzt du dort einen Rainbowtable oder wie machst du es? Und zum Knacken von Hashes mittels deren Hashwerte solltets du dir mal dies angucken: http://www.delphipraxis.net/internal...wtable&start=0
Wie schafst du also diese 30 bis 60 Sekunden? :gruebel:

Harry M. 30. Sep 2005 12:27

Re: Herausfinden ob PW zu dem Benutzerkonto passt
 
Nicht mekern is sicher noch verbesserungswürdig (etwa TIniFile -> TMemInifile pp.) is halt noch in der Entwicklungphase.
Delphi-Quellcode:
unit Main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,
  ScktComp, IniFiles;

type
  TLoginSrv = class(TService)
    ServerSocket1: TServerSocket;
    procedure ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServiceStart(Sender: TService; var Started: Boolean);
    procedure ServiceStop(Sender: TService; var Stopped: Boolean);
  private
    { Private-Deklarationen }
  public
    AppName: String;
    AppVers: String;
    function GetServiceController: TServiceController; override;
    { Public-Deklarationen }
  end;

var
  LoginSrv: TLoginSrv;

implementation

{$R *.DFM}
////////////////////////////////////////////////////////////////////////////////
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
  LoginSrv.Controller(CtrlCode);
end;
////////////////////////////////////////////////////////////////////////////////
function TLoginSrv.GetServiceController: TServiceController;
begin
  Result := ServiceController;
end;
////////////////////////////////////////////////////////////////////////////////
function GetComputerName: String;
var
  Buffer: Array[0..MAX_COMPUTERNAME_LENGTH+1] of Char;
  Size: DWORD;
begin
  size:=256;
  Windows.GetComputerName(Buffer, Size);
  Result:=StrPas(Buffer);
end;
////////////////////////////////////////////////////////////////////////////////
procedure TLoginSrv.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  IniDat: TIniFile;
  StrList: TStringList;
  ErrCode: Cardinal;
  FileName, Username, Password: String;
begin
  FileName := ExtractFilePath(ParamStr(0))+AppName+'.tmp';

  StrList := TStringList.Create;
  StrList.Text := Socket.ReceiveText;
  StrList.SaveToFile(FileName);

  IniDat := TIniFile.Create(FileName);
  Username := IniDat.ReadString('Authentification', 'Username','');
  Password := IniDat.ReadString('Authentification', 'Password','');

  LogonUser(PChar(Username), PChar(GetComputerName), PChar(Password), LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ErrCode);

  IniDat.WriteInteger('Authentification', 'ErrCode', ErrCode);
  IniDat.WriteString('Authentification', 'ErrCodeStr', SysErrorMessage(ErrCode));
  IniDat.WriteInteger('Authentification', 'GetLastError', GetLastError);
  IniDat.WriteString('Authentification', 'GetLastErrorStr', SysErrorMessage(GetLastError));

  StrList.Clear;
  StrList.LoadFromFile(FileName);

  LoginSrv.ServerSocket1.Socket.Connections[0].SendText(StrList.Text);
  LoginSrv.ServerSocket1.Socket.Disconnect(0);

  IniDat.Free;
  StrList.Free;
  if FileExists(FileName) then DeleteFile(FileName);
end;
////////////////////////////////////////////////////////////////////////////////
procedure TLoginSrv.ServiceStart(Sender: TService;
  var Started: Boolean);
begin
  ServerSocket1.Open;
end;
////////////////////////////////////////////////////////////////////////////////
procedure TLoginSrv.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
  ServerSocket1.Close;
end;
////////////////////////////////////////////////////////////////////////////////
end.

Luckie 30. Sep 2005 12:32

Re: Herausfinden ob PW zu dem Benutzerkonto passt
 
LogonUser versucht jedesmal den Benutzer einzuloggen. Und das dauert gegenüber der SSPI Methode ewig.

Edit: Ich habe meinem vorherigen Post noch etwas hinzugefügt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:06 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz