Az aláírás-ellenőrzési szoftver-illesztőprogramok a Windows XP-programozás

Volt egy probléma a tesztelés a járművezető aláírását a Windows XP.

Konkrétan Érdekelne haspnt.sys, hardlock.sys - ez hardvermeghajtóprogramokat másolásvédelem HASP kulcs (emulátorok lecseréli a fájlokat aláíratlan verzió, így lehet ellenőrizni).

Hirtelen Nehézségre e probléma megoldásában.

A Windows 7 illesztőprogramok egy digitális aláírást. Akkor jelölje be ezt a jobb kattintással a rendszer EXE fájlt, DLL vagy SYS és kiválasztja a „Tulajdonságok” leesett menü - ablak jelenik meg egy-egy füllel „Digitális aláírás”. Megtanultam, hogyan kell ellenőrizni az ilyen fájlokat WinVerifyTrust funkciója wintrust.dll, azért jól működik (ActionID = WINTRUST_ACTION_GENERIC_VERIFY_V2).

Azonban a Windows XP egy fület a driver fájlokat, mint általában, nem, illetve a WinVerifyTrust hibaüzenetet küld ellenőrzése minden ilyen fájl. Ennek ellenére a szabványos Windows-eszközök (például Verifier.exe, Process Explorer Mark Russinovich) valahogy lásd az aláírt fájl vagy sem. Milyen módon használják erre, nem tudom megérteni!

Lehet, hogy valaki van tapasztalata ezen a területen? Érdekli a Windows XP, de érdekes lenne, hogy ellenőrizze a hitelességét dreyverov korábbi verzióiban vissza a Windows 98.

A verifier.exe a következő történik:
túljut az összes illesztőprogramot a rendszer mappát, és minden funkciót nevezik IsDriverSigned.
Látjuk, hogy minden járművezető számára, ezt a funkciót nevezik WinVerifyTrust akár 3-szor, de a túlnyomó többsége eltűnt, és egy hívás, azaz a hogy VerifyIsFileSigned funkció nem éri el.

Ez használ C szintaxis

BOOL __stdcall VerifyIsFileSigned # 40; LPWSTR lpFileName. struct DRIVER_VER_INFO_ * driver_info # 41;
# 123;
HOSSZÚ eredményt;
GUID policyGUID1 = DRIVER_ACTION_VERIFY;
GUID policyGUID2 = WINTRUST_ACTION_GENERIC_VERIFY_V2;

WINTRUST_DATA wtData;
WINTRUST_FILE_INFO wtFileInfo;

wtFileInfo. cbStruct = 16;
wtFileInfo. hFile = 0;
wtFileInfo. pcwszFilePath = lpFileName;
wtFileInfo. pgKnownSubject = 0;

memset # 40; driver_info. 0. sizeof # 40; struct DRIVER_VER_INFO_ # 41; # 41; ;
driver_info -> cbStruct = 1088;

memset # 40; wtData. 0. sizeof # 40; wtData # 41; # 41; ;
wtData. cbStruct = 44;
wtData. dwUIChoice = 2;
wtData. dwUnionChoice = 1;
wtData. dwStateAction = 3;
wtData. pPolicyCallbackData = driver_info;
wtData. fdwRevocationChecks = 0;
wtData. pFile = wtFileInfo;
eredmény = WinVerifyTrust # 40; AfxGetThread # 40; # 41; -> GetMainWnd # 40; # 41; -> m_hWnd. policyGUID1. wtData # 41; ;
ha # 40; eredmény # 41;
# 123;
eredmény = WinVerifyTrust # 40; AfxGetThread # 40; # 41; -> GetMainWnd # 40; # 41; -> m_hWnd. policyGUID2. wtData # 41; ;
# 125;
ha # 40; driver_info -> pcSignerCertContext # 41;
# 123;
CertFreeCertificateContext # 40; * v5 # 41; ;
driver_info -> pcSignerCertContext = 0;
# 125;
visszatér eredményeként == 0;
# 125;

int __stdcall IsDriverSigned # 40; LPCWSTR lpFileName # 41;
# 123;
int isSigned;
GUID policyGUID1 = DRIVER_ACTION_VERIFY;
FOGANTYÚ hFile;
BYTE pbHash # 91; 100 # 93; ;
DWORD cbHash;
int hash_ok;
HCATINFO phPrevCatInfo;
HCATINFO hCatInfo;

CATALOG_INFO psCatInfo;
WINTRUST_CATALOG_INFO wtCatInfo;
DRIVER_VER_INFO driver_info;
WINTRUST_DATA wtData;

