CRYPT32!PkiAsn1Decode函数分析的一个例子


第一部分:
0: kd> g
Breakpoint 35 hit
CRYPT32!PkiAsn1Decode:
001b:75c9af0c 55              push    ebp
1: kd> kc
#
00 CRYPT32!PkiAsn1Decode
01 CRYPT32!PkiAsn1DecodeAndAllocInfo
02 CRYPT32!PkiAsn1DecodeAndAllocInfoEx
03 CRYPT32!Asn1InfoDecodeAndAllocEx
04 CRYPT32!Asn1X509CtlInfoDecodeEx
05 CRYPT32!CryptDecodeObjectEx
06 CRYPT32!AllocAndDecodeObject
07 CRYPT32!FastCreateCtlElement
08 CRYPT32!CertCreateContext
09 WINTRUST!CatUtil_CreateCTLContextFromFileName
0a WINTRUST!_CatAdminAddSingleCatalogToCache
0b WINTRUST!_CatAdminAddCatalogsToCache
0c WINTRUST!CryptCATAdminEnumCatalogFromHash
0d sfc_os!SfcValidateFileSignature
0e sfc_os!SfcGetValidationData
0f sfc_os!SfcValidateDLL
10 sfc_os!SfcQueueValidationThread
11 kernel32!BaseThreadStart


1: kd> kv
# ChildEBP RetAddr  Args to Child              
00 007ce4c4 75c9b50d 01236c48 007ce504 0000003a CRYPT32!PkiAsn1Decode (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\ds\security\cryptoapi\common\pkiutil\pkiasn1.cpp @ 212]
01 007ce4e4 75c9b64b 01236c48 0000003a 01c155d0 CRYPT32!PkiAsn1DecodeAndAllocInfo+0x1c (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\ds\security\cryptoapi\common\pkiutil\pkiasn1.cpp @ 1037]
02 007ce508 75c4959c 01236c48 0000003a 01c155d0 CRYPT32!PkiAsn1DecodeAndAllocInfoEx+0x1f (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\ds\security\cryptoapi\common\pkiutil\pkiasn1.cpp @

1176]
03 007ce534 75c4e39c 0000003a 01c155d0 00000043 CRYPT32!Asn1InfoDecodeAndAllocEx+0x2c (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\ds\security\cryptoapi\pki\certstor\wincert.cpp @ 2456]
04 007ce55c 75c49347 00000001 00000025 01c155d0 CRYPT32!Asn1X509CtlInfoDecodeEx+0x21 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\ds\security\cryptoapi\pki\certstor\wincert.cpp @ 10140]
05 007ce5c4 75c2b555 00000001 00000025 01c155d0 CRYPT32!CryptDecodeObjectEx+0x4d (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\ds\security\cryptoapi\pki\certstor\wincert.cpp @ 2223]
06 007ce5ec 75c2f05e 00000001 00000025 01c155d0 CRYPT32!AllocAndDecodeObject+0x2a (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\ds\security\cryptoapi\pki\certstor\newstor.cpp @ 1506]
07 007ce6fc 75c3337a 75ca7f98 00010001 017a0000 CRYPT32!FastCreateCtlElement+0x19e (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\ds\security\cryptoapi\pki\certstor\newstor.cpp @ 14901]
08 007ce758 76812b50 00000002 00010001 017a0000 CRYPT32!CertCreateContext+0xee (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\ds\security\cryptoapi\pki\certstor\newstor.cpp @ 15197]
09 007ce78c 7680b67f 00000f94 01c52c08 01c52c0c WINTRUST!CatUtil_CreateCTLContextFromFileName+0x108 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\ds\security\cryptoapi\common\pkiutil

\catutil.cpp @ 105]
0a 007ce7b8 7680c14f 01714ad8 01c52520 007ce7dc WINTRUST!_CatAdminAddSingleCatalogToCache+0xb4 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\ds\security\cryptoapi\pkitrust

\mscat32\catadnew.cpp @ 2670]
0b 007ce7ec 7680c899 01714ac0 016c99f0 007ce820 WINTRUST!_CatAdminAddCatalogsToCache+0xca (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\ds\security\cryptoapi\pkitrust\mscat32\catadnew.cpp @

2554]
0c 007ceab4 768373da 01714ac0 0007d3d0 00000014 WINTRUST!CryptCATAdminEnumCatalogFromHash+0x1d3 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\ds\security\cryptoapi\pkitrust

\mscat32\catadnew.cpp @ 906]
0d 007cf4b8 768378c5 01714ac0 00000d38 0011a568 sfc_os!SfcValidateFileSignature+0x22d (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\subsys\sm\sfc\dll\validate.c @ 299]
0e 007cf4e0 768379c5 007cf510 007cf508 00000010 sfc_os!SfcGetValidationData+0xe0 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\subsys\sm\sfc\dll\validate.c @ 2165]
0f 007cf724 76838a3d 0112916c 01714ac0 00000000 sfc_os!SfcValidateDLL+0xe4 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\subsys\sm\sfc\dll\validate.c @ 2251]
10 007cffb8 77e41be7 00000000 00000000 00000000 sfc_os!SfcQueueValidationThread+0x4ce (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\subsys\sm\sfc\dll\validate.c @ 1671]
11 007cffec 00000000 7683856f 00000000 00000000 kernel32!BaseThreadStart+0x34 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\win32\client\support.c @ 533]
windbg> .open -a 75c9b50d


BOOL WINAPI Asn1X509CtlInfoDecodeEx(
IN DWORD dwCertEncodingType,
IN LPCSTR lpszStructType,
IN const BYTE *pbEncoded,
IN DWORD cbEncoded,
IN DWORD dwFlags,
IN OPTIONAL PCRYPT_DECODE_PARA pDecodePara,
OUT OPTIONAL void *pvStructInfo,
IN OUT DWORD *pcbStructInfo
)
{
return Asn1InfoDecodeAndAllocEx(
CertificateTrustList_PDU,            //CertificateTrustList_PDU
pbEncoded,
cbEncoded,
dwFlags,
pDecodePara,
Asn1X509CtlInfoDecodeExCallback,
pvStructInfo,
pcbStructInfo
);
}


