@@ -10,10 +10,14 @@ HMODULE hModCrypt32 = NULL, hModMssign32 = NULL, hModKernel32 = NULL;
1010using  fntCertVerifyTimeValidity = decltype (CertVerifyTimeValidity);
1111using  fntSignerSign = decltype (SignerSign);
1212using  fntSignerTimeStamp = decltype (SignerTimeStamp);
13+ using  fntSignerTimeStampEx2 = decltype (SignerTimeStampEx2);
14+ using  fntSignerTimeStampEx3 = decltype (SignerTimeStampEx3);
1315using  fntGetLocalTime = decltype (GetLocalTime);
1416fntCertVerifyTimeValidity* pOldCertVerifyTimeValidity = NULL ;
1517fntSignerSign* pOldSignerSign = NULL ;
1618fntSignerTimeStamp* pOldSignerTimeStamp = NULL ;
19+ fntSignerTimeStampEx2* pOldSignerTimeStampEx2 = NULL ;
20+ fntSignerTimeStampEx3* pOldSignerTimeStampEx3 = NULL ;
1721fntGetLocalTime* pOldGetLocalTime = NULL ;
1822
1923int  year = -1 , month = -1 , day = -1 , hour = -1 , minute = -1 , second = -1 ;
@@ -66,6 +70,33 @@ HRESULT WINAPI NewSignerTimeStamp(
6670{
6771    return  (*pOldSignerTimeStamp)(pSubjectInfo, ReplaceTimeStamp (pwszHttpTimeStamp), psRequest, pSipData);
6872}
73+ HRESULT WINAPI NewSignerTimeStampEx2 (
74+     _Reserved_ DWORD               dwFlags,
75+     _In_       SIGNER_SUBJECT_INFO* pSubjectInfo,
76+     _In_       LPCWSTR             pwszHttpTimeStamp,
77+     _In_       ALG_ID              dwAlgId,
78+     _In_       PCRYPT_ATTRIBUTES   psRequest,
79+     _In_       LPVOID              pSipData,
80+     _Out_      SIGNER_CONTEXT** ppSignerContext
81+ )
82+ {
83+     return  (*pOldSignerTimeStampEx2)(dwFlags, pSubjectInfo, ReplaceTimeStamp (pwszHttpTimeStamp), dwAlgId, psRequest, pSipData, ppSignerContext);
84+ }
85+ HRESULT WINAPI NewSignerTimeStampEx3 (
86+     _In_       DWORD                  dwFlags,
87+     _In_       DWORD                  dwIndex,
88+     _In_       SIGNER_SUBJECT_INFO* pSubjectInfo,
89+     _In_       PCWSTR                 pwszHttpTimeStamp,
90+     _In_       PCWSTR                 pszAlgorithmOid,
91+     _In_opt_   PCRYPT_ATTRIBUTES      psRequest,
92+     _In_opt_   PVOID                  pSipData,
93+     _Out_      SIGNER_CONTEXT** ppSignerContext,
94+     _In_opt_   PCERT_STRONG_SIGN_PARA pCryptoPolicy,
95+     _Reserved_ PVOID                  pReserved
96+ )
97+ {
98+     return  (*pOldSignerTimeStampEx3)(dwFlags, dwIndex, pSubjectInfo, ReplaceTimeStamp (pwszHttpTimeStamp), pszAlgorithmOid, psRequest, pSipData, ppSignerContext, pCryptoPolicy, pReserved);
99+ }
69100void  WINAPI NewGetLocalTime (
70101    LPSYSTEMTIME lpSystemTime
71102)
@@ -95,25 +126,34 @@ bool HookFunctions()
95126    if  ((pOldCertVerifyTimeValidity = (fntCertVerifyTimeValidity*)GetProcAddress (hModCrypt32, " CertVerifyTimeValidity" NULL 
96127        || (pOldSignerSign = (fntSignerSign*)GetProcAddress (hModMssign32, " SignerSign" NULL 
97128        || (pOldSignerTimeStamp = (fntSignerTimeStamp*)GetProcAddress (hModMssign32, " SignerTimeStamp" NULL 
129+         || (pOldSignerTimeStampEx2 = (fntSignerTimeStampEx2*)GetProcAddress (hModMssign32, " SignerTimeStampEx2" NULL 
130+         || ((pOldSignerTimeStampEx3 = (fntSignerTimeStampEx3*)GetProcAddress (hModMssign32, " SignerTimeStampEx3" NULL  && FALSE )
131+         /*  SignerTimeStampEx3 does not exist in Windows 7 */ 
98132        || (pOldGetLocalTime = (fntGetLocalTime*)GetProcAddress (hModKernel32, " GetLocalTime" NULL )
99133        return  false ;
100134
101135    if  (DetourTransactionBegin () != NO_ERROR
102136        || DetourAttach (&(PVOID&)pOldCertVerifyTimeValidity, NewCertVerifyTimeValidity) != NO_ERROR
103137        || DetourAttach (&(PVOID&)pOldSignerSign, NewSignerSign) != NO_ERROR
104138        || DetourAttach (&(PVOID&)pOldSignerTimeStamp, NewSignerTimeStamp) != NO_ERROR
139+         || DetourAttach (&(PVOID&)pOldSignerTimeStampEx2, NewSignerTimeStampEx2) != NO_ERROR
140+         || (pOldSignerTimeStampEx3 != NULL  ? DetourAttach (&(PVOID&)pOldSignerTimeStampEx3, NewSignerTimeStampEx3) != NO_ERROR : FALSE )
141+         /*  SignerTimeStampEx3 does not exist in Windows 7 */ 
105142        || DetourAttach (&(PVOID&)pOldGetLocalTime, NewGetLocalTime) != NO_ERROR
106143        || DetourTransactionCommit () != NO_ERROR)
107144        return  false ;
145+ 
108146    return  true ;
109147}
110148bool  ParseConfig (LPWSTR lpCommandLineConfig, LPWSTR lpCommandLineTimestamp)
111149{
112150    LPWSTR buf = new  WCHAR[260 ];
113151    memset (buf, 0 , sizeof (WCHAR) * 260 );
152+ 
114153    if  (_wgetcwd (buf, 260 ) == NULL )
115154        return  false ;
116155    wcscat (buf, L" \\ " 
156+ 
117157    if  (lpCommandLineConfig) {
118158        if  ((wcschr (lpCommandLineConfig, L' :' 1 ) {
119159            memset (buf, 0 , sizeof (WCHAR) * 260 );
@@ -138,6 +178,7 @@ bool ParseConfig(LPWSTR lpCommandLineConfig, LPWSTR lpCommandLineTimestamp)
138178        wsprintfW (lpTimestamp, lpCommandLineTimestamp);
139179    else 
140180        GetPrivateProfileStringW (L" Timestamp" L" Timestamp" NULL , lpTimestamp, 20 , buf);
181+     
141182    return  true ;
142183}
143184BOOL WINAPI DllMain (
@@ -160,11 +201,15 @@ BOOL WINAPI DllMain(
160201            if  (!wcscmp (szArglist[i], L" -ts" 
161202                its = i + 1 ;
162203        }
204+ 
163205        if  (!ParseConfig (iconfig >= 0  ? szArglist[iconfig] : NULL , its >= 0  ? szArglist[its] : NULL ))
164206            MessageBoxW (NULL , L" 配置初始化失败,请检查hook.ini和命令行参数!" L" 初始化失败" 
207+         
165208        LocalFree (szArglist);
209+ 
166210        if  (!HookFunctions ())
167211            MessageBoxW (NULL , L" 出现错误,无法Hook指定的函数\r\n 请关闭程序重试!" L" Hook失败" 
212+         
168213        MessageBoxW (NULL , lpTimestamp, L" 自定义时间戳为" 
169214    }
170215    return  1 ;
0 commit comments