From 1bf642339836688768f5e892568a3936e83bc2a7 Mon Sep 17 00:00:00 2001 From: Ceiridge Date: Sun, 24 May 2020 18:27:33 +0200 Subject: [PATCH] Preferring the original byte in the pattern over the given one --- ChromeDevExtWarningPatcher/Patches/BytePatchManager.cs | 8 +++++++- ChromeDevExtWarningPatcher/Patches/BytePatchPattern.cs | 6 +++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/ChromeDevExtWarningPatcher/Patches/BytePatchManager.cs b/ChromeDevExtWarningPatcher/Patches/BytePatchManager.cs index 641a79c..8988c0b 100644 --- a/ChromeDevExtWarningPatcher/Patches/BytePatchManager.cs +++ b/ChromeDevExtWarningPatcher/Patches/BytePatchManager.cs @@ -126,11 +126,17 @@ public bool PatchBytes(ref byte[] raw, bool x64, BytePatchPattern.WriteToLog log patches++; continue; } - long addr = patch.pattern.FindAddress(raw, x64, log); + Tuple addrPattern = patch.pattern.FindAddress(raw, x64, log); + long addr = addrPattern.Item1; + byte[] searchPattern = addrPattern.Item2; + int patchOffset = x64 ? patch.offsetX64 : patch.offsetX86; byte patchOrigByte = x64 ? patch.origByteX64 : patch.origByteX86; byte patchPatchByte = x64 ? patch.patchByteX64 : patch.patchByteX86; + if (patchOffset < searchPattern.Length && searchPattern[patchOffset] != 0xFF) + patchOrigByte = searchPattern[patchOffset]; // The patterns can sometimes start at different places (yes, I'm looking at you, Edge), so the byte in the pattern should be always preferred + if(addr != -1) { REDO_CHECKS: long index = addr + patchOffset; diff --git a/ChromeDevExtWarningPatcher/Patches/BytePatchPattern.cs b/ChromeDevExtWarningPatcher/Patches/BytePatchPattern.cs index 486d0e2..23a152e 100644 --- a/ChromeDevExtWarningPatcher/Patches/BytePatchPattern.cs +++ b/ChromeDevExtWarningPatcher/Patches/BytePatchPattern.cs @@ -14,7 +14,7 @@ public BytePatchPattern(string name) { } public delegate void WriteToLog(string str); - public long FindAddress(byte[] raw, bool x64, WriteToLog log) { + public Tuple FindAddress(byte[] raw, bool x64, WriteToLog log) { // This returns the offset and pattern foreach (byte[] pattern in (x64 ? AlternativePatternsX64 : AlternativePatternsX86)) { int patternIndex = 0, patternOffset = 0; @@ -30,12 +30,12 @@ public long FindAddress(byte[] raw, bool x64, WriteToLog log) { if (patternIndex == pattern.Length) { patternOffset = i - (patternIndex - 1); log("Found pattern offset at " + patternOffset); - return patternOffset; + return new Tuple(patternOffset, pattern); } } } - return -1L; + return new Tuple(-1L, null); } } }