第二部分:

1: kd> p
Breakpoint 36 hit
MSASN1!ASN1_Decode:
001b:75bf7d82 55              push    ebp
1: kd> kc
#
00 MSASN1!ASN1_Decode
01 CRYPT32!PkiAsn1Decode
02 CRYPT32!PkiAsn1DecodeAndAllocInfo
03 CRYPT32!PkiAsn1DecodeAndAllocInfoEx
04 CRYPT32!Asn1InfoDecodeAndAllocEx
05 CRYPT32!Asn1X509CtlInfoDecodeEx
06 CRYPT32!CryptDecodeObjectEx
07 CRYPT32!AllocAndDecodeObject
08 CRYPT32!FastCreateCtlElement
09 CRYPT32!CertCreateContext
0a WINTRUST!CatUtil_CreateCTLContextFromFileName
0b WINTRUST!_CatAdminAddSingleCatalogToCache
0c WINTRUST!_CatAdminAddCatalogsToCache
0d WINTRUST!CryptCATAdminEnumCatalogFromHash
0e sfc_os!SfcValidateFileSignature
0f sfc_os!SfcGetValidationData
10 sfc_os!SfcValidateDLL
11 sfc_os!SfcQueueValidationThread
12 kernel32!BaseThreadStart


1: kd> dv
dec = 0x01236c48
valref = 0x007ce504
id = 0x3a                    id = 0x3a
flags = 8
pbBuf = 0x01c155d0 "0???"
cbBufSize = 0x43
1: kd> dx -id 0,0,ffffffff89ce3d88 -r1 ((MSASN1!ASN1decoding_s *)0x1236c48)
((MSASN1!ASN1decoding_s *)0x1236c48)                 : 0x1236c48 [Type: ASN1decoding_s *]
[+0x000] magic            : 0x44434544 [Type: unsigned long]
[+0x004] version          : 0x0 [Type: unsigned long]
[+0x008] module           : 0x756c0 [Type: tagASN1module_t *]
[+0x00c] buf              : 0x175bcfb : 0x13 [Type: unsigned char *]
[+0x010] size             : 0x23 [Type: unsigned long]
[+0x014] len              : 0x23 [Type: unsigned long]
[+0x018] err              : ASN1_SUCCESS (0) [Type: tagASN1error_e]
[+0x01c] bit              : 0x0 [Type: unsigned long]
[+0x020] pos              : 0x175bd1e : 0x30 [Type: unsigned char *]
[+0x024] eRule            : ASN1_BER_RULE_DER (1024) [Type: ASN1encodingrule_e]
[+0x028] dwFlags          : 0x1000 [Type: unsigned long]


