Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
467 changes: 467 additions & 0 deletions .github/workflows/build.yml

Large diffs are not rendered by default.

57 changes: 29 additions & 28 deletions Bind/Bind.vcxproj
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?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">
Expand Down Expand Up @@ -58,17 +58,17 @@
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<Import Project="$(QtMsBuild)\qt_defaults.props" Condition="Exists('$(QtMsBuild)\qt_defaults.props')" />
<PropertyGroup Label="QtSettings" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<QTDIR>C:\Qt\5.15.2\msvc2019_64</QTDIR>
<QTDIR>$(QTDIR)</QTDIR>
</PropertyGroup>
<PropertyGroup Label="QtSettings" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<QTDIR>C:\Qt\5.15.2\msvc2019_64</QTDIR>
<QTDIR>$(QTDIR)</QTDIR>
</PropertyGroup>
<PropertyGroup Label="QtSettings" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<QTDIR>C:\Qt\5.15.2\msvc2019_64</QTDIR>
<QTDIR>$(QTDIR)</QTDIR>
<QtBuildConfig>debug</QtBuildConfig>
</PropertyGroup>
<PropertyGroup Label="QtSettings" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<QTDIR>C:\Qt\5.15.2\msvc2019_64</QTDIR>
<QTDIR>$(QTDIR)</QTDIR>
</PropertyGroup>
<Target Name="QtMsBuildNotFound" BeforeTargets="CustomBuild;ClCompile" Condition="!Exists('$(QtMsBuild)\qt.targets') OR !Exists('$(QtMsBuild)\Qt.props')">
<Message Importance="High" Text="QtMsBuild: could not locate qt.targets, qt.props; project may not build correctly." />
Expand Down Expand Up @@ -135,14 +135,14 @@
<PreprocessorDefinitions>_DEBUG;UNICODE;_UNICODE;QT_WIDGETS_LIB;QT_GUI_LIB;QT_CORE_LIB;QT_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp20</LanguageStandard>
<AdditionalIncludeDirectories>GeneratedFiles\$(ConfigurationName);GeneratedFiles;C:\Qt\5.15.2\msvc2019_64\include;C:\Qt\5.15.2\msvc2019_64\include\QtCore;C:\Qt\5.15.2\msvc2019_64\include\QtGui;C:\Qt\5.15.2\msvc2019_64\include\QtWidgets;C:\Users\devil\vcpkg\installed\x64-windows\include;C:\Users\devil\source\repos\SysCaller\Bind\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>GeneratedFiles\$(ConfigurationName);GeneratedFiles;$(QTDIR)\include;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtWidgets;$(VcpkgRoot)\installed\x64-windows\include;$(ProjectDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>C:\Qt\5.15.2\msvc2019_64\lib;C:\Users\devil\vcpkg\installed\x64-windows\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>Qt5Core.lib;Qt5Gui.lib;Qt5Widgets.lib;cmark.lib;pe-parse.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(QTDIR)\lib;$(VcpkgRoot)\installed\x64-windows\lib;$(ProjectDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>qtmaind.lib;Qt5Cored.lib;Qt5Guid.lib;Qt5Widgetsd.lib;cmark.lib;pe-parse.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
Expand All @@ -154,14 +154,14 @@
<PreprocessorDefinitions>NDEBUG;UNICODE;_UNICODE;QT_WIDGETS_LIB;QT_GUI_LIB;QT_CORE_LIB;QT_DLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp20</LanguageStandard>
<AdditionalIncludeDirectories>GeneratedFiles\$(ConfigurationName);GeneratedFiles;C:\Qt\5.15.2\msvc2019_64\include;C:\Qt\5.15.2\msvc2019_64\include\QtCore;C:\Qt\5.15.2\msvc2019_64\include\QtGui;C:\Qt\5.15.2\msvc2019_64\include\QtWidgets;C:\Users\devil\vcpkg\installed\x64-windows\include;C:\Users\devil\source\repos\SysCaller\Bind\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>GeneratedFiles\$(ConfigurationName);GeneratedFiles;$(QTDIR)\include;$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtWidgets;$(VcpkgRoot)\installed\x64-windows\include;$(ProjectDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>C:\Qt\5.15.2\msvc2019_64\lib;C:\Users\devil\vcpkg\installed\x64-windows\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>Qt5Core.lib;Qt5Gui.lib;Qt5Widgets.lib;capstone.lib;pe-parse.lib;cmark.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>$(QTDIR)\lib;$(VcpkgRoot)\installed\x64-windows\lib;$(ProjectDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>qtmain.lib;Qt5Core.lib;Qt5Gui.lib;Qt5Widgets.lib;cmark.lib;pe-parse.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<CustomBuild>
<Command>
Expand All @@ -172,6 +172,15 @@
</CustomBuild>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="GeneratedFiles\moc_BindButton.cpp" />
<ClCompile Include="GeneratedFiles\moc_LeftPanel.cpp" />
<ClCompile Include="GeneratedFiles\moc_MainWindow.cpp" />
<ClCompile Include="GeneratedFiles\moc_OutputPanel.cpp" />
<ClCompile Include="GeneratedFiles\moc_ProgressBar.cpp" />
<ClCompile Include="GeneratedFiles\moc_RightPanel.cpp" />
<ClCompile Include="GeneratedFiles\moc_SettingsTitleBar.cpp" />
<ClCompile Include="GeneratedFiles\moc_StatusBar.cpp" />
<ClCompile Include="GeneratedFiles\moc_TitleBar.cpp" />
<ClCompile Include="main.cpp" />
<ClCompile Include="src\Core\Integrity\Compatibility\Compatibility.cpp" />
<ClCompile Include="src\Core\Integrity\Validator\Validator.cpp" />
Expand Down Expand Up @@ -215,15 +224,6 @@
<ClCompile Include="src\GUI\Threads\CompatibilityThread.cpp" />
<ClCompile Include="src\GUI\Threads\ObfuscationThread.cpp" />
<ClCompile Include="src\GUI\Threads\ValidatorThread.cpp" />
<ClCompile Include="GeneratedFiles\moc_ProgressBar.cpp" />
<ClCompile Include="GeneratedFiles\moc_StatusBar.cpp" />
<ClCompile Include="GeneratedFiles\moc_BindButton.cpp" />
<ClCompile Include="GeneratedFiles\moc_TitleBar.cpp" />
<ClCompile Include="GeneratedFiles\moc_SettingsTitleBar.cpp" />
<ClCompile Include="GeneratedFiles\moc_MainWindow.cpp" />
<ClCompile Include="GeneratedFiles\moc_LeftPanel.cpp" />
<ClCompile Include="GeneratedFiles\moc_OutputPanel.cpp" />
<ClCompile Include="GeneratedFiles\moc_RightPanel.cpp" />
<ClCompile Include="GeneratedFiles\moc_ChangelogDialog.cpp" />
<ClCompile Include="GeneratedFiles\moc_HashCompareDialog.cpp" />
<ClCompile Include="GeneratedFiles\moc_ObfuscationSelectionDialog.cpp" />
Expand All @@ -243,6 +243,7 @@
<ClCompile Include="GeneratedFiles\moc_Verification.cpp" />
<ClCompile Include="GeneratedFiles\moc_VerificationThread.cpp" />
<ClCompile Include="GeneratedFiles\moc_ObfuscationThread.cpp" />
<ClCompile Include="GeneratedFiles\qrc_resources.cpp" />
</ItemGroup>
<ItemGroup>
<QtMoc Include="include\Core\Integrity\Compatibility\Compatibility.h">
Expand Down Expand Up @@ -415,15 +416,15 @@
</QtMoc>
</ItemGroup>
<ItemGroup>
<Image Include="src\Res\Icons\compatibility.svg" />
<Image Include="src\Res\Icons\export.svg" />
<Image Include="src\Res\Icons\compatibility.png" />
<Image Include="src\Res\Icons\export.png" />
<Image Include="src\Res\Icons\logo.ico" />
<Image Include="src\Res\Icons\obfuscation.svg" />
<Image Include="src\Res\Icons\reset.svg" />
<Image Include="src\Res\Icons\settings.svg" />
<Image Include="src\Res\Icons\obfuscation.png" />
<Image Include="src\Res\Icons\reset.png" />
<Image Include="src\Res\Icons\settings.png" />
<Image Include="src\Res\Icons\syscaller.png" />
<Image Include="src\Res\Icons\validation.svg" />
<Image Include="src\Res\Icons\verification.svg" />
<Image Include="src\Res\Icons\validation.png" />
<Image Include="src\Res\Icons\verification.png" />
</ItemGroup>
<ItemGroup>
<Font Include="src\Res\Fonts\ibmplexmono.ttf" />
Expand Down Expand Up @@ -459,5 +460,5 @@
<Import Project="$(QtMsBuild)\qt.targets" Condition="Exists('$(QtMsBuild)\qt.targets')" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,34 @@

namespace DirectObfuscation {

enum class EncryptionMethod {
BasicXOR = 1, // simple XOR encryption
MultiKeyXOR = 2, // multi key XOR encryption
AddXORCombo = 3, // addition + XOR combination
EnhancedXOR = 4, // enhanced XOR with larger keys
OffsetShifting = 5 // offset shifting/masking
};

inline QString encryptionMethodToString(EncryptionMethod method) {
switch (method) {
case EncryptionMethod::BasicXOR: return "Basic XOR";
case EncryptionMethod::MultiKeyXOR: return "Multi Key XOR";
case EncryptionMethod::AddXORCombo: return "Add + XOR Combo";
case EncryptionMethod::EnhancedXOR: return "Enhanced XOR";
case EncryptionMethod::OffsetShifting: return "Offset Shifting";
default: return "Unknown";
}
}

inline EncryptionMethod stringToEncryptionMethod(const QString& str) {
if (str.contains("basic", Qt::CaseInsensitive)) return EncryptionMethod::BasicXOR;
if (str.contains("multi", Qt::CaseInsensitive)) return EncryptionMethod::MultiKeyXOR;
if (str.contains("add", Qt::CaseInsensitive) || str.contains("combo", Qt::CaseInsensitive)) return EncryptionMethod::AddXORCombo;
if (str.contains("enhanced", Qt::CaseInsensitive)) return EncryptionMethod::EnhancedXOR;
if (str.contains("offset", Qt::CaseInsensitive) || str.contains("shifting", Qt::CaseInsensitive)) return EncryptionMethod::OffsetShifting;
return EncryptionMethod::BasicXOR; // default
}

class Encryptor {
private:
QSettings* settings;
Expand All @@ -18,7 +46,7 @@ namespace DirectObfuscation {
public:
explicit Encryptor(QSettings* settings = nullptr);

int getEncryptionMethod();
DirectObfuscation::EncryptionMethod getEncryptionMethod();
QPair<int, QMap<QString, QVariant>> encryptOffset(int realOffset, int method = -1);
QStringList generateDecryptionSequence(const QString& offsetName,
const QMap<QString, QVariant>& encryptionData,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,37 @@

namespace IndirectObfuscation {

enum class ControlFlowPattern {
RegisterBased = 0, // register based opaque predicate
ValueBased = 1, // value based opaque predicate
FlagBased = 2, // flag based opaque predicate
MixedJunkCode = 3 // mixed junk code with opaque predicate
};

inline QString controlFlowPatternToString(ControlFlowPattern pattern) {
switch (pattern) {
case ControlFlowPattern::RegisterBased: return "register";
case ControlFlowPattern::ValueBased: return "value";
case ControlFlowPattern::FlagBased: return "flag";
case ControlFlowPattern::MixedJunkCode: return "mixed";
default: return "register";
}
}

inline ControlFlowPattern stringToControlFlowPattern(const QString& str) {
if (str == "value") return ControlFlowPattern::ValueBased;
if (str == "flag") return ControlFlowPattern::FlagBased;
if (str == "mixed") return ControlFlowPattern::MixedJunkCode;
return ControlFlowPattern::RegisterBased; // default
}

class ControlFlow {
private:
QSettings* settings;

public:
explicit ControlFlow(QSettings* settings);

// Generates a control flow obfuscation pattern for indirect stubs
QString generateControlFlowObfuscation();
};

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,30 @@

namespace IndirectObfuscation {

enum class ResolverCallMethod {
RegisterPointer = 0, // register pointer call via R10
StackIndirect = 1, // stack indirect call (16 byte aligned)
StackScratch = 2, // stack scratch space indirect call
RegisterShuffle = 3 // register shuffle call via R10
};

inline QString resolverCallMethodToString(ResolverCallMethod method) {
switch (method) {
case ResolverCallMethod::RegisterPointer: return "register";
case ResolverCallMethod::StackIndirect: return "stack";
case ResolverCallMethod::StackScratch: return "indirect";
case ResolverCallMethod::RegisterShuffle: return "shuffle";
default: return "register";
}
}

inline ResolverCallMethod stringToResolverCallMethod(const QString& str) {
if (str == "stack") return ResolverCallMethod::StackIndirect;
if (str == "indirect") return ResolverCallMethod::StackScratch;
if (str == "shuffle") return ResolverCallMethod::RegisterShuffle;
return ResolverCallMethod::RegisterPointer; // default
}

class StubGenerator {
private:
QSettings* settings;
Expand Down
20 changes: 20 additions & 0 deletions Bind/include/Core/Obfuscation/Obfuscation.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,26 @@
#include <QSettings>
#include "include/GUI/Themes/Colors.h"

enum class ObfuscationMode {
Normal = 0,
StubMapper = 1
};

inline QString obfuscationModeToString(ObfuscationMode mode) {
switch (mode) {
case ObfuscationMode::Normal: return "Normal";
case ObfuscationMode::StubMapper: return "Stub Mapper";
default: return "Unknown";
}
}

inline ObfuscationMode stringToObfuscationMode(const QString& str) {
if (str == "stub_mapper" || str == "Stub Mapper") {
return ObfuscationMode::StubMapper;
}
return ObfuscationMode::Normal;
}

class Obfuscation {
private:
std::function<void(const QString&)> outputCallback;
Expand Down
18 changes: 9 additions & 9 deletions Bind/resources.qrc
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
<RCC>
<qresource prefix="/">
<file>src/Res/Icons/validation.svg</file>
<file>src/Res/Icons/compatibility.svg</file>
<file>src/Res/Icons/verification.svg</file>
<file>src/Res/Icons/obfuscation.svg</file>
<file>src/Res/Icons/settings.svg</file>
<file>src/Res/Icons/validation.png</file>
<file>src/Res/Icons/compatibility.png</file>
<file>src/Res/Icons/verification.png</file>
<file>src/Res/Icons/obfuscation.png</file>
<file>src/Res/Icons/settings.png</file>
<file>src/Res/Icons/syscaller.png</file>
<file>src/Res/Icons/logo.ico</file>
<file>src/Res/Icons/export.svg</file>
<file>src/Res/Icons/refresh.svg</file>
<file>src/Res/Icons/export.png</file>
<file>src/Res/Icons/refresh.png</file>
<file>src/Res/Fonts/ibmplexmono.ttf</file>
<file>src/GUI/Stylesheets/SettingsDialog.qss</file>
<file>src/GUI/Stylesheets/StubMapperDialog.qss</file>
<file>src/GUI/Stylesheets/ConfirmationDialog.qss</file>
<file>src/GUI/Stylesheets/ObfuscationSelectionDialog.qss</file>
<file>src/GUI/Stylesheets/HashCompareDialog.qss</file>
<file>src/GUI/Stylesheets/ChangelogDialog.qss</file>
<file>src/GUI/Stylesheets/ConfirmationDialog.qss</file>
</qresource>
</RCC>
</RCC>
Loading
Loading