Skip to content

Commit

Permalink
Enhancement: Began refactoring, Added dll unit tester
Browse files Browse the repository at this point in the history
  • Loading branch information
Ceiridge committed Jul 31, 2021
1 parent 6dd768b commit 970b0d5
Show file tree
Hide file tree
Showing 14 changed files with 339 additions and 12 deletions.
16 changes: 16 additions & 0 deletions ChromeDevExtWarningPatcher.sln
Expand Up @@ -18,6 +18,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ChromeDevExtWarningPatcher"
{BAA11244-ECA8-44B9-B976-B9BCDF37BF99} = {BAA11244-ECA8-44B9-B976-B9BCDF37BF99}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ChromePatcherDllUnitTests", "ChromePatcherDllUnitTests\ChromePatcherDllUnitTests.vcxproj", "{B2952F58-32AA-4FDE-920E-C558448D77D4}"
ProjectSection(ProjectDependencies) = postProject
{BA6B041F-E0E9-45EC-86D8-BC5D1D864AE5} = {BA6B041F-E0E9-45EC-86D8-BC5D1D864AE5}
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -76,6 +81,17 @@ Global
{9F535953-6B7C-49B5-B0E4-B5C845ECEF47}.Release|x64.Build.0 = Release|Any CPU
{9F535953-6B7C-49B5-B0E4-B5C845ECEF47}.Release|x86.ActiveCfg = Release|Any CPU
{9F535953-6B7C-49B5-B0E4-B5C845ECEF47}.Release|x86.Build.0 = Release|Any CPU
{B2952F58-32AA-4FDE-920E-C558448D77D4}.Debug|Any CPU.ActiveCfg = Debug|x64
{B2952F58-32AA-4FDE-920E-C558448D77D4}.Debug|Any CPU.Build.0 = Debug|x64
{B2952F58-32AA-4FDE-920E-C558448D77D4}.Debug|x64.ActiveCfg = Debug|x64
{B2952F58-32AA-4FDE-920E-C558448D77D4}.Debug|x64.Build.0 = Debug|x64
{B2952F58-32AA-4FDE-920E-C558448D77D4}.Debug|x86.ActiveCfg = Debug|Win32
{B2952F58-32AA-4FDE-920E-C558448D77D4}.Debug|x86.Build.0 = Debug|Win32
{B2952F58-32AA-4FDE-920E-C558448D77D4}.Release|Any CPU.ActiveCfg = Release|x64
{B2952F58-32AA-4FDE-920E-C558448D77D4}.Release|x64.ActiveCfg = Release|x64
{B2952F58-32AA-4FDE-920E-C558448D77D4}.Release|x64.Build.0 = Release|x64
{B2952F58-32AA-4FDE-920E-C558448D77D4}.Release|x86.ActiveCfg = Release|Win32
{B2952F58-32AA-4FDE-920E-C558448D77D4}.Release|x86.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
2 changes: 2 additions & 0 deletions ChromePatcherDll/ChromePatcherDll.vcxproj
Expand Up @@ -175,12 +175,14 @@
<ItemGroup>
<ClCompile Include="dllmain.cpp" />
<ClCompile Include="patches.cpp" />
<ClCompile Include="simplepatternsearcher.cpp" />
<ClCompile Include="threads.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="dllmain.hpp" />
<ClInclude Include="patches.hpp" />
<ClInclude Include="resource.h" />
<ClInclude Include="simplepatternsearcher.hpp" />
<ClInclude Include="stdafx.h" />
<ClInclude Include="threads.hpp" />
</ItemGroup>
Expand Down
6 changes: 6 additions & 0 deletions ChromePatcherDll/ChromePatcherDll.vcxproj.filters
Expand Up @@ -24,6 +24,9 @@
<ClCompile Include="threads.cpp">
<Filter>Quelldateien</Filter>
</ClCompile>
<ClCompile Include="simplepatternsearcher.cpp">
<Filter>Quelldateien</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="patches.hpp">
Expand All @@ -41,6 +44,9 @@
<ClInclude Include="dllmain.hpp">
<Filter>Headerdateien</Filter>
</ClInclude>
<ClInclude Include="simplepatternsearcher.hpp">
<Filter>Headerdateien</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="ChromePatcherDll.rc">
Expand Down
4 changes: 2 additions & 2 deletions ChromePatcherDll/dllmain.hpp
Expand Up @@ -2,5 +2,5 @@