第三部分:

             if (ASN1_BER_RULE & dec->eRule)
{
ASN1BerDecFun_t pfnBER;
/* decode value */
if (NULL != (pfnBER = dec->module->BER.apfnDecoder[id]))
{
if ((*pfnBER)(dec, 0, *valref)) // lonchanc: tag is 0 to make it compiled
{
ASN1BERDecFlush(dec);
}

1: kd> dv
dec = 0x01236c48
valref = 0x007ce504
id = 0x3a
flags = 0xe8
pbBuf = 0x01c155d0 "0???"
cbBufSize = 0x43


1: kd> dx -id 0,0,ffffffff89ce3d88 -r1 ((MSASN1!ASN1decoding_s *)0x1236c48)
((MSASN1!ASN1decoding_s *)0x1236c48)                 : 0x1236c48 [Type: ASN1decoding_s *]
[+0x000] magic            : 0x44434544 [Type: unsigned long]
[+0x004] version          : 0x0 [Type: unsigned long]
[+0x008] module           : 0x756c0 [Type: tagASN1module_t *]
[+0x00c] buf              : 0x1c155d0 : 0x30 [Type: unsigned char *]
[+0x010] size             : 0x43 [Type: unsigned long]
[+0x014] len              : 0x0 [Type: unsigned long]
[+0x018] err              : ASN1_SUCCESS (0) [Type: tagASN1error_e]
[+0x01c] bit              : 0x0 [Type: unsigned long]
[+0x020] pos              : 0x1c155d0 : 0x30 [Type: unsigned char *]
[+0x024] eRule            : ASN1_BER_RULE_DER (1024) [Type: ASN1encodingrule_e]
[+0x028] dwFlags          : 0x1000 [Type: unsigned long]

1: kd> dx -id 0,0,ffffffff89ce3d88 -r1 ((MSASN1!tagASN1module_t *)0x756c0)
((MSASN1!tagASN1module_t *)0x756c0)                 : 0x756c0 [Type: tagASN1module_t *]
[+0x000] nModuleName      : 0x39303578 [Type: unsigned long]
[+0x004] eRule            : ASN1_BER_RULE_DER (1024) [Type: ASN1encodingrule_e]
[+0x008] dwFlags          : 0x1000 [Type: unsigned long]
[+0x00c] cPDUs            : 0x40 [Type: unsigned long]
[+0x010] apfnFreeMemory   : 0x75c1d4a8 [Type: void (**)(void *)]
[+0x014] acbStructSize    : 0x75c1d5a8 : 0x8 [Type: unsigned long *]
[+0x018] PER              [Type: tagASN1PerFunArr_t]
[+0x018] BER              [Type: tagASN1BerFunArr_t]


1: kd> dd 0x75c1d3a8
75c1d3a8  75c63a28 75c63a8b 75c7ae48 75c7ae6c
75c1d3b8  75c63ad5 75c63b1f 75c63b67 75c63dc0
75c1d3c8  75c6abf0 75c67833 75c640b9 75c6418d
75c1d3d8  75c8cf27 75c642c0 75c64568 75c646a0
75c1d3e8  75c64811 75c648d9 75c67995 75c64b84
75c1d3f8  75c67bdc 75c67d12 75c64c73 75c64daa
75c1d408  75c67f99 75c65267 75c654ca 75c6af0e
75c1d418  75c682e4 75c685bd 75c6875d 75c6b072
1: kd> dd 0x75c1d3a8+80
75c1d428  75c657fc 75c65917 75c68a19 75c65a75
75c1d438  75c68b29 75c65ba8 75c65d0a 75c65e0c
75c1d448  75c65f57 75c68edc 75c69215 75c660dd
75c1d458  75c69b4f 75c69c62 75c663e4 75c66688
75c1d468  75c667a9 75c66973 75c69e7e 75c6b412
75c1d478  75c66b07 75c6a109 75c66efe 75c67038
75c1d488  75c6a37e 75c671bf 75c6b711 75c6a73a

1: kd> u 75c6b711
CRYPT32!ASN1Dec_CertificateTrustList [d:\srv03rtm\ds\security\cryptoapi\pki\certstor\x509.c @ 6201]:
75c6b711 55              push    ebp
75c6b712 8bec            mov     ebp,esp
75c6b714 83ec10          sub     esp,10h
75c6b717 8b450c          mov     eax,dword ptr [ebp+0Ch]
75c6b71a 85c0            test    eax,eax
75c6b71c 7503            jne     CRYPT32!ASN1Dec_CertificateTrustList+0x10 (75c6b721)
75c6b71e 6a10            push    10h
75c6b720 58              pop     eax


static int ASN1CALL ASN1Dec_CertificateTrustList(ASN1decoding_t dec, ASN1uint32_t tag, CertificateTrustList *val);

typedef ASN1BerDecFun_t ASN1DecFun_t;
static const ASN1DecFun_t decfntab[64] = {
(ASN1DecFun_t) ASN1Dec_EncodedObjectID,
(ASN1DecFun_t) ASN1Dec_Bits,
(ASN1DecFun_t) ASN1Dec_IntegerType,
(ASN1DecFun_t) ASN1Dec_HugeIntegerType,
(ASN1DecFun_t) ASN1Dec_OctetStringType,
(ASN1DecFun_t) ASN1Dec_EnumeratedType,
(ASN1DecFun_t) ASN1Dec_UtcTime,
(ASN1DecFun_t) ASN1Dec_AnyString,
(ASN1DecFun_t) ASN1Dec_Name,
(ASN1DecFun_t) ASN1Dec_Attributes,
(ASN1DecFun_t) ASN1Dec_RSAPublicKey,
(ASN1DecFun_t) ASN1Dec_DSSParameters,
(ASN1DecFun_t) ASN1Dec_DSSSignature,
(ASN1DecFun_t) ASN1Dec_DHParameters,
(ASN1DecFun_t) ASN1Dec_RC2CBCParameters,
(ASN1DecFun_t) ASN1Dec_SMIMECapabilities,
(ASN1DecFun_t) ASN1Dec_SubjectPublicKeyInfo,
(ASN1DecFun_t) ASN1Dec_ChoiceOfTime,
(ASN1DecFun_t) ASN1Dec_Extensions,
(ASN1DecFun_t) ASN1Dec_SignedContent,
(ASN1DecFun_t) ASN1Dec_CertificationRequestInfo,
(ASN1DecFun_t) ASN1Dec_CertificationRequestInfoDecode,
(ASN1DecFun_t) ASN1Dec_KeygenRequestInfo,
(ASN1DecFun_t) ASN1Dec_AuthorityKeyId,
(ASN1DecFun_t) ASN1Dec_AltNames,
(ASN1DecFun_t) ASN1Dec_EDIPartyName,
(ASN1DecFun_t) ASN1Dec_BasicConstraints2,
(ASN1DecFun_t) ASN1Dec_CertificatePolicies,
(ASN1DecFun_t) ASN1Dec_CertificatePolicies95,
(ASN1DecFun_t) ASN1Dec_AuthorityKeyId2,
(ASN1DecFun_t) ASN1Dec_AuthorityInfoAccess,
(ASN1DecFun_t) ASN1Dec_CRLDistributionPoints,
(ASN1DecFun_t) ASN1Dec_ContentInfo,
(ASN1DecFun_t) ASN1Dec_SeqOfAny,
(ASN1DecFun_t) ASN1Dec_TimeStampRequest,
(ASN1DecFun_t) ASN1Dec_ContentInfoOTS,
(ASN1DecFun_t) ASN1Dec_TimeStampRequestOTS,
(ASN1DecFun_t) ASN1Dec_EnhancedKeyUsage,
(ASN1DecFun_t) ASN1Dec_EnrollmentNameValuePair,
(ASN1DecFun_t) ASN1Dec_CSPProvider,
(ASN1DecFun_t) ASN1Dec_CertificatePair,
(ASN1DecFun_t) ASN1Dec_IssuingDistributionPoint,
(ASN1DecFun_t) ASN1Dec_PolicyMappings,
(ASN1DecFun_t) ASN1Dec_PolicyConstraints,
(ASN1DecFun_t) ASN1Dec_CmcAddExtensions,
(ASN1DecFun_t) ASN1Dec_CmcAddAttributes,
(ASN1DecFun_t) ASN1Dec_CertificateTemplate,
(ASN1DecFun_t) ASN1Dec_Attribute,
(ASN1DecFun_t) ASN1Dec_X942DhParameters,
(ASN1DecFun_t) ASN1Dec_X942DhOtherInfo,
(ASN1DecFun_t) ASN1Dec_CertificateToBeSigned,
(ASN1DecFun_t) ASN1Dec_CertificateRevocationListToBeSigned,
(ASN1DecFun_t) ASN1Dec_KeyAttributes,
(ASN1DecFun_t) ASN1Dec_KeyUsageRestriction,
(ASN1DecFun_t) ASN1Dec_BasicConstraints,
(ASN1DecFun_t) ASN1Dec_UserNotice,
(ASN1DecFun_t) ASN1Dec_VerisignQualifier1,
(ASN1DecFun_t) ASN1Dec_ContentInfoSeqOfAny,
(ASN1DecFun_t) ASN1Dec_CertificateTrustList,


void ASN1CALL X509_Module_Startup(void)
{
X509_Module = ASN1_CreateModule(0x10000, ASN1_BER_RULE_DER, ASN1FLAGS_NOASSERT, 64, (const ASN1GenericFun_t *) encfntab, (const ASN1GenericFun_t *) decfntab, freefntab, sizetab,

0x39303578);
}


第四部分:

1: kd> t
MSASN1!ASN1_Decode+0xd8:
001b:75bf7e5a 8b491c          mov     ecx,dword ptr [ecx+1Ch]
1: kd> p
MSASN1!ASN1_Decode+0xdb:
001b:75bf7e5d 8b5514          mov     edx,dword ptr [ebp+14h]
1: kd> p
MSASN1!ASN1_Decode+0xde:
001b:75bf7e60 8b0c0a          mov     ecx,dword ptr [edx+ecx]
1: kd> p
MSASN1!ASN1_Decode+0xe1:
001b:75bf7e63 3bcb            cmp     ecx,ebx
1: kd> r
eax=012308a8 ebx=00000000 ecx=75c6b711

1: kd> u 75c6b711
CRYPT32!ASN1Dec_CertificateTrustList [d:\srv03rtm\ds\security\cryptoapi\pki\certstor\x509.c @ 6201]:
75c6b711 55              push    ebp
75c6b712 8bec            mov     ebp,esp
75c6b714 83ec10          sub     esp,10h
75c6b717 8b450c          mov     eax,dword ptr [ebp+0Ch]
75c6b71a 85c0            test    eax,eax
75c6b71c 7503            jne     CRYPT32!ASN1Dec_CertificateTrustList+0x10 (75c6b721)
75c6b71e 6a10            push    10h
75c6b720 58              pop     eax


第五部分:

1: kd> p
MSASN1!ASN1_Decode+0xe8:
001b:75bf7e6a ffd1            call    ecx
1: kd> r
eax=012308a8 ebx=00000000 ecx=75c6b711 edx=000000e8 esi=01236c48 edi=007ce504
eip=75bf7e6a esp=007ce488 ebp=007ce4a0 iopl=0         nv up ei pl nz na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000206
MSASN1!ASN1_Decode+0xe8:
001b:75bf7e6a ffd1            call    ecx {CRYPT32!ASN1Dec_CertificateTrustList (75c6b711)}
1: kd> t
CRYPT32!ASN1Dec_CertificateTrustList:
001b:75c6b711 55              push    ebp
1: kd> kc
#
00 CRYPT32!ASN1Dec_CertificateTrustList
01 MSASN1!ASN1_Decode
02 CRYPT32!PkiAsn1Decode
03 CRYPT32!PkiAsn1DecodeAndAllocInfo
04 CRYPT32!PkiAsn1DecodeAndAllocInfoEx
05 CRYPT32!Asn1InfoDecodeAndAllocEx
06 CRYPT32!Asn1X509CtlInfoDecodeEx
07 CRYPT32!CryptDecodeObjectEx
08 CRYPT32!AllocAndDecodeObject
09 CRYPT32!FastCreateCtlElement
0a CRYPT32!CertCreateContext
0b WINTRUST!CatUtil_CreateCTLContextFromFileName
0c WINTRUST!_CatAdminAddSingleCatalogToCache
0d WINTRUST!_CatAdminAddCatalogsToCache
0e WINTRUST!CryptCATAdminEnumCatalogFromHash
0f sfc_os!SfcValidateFileSignature
10 sfc_os!SfcGetValidationData
11 sfc_os!SfcValidateDLL
12 sfc_os!SfcQueueValidationThread
13 kernel32!BaseThreadStart

1: kd> dx -id 0,0,ffffffff89ce3d88 -r1 ((CRYPT32!ASN1decoding_s *)0x1236c48)
((CRYPT32!ASN1decoding_s *)0x1236c48)                 : 0x1236c48 [Type: ASN1decoding_s *]
[+0x000] magic            : 0x44434544 [Type: unsigned long]
[+0x004] version          : 0x0 [Type: unsigned long]
[+0x008] module           : 0x756c0 [Type: tagASN1module_t *]
[+0x00c] buf              : 0x1c155d0 : 0x30 [Type: unsigned char *]        [+0x00c] buf              : 0x1c155d0 : 0x30
[+0x010] size             : 0x43 [Type: unsigned long]                [+0x010] size             : 0x43
[+0x014] len              : 0x0 [Type: unsigned long]
[+0x018] err              : ASN1_SUCCESS (0) [Type: tagASN1error_e]
[+0x01c] bit              : 0x0 [Type: unsigned long]
[+0x020] pos              : 0x1c155d0 : 0x30 [Type: unsigned char *]
[+0x024] eRule            : ASN1_BER_RULE_DER (1024) [Type: ASN1encodingrule_e]
[+0x028] dwFlags          : 0x1000 [Type: unsigned long]
1: kd> db 0x1c155d0
01c155d0  30 80 30 0c 06 0a 2b 06-01 04 01 82 37 0c 01 01  0.0...+.....7...
01c155e0  04 10 bb fd 30 fb 6f a3-d9 40 82 26 85 87 87 cd  ....0.o..@.&....
01c155f0  89 4b 17 0d 32 34 30 39-31 35 30 33 34 35 30 36  .K..240915034506
01c15600  5a 30 0e 06 0a 2b 06 01-04 01 82 37 0c 01 02 05  Z0...+.....7....
01c15610  00 00 00 76 a0 6e c5 01-3b 01 0a 00 24 00 08 02  ...v.n..;...$...
01c15620  e0 45 77 01 08 a0 68 01-00 00 00 00 00 00 00 00  .Ew...h.........
01c15630  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
01c15640  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................

0044:       30 0c                               ; SEQUENCE (c Bytes)
0046:       |  06 0a                            ; OBJECT_IDENTIFIER (a Bytes)
0048:       |     2b 06 01 04 01 82 37 0c  01 01
|        ; "szOID_CATALOG_LIST (1.3.6.1.4.1.311.12.1.1)"
0052:       04 10                               ; OCTET_STRING (10 Bytes)
0054:       |  bb fd 30 fb 6f a3 d9 40  82 26 85 87 87 cd 89 4b  ; ..0.o..@.&.....K
0064:       17 0d                               ; UTCTime (d Bytes)
0066:       |  32 34 30 39 31 35 30 33  34 35 30 36 5a           ; 240915034506Z
|     ; "15.09.2024 11:45:06"
0073:       30 0e                               ; SEQUENCE (e Bytes)
0075:       |  06 0a                            ; OBJECT_IDENTIFIER (a Bytes)
0077:       |  |  2b 06 01 04 01 82 37 0c  01 02
|  |     ; "szOID_CATALOG_LIST_MEMBER (1.3.6.1.4.1.311.12.1.2)"
0081:       |  05 00                            ; NULL (0 Bytes)


第六部分:

1: kd> kv
# ChildEBP RetAddr  Args to Child              
00 007ce480 75bf7e6c 01236c48 00000000 012308a8 CRYPT32!ASN1Dec_CertificateTrustList (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\ds\security\cryptoapi\pki\certstor\x509.c @ 6201]
01 007ce4a0 75c9af2a 01236c48 007ce504 0000003a MSASN1!ASN1_Decode+0xea (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\enduser\msasn1\perfn.c @ 643]
02 007ce4c4 75c9b50d 01236c48 007ce504 0000003a CRYPT32!PkiAsn1Decode+0x1e (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\ds\security\cryptoapi\common\pkiutil\pkiasn1.cpp @ 224]
03 007ce4e4 75c9b64b 01236c48 0000003a 01c155d0 CRYPT32!PkiAsn1DecodeAndAllocInfo+0x1c (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\ds\security\cryptoapi\common\pkiutil\pkiasn1.cpp @ 1037]
04 007ce508 75c4959c 01236c48 0000003a 01c155d0 CRYPT32!PkiAsn1DecodeAndAllocInfoEx+0x1f (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\ds\security\cryptoapi\common\pkiutil\pkiasn1.cpp @

1176]
05 007ce534 75c4e39c 0000003a 01c155d0 00000043 CRYPT32!Asn1InfoDecodeAndAllocEx+0x2c (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\ds\security\cryptoapi\pki\certstor\wincert.cpp @ 2456]
06 007ce55c 75c49347 00000001 00000025 01c155d0 CRYPT32!Asn1X509CtlInfoDecodeEx+0x21 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\ds\security\cryptoapi\pki\certstor\wincert.cpp @ 10140]
07 007ce5c4 75c2b555 00000001 00000025 01c155d0 CRYPT32!CryptDecodeObjectEx+0x4d (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\ds\security\cryptoapi\pki\certstor\wincert.cpp @ 2223]
08 007ce5ec 75c2f05e 00000001 00000025 01c155d0 CRYPT32!AllocAndDecodeObject+0x2a (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\ds\security\cryptoapi\pki\certstor\newstor.cpp @ 1506]
09 007ce6fc 75c3337a 75ca7f98 00010001 017a0000 CRYPT32!FastCreateCtlElement+0x19e (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\ds\security\cryptoapi\pki\certstor\newstor.cpp @ 14901]
0a 007ce758 76812b50 00000002 00010001 017a0000 CRYPT32!CertCreateContext+0xee (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\ds\security\cryptoapi\pki\certstor\newstor.cpp @ 15197]
0b 007ce78c 7680b67f 00000f94 01c52c08 01c52c0c WINTRUST!CatUtil_CreateCTLContextFromFileName+0x108 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\ds\security\cryptoapi\common\pkiutil

\catutil.cpp @ 105]
0c 007ce7b8 7680c14f 01714ad8 01c52520 007ce7dc WINTRUST!_CatAdminAddSingleCatalogToCache+0xb4 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\ds\security\cryptoapi\pkitrust

\mscat32\catadnew.cpp @ 2670]
0d 007ce7ec 7680c899 01714ac0 016c99f0 007ce820 WINTRUST!_CatAdminAddCatalogsToCache+0xca (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\ds\security\cryptoapi\pkitrust\mscat32\catadnew.cpp @

2554]
0e 007ceab4 768373da 01714ac0 0007d3d0 00000014 WINTRUST!CryptCATAdminEnumCatalogFromHash+0x1d3 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\ds\security\cryptoapi\pkitrust

