AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi wie Signatur/Certific. von EXE auslesen (wie sigcheck.exe)
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von TKC · begonnen am 3. Feb 2005 · letzter Beitrag vom 1. Jun 2018
Antwort Antwort
Benutzerbild von TKC
TKC

Registriert seit: 21. Apr 2004
Ort: Tuningen
367 Beiträge
 
Delphi XE2 Enterprise
 
#1

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

  Alt 15. Apr 2005, 08:20
naja ... das problem sind die Speicher Leaks die dabei übrig bleiben

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 ) 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
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)

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


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

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.
Angehängte Grafiken
Dateityp: jpg debug_638.jpg (23,8 KB, 38x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:26 Uhr.
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