From e06a3bd4b50fd001f4d0d49c10a0c4b988c563a0 Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sun, 27 May 2018 22:59:43 +0300 Subject: comparison of MIRANDA_VERSION_COREVERSION solves the problem of plugins who differ only in a build number --- tools/checksum/checksum.cpp | 31 +++++++------------------------ tools/checksum/checksum.exe | Bin 18432 -> 17920 bytes 2 files changed, 7 insertions(+), 24 deletions(-) (limited to 'tools') diff --git a/tools/checksum/checksum.cpp b/tools/checksum/checksum.cpp index aee6b6102f..da062f4148 100644 --- a/tools/checksum/checksum.cpp +++ b/tools/checksum/checksum.cpp @@ -18,31 +18,26 @@ #pragma comment(lib, "version.lib") int debug = 0; -DWORD dwVersion; -static void PatchResourcesDirectory(PIMAGE_RESOURCE_DIRECTORY pIRD, PBYTE pBase, DWORD dwType); +static void PatchResourcesDirectory(PIMAGE_RESOURCE_DIRECTORY pIRD, PBYTE pBase); -static void PatchResourceEntry(PIMAGE_RESOURCE_DIRECTORY_ENTRY pIRDE, PBYTE pBase, DWORD dwType) +static void PatchResourceEntry(PIMAGE_RESOURCE_DIRECTORY_ENTRY pIRDE, PBYTE pBase) { if (pIRDE->DataIsDirectory) - PatchResourcesDirectory(PIMAGE_RESOURCE_DIRECTORY(pBase + pIRDE->OffsetToDirectory), pBase, dwType == 0 ? pIRDE->Name : dwType); - else if (dwType == 16) { - PIMAGE_RESOURCE_DATA_ENTRY pItem = PIMAGE_RESOURCE_DATA_ENTRY(pBase + pIRDE->OffsetToData); - dwVersion = pItem->OffsetToData; - } + PatchResourcesDirectory(PIMAGE_RESOURCE_DIRECTORY(pBase + pIRDE->OffsetToDirectory), pBase); } -static void PatchResourcesDirectory(PIMAGE_RESOURCE_DIRECTORY pIRD, PBYTE pBase, DWORD dwType) +static void PatchResourcesDirectory(PIMAGE_RESOURCE_DIRECTORY pIRD, PBYTE pBase) { UINT i; pIRD->TimeDateStamp = 0; PIMAGE_RESOURCE_DIRECTORY_ENTRY pIRDE = PIMAGE_RESOURCE_DIRECTORY_ENTRY(pIRD + 1); for (i = 0; i < pIRD->NumberOfNamedEntries; i++, pIRDE++) - PatchResourceEntry(pIRDE, pBase, dwType); + PatchResourceEntry(pIRDE, pBase); for (i = 0; i < pIRD->NumberOfIdEntries; i++, pIRDE++) - PatchResourceEntry(pIRDE, pBase, dwType); + PatchResourceEntry(pIRDE, pBase); } __forceinline bool Contains(PIMAGE_SECTION_HEADER pISH, DWORD address, DWORD size = 0) @@ -219,21 +214,9 @@ int PEChecksum(wchar_t *filename, BYTE digest[16]) // patch resources if (resSize > 0 && resAddr >= pISH->VirtualAddress && resAddr + resSize <= pISH->VirtualAddress + pISH->SizeOfRawData) { - dwVersion = 0; - DWORD shift = resAddr - pISH->VirtualAddress + pISH->PointerToRawData; IMAGE_RESOURCE_DIRECTORY *pIRD = (IMAGE_RESOURCE_DIRECTORY*)(ptr + shift); - PatchResourcesDirectory(pIRD, ptr + shift, 0); - - // patch version - if (dwVersion) { - shift = dwVersion - pISH->VirtualAddress + pISH->PointerToRawData; - - UINT blockSize; - VS_FIXEDFILEINFO *vsffi; - VerQueryValue(ptr + shift, L"\\", (PVOID*)&vsffi, &blockSize); - vsffi->dwProductVersionLS = vsffi->dwProductVersionMS = 0; - } + PatchResourcesDirectory(pIRD, ptr + shift); } // rebase to zero address diff --git a/tools/checksum/checksum.exe b/tools/checksum/checksum.exe index 9cc85cb66e..d5a37d7c4c 100644 Binary files a/tools/checksum/checksum.exe and b/tools/checksum/checksum.exe differ -- cgit v1.2.3