\mscat32\catadnew.cpp @ 906]
0f 007cf4b8 768378c5 01714ac0 00000d38 0011a568 sfc_os!SfcValidateFileSignature+0x22d (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\subsys\sm\sfc\dll\validate.c @ 299]
10 007cf4e0 768379c5 007cf510 007cf508 00000010 sfc_os!SfcGetValidationData+0xe0 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\subsys\sm\sfc\dll\validate.c @ 2165]
11 007cf724 76838a3d 0112916c 01714ac0 00000000 sfc_os!SfcValidateDLL+0xe4 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\subsys\sm\sfc\dll\validate.c @ 2251]
12 007cffb8 77e41be7 00000000 00000000 00000000 sfc_os!SfcQueueValidationThread+0x4ce (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\subsys\sm\sfc\dll\validate.c @ 1671]
13 007cffec 00000000 7683856f 00000000 00000000 kernel32!BaseThreadStart+0x34 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\win32\client\support.c @ 533]
windbg> .open -a 75c3337a


09 007ce6fc 75c3337a 75ca7f98 00010001 017a0000 CRYPT32!FastCreateCtlElement+0x19e

1: kd> db 017a0000
017a0000  30 83 09 69 2f 06 09 2a-86 48 86 f7 0d 01 07 02  0..i/..*.H......
017a0010  a0 83 09 69 1f 30 83 09-69 1a 02 01 01 31 0b 30  ...i.0..i....1.0
017a0020  09 06 05 2b 0e 03 02 1a-05 00 30 83 09 57 31 06  ...+......0..W1.
017a0030  09 2b 06 01 04 01 82 37-0a 01 a0 83 09 57 21 30  .+.....7.....W!0
017a0040  83 09 57 1c 30 0c 06 0a-2b 06 01 04 01 82 37 0c  ..W.0...+.....7.
017a0050  01 01 04 10 bb fd 30 fb-6f a3 d9 40 82 26 85 87  ......0.o..@.&..
017a0060  87 cd 89 4b 17 0d 32 34-30 39 31 35 30 33 34 35  ...K..2409150345
017a0070  30 36 5a 30 0e 06 0a 2b-06 01 04 01 82 37 0c 01  06Z0...+.....7..