isSigned = 0;
hFile = CreateFileW # 40; lpFileName. 0x80000000. 3U. 0. 3U. 0x80u. 0 # 41; ;
ha # 40; hFile == # 40; FOGANTYÚ # 41; - 1 # 41;
# 123;
isSigned = 1;
# 125;
más
# 123;
memset # 40; pbHash. 0. sizeof # 40; pbHash # 41; # 41; ;
pcbHash = 100;
hash_ok = CryptCATAdminCalcHashFromFileHandle # 40; hFile. cbHash. pbHash. 0 # 41; ;
CloseHandle # 40; hFile # 41; ;
ha # 40; hash_ok == 1 # 41;
# 123;
memset # 40; wtCatInfo. 0. sizeof # 40; wtCatInfo # 41; # 41; ;
wtCatInfo. cbStruct = 36;
wtCatInfo. pcwszMemberTag = lpFileName;
wtCatInfo. pbCalculatedFileHash = pbHash;
wtCatInfo. cbCalculatedFileHash = cbHash;

memset # 40; driver_info. 0. sizeof # 40; driver_info # 41; # 41; ;
driver_info. cbStruct = 1088;

memset # 40; wtData. 0. sizeof # 40; wtData # 41; # 41; ;
wtData. dwUIChoice = 2;
wtData. dwUnionChoice = 2;
wtData. pPolicyCallbackData = driver_info;
wtData. cbStruct = 44;
wtData. fdwRevocationChecks = 0;
wtData. dwStateAction = 3;
wtData. pCatalog = wtCatInfo;

ha # 40; g_hCatAdmin || # 40; CryptCATAdminAcquireContext # 40; g_hCatAdmin. 0 0 # 41;. g_hCatAdmin # 41; # 41;
# 123;
mert # 40; phPrevCatInfo = 0; ; phPrevCatInfo = hCatInfo # 41;
# 123;
hCatInfo = CryptCATAdminEnumCatalogFromHash # 40; g_hCatAdmin. pbHash. cbHash. 0. phPrevCatInfo # 41; ;
ha # 40;. hCatInfo # 41;
break;
memset # 40; psCatInfo. 0. sizeof # 40; psCatInfo # 41; # 41; ;
psCatInfo. cbStruct = 524;
ha # 40; CryptCATCatalogInfoFromContext # 40; hCatInfo. psCatInfo. 0 # 41; # 41;
# 123;
wtCatInfo. pcwszCatalogFilePath = psCatInfo. wszCatalogFile;
isSigned = WinVerifyTrust # 40; AfxGetThread # 40; # 41; -> GetMainWnd # 40; # 41; -> m_hWnd. policyGUID1. wtData # 41;> = 0;
ha # 40; driver_info -> pcSignerCertContext # 41;
# 123;
CertFreeCertificateContext # 40; * v5 # 41; ;
driver_info -> pcSignerCertContext = 0;
# 125;
# 125;
ha # 40; isSigned == 1 # 41;
visszatérés isSigned;
# 125;
isSigned = VerifyIsFileSigned # 40; lpFileName. driver_info # 41; ;
# 125;
# 125;
# 125;
visszatérés isSigned;
# 125;

Köszönet mindenkinek válaszolt!

Ha WinVerifyTrust visszatér TRUST_E_NOSIGNATURE, ez nem feltétlenül jelenti azt, hogy nincs aláírás - meg kell hívni a GetLastError (), pontosabban az okok feltárása.

GetLastError () is visszaadja TRUST_E_NOSIGNATURE.

12d3. Próbáltam a példát. Én is nem működik. Ellentétben a kísérletek, hogy WinVerifyTrust továbbított Handle ablak (adok 0, nincs ablak), és hogy emellett ellenőrzött DRIVER_ACTION_VERIFY (én nem tudom a kódot), de még mindig nem működik.
De valami kezdett derengeni:

Látjuk, hogy minden járművezető számára, ezt a funkciót nevezik WinVerifyTrust akár 3-szor, de a túlnyomó többsége eltűnt, és egy hívás, azaz a hogy VerifyIsFileSigned funkció nem éri el.


Ez azt jelenti, hogy meg kell működtetni CryptCATAdminEnumCatalogFromHash. Itt a funkció nem akar működni. Azaz, a hash fájl (Van, mint a normál, 22 bájt), a „katalógus aláírt fájlok”, vagy akármi is megfelelően nevezik, semmi. Még egyszer köszönöm! Most a probléma csökkent a sürgősségi.