Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi wie Signatur/Certific. von EXE auslesen (wie sigcheck.exe) (https://www.delphipraxis.net/39528-wie-signatur-certific-von-exe-auslesen-wie-sigcheck-exe.html)

TKC 3. Feb 2005 23:15


wie Signatur/Certific. von EXE auslesen (wie sigcheck.exe)
 
Hi Leute,

ich würde gern das Zertifikat aus einer EXE auslesen, wie sigcheck von www.sysinternals.com.

Bin nun schon seit 2 Tagen dran das zu realisieren und habe noch nicht ein mal einen Ansatz :wall: !

Hat jemand einen Denkanstoß für mich?

Bin für jeden Tip dankbar.


cya

negaH 4. Feb 2005 00:02

Re: wie Signatur/Certific. von EXE auslesen (wie sigcheck.ex
 
wenn ich mich recht entsinne dann sind solche Funktionen in ImageHlp.dll enthalten.

Gruß Hagen

TKC 4. Feb 2005 17:19

Re: wie Signatur/Certific. von EXE auslesen (wie sigcheck.ex
 
hi,

danke ! super ! ... genau der Ansatz hat mir gefehlt .. ich werde mal ne Unit dafür machen,
evtl. kann das ja noch jemand gebrauchen.

cya

TKC 9. Feb 2005 22:45

Re: wie Signatur/Certific. von EXE auslesen (wie sigcheck.ex
 
hi,

also irgendwie komme ich da nicht weiter ....

Delphi-Quellcode:
PROCEDURE TForm1.Button1Click(Sender: TObject);
VAR
  hFile            : THandle;
  x                : DWORD;
  px               : pdword;

BEGIN

  hFile := CreateFile(PChar('c:\windows\explorer.exe'), FILE_READ_DATA, 0,0, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0);

  IF hFile = 0 THEN exit;

  x := 0;
  px := @x;

  IF ImageEnumerateCertificates(hFile, CERT_SECTION_TYPE_ANY, px, NIL, 0) THEN
    BEGIN
    x:=px^;
   
    ShowMessage(IntToStr(x));
    END;

END;
Der Windows Explorer hat definitiv ein Zertifikat.

Was mache ich falsch ? :?:

TKC 10. Feb 2005 15:05

Re: wie Signatur/Certific. von EXE auslesen (wie sigcheck.ex
 
hat denn wirklich keiner ne Idee um mir zu helfen :cry:


Es muss doch irgendwie gehen....

NicoDE 10. Feb 2005 15:11

Re: wie Signatur/Certific. von EXE auslesen (wie sigcheck.ex
 
Zitat:

Zitat von ACE-ppc
Delphi-Quellcode:
IF hFile = 0 THEN exit;

RTFM: "If the function fails, the return value is INVALID_HANDLE_VALUE."
BTW: try-finally wäre passender als Resourcenschutz (Handle schließen)

TKC 10. Feb 2005 18:45

Re: wie Signatur/Certific. von EXE auslesen (wie sigcheck.ex
 
schon klar ... hilft mir aber nicht viel weiter... :gruebel:

NicoDE 10. Feb 2005 19:33

Re: wie Signatur/Certific. von EXE auslesen (wie sigcheck.ex
 
Vielleicht hat deine Explorer.exe keine Zertifikats-Sektion.
(Kartenreiter 'Digitale Signaturen' in den Dateieigenschaften)
Bei mir funktioniert (unter Wine) folgendes problemlos:
Delphi-Quellcode:
function ImageEnumerateCertificates(FileHandle: THandle; TypeFilter: Word;
  out CertificateCount: DWORD; Indices: PDWORD; IndexCount: DWORD): BOOL;
  stdcall; external 'imagehlp.dll' name 'ImageEnumerateCertificates';

procedure TForm1.Button1Click(Sender: TObject);
const
  FILE_READ_DATA       = $01;
  CERT_SECTION_TYPE_ANY = $FF;
var
  FileHandle: THandle;
  CertificateCount: DWORD;
begin
  FileHandle := CreateFile(PChar('D:\borland\delphi3\BIN\delphi32.exe'),
    GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0);
  if FileHandle = INVALID_HANDLE_VALUE then
    ShowMessage('CreateFile: ' + SysErrorMessage(GetLastError))
  else
  try
    CertificateCount := 0;
    if not ImageEnumerateCertificates(FileHandle,
      CERT_SECTION_TYPE_ANY, CertificateCount, nil, 0) then
      ShowMessage('ImageEnumerateCertificates: ' + SysErrorMessage(GetLastError))
    else
      ShowMessage('CertificateCount: ' + IntToStr(CertificateCount));
  finally
    CloseHandle(FileHandle);
  end;
end;
Explorer.exe = 0
delphi32.exe = 1

Wenn ich mich recht erinnere, sind die delphi32.exe der anderen Delphi-Versionen nicht digital signiert...

Gruß Nico

TKC 10. Feb 2005 21:52

Re: wie Signatur/Certific. von EXE auslesen (wie sigcheck.ex
 
hmm ... klappt bei mir auch nicht ... auch mit deinem Code und der bds.exe nicht.

Der Windows Explorer hat definitif eins ... !


D:\Daten\Software\Systemtools\Sysinternals>sigchec k.exe c:\winnt\explorer.exe

Delphi-Quellcode:
Sigcheck v1.1
Copyright (C) 2004-2005 Mark Russinovich
Sysinternals - [url]www.sysinternals.com[/url]

c:\winnt\explorer.exe:
        Verified:      Signed
        Signing date:  06:30 20.06.2003
        Publisher:     Microsoft Corporation
        Description:   Windows Explorer
        Product:       Betriebssystem Microsoft(R) Windows (R) 2000
        Version:       5.00.3700.6690
        File version:  5.00.3700.6690
das muss ja irgendwo herkommen ?

Kernel32.DLL 10. Feb 2005 22:02

Re: wie Signatur/Certific. von EXE auslesen (wie sigcheck.ex
 
Is' Sigcheck eigentlich für alle Windowsversionen gedacht?

Vielleicht hilft es dir ja auch, wenn du dir mal ansiehst, welche DLL's das Proggi aufruft..

TKC 11. Feb 2005 10:54

Re: wie Signatur/Certific. von EXE auslesen (wie sigcheck.ex
 
naj .. sigcheck läuft auf allen NT Systemen ...

Statisch bindet das Programm nicht viel ein .. es wird alles Dynamisch nachgeladen ...
habe trotzdem mal nen Dump gemacht..

Delphi-Quellcode:
Executable modules
Base      Size      Entry     Name      File version     Path
00400000   00011000   0040317A  sigcheck  1.10              D:\Daten\Software\Systemtools\Sysinternals\sigcheck.exe
74F90000   00008000   74F911AE  WS2HELP   5.00.2134.1       C:\WINNT\system32\WS2HELP.DLL
74FA0000   00014000   74FA1C85   WS2_32     5.00.2195.6601    C:\WINNT\system32\WS2_32.DLL
74FC0000   00009000              WSOCK32    5.00.2195.6603    C:\WINNT\system32\WSOCK32.DLL
750C0000   0000F000   750C10D4   SAMLIB    5.00.2195.6897    C:\WINNT\system32\SAMLIB.dll
750E0000   0004F000   750EE53B  netapi32   5.00.2195.6949    C:\WINNT\system32\netapi32.dll
75130000   00006000              NETRAP    5.00.2134.1       C:\WINNT\system32\NETRAP.dll
75940000   00006000   75941A6A  LZ32       5.00.2195.6611    C:\WINNT\system32\LZ32.DLL
76080000   00050000   760BB257   WINHTTP   5.1.2600.1327 (x C:\WINNT\system32\WINHTTP.DLL
768D0000   0002B000   768F3440   Wintrust  5.131.2195.6824   C:\WINNT\system32\Wintrust.dll
772A0000   00069000   772A6271   SHLWAPI   6.00.2800.1584 (  C:\WINNT\system32\SHLWAPI.dll
77400000   00010000   77408C6C  MSASN1     5.00.2195.6905    C:\WINNT\system32\MSASN1.DLL
77810000   00007000   77811334   VERSION   5.00.2195.6623    C:\WINNT\system32\VERSION.dll
77880000   00083000              ntdll     5.00.2195.6899    C:\WINNT\system32\ntdll.dll
77910000   00023000   77911158   IMAGEHLP  5.00.2195.6613    C:\WINNT\system32\IMAGEHLP.dll
77940000   0002B000   779410C0   WLDAP32    5.00.2195.6666    C:\WINNT\system32\WLDAP32.DLL
77970000   00024000   779712C2   DNSAPI    5.00.2195.6824    C:\WINNT\system32\DNSAPI.DLL
779A0000   0009B000   77A14030   OLEAUT32   2.40.4522         C:\WINNT\system32\OLEAUT32.dll
77A40000   000EF000   77A5B5CC  ole32      5.00.2195.6906    C:\WINNT\system32\ole32.dll
77BE0000   00011000   77BE3FF0   NTDSAPI   5.00.2195.6666    C:\WINNT\system32\NTDSAPI.dll
77D20000   00071000   77D23E30   RPCRT4     5.00.2195.6904    C:\WINNT\system32\RPCRT4.dll
77E00000   0005F000   77E0DF34   USER32     5.00.2195.7017    C:\WINNT\system32\USER32.dll
77E70000   000C0000   77E77A40   KERNEL32   5.00.2195.6946    C:\WINNT\system32\KERNEL32.DLL
77F40000   0003B000              GDI32      5.00.2195.6945    C:\WINNT\system32\GDI32.dll
78000000   00045000   78001000   MSVCRT    6.10.9844.0       C:\WINNT\system32\MSVCRT.dll
791A0000   00062000   791EB67A  USERENV   5.00.2195.6794    C:\WINNT\system32\USERENV.dll
79350000   00062000   79351ECE  ADVAPI32   5.00.2195.6876    C:\WINNT\system32\ADVAPI32.DLL
79430000   0000F000   79432B19   secur32    5.00.2195.6695    C:\WINNT\system32\secur32.dll
79990000   00012000   7999135C  cryptnet  5.131.2195.6824   C:\WINNT\system32\cryptnet.dll
799D0000   00087000   799D14C4   CRYPT32    5.131.2195.6824   C:\WINNT\system32\CRYPT32.dll
7CA00000   00023000   7CA0D3BA  rsaenh    5.00.2195.6611    C:\WINNT\system32\rsaenh.dll
bin jetzt am Analysieren , mal sehen ob ich da weiter komme.

TKC 11. Feb 2005 11:16

Re: wie Signatur/Certific. von EXE auslesen (wie sigcheck.ex
 
sooo .... hab jetzt mal bisl spioniert wie sigcheck da vorgeht ...

Delphi-Quellcode:
Wintrust.CryptCATAdminAcquireContext

/hTemplateFile
|Attributes = NORMAL
|Mode = OPEN_EXISTING
|pSecurity = NULL
|ShareMode = FILE_SHARE_READ
|Access = GENERIC_READ
|FileName
\CreateFileW

Wintrust.CryptCATAdminCalcHashFromFileHandle

Wintrust.CryptCATAdminEnumCatalogFromHash

Wintrust.CryptCATCatalogInfoFromContext
("C:\WINNT\system32\CatRoot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\sp4.cat" für Explorer.exe)

Wintrust.WinVerifyTrust

Wintrust.CryptCATAdminReleaseCatalogContext
Werde nun mal den Versuch starten das im Delphi nachzubauen .. :???:

TKC 21. Feb 2005 19:51

Re: wie Signatur/Certific. von EXE auslesen (wie sigcheck.ex
 
so .... nach nen paar Tagen coden und debuggen hab ichs geschafft .... es funktioniert :-D

ich poste den Quellcode sobald ich ihn etwas aufgeräumt und dokumentiert habe ...

wenns jemanden interessiert.

TKC 3. Mär 2005 12:24

Re: wie Signatur/Certific. von EXE auslesen (wie sigcheck.ex
 
so... ich habe die Unit in die Code Lib gepostet ... :wink:

danke für die minimale Hilfe.

Kedariodakon 3. Mär 2005 12:39

Re: wie Signatur/Certific. von EXE auslesen (wie sigcheck.ex
 
hmm was bringt einem das?
Wie kann ich nun selber programme signieren oder eine signatur einer exe hinzufügen? :gruebel:

Bye

TKC 3. Mär 2005 20:10

Re: wie Signatur/Certific. von EXE auslesen (wie sigcheck.ex
 
du kannst damit prüfen ob eine Date eine Signatur enthält und ob sie gültig ist.

Das kann man z.B. für einen Dateiscanner nutzen ... um nur unsignierte Dateien anzuzeigen.

Oder um Einträge in einer Autorun Liste zu prüfen .... usw.

Kedariodakon 4. Mär 2005 08:30

Re: wie Signatur/Certific. von EXE auslesen (wie sigcheck.ex
 
Ok und wie signiere ich meine Datein?

Bye

Vjay 4. Mär 2005 13:21

Re: wie Signatur/Certific. von EXE auslesen (wie sigcheck.ex
 
Bei div. von Microsoft authorisierten Partnern. A la Verisign gegen eine absolut minimale Gebühr.

Ich kenn die Gebühr zwar nicht, aber auch wenn sie wirklich minimal sein sollte, wird sich das bei entsprechender Nutzung garantiert ändern.

TKC 7. Apr 2005 09:43

Re: wie Signatur/Certific. von EXE auslesen (wie sigcheck.ex
 
Liste der Anhänge anzeigen (Anzahl: 2)
Da meine Unit in der Code Lib einfach gelöscht wurde poste ich sie eben hier noch mal :evil:

Updates:
- einige Bugs gefixt
- Speicherleaks beseitigt

Als Anlage die neue Unit und ein kleines Beispiel Programm (setze ich täglich ein)

NicoDE 7. Apr 2005 10:05

Re: wie Signatur/Certific. von EXE auslesen (wie sigcheck.ex
 
Sollte
Code:
  CATALOG_INFO = record
    cbStruct: DWORD;                             // = sizeof(WINTRUST_CATALOG_INFO)
    sCatalogFile: array[[color=red]0..MAX_PATH[/color]] of WCHAR;   // Dateiname incl. Pfad zur CAT Datei
  end;
  PCATALOG_INFO = ^CATALOG_INFO;
nicht so
Code:
type
  PCatalogInfo = ^TCatalogInfo;
  PCATALOG_INFO = PCatalogInfo;
  {$EXTERNALSYM PCATALOG_INFO}
  CATALOG_INFO_ = record
    cbStruct     : DWORD;                          // = SizeOf(TCatalogInfo)
    wszCatalogFile: array [[color=green]0..MAX_PATH-1[/color]] of WCHAR; // Name of the catalog file.
  end;
  {$EXTERNALSYM CATALOG_INFO_}
  TCatalogInfo = CATALOG_INFO_;
  CATALOG_INFO = CATALOG_INFO_;
  {$EXTERNALSYM CATALOG_INFO}
aussehen?

Gruß Nico

TKC 7. Apr 2005 20:41

Re: wie Signatur/Certific. von EXE auslesen (wie sigcheck.ex
 
Zitat:

Zitat von NicoDE
Sollte
Code:
  CATALOG_INFO = record
    cbStruct: DWORD;                             // = sizeof(WINTRUST_CATALOG_INFO)
    sCatalogFile: array[[color=red]0..MAX_PATH[/color]] of WCHAR;   // Dateiname incl. Pfad zur CAT Datei
  end;
  PCATALOG_INFO = ^CATALOG_INFO;
nicht so
Code:
type
  PCatalogInfo = ^TCatalogInfo;
  PCATALOG_INFO = PCatalogInfo;
  {$EXTERNALSYM PCATALOG_INFO}
  CATALOG_INFO_ = record
    cbStruct     : DWORD;                          // = SizeOf(TCatalogInfo)
    wszCatalogFile: array [[color=green]0..MAX_PATH-1[/color]] of WCHAR; // Name of the catalog file.
  end;
  {$EXTERNALSYM CATALOG_INFO_}
  TCatalogInfo = CATALOG_INFO_;
  CATALOG_INFO = CATALOG_INFO_;
  {$EXTERNALSYM CATALOG_INFO}
aussehen?

Gruß Nico

so kann man es auch machen ... welchen Vorteil hat das denn :gruebel:

NicoDE 8. Apr 2005 09:24

Re: wie Signatur/Certific. von EXE auslesen (wie sigcheck.ex
 
Zitat:

Zitat von ACE-ppc
so kann man es auch machen ...

Ich meinte nur die fehlende -1.
(der Rest ist Routine beim Konvertieren von APIs, die Deklaration des C-Pointes ist zwar nicht Borland-konform, dafür aber besser bei var-Parametern...)

TKC 11. Apr 2005 20:30

Re: wie Signatur/Certific. von EXE auslesen (wie sigcheck.ex
 
:-D wo wir gerade dabei sind ... wie hättest du denn das mit der union choice in der WINTRUST_DATA gelöst ?

NicoDE 11. Apr 2005 20:59

Re: wie Signatur/Certific. von EXE auslesen (wie sigcheck.ex
 
Etwa so:
Delphi-Quellcode:
type
  PWinTrustData = ^TWinTrustData;
  PWINTRUST_DATA = PWinTrustData;
  {$EXTERNALSYM PWINTRUST_DATA}
  _WINTRUST_DATA = record
    cbStruct          : DWORD; // SizeOf(TWinTrustData)
    pPolicyCallbackData: Pointer;
    pSIPClientData    : Pointer;
    dwUIChoice        : DWORD; // WTD_UI_*
    fdwRevocationChecks: DWORD; // WTD_REVOKE_*
    case dwUnionChoice : DWORD of
      WTD_CHOICE_FILE  : (pFile  : ^TWinTrustFileInfo);
      WTD_CHOICE_CATALOG: (pCatalog: ^TWinTrustCatalogInfo);
      WTD_CHOICE_BLOB  : (pBlob  : ^TWinTrustBlobInfo);
      WTD_CHOICE_SIGNER : (pSgnr  : ^TWinTrustSgnrInfo);
      WTD_CHOICE_CERT  : (pCert  : ^TWinTrustCertInfo;
  { end; }
    dwStateAction: DWORD;       // Reserved = 0
    hWVTStateData: THandle);    // Reserved = THandle(nil)
  end;
  {$EXTERNALSYM _WINTRUST_DATA}
  TWinTrustData = _WINTRUST_DATA;
  WINTRUST_DATA = _WINTRUST_DATA;
  {$EXTERNALSYM WINTRUST_DATA}
Falls die Zeiger in der Union jemals nil sein können, sollte man ^TWinTrustXxx in PWinTrustXxx ändern (um den Vergleich auf nil zu vereinfachen).

TKC 13. Apr 2005 13:00

Re: wie Signatur/Certific. von EXE auslesen (wie sigcheck.ex
 
hmm ... das mit dem Case funktioniert so aber nicht :warn: ... (hatte ich ursprünglich auch mal so)

NicoDE 13. Apr 2005 13:16

Re: wie Signatur/Certific. von EXE auslesen (wie sigcheck.ex
 
Zitat:

Zitat von ACE-ppc
hmm ... das mit dem Case funktioniert so aber nicht :warn:

Was funktioniert nicht?
Zitat:

Zitat von ACE-ppc
(hatte ich ursprünglich auch mal so)

Bitte die 'verschobene' Klammer des letzten varianten Ausdrucks nicht übersehen, da die Delphi Language keine Member nach varianten Teilen zulässt. Und ob ich nun 'foo: dword; case dword of' oder 'case foo: dword of' schreibe ist egal...

TKC 15. Apr 2005 08:20

Re: wie Signatur/Certific. von EXE auslesen (wie sigcheck.ex
 
Liste der Anhänge anzeigen (Anzahl: 1)
naja ... das problem sind die Speicher Leaks die dabei übrig bleiben :warn:

Ok ... schaun wir uns das im Original noch mal an.
Code:
typedef struct _WINTRUST_DATA {
    DWORD cbStruct;
    LPVOID pPolicyCallbackData;
    LPVOID pSIPClientData;
    DWORD dwUIChoice;
    DWORD fdwRevocationChecks;
    DWORD dwUnionChoice;
    union {
          struct WINTRUST_FILE_INFO_* pFile;
          struct WINTRUST_CATALOG_INFO_* pCatalog;
          struct WINTRUST_BLOB_INFO_* pBlob;
          struct WINTRUST_SGNR_INFO_* pSgnr;
          struct WINTRUST_CERT_INFO_* pCert;
        };
    DWORD dwStateAction;
    HANDLE hWVTStateData;
    WCHAR* pwszURLReference;
    DWORD dwProvFlags;
    DWORD dwUIContext;
} WINTRUST_DATA,
*PWINTRUST_DATA;
was man jetzt wissen muss (oder in einem Debugger anschaut :roll: ) ist ...
im c++ wird der Pointer, der über dwUnionChoice gewählt wurde,
an die erste Stelle im Speicher verschoben und die anderen kommen hinten dran :warn:
z.B.
dwUnionChoice = 3 (WINTRUST_SGNR_INFO)
dann sieht es im Speicher so aus
Code:
  PWINTRUST_SGNR_INFO    = $12F310
  PWINTRUST_FILE_INFO   = $12F318
  PWINTRUST_CATALOG_INFO = $12F326
  PWINTRUST_BLOB_INFO   = $12F334
  PWINTRUST_CERT_INFO   = $12F342
mit deiner deklaration in Delphi sind aber alle 5 Pointer gleich, sprich alle
sind auf $12F310 (siehe Angefügtes Bild)

Die Funktion WinVerifyTrust() legt im Hintergrund 5 der Strukturen an und weist ihnen Speicher zu.
Jetzt schiebst du die WINTRUST_DATA mit 5 Pointern rein die alle auf den gleichen Platz im Speicher
verweisen !
Wenn dann der Aufruf durch ist versucht die Funktion den Speicher Freizugeben .. doch nanu ... an stelle der
5 Speicheradressen ist nur noch eine da ... naja dann gibt sie halt nur eine von den 5 frei !!!

Und schon iss es passiert ein richtig fettes Leak (rund 2-4MB weil intern noch etliche unterstrukturen da waren) :warn:

Wenn ich das mit meiner Hand ausdrücken soll .. würde ich es so erklären:

WinVerifyTrust() hat 5 Löcher wo jeweils nur 1 Finger reinpasst und keines freibleiben darf ...
also musst man 5 Finger reinstecken und wieder rausziehen und nicht einen in 5 Löcher :stupid:


Der Spass hat mich ne ganze weile beschäftigt .... :x

Der Trick ist nun ... wie du dir sicherlich schon denken kannst... es folgender maßen zu deklarieren
Delphi-Quellcode:
    dwUnionChoice: DWORD;                        // benötigt, welche Datenstruktur soll verwendet werden
    pWTDINFO: pointer;                           // Pointer zu einer der Wintrust_X_Info Strukturen
    pFake: pointer;                              //Fake Pointer - nötig damit der Speicer wieder freigegeben wird
    pFake1: pointer;                             //Fake Pointer - nötig damit der Speicer wieder freigegeben wird
    pFake2: pointer;                             //Fake Pointer - nötig damit der Speicer wieder freigegeben wird
    pFake3: pointer;                             //Fake Pointer - nötig damit der Speicer wieder freigegeben wird
Um das zu erkennen war wirklich harte Arbeit Debugger notwendig.

NicoDE 15. Apr 2005 08:38

Re: wie Signatur/Certific. von EXE auslesen (wie sigcheck.ex
 
Zitat:

Zitat von ACE-ppc
naja ... das problem sind die Speicher Leaks die dabei übrig bleiben :warn:

Ich kann den Zusammenhang nicht ganz nachvollziehen...
(vielleicht liegt's am fehlenden Kaffee)

Zitat:

Zitat von ACE-ppc
was man jetzt wissen muss (oder in einem Debugger anschaut :roll: ) ist ...
im c++ wird der Pointer, der über dwUnionChoice gewählt wurde,
an die erste Stelle im Speicher verschoben und die anderen kommen hinten dran :warn:
z.B.
dwUnionChoice = 3 (WINTRUST_SGNR_INFO)
dann sieht es im Speicher so aus
Code:
  PWINTRUST_SGNR_INFO    = $12F310
  PWINTRUST_FILE_INFO   = $12F318
  PWINTRUST_CATALOG_INFO = $12F326
  PWINTRUST_BLOB_INFO   = $12F334
  PWINTRUST_CERT_INFO   = $12F342

Tut mir leid, aber den C/C++-Compiler möchte ich gerne sehen...
Eine Union ist nunmal dazu da, dass die Member an der gleichen Adresse beginnen.
Vielleicht ist der Debugger nicht in der Lage die Debug-Informationen anständlig zu parsen/anzuzeigen, oder MS hat sich bei der Deklaration vertan - die Dokumentation behauptet weiterhin die Struktur wäre in WinBase.h deklariert...

TKC 15. Apr 2005 13:08

Re: wie Signatur/Certific. von EXE auslesen (wie sigcheck.ex
 
wenn du meinst ... teste es doch mal, dann wirst du feststellen das du ein Speicher Leak bekommst.

Btw ... die Pointer waren nur Beispiele ... aber ich kann dir ja ein Messer schicken .. dann kannst du
damit die Haare spalten :-D

Also be mir ist die laut doku in der wintrust.h ... und zwar so:

Code:
//////////////////////////////////////////////////////////////////////////////
//
// WINTRUST_DATA Structure
//----------------------------------------------------------------------------
//  Used when calling WinVerifyTrust to pass necessary information into
//  the Providers.
//
typedef struct _WINTRUST_DATA
{
    DWORD          cbStruct;                  // = sizeof(WINTRUST_DATA)

    LPVOID         pPolicyCallbackData;       // optional: used to pass data between the app and policy
    LPVOID         pSIPClientData;            // optional: used to pass data between the app and SIP.

    DWORD          dwUIChoice;                // required: UI choice. One of the following.
#                       define     WTD_UI_ALL             1
#                       define     WTD_UI_NONE            2
#                       define     WTD_UI_NOBAD           3
#                       define     WTD_UI_NOGOOD          4

    DWORD          fdwRevocationChecks;       // required: certificate revocation check options
#                       define     WTD_REVOKE_NONE        0x00000000
#                       define     WTD_REVOKE_WHOLECHAIN  0x00000001

    DWORD          dwUnionChoice;             // required: which structure is being passed in?
#                       define     WTD_CHOICE_FILE        1
#                       define     WTD_CHOICE_CATALOG     2
#                       define     WTD_CHOICE_BLOB        3
#                       define     WTD_CHOICE_SIGNER      4
#                       define     WTD_CHOICE_CERT        5
    union
    {
        struct WINTRUST_FILE_INFO_      *pFile;        // individual file
        struct WINTRUST_CATALOG_INFO_   *pCatalog;     // member of a Catalog File
        struct WINTRUST_BLOB_INFO_      *pBlob;        // memory blob
        struct WINTRUST_SGNR_INFO_      *pSgnr;        // signer structure only
        struct WINTRUST_CERT_INFO_      *pCert;
    };

    DWORD          dwStateAction;                     // optional (Catalog File Processing)
#                       define     WTD_STATEACTION_IGNORE          0x00000000
#                       define     WTD_STATEACTION_VERIFY          0x00000001
#                       define     WTD_STATEACTION_CLOSE           0x00000002
#                       define     WTD_STATEACTION_AUTO_CACHE      0x00000003
#                       define     WTD_STATEACTION_AUTO_CACHE_FLUSH 0x00000004

    HANDLE         hWVTStateData;                     // optional (Catalog File Processing)

    WCHAR          *pwszURLReference;         // optional: (future) used to determine zone.

calibra301 11. Mär 2015 17:53

AW: wie Signatur/Certific. von EXE auslesen (wie sigcheck.exe)
 
Hallo,

grabe das Thema mal aus...folgendes Problem:
Ich benutze eine DLL die bis vor kurzem SHA1 signiert war. Nun SHA256.
Unter XP SP3 (welches SHA256 TEILWEISE können soll ) geht die Prüfung leider gegen den Baum.
WinVerifyTrust gibt einen negativen Wert zurück.

Ja..ich weiss..XP ist veraltet...aber manche nutzen es trotzdem noch. Genau wie ich immer noch D6 :-)
Hatte schon jemand ein ählniches Prob ?

Gruss
Calli

PeterPanino 31. Mai 2018 21:42

AW: wie Signatur/Certific. von EXE auslesen (wie sigcheck.exe)
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo TKC, vielen Dank für deine Unit uSimpleTrustCheck.pas in der Code-Bibliothek!

Ich habe das mal mit Windows Explorer getestet:

Code:
IsSigned := uSimpleTrustCheck.CheckFileTrust('C:\Windows\explorer.exe');
Darauf kam folgende Meldung, die ich ehrlich gesagt noch niemals gesehen habe:

Anhang 49189

Darauf machte ich den Test mit sigcheck, das die Signatur ganz normal darstellte:

Anhang 49190

Weiß jemand, woran der Fehler mit uSimpleTrustCheck liegen könnte?

KodeZwerg 31. Mai 2018 22:33

AW: wie Signatur/Certific. von EXE auslesen (wie sigcheck.exe)
 
sry war Verboten was ich schrieb.

PeterPanino 31. Mai 2018 23:02

AW: wie Signatur/Certific. von EXE auslesen (wie sigcheck.exe)
 
Zitat:

Zitat von KodeZwerg (Beitrag 1403580)
sry war Verboten was ich schrieb.

Was hast du denn geschrieben?

KodeZwerg 1. Jun 2018 00:52

AW: wie Signatur/Certific. von EXE auslesen (wie sigcheck.exe)
 
Ist eine Urheberrechtssache gegen die ich Verstoßen hätte von daher Beitrag entfernt und auch keine weiteren Reaktionen meinerseits dazu. Tut mir leid!


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:37 Uhr.

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