第七部分:

1: kd> dv
dec = 0x01236c48
tag = 0
val = 0x012308a8
di0 = 0x00000040 "--- memory read error at address 0x00000040 ---"
t = 0x7ce504
dd = 0x00000000
di = 0x75bf8654 "???"
dd0 = 0x00000064
1: kd> dx -id 0,0,ffffffff89ce3d88 -r1 ((CRYPT32!CertificateTrustList *)0x12308a8)
((CRYPT32!CertificateTrustList *)0x12308a8)                 : 0x12308a8 [Type: CertificateTrustList *]
[+0x000] bit_mask         : 0x0 [Type: unsigned short]
[+0x000] o                [Type: unsigned char [1]]
[+0x004] version          : 0 [Type: long]
[+0x008] subjectUsage     [Type: EnhancedKeyUsage]
[+0x010] listIdentifier   [Type: tagASN1octetstring_t]
[+0x018] sequenceNumber   [Type: tagASN1intx_t]
[+0x020] ctlThisUpdate    [Type: ChoiceOfTime]
[+0x030] ctlNextUpdate    [Type: ChoiceOfTime]
[+0x040] subjectAlgorithm [Type: AlgorithmIdentifier]
[+0x054] trustedSubjects  [Type: TrustedSubjects]
[+0x05c] ctlExtensions    [Type: Extensions]