// Header file for the injector

_declspec(dllexport) bool InstallWinHook();
_declspec(dllexport) bool UnInstallWinHook();
//_declspec(dllexport) bool InstallWinHook();
//_declspec(dllexport) bool UnInstallWinHook();
27 changes: 21 additions & 6 deletions ChromePatcherDll/patches.cpp
@@ -1,9 +1,23 @@
#include "stdafx.h"
#include "patches.hpp"
#include "simplepatternsearcher.hpp"

#define ReadVar(variable) file.read(reinterpret_cast<char*>(&variable), sizeof(variable)); // Makes everything easier to read

namespace ChromePatch {
std::ostream& operator<<(std::ostream& os, const Patch& patch) { // Write identifiable data to the output stream for debugging
const PatchPattern& firstPattern = patch.patterns[0];

os << "First Pattern: " << std::hex;
for (byte b : firstPattern.pattern) {
os << std::setw(2) << std::setfill('0') << (int)b << " ";
}

os << " with PatchByte " << static_cast<int>(patch.patchByte) << std::dec;
return os;
}


ReadPatchResult Patches::ReadPatchFile() {
static const unsigned int FILE_HEADER = 0xCE161D6E; // Magic values
static const unsigned int PATCH_HEADER = 0x8A7C5000;
Expand All @@ -29,7 +43,7 @@ namespace ChromePatch {
}

std::wstring dllPath = MultibyteToWide(ReadString(file));
if (dllPath.compare(chromeDllPath) != 0) {
if (dllPath != chromeDllPath) {
result.UsingWrongVersion = true;
}

Expand Down Expand Up @@ -84,7 +98,7 @@ namespace ChromePatch {
Patch patch{ patterns, origByte, patchByte, offsets, newBytes, isSig > 0, sigOffset };
patches.push_back(patch);

std::cout << "Loaded patch: " << patterns[0].pattern.size() << " " << (int)origByte << " " << (int)patchByte << " " << offsets[0] << std::endl;
std::cout << "Loaded patch: " << patch << std::endl;
}

file.close();
Expand Down Expand Up @@ -125,6 +139,9 @@ namespace ChromePatch {
return _byteswap_ulong(integer); // Convert to Big Endian (for the magic values)
}


auto simpleSearcher = std::make_unique<SimplePatternSearcher>();

// TODO: Externalize this function in different implementations (traditional and with SIMD support) and add multithreading
int Patches::ApplyPatches() {
int successfulPatches = 0;
Expand Down Expand Up @@ -183,9 +200,7 @@ namespace ChromePatch {
*patchByte = patch.patchByte;
} else { // Write the newBytes array if it is filled instead
const int newBytesSize = patch.newBytes.size();
for(int newByteI = 0; newByteI < newBytesSize; newByteI++) {
patchByte[newByteI] = patch.newBytes[newByteI];
}
memcpy_s(patchByte, newBytesSize, patch.newBytes.data(), newBytesSize);

std::cout << newBytesSize << " NewBytes have been written" << std::endl;
}
Expand Down Expand Up @@ -228,7 +243,7 @@ namespace ChromePatch {
END_PATCH_SEARCH_LABEL:
for (Patch& patch : patches) {
if (!patch.successfulPatch) {
std::cerr << "Couldn't patch " << patch.patterns[0].pattern.size() << " " << patch.offsets[0] << std::endl;
std::cerr << "Couldn't patch " << patch << std::endl;
}
else {
successfulPatches++;
Expand Down
14 changes: 10 additions & 4 deletions ChromePatcherDll/patches.hpp
Expand Up @@ -18,6 +18,8 @@ namespace ChromePatch {
bool isSig{};
int sigOffset{};
bool finishedPatch{}, successfulPatch{};

friend std::ostream& operator<<(std::ostream& os, const Patch& patch);
};

class Patches {
Expand All @@ -30,9 +32,13 @@ namespace ChromePatch {
int ApplyPatches();
private:
std::wstring MultibyteToWide(const std::string& str);
std::string ReadString(std::ifstream& stream);
unsigned int ReadUInteger(std::ifstream& stream);
std::string ReadString(std::ifstream& file);
unsigned int ReadUInteger(std::ifstream& file);
};

inline Patches patches;
}

class PatternSearcher {
public:
virtual byte* SearchBytePattern(std::vector<Patch>& patchList, byte* startAddr, size_t length) = 0;
};
}
10 changes: 10 additions & 0 deletions ChromePatcherDll/simplepatternsearcher.cpp
@@ -0,0 +1,10 @@
#include "stdafx.h"
#include "patches.hpp"
#include "simplepatternsearcher.hpp"

namespace ChromePatch {
byte* SimplePatternSearcher::SearchBytePattern(std::vector<Patch>& patchList, byte* startAddr, size_t length) {
return nullptr;
}

}
12 changes: 12 additions & 0 deletions ChromePatcherDll/simplepatternsearcher.hpp
@@ -0,0 +1,12 @@
#pragma once

namespace ChromePatch {
class
#ifdef _DEBUG
__declspec(dllexport)
#endif
SimplePatternSearcher : PatternSearcher {
public:
byte* SearchBytePattern(std::vector<Patch>& patchList, byte* startAddr, size_t length) override;
};
}
1 change: 1 addition & 0 deletions ChromePatcherDll/stdafx.h
Expand Up @@ -9,5 +9,6 @@
#include <ctime>
#include <TlHelp32.h>
#include <thread>
#include <iomanip>

inline HMODULE module;
192 changes: 192 additions & 0 deletions ChromePatcherDllUnitTests/ChromePatcherDllUnitTests.vcxproj
@@ -0,0 +1,192 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>16.0</VCProjectVersion>
<ProjectGuid>{B2952F58-32AA-4FDE-920E-C558448D77D4}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>ChromePatcherDllUnitTests</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
<ProjectSubType>NativeUnitTestProject</ProjectSubType>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<UseOfMfc>false</UseOfMfc>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<UseOfMfc>false</UseOfMfc>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
<UseOfMfc>false</UseOfMfc>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
<UseOfMfc>false</UseOfMfc>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>$(ProjectDir)..\ChromePatcherDll\;$(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<UseFullPaths>true</UseFullPaths>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<LanguageStandard_C>Default</LanguageStandard_C>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<AdditionalLibraryDirectories>$(VCInstallDir)UnitTest\lib;$(ProjectDir)..\ChromePatcherDll\x64\Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>$(ProjectDir)..\ChromePatcherDll\;$(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<UseFullPaths>true</UseFullPaths>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<LanguageStandard_C>Default</LanguageStandard_C>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<AdditionalLibraryDirectories>$(VCInstallDir)UnitTest\lib;$(ProjectDir)..\ChromePatcherDll\x64\Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>$(ProjectDir)..\ChromePatcherDll\;$(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<UseFullPaths>true</UseFullPaths>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<LanguageStandard_C>Default</LanguageStandard_C>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalLibraryDirectories>$(VCInstallDir)UnitTest\lib;$(ProjectDir)..\ChromePatcherDll\x64\Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<AdditionalIncludeDirectories>$(ProjectDir)..\ChromePatcherDll\;$(VCInstallDir)UnitTest\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<UseFullPaths>true</UseFullPaths>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<LanguageStandard_C>Default</LanguageStandard_C>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalLibraryDirectories>$(VCInstallDir)UnitTest\lib;$(ProjectDir)..\ChromePatcherDll\x64\Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="patterntests.cpp" />
<ClCompile Include="pch.cpp">
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="pch.h" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ChromePatcherDll\ChromePatcherDll.vcxproj">
<Project>{ba6b041f-e0e9-45ec-86d8-bc5d1d864ae5}</Project>
</ProjectReference>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

0 comments on commit 970b0d5

Please sign in to comment.