From 75ea5b7f51baf73b9b480939438b582dc0a1e58f Mon Sep 17 00:00:00 2001 From: deepzero Date: Wed, 15 Jan 2014 11:32:00 +0100 Subject: [PATCH] various improvements and bugfixes to initialization of memory - far, far, far from complete. --- TitanEngine/TitanEngine.cpp | 39 +++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/TitanEngine/TitanEngine.cpp b/TitanEngine/TitanEngine.cpp index ed77ce8..9612fbe 100644 --- a/TitanEngine/TitanEngine.cpp +++ b/TitanEngine/TitanEngine.cpp @@ -484,7 +484,7 @@ static char* EngineExtractPath(char* szFileName) { int i; - RtlZeroMemory(&engineExtractedFolderName, 512); + RtlZeroMemory(&engineExtractedFolderName, sizeof(engineExtractedFolderName)); lstrcpyA(engineExtractedFolderName, szFileName); i = lstrlenA(engineExtractedFolderName); while(i > 0 && engineExtractedFolderName[i] != 0x5C) @@ -502,7 +502,7 @@ char* EngineExtractFileName(char* szFileName) int x = 0; i = lstrlenA(szFileName); - RtlZeroMemory(&engineExtractedFileName, 512); + RtlZeroMemory(&engineExtractedFileName, sizeof(engineExtractedFileName)); while(i > 0 && szFileName[i] != 0x5C) { i--; @@ -919,11 +919,10 @@ bool EngineIsDependencyPresent(char* szFileName, char* szDependencyForFile, char { int i,j; HANDLE hFile; - char szTryFileName[512]; + char szTryFileName[512] = {0}; if(szPresentInFolder != NULL && szFileName != NULL) { - RtlZeroMemory(&szTryFileName, 512); lstrcpyA(szTryFileName, szPresentInFolder); if(szTryFileName[lstrlenA(szTryFileName)-1] != 0x5C) { @@ -995,11 +994,10 @@ bool EngineIsDependencyPresentW(wchar_t* szFileName, wchar_t* szDependencyForFil int i,j; HANDLE hFile; - wchar_t szTryFileName[512]; + wchar_t szTryFileName[512] = {0}; if(szPresentInFolder != NULL) { - RtlZeroMemory(&szTryFileName, 512); lstrcpyW(szTryFileName, szPresentInFolder); if(szTryFileName[lstrlenW(szTryFileName)-1] != 0x5C) { @@ -1045,7 +1043,6 @@ bool EngineIsDependencyPresentW(wchar_t* szFileName, wchar_t* szDependencyForFil } if(szDependencyForFile != NULL) { - RtlZeroMemory(&szTryFileName, 512); i = lstrlenW(szDependencyForFile); while(i > 0 && szDependencyForFile[i] != 0x5C) { @@ -1071,7 +1068,7 @@ bool EngineGetDependencyLocation(char* szFileName, char* szDependencyForFile, vo int i,j; HANDLE hFile; - char szTryFileName[512]; + char szTryFileName[512] = {0}; if(szFileName != NULL) { @@ -1179,7 +1176,7 @@ long EngineHashMemory(char* MemoryAddress, int MemorySize, DWORD InitialHashValu bool EngineIsBadReadPtrEx(LPVOID DataPointer, DWORD DataSize) { - MEMORY_BASIC_INFORMATION MemInfo; + MEMORY_BASIC_INFORMATION MemInfo = {0}; while(DataSize > NULL) { @@ -1734,11 +1731,11 @@ long long EngineGlobalAPIHandler(HANDLE handleProcess, ULONG_PTR EnumedModulesBa HANDLE hProcess = NULL; ULONG_PTR EnumeratedModules[0x2000]; ULONG_PTR LoadedModules[1000][4]; - char RemoteDLLName[MAX_PATH]; - char FullRemoteDLLName[MAX_PATH]; - char szWindowsSideBySide[MAX_PATH]; - char szWindowsSideBySideCmp[MAX_PATH]; - char szWindowsKernelBase[MAX_PATH]; + char RemoteDLLName[MAX_PATH]={0}; + char FullRemoteDLLName[MAX_PATH]={0}; + char szWindowsSideBySide[MAX_PATH]={0}; + char szWindowsSideBySideCmp[MAX_PATH]={0}; + char szWindowsKernelBase[MAX_PATH]={0}; HANDLE hLoadedModule = NULL; HANDLE ModuleHandle = NULL; PIMAGE_DOS_HEADER DOSHeader; @@ -1757,15 +1754,15 @@ long long EngineGlobalAPIHandler(HANDLE handleProcess, ULONG_PTR EnumedModulesBa unsigned int FoundIndex = 0; unsigned int FoundOrdinalNumber = 0; ULONG_PTR FileMapVA; - char szFwdDLLName[512]; - char szFwdAPIName[512]; + char szFwdDLLName[512] = {0}; + char szFwdAPIName[512] = {0}; ULONG_PTR RealignedAPIAddress; ULONG_PTR ForwarderData = NULL; unsigned int ClosestAPI = 0x1000; int Vista64UserForwarderFix = 0; unsigned int Windows7KernelBase = 0xFFFFFFFF; - RtlZeroMemory(&engineFoundDLLName, 512); + RtlZeroMemory(&engineFoundDLLName, sizeof(szFwdDLLName)); RtlZeroMemory(&EnumeratedModules, 0x2000 * sizeof ULONG_PTR); RtlZeroMemory(&LoadedModules, 1000 * 4 * sizeof ULONG_PTR); GetWindowsDirectoryA(szWindowsSideBySide, MAX_PATH); @@ -1959,7 +1956,7 @@ long long EngineGlobalAPIHandler(HANDLE handleProcess, ULONG_PTR EnumedModulesBa ExportedFunctionNames = (PEXPORTED_DATA)(PEExports->AddressOfNames + LoadedModules[i][1]); ExportedFunctionOrdinals = (PEXPORTED_DATA_WORD)(PEExports->AddressOfNameOrdinals + LoadedModules[i][1]); GetModuleBaseNameA(hProcess, (HMODULE)LoadedModules[i][0], (LPSTR)engineFoundDLLName, 512); - RtlZeroMemory(&engineFoundAPIName, 512); + RtlZeroMemory(&engineFoundAPIName, sizeof(engineFoundAPIName)); x = n; FoundOrdinalNumber = (unsigned int)PEExports->Base; for(j = 0; j < PEExports->NumberOfNames; j++) @@ -2042,7 +2039,7 @@ long long EngineGlobalAPIHandler(HANDLE handleProcess, ULONG_PTR EnumedModulesBa if(ExportedFunctions->ExportedItem + LoadedModules[i][0] == APIAddress) { GetModuleBaseNameA(hProcess, (HMODULE)LoadedModules[i][0], (LPSTR)engineFoundDLLName, 512); - RtlZeroMemory(&engineFoundAPIName, 512); + RtlZeroMemory(&engineFoundAPIName, sizeof(engineFoundAPIName)); x = j; FoundOrdinalNumber = (unsigned int)PEExports->Base; for(j = 0; j < PEExports->NumberOfNames; j++) @@ -2078,7 +2075,7 @@ long long EngineGlobalAPIHandler(HANDLE handleProcess, ULONG_PTR EnumedModulesBa ExportedFunctionOrdinals = (PEXPORTED_DATA_WORD)((ULONG_PTR)ExportedFunctionOrdinals + j * 2); ExportedFunctions = (PEXPORTED_DATA)((ULONG_PTR)ExportedFunctions + (ExportedFunctionOrdinals->OrdinalNumber) * 4); GetModuleBaseNameA(hProcess, (HMODULE)LoadedModules[i][0], (LPSTR)engineFoundDLLName, 512); - RtlZeroMemory(&engineFoundAPIName, 512); + RtlZeroMemory(&engineFoundAPIName, sizeof(engineFoundAPIName)); ExportedFunctions = (PEXPORTED_DATA)((ULONG_PTR)ExportedFunctions + (j + PEExports->Base) * 4); APIFoundAddress = ExportedFunctions->ExportedItem + LoadedModules[i][0]; APINameFound = true; @@ -2091,7 +2088,7 @@ long long EngineGlobalAPIHandler(HANDLE handleProcess, ULONG_PTR EnumedModulesBa } __except(EXCEPTION_EXECUTE_HANDLER) { - RtlZeroMemory(&engineFoundAPIName, 512); + RtlZeroMemory(&engineFoundAPIName, sizeof(engineFoundAPIName)); APINameFound = false; } }