第八部分:

1: kd> gu
MSASN1!ASN1_Decode+0xea:
001b:75bf7e6c 85c0            test    eax,eax

1: kd>  dx -id 0,0,ffffffff89ce3d88 -r1 ((CRYPT32!CertificateTrustList *)0x12308a8)
((CRYPT32!CertificateTrustList *)0x12308a8)                 : 0x12308a8 [Type: CertificateTrustList *]
[+0x000] bit_mask         : 0x40 [Type: unsigned short]
[+0x000] o                [Type: unsigned char [1]]
[+0x004] version          : 0 [Type: long]
[+0x008] subjectUsage     [Type: EnhancedKeyUsage]
[+0x010] listIdentifier   [Type: tagASN1octetstring_t]
[+0x018] sequenceNumber   [Type: tagASN1intx_t]
[+0x020] ctlThisUpdate    [Type: ChoiceOfTime]
[+0x030] ctlNextUpdate    [Type: ChoiceOfTime]
[+0x040] subjectAlgorithm [Type: AlgorithmIdentifier]
[+0x054] trustedSubjects  [Type: TrustedSubjects]
[+0x05c] ctlExtensions    [Type: Extensions]
1: kd> dd 0x12308a8
012308a8  00000040 00000000 00000001 00072f70
012308b8  00000010 01c155e2 00000000 00000000
012308c8  09180001 062d030f 00000001 00000000
012308d8  00000000 00000000 00000000 00000000
012308e8  00000080 0000000a 01232a90 00000002
012308f8  01c1560f 00000000 00000000 00000000

第八部分A:


1: kd> dx -id 0,0,ffffffff89ce3d88 -r1 ((CRYPT32!CertificateTrustList *)0x12308a8)
((CRYPT32!CertificateTrustList *)0x12308a8)                 : 0x12308a8 [Type: CertificateTrustList *]
[+0x000] bit_mask         : 0x40 [Type: unsigned short]
[+0x000] o                [Type: unsigned char [1]]
[+0x004] version          : 0 [Type: long]
[+0x008] subjectUsage     [Type: EnhancedKeyUsage]

1: kd> dx -id 0,0,ffffffff89ce3d88 -r1 (*((CRYPT32!EnhancedKeyUsage *)0x12308b0))
(*((CRYPT32!EnhancedKeyUsage *)0x12308b0))                 [Type: EnhancedKeyUsage]
[+0x000] count            : 0x1 [Type: unsigned long]
[+0x004] value            : 0x72f70 [Type: tagASN1encodedOID_t *]
1: kd> dx -id 0,0,ffffffff89ce3d88 -r1 ((CRYPT32!tagASN1encodedOID_t *)0x72f70)
((CRYPT32!tagASN1encodedOID_t *)0x72f70)                 : 0x72f70 [Type: tagASN1encodedOID_t *]
[+0x000] length           : 0xa [Type: unsigned short]
[+0x004] value            : 0x7e9d0 : 0x2b [Type: unsigned char *]
1: kd> db 0x7e9d0
0007e9d0  2b 06 01 04 01 82 37 0c-01 01 00 00 00 00 00 00  +.....7.........


