MCPcopy Create free account
hub / github.com/NtQuery/Scylla / updatePeHeaderChecksum

Method updatePeHeaderChecksum

Scylla/PeParser.cpp:1208–1258  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1206}
1207
1208bool PeParser::updatePeHeaderChecksum(const WCHAR * targetFile, DWORD fileSize)
1209{
1210 PIMAGE_NT_HEADERS32 pNTHeader32 = 0;
1211 PIMAGE_NT_HEADERS64 pNTHeader64 = 0;
1212 DWORD headerSum = 0;
1213 DWORD checkSum = 0;
1214 bool retValue = false;
1215
1216 if (!fileSize)
1217 return retValue;
1218
1219 HANDLE hFileToMap = CreateFile(targetFile, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
1220
1221 if(hFileToMap != INVALID_HANDLE_VALUE)
1222 {
1223 HANDLE hMappedFile = CreateFileMapping(hFileToMap, 0, PAGE_READWRITE, 0, 0, 0);
1224 if(hMappedFile)
1225 {
1226 if (GetLastError() != ERROR_ALREADY_EXISTS)
1227 {
1228 LPVOID addrMappedDll = MapViewOfFile(hMappedFile, FILE_MAP_ALL_ACCESS, 0, 0, 0);
1229
1230 if (addrMappedDll)
1231 {
1232 pNTHeader32 = (PIMAGE_NT_HEADERS32)CheckSumMappedFile(addrMappedDll, fileSize, &headerSum, &checkSum);
1233
1234 if (pNTHeader32)
1235 {
1236 if (pNTHeader32->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC)
1237 {
1238 pNTHeader64 = (PIMAGE_NT_HEADERS64)pNTHeader32;
1239 pNTHeader64->OptionalHeader.CheckSum = checkSum;
1240 }
1241 else
1242 {
1243 pNTHeader32->OptionalHeader.CheckSum = checkSum;
1244 }
1245
1246 retValue = true;
1247 }
1248
1249 UnmapViewOfFile(addrMappedDll);
1250 }
1251 }
1252 CloseHandle(hMappedFile);
1253 }
1254 CloseHandle(hFileToMap);
1255 }
1256
1257 return retValue;
1258}
1259
1260BYTE * PeParser::getSectionMemoryByIndex(int index)
1261{

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected