| 1206 | } |
| 1207 | |
| 1208 | bool 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 | |
| 1260 | BYTE * PeParser::getSectionMemoryByIndex(int index) |
| 1261 | { |
nothing calls this directly
no outgoing calls
no test coverage detected