第八部分B:


1: kd> dx -id 0,0,ffffffff89ce3d88 -r1 ((CRYPT32!CertificateTrustList *)0x12308a8)
((CRYPT32!CertificateTrustList *)0x12308a8)                 : 0x12308a8 [Type: CertificateTrustList *]
[+0x000] bit_mask         : 0x40 [Type: unsigned short]
[+0x000] o                [Type: unsigned char [1]]
[+0x004] version          : 0 [Type: long]
[+0x008] subjectUsage     [Type: EnhancedKeyUsage]
[+0x010] listIdentifier   [Type: tagASN1octetstring_t]
1: kd> dx -id 0,0,ffffffff89ce3d88 -r1 (*((CRYPT32!tagASN1octetstring_t *)0x12308b8))
(*((CRYPT32!tagASN1octetstring_t *)0x12308b8))                 [Type: tagASN1octetstring_t]
[+0x000] length           : 0x10 [Type: unsigned long]
[+0x004] value            : 0x1c155e2 : 0xbb [Type: unsigned char *]
1: kd> dx -id 0,0,ffffffff89ce3d88 -r1 ((CRYPT32!unsigned char *)0x1c155e2)
((CRYPT32!unsigned char *)0x1c155e2)                 : 0x1c155e2 : 0xbb [Type: unsigned char *]
0xbb [Type: unsigned char]
1: kd> db 0x1c155e2
01c155e2  bb fd 30 fb 6f a3 d9 40-82 26 85 87 87 cd 89 4b  ..0.o..@.&.....K
01c155f2  17 0d 32 34 30 39 31 35-30 33 34 35 30 36 5a 30  ..240915034506Z0

第八部分C:

1: kd> dx -id 0,0,ffffffff89ce3d88 -r1 ((CRYPT32!CertificateTrustList *)0x12308a8)
((CRYPT32!CertificateTrustList *)0x12308a8)                 : 0x12308a8 [Type: CertificateTrustList *]
[+0x000] bit_mask         : 0x40 [Type: unsigned short]
[+0x000] o                [Type: unsigned char [1]]
[+0x004] version          : 0 [Type: long]
[+0x008] subjectUsage     [Type: EnhancedKeyUsage]
[+0x010] listIdentifier   [Type: tagASN1octetstring_t]
[+0x018] sequenceNumber   [Type: tagASN1intx_t]
[+0x020] ctlThisUpdate    [Type: ChoiceOfTime]
1: kd> dx -id 0,0,ffffffff89ce3d88 -r1 (*((CRYPT32!ChoiceOfTime *)0x12308c8))
(*((CRYPT32!ChoiceOfTime *)0x12308c8))                 [Type: ChoiceOfTime]
[+0x000] choice           : 0x1 [Type: unsigned short]
[+0x002] u                [Type: __unnamed]
1: kd> dx -id 0,0,ffffffff89ce3d88 -r1 (*((CRYPT32!__unnamed *)0x12308ca))
(*((CRYPT32!__unnamed *)0x12308ca))                 [Type: __unnamed]
[+0x000] utcTime          [Type: tagASN1utctime_t]
[+0x000] generalTime      [Type: tagASN1generalizedtime_t]
1: kd> dx -id 0,0,ffffffff89ce3d88 -r1 (*((CRYPT32!tagASN1utctime_t *)0x12308ca))
(*((CRYPT32!tagASN1utctime_t *)0x12308ca))                 [Type: tagASN1utctime_t]
[+0x000] year             : 0x18 [Type: unsigned char]                24
[+0x001] month            : 0x9 [Type: unsigned char]                09
[+0x002] day              : 0xf [Type: unsigned char]                      15 
[+0x003] hour             : 0x3 [Type: unsigned char]                03
[+0x004] minute           : 0x2d [Type: unsigned char]                45
[+0x005] second           : 0x6 [Type: unsigned char]                06
[+0x006] universal        : 0x1 [Type: unsigned char]
[+0x008] diff             : 0 [Type: short]


第九部分:


003f: 30 83 09 57 1c                            ; SEQUENCE (9571c Bytes)
0044:    30 0c                                  ; SEQUENCE (c Bytes)
0046:    |  06 0a                               ; OBJECT_IDENTIFIER (a Bytes)
0048:    |     2b 06 01 04 01 82 37 0c  01 01
|        ; "szOID_CATALOG_LIST (1.3.6.1.4.1.311.12.1.1)"
0052:    04 10                                  ; OCTET_STRING (10 Bytes)
0054:    |  bb fd 30 fb 6f a3 d9 40  82 26 85 87 87 cd 89 4b  ; ..0.o..@.&.....K
0064:    17 0d                                  ; UTCTime (d Bytes)
0066:    |  32 34 30 39 31 35 30 33  34 35 30 36 5a           ; 240915034506Z
|     ; "15.09.2024 11:45:06"
0073:    30 0e                                  ; SEQUENCE (e Bytes)
0075:    |  06 0a                               ; OBJECT_IDENTIFIER (a Bytes)
0077:    |  |  2b 06 01 04 01 82 37 0c  01 02
|  |     ; "szOID_CATALOG_LIST_MEMBER (1.3.6.1.4.1.311.12.1.2)"
0081:    |  05 00     

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/95392.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/95392.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型蒸馏、大模型微调、RAG

前言: 有很多同学想学习大模型开发,又无从下手,网上一搜,铺天盖地的付费课程。又不想当韭菜,打破认知障碍,通过自学,改变自己,改变世界! 一、大模型蒸馏、微调、RAG的适…

25高教社杯数模国赛【E题保姆级思路+问题分析】

