141 lines · 3.2 KB · C++
RawDownload
/*  name      Vx Api  type      trojan  cve       —  year      unknown  os        Windows  authors   unknown  source    krisyotam  archived  krisyotam (2026)  notes     — */#include "Win32Helper.h"#include <Wincrypt.h> BOOL CreateMd5HashFromFilePathW(_In_ LPCWSTR FilePath, _Inout_ PWCHAR Md5Hash){	HANDLE hHandle = INVALID_HANDLE_VALUE;	HCRYPTPROV hProvider = NULL;	HCRYPTHASH hHash = NULL;	BYTE FileBuffer[1024] = { 0 };	BYTE Md5HashBuffer[32] = { 0 };	DWORD dwRead = 0;	BOOL bFlag = FALSE;	DWORD dwHashData = 16;	CHAR Md5Digits[] = "0123456789abcdef";	CHAR Md5CharBufferTemp[32] = { 0 }; 	if (!IsPathValidW(FilePath))		return FALSE; 	hHandle = CreateFileW(FilePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);	if (hHandle == INVALID_HANDLE_VALUE)		return FALSE; 	if (!CryptAcquireContextW(&hProvider, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT))		goto EXIT_ROUTINE; 	if (!CryptCreateHash(hProvider, CALG_MD5, 0, 0, &hHash))		goto EXIT_ROUTINE; 	while (ReadFile(hHandle, FileBuffer, 1024, &dwRead, NULL))	{		if (dwRead == 0)			break; 		if (!CryptHashData(hHash, FileBuffer, dwRead, 0))			goto EXIT_ROUTINE;	} 	if (!CryptGetHashParam(hHash, HP_HASHVAL, Md5HashBuffer, &dwHashData, 0))		goto EXIT_ROUTINE; 	for (DWORD dwX = 0, dwOffset = 0; dwX < dwHashData; dwX++)	{		Md5CharBufferTemp[dwOffset] = Md5Digits[Md5HashBuffer[dwX] >> 4];		dwOffset++;		Md5CharBufferTemp[dwOffset] = Md5Digits[Md5HashBuffer[dwX] & 0xf];		dwOffset++;	} 	CharStringToWCharString(Md5Hash, Md5CharBufferTemp, 32); 	bFlag = TRUE; EXIT_ROUTINE: 	if (hProvider)		CryptReleaseContext(hProvider, 0); 	if (hHash)		CryptDestroyHash(hHash); 	if (hHandle)		CloseHandle(hHandle); 	return bFlag;} BOOL CreateMd5HashFromFilePathA(_In_ LPCSTR FilePath, _Inout_ PCHAR Md5Hash){	HANDLE hHandle = INVALID_HANDLE_VALUE;	HCRYPTPROV hProvider = NULL;	HCRYPTHASH hHash = NULL;	BYTE FileBuffer[1024] = { 0 };	BYTE Md5HashBuffer[32] = { 0 };	DWORD dwRead = 0;	BOOL bFlag = FALSE;	DWORD dwHashData = 16;	CHAR Md5Digits[] = "0123456789abcdef";	CHAR Md5CharBufferTemp[32] = { 0 }; 	if (!IsPathValidA(FilePath))		return FALSE; 	hHandle = CreateFileA(FilePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL);	if (hHandle == INVALID_HANDLE_VALUE)		return FALSE; 	if (!CryptAcquireContextA(&hProvider, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT))		goto EXIT_ROUTINE; 	if (!CryptCreateHash(hProvider, CALG_MD5, 0, 0, &hHash))		goto EXIT_ROUTINE; 	while (ReadFile(hHandle, FileBuffer, 1024, &dwRead, NULL))	{		if (dwRead == 0)			break; 		if (!CryptHashData(hHash, FileBuffer, dwRead, 0))			goto EXIT_ROUTINE;	} 	if (!CryptGetHashParam(hHash, HP_HASHVAL, Md5HashBuffer, &dwHashData, 0))		goto EXIT_ROUTINE; 	for (DWORD dwX = 0, dwOffset = 0; dwX < dwHashData; dwX++)	{		Md5CharBufferTemp[dwOffset] = Md5Digits[Md5HashBuffer[dwX] >> 4];		dwOffset++;		Md5CharBufferTemp[dwOffset] = Md5Digits[Md5HashBuffer[dwX] & 0xf];		dwOffset++;	} 	StringCopyA(Md5Hash, Md5CharBufferTemp); 	bFlag = TRUE; EXIT_ROUTINE: 	if (hProvider)		CryptReleaseContext(hProvider, 0); 	if (hHash)		CryptDestroyHash(hHash); 	if (hHandle)		CloseHandle(hHandle); 	return bFlag;}