注:本内容由”数模加油站“ 原创出品,虽无偿分享,但创作不易。 欢迎参考teach,但请勿抄袭、盗卖或商用。 E 题 AI辅助智能体测 《国家学生体质健康标准》的颁布,有效地促进了大中小学生关注自身体质健康的发展&#xf…

基于单片机车内换气温度检测空气质量检测系统Proteus仿真(含全部资料)

全套资料包含:Proteus仿真源文件keil C语言源程序AD原理图流程图元器件清单说明书等 资料下载: 通过网盘分享的文件:资料分享 链接: 百度网盘 请输入提取码 提取码: tgnu 目录 资料下载: Proteus仿真功能 项目文件资料&#…

MySQL子查询的分类讲解与实战

精选专栏链接 🔗 MySQL技术笔记专栏Redis技术笔记专栏大模型搭建专栏Python学习笔记专栏深度学习算法专栏 欢迎订阅,点赞+关注,每日精进1%,与百万开发者共攀技术珠峰 更多内容持续更新中!希望能给大家带来…

Leetcode 206. 反转链表 迭代/递归

原题链接:Leetcode 206. 反转链表 解法一:迭代 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* …

C++11新特性 | 欢迎来到现代C++的世界!

左值与右值 左值与右值的概念 可以被取地址的值为左值(left value,简称lvalue),否则为右值(right value,简称rvalue)。 常见的左值、右值例子: // >>>>>>> 左值…

因为对象装箱拆箱导致的空指针异常

今天业务突然提了个事件单,客户添加承租人一直报错,但是很奇怪,报错信息是空的二话不说,先跟API组要了接口和参数,然后看日志然鹅,这个接口并没有打印日志,只有一个e.printStackTrace()然后静下…

Rust 在 Windows 环境下交叉编译其他操作系统可执行文件的详细指南

前言:为什么需要交叉编译? 想象一下这样的场景:你在 Windows 电脑上开发了一个 Rust 程序,希望它能在 Linux 服务器上运行,或者在朋友的 macOS 电脑上测试 —— 总不能为了编译不同系统的版本,专门买一台 …

Ubuntu系统配置镜像源

要修改的文件 /etc/apt/sources.list操作步骤 1. 备份原文件 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak2. 编辑文件 sudo nano /etc/apt/sources.list3. 清空文件内容,填入以下内容 先获取Ubuntu版本代号: lsb_release -cs然后根据版本填…

【Spring Cloud Alibaba】Sentinel(一)

【Spring Cloud Alibaba】Sentinel(一)1. 简介2. 服务雪崩1. 简介 Sentinel 是阿里巴巴开源的分布式系统的流量防护组件,主要用来做流量控制、熔断降级、系统保护。它的定位类似于 Hystrix,但更侧重在 流量治理 上。目前在微服务…

Delphi 5 操作Word表格选区问题解析

在 Delphi 5 中操作 Word 时,您遇到的 Selection.MoveDown 方法选中整行而不是仅移动一行的原因与 Word 的选择机制和单元格内部结构有关。以下是详细解释和解决方案:问题分析单元格的选区范围:当使用 .Cell(r, c).Select 选中单元格时&#…

小米fastboot不能被电脑识别但手机正常使用模式时能被电脑识别

小米手机USB连接电脑不识别解决方法 – MIUI历史版本 小米手机USB连接电脑不识别解决方法 问题经验 手机连接电脑通常会自动安装驱动,如果驱动安装失败或是电脑不能识别手机设备,可尝试下面方法。 1. 尝试换根 USB 数据线,最好是手机原…

Git 版本管理工具基本操作汇总—命令总结

通常,很多朋友在使用 Git 的时候都会直接用 IDE 中集成的插件或者自带的工具等来实现代码的拉取、提交、合并以及其他操作,当然这肯定也是可以的,但是长期这样子操作,我们就会忽略掉 Git 业务运行的底层逻辑。那么,我这…

自学嵌入式第三十三天:网络编程-UDP

一、OSI模型(open system interconnect)开放系统互联模型,分为7层应用层:为网络用户提供各种服务,例如电子邮件、文件传输等;表示层:为不同主机间的通信提供统一的数据表示形式。加密解密,压缩;…

A*(Astar)算法详解与应用

算法背景A*(A-Star)算法是一种在图形平面上,有多个节点的路径中,求出最低通过成本的算法。其历史可以追溯到早期的图搜索算法,如Dijkstra算法和贪心最佳优先搜索(Greedy Best-First Search)。是…

word删除指定页面

常规程序因为wps的 .docx 文件是基于段落和节的结构,而不是“物理页”,所以无法直接按“第几页”删除在普通程序里面无法读取到他的页码,但是在宏编程里面他能读取到页码,我们就根据宏编程来这样删除。程序会自动打开选择要删除的…

RK3568平台开发系列讲解:瑞芯微平台4G模块篇移植

更多内容可以加入Linux系统知识库套餐(教程+视频+答疑) 🚀返回专栏总目录 文章目录 一、硬件图片 二、功能宏 三、增加PID/VID 支持 3.1、usb_device_id 结构体 3.2、usb_device_id 的注册 沉淀、分享、成长,让自己和他人都能有所收获!😄 一、硬件图片 目标: 结果…

面试 (一)

目录 1. HashMap是怎么解决冲突的 是用什么数据结构实现的 2. 为什么hashmap的初始长度为16 3. 多线程的核心参数 4. 多线程怎么工作的 5. CISCS是怎么实现的 6. JUC知识 7. C和java的区别 8. JVM底层编译的东西 9. 公平锁和非公平锁 10. 有人恶意攻击你的平台每秒发送…

计算机毕设选题:基于Python+Django的健康饮食管理系统设计【源码+文档+调试】

精彩专栏推荐订阅:在 下方专栏👇🏻👇🏻👇🏻👇🏻 💖🔥作者主页:计算机毕设木哥🔥 💖 文章目录 一、项目介绍二…