mirror of
https://github.com/JKornev/hidden
synced 2024-06-29 18:32:00 +00:00
Design for the commands
This commit is contained in:
parent
96c5e6eb40
commit
1358effe89
@ -44,6 +44,7 @@
|
|||||||
+ Добавить поддержку флага автоприсвоение состояния существующим процессам для Hid_AddExcludedImage\Hid_AddProtectedImage
|
+ Добавить поддержку флага автоприсвоение состояния существующим процессам для Hid_AddExcludedImage\Hid_AddProtectedImage
|
||||||
+ Проверить как ведёт себя файловый фильтр с файлами открытыми по ID или по короткому пути
|
+ Проверить как ведёт себя файловый фильтр с файлами открытыми по ID или по короткому пути
|
||||||
- Реализовать HiddenCLI
|
- Реализовать HiddenCLI
|
||||||
|
- Реализовать функционал вкл\выкл драйвера через IOCTL
|
||||||
+ Портировать драйвер под архитектуру x64
|
+ Портировать драйвер под архитектуру x64
|
||||||
+ Портировать под версии Windows 8, 8.1, 10
|
+ Портировать под версии Windows 8, 8.1, 10
|
||||||
+ Залить проект на Git
|
+ Залить проект на Git
|
||||||
|
@ -1,2 +1,45 @@
|
|||||||
#include "Commands.h"
|
#include "Commands.h"
|
||||||
|
#include "Hide.h"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
// =================
|
||||||
|
|
||||||
|
Commands::Commands(Arguments& args)
|
||||||
|
{
|
||||||
|
wstring arg;
|
||||||
|
|
||||||
|
if (!args.GetNext(arg))
|
||||||
|
throw WException(-2, L"Error, no command, please use 'hiddencli help'");
|
||||||
|
|
||||||
|
LoadCommandsStack();
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
for (auto it = m_commandsStack.begin(); it != m_commandsStack.end(); it++)
|
||||||
|
{
|
||||||
|
if ((*it)->CompareCommand(arg))
|
||||||
|
{
|
||||||
|
(*it)->LoadArgs(args);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (args.GetNext(arg));
|
||||||
|
}
|
||||||
|
|
||||||
|
Commands::~Commands()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void Commands::LoadCommandsStack()
|
||||||
|
{
|
||||||
|
m_commandsStack.push_back(new CommandHide());
|
||||||
|
m_commandsStack.push_back(new CommandUnhide());
|
||||||
|
}
|
||||||
|
|
||||||
|
void Commands::Perform(Connection& connection)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
@ -1,9 +1,29 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "Helper.h"
|
#include "Helper.h"
|
||||||
|
#include "Connection.h"
|
||||||
|
|
||||||
|
class ICommand
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
virtual ~ICommand() {};
|
||||||
|
|
||||||
|
virtual bool CompareCommand(std::wstring& command) = 0;
|
||||||
|
virtual void LoadArgs(Arguments& args) = 0;
|
||||||
|
virtual void PerformCommand(Connection& connection) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
class Commands
|
class Commands
|
||||||
{
|
{
|
||||||
|
std::vector<ICommand*> m_commandsStack;
|
||||||
|
|
||||||
|
void LoadCommandsStack();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Commands(Arguments& args){}
|
|
||||||
|
Commands(Arguments& args);
|
||||||
|
~Commands();
|
||||||
|
|
||||||
|
void Perform(Connection& connection);
|
||||||
};
|
};
|
||||||
|
@ -1,2 +1,52 @@
|
|||||||
#include "Connection.h"
|
#include "Connection.h"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
Connection::Connection(Arguments& args) :
|
||||||
|
m_context(nullptr)
|
||||||
|
{
|
||||||
|
wstring arg;
|
||||||
|
|
||||||
|
if (!args.Probe(arg))
|
||||||
|
return;
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if (arg == L"gate")
|
||||||
|
{
|
||||||
|
args.SwitchToNext();
|
||||||
|
if (!args.GetNext(m_deviceName))
|
||||||
|
throw WException(-2, L"Error, mismatched argument for command 'gate'");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (args.Probe(arg));
|
||||||
|
}
|
||||||
|
|
||||||
|
Connection::~Connection()
|
||||||
|
{
|
||||||
|
if (m_context)
|
||||||
|
Hid_Destroy(m_context);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Connection::Open()
|
||||||
|
{
|
||||||
|
HidStatus status;
|
||||||
|
const wchar_t* deviceName = nullptr;
|
||||||
|
|
||||||
|
if (m_deviceName.size())
|
||||||
|
deviceName = m_deviceName.c_str();
|
||||||
|
|
||||||
|
//status = Hid_Initialize(&m_context, deviceName);
|
||||||
|
//if (!HID_STATUS_SUCCESSFUL(status))
|
||||||
|
// throw WException(HID_STATUS_CODE(status), L"Error, can't connect to gate");
|
||||||
|
}
|
||||||
|
|
||||||
|
HidContext Connection::GetContext()
|
||||||
|
{
|
||||||
|
return m_context;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -1,9 +1,22 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "Helper.h"
|
#include "Helper.h"
|
||||||
|
#include "../HiddenLib/HiddenLib.h"
|
||||||
|
|
||||||
class Connection
|
class Connection
|
||||||
{
|
{
|
||||||
|
private:
|
||||||
|
|
||||||
|
HidContext m_context;
|
||||||
|
|
||||||
|
std::wstring m_deviceName;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Connection(Arguments& args){}
|
|
||||||
|
Connection(Arguments& args);
|
||||||
|
~Connection();
|
||||||
|
|
||||||
|
void Open();
|
||||||
|
|
||||||
|
HidContext GetContext();
|
||||||
};
|
};
|
||||||
|
@ -37,6 +37,24 @@ size_t Arguments::ArgsCount()
|
|||||||
return m_arguments.size();
|
return m_arguments.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Arguments::Probe(std::wstring& arg)
|
||||||
|
{
|
||||||
|
if (m_argPointer >= m_arguments.size())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
arg = m_arguments[m_argPointer];
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Arguments::SwitchToNext()
|
||||||
|
{
|
||||||
|
if (m_argPointer >= m_arguments.size())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
m_argPointer++;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool Arguments::GetNext(wstring& arg)
|
bool Arguments::GetNext(wstring& arg)
|
||||||
{
|
{
|
||||||
if (m_argPointer >= m_arguments.size())
|
if (m_argPointer >= m_arguments.size())
|
||||||
|
@ -30,7 +30,8 @@ public:
|
|||||||
|
|
||||||
size_t ArgsCount();
|
size_t ArgsCount();
|
||||||
|
|
||||||
bool ProbNext(std::wstring& arg);
|
bool Probe(std::wstring& arg);
|
||||||
|
bool SwitchToNext();
|
||||||
bool GetNext(std::wstring& arg);
|
bool GetNext(std::wstring& arg);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@ int wmain(int argc, wchar_t* argv[])
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
Arguments arguments(argc, argv);
|
Arguments arguments(argc, argv);
|
||||||
|
Connection connection(arguments);
|
||||||
|
|
||||||
if (!arguments.ArgsCount())
|
if (!arguments.ArgsCount())
|
||||||
throw WException(
|
throw WException(
|
||||||
@ -21,9 +22,12 @@ int wmain(int argc, wchar_t* argv[])
|
|||||||
L"Welcome to HiddenCLI, please use 'hiddencli help'"
|
L"Welcome to HiddenCLI, please use 'hiddencli help'"
|
||||||
);
|
);
|
||||||
|
|
||||||
Connection connection(arguments);
|
{
|
||||||
Commands commands(arguments);
|
Commands commands(arguments);
|
||||||
|
|
||||||
|
connection.Open();
|
||||||
|
commands.Perform(connection);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (WException& exception)
|
catch (WException& exception)
|
||||||
{
|
{
|
||||||
|
@ -155,11 +155,13 @@
|
|||||||
<ClCompile Include="Connection.cpp" />
|
<ClCompile Include="Connection.cpp" />
|
||||||
<ClCompile Include="Helper.cpp" />
|
<ClCompile Include="Helper.cpp" />
|
||||||
<ClCompile Include="HiddenCLI.cpp" />
|
<ClCompile Include="HiddenCLI.cpp" />
|
||||||
|
<ClCompile Include="Hide.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="Commands.h" />
|
<ClInclude Include="Commands.h" />
|
||||||
<ClInclude Include="Connection.h" />
|
<ClInclude Include="Connection.h" />
|
||||||
<ClInclude Include="Helper.h" />
|
<ClInclude Include="Helper.h" />
|
||||||
|
<ClInclude Include="Hide.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Text Include="cli.txt" />
|
<Text Include="cli.txt" />
|
||||||
|
@ -2,5 +2,27 @@
|
|||||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="HiddenCLI.cpp" />
|
<ClCompile Include="HiddenCLI.cpp" />
|
||||||
|
<ClCompile Include="Helper.cpp" />
|
||||||
|
<ClCompile Include="Connection.cpp" />
|
||||||
|
<ClCompile Include="Commands.cpp" />
|
||||||
|
<ClCompile Include="Hide.cpp">
|
||||||
|
<Filter>Commands</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Text Include="cli.txt" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="Helper.h" />
|
||||||
|
<ClInclude Include="Connection.h" />
|
||||||
|
<ClInclude Include="Commands.h" />
|
||||||
|
<ClInclude Include="Hide.h">
|
||||||
|
<Filter>Commands</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Commands">
|
||||||
|
<UniqueIdentifier>{680a2e80-be0d-4ac2-8a4a-d59b67e55c61}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
99
HiddenCLI/Hide.cpp
Normal file
99
HiddenCLI/Hide.cpp
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
#include "Hide.h"
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
// =================
|
||||||
|
|
||||||
|
CommandHide::CommandHide() : m_command(L"hide")
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
CommandHide::~CommandHide()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CommandHide::CompareCommand(std::wstring& command)
|
||||||
|
{
|
||||||
|
return (command == m_command);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CommandHide::LoadArgs(Arguments& args)
|
||||||
|
{
|
||||||
|
wstring object;
|
||||||
|
|
||||||
|
if (!args.GetNext(object))
|
||||||
|
throw WException(-2, L"Error, mismatched argument #1 for command 'hide'");
|
||||||
|
|
||||||
|
if (!args.GetNext(m_path))
|
||||||
|
throw WException(-2, L"Error, mismatched argument #2 for command 'hide'");
|
||||||
|
|
||||||
|
if (object == L"file")
|
||||||
|
{
|
||||||
|
m_hideType = EHideTypes::TypeFile;
|
||||||
|
}
|
||||||
|
else if (object == L"dir")
|
||||||
|
{
|
||||||
|
m_hideType = EHideTypes::TypeDir;
|
||||||
|
}
|
||||||
|
else if (object == L"regkey")
|
||||||
|
{
|
||||||
|
m_hideType = EHideTypes::TypeRegKey;
|
||||||
|
m_regRootType = GetRegType(m_path);
|
||||||
|
}
|
||||||
|
else if (object == L"regval")
|
||||||
|
{
|
||||||
|
m_hideType = EHideTypes::TypeRegVal;
|
||||||
|
m_regRootType = GetRegType(m_path);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw WException(-2, L"Error, invalid argument for command 'hide'");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void CommandHide::PerformCommand(Connection& connection)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
HidRegRootTypes CommandHide::GetRegType(wstring& path)
|
||||||
|
{
|
||||||
|
static wchar_t regHKLM[] = L"HKLM\\";
|
||||||
|
static wchar_t regHKCU[] = L"HKCU\\";
|
||||||
|
static wchar_t regHKU[] = L"HKU\\";
|
||||||
|
|
||||||
|
if (path.compare(0, _countof(regHKLM) - 1, regHKLM) == 0)
|
||||||
|
return HidRegRootTypes::RegHKLM;
|
||||||
|
else if (path.compare(0, _countof(regHKCU) - 1, regHKCU) == 0)
|
||||||
|
return HidRegRootTypes::RegHKCU;
|
||||||
|
else if (path.compare(0, _countof(regHKU) - 1, regHKU) == 0)
|
||||||
|
return HidRegRootTypes::RegHKU;
|
||||||
|
else
|
||||||
|
throw WException(-2, L"Error, invalid registry prefix");
|
||||||
|
}
|
||||||
|
|
||||||
|
// =================
|
||||||
|
|
||||||
|
CommandUnhide::CommandUnhide() : m_command(L"unhide")
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
CommandUnhide::~CommandUnhide()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CommandUnhide::CompareCommand(std::wstring& command)
|
||||||
|
{
|
||||||
|
return (command == m_command);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CommandUnhide::LoadArgs(Arguments& args)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void CommandUnhide::PerformCommand(Connection& connection)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
45
HiddenCLI/Hide.h
Normal file
45
HiddenCLI/Hide.h
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Commands.h"
|
||||||
|
|
||||||
|
enum EHideTypes {
|
||||||
|
TypeFile,
|
||||||
|
TypeDir,
|
||||||
|
TypeRegKey,
|
||||||
|
TypeRegVal,
|
||||||
|
TypeUnknown,
|
||||||
|
};
|
||||||
|
|
||||||
|
class CommandHide : public ICommand
|
||||||
|
{
|
||||||
|
const wchar_t* m_command = nullptr;
|
||||||
|
|
||||||
|
EHideTypes m_hideType;
|
||||||
|
HidRegRootTypes m_regRootType;
|
||||||
|
std::wstring m_path;
|
||||||
|
|
||||||
|
HidRegRootTypes GetRegType(std::wstring& path);
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
CommandHide();
|
||||||
|
virtual ~CommandHide();
|
||||||
|
|
||||||
|
virtual bool CompareCommand(std::wstring& command);
|
||||||
|
virtual void LoadArgs(Arguments& args);
|
||||||
|
virtual void PerformCommand(Connection& connection);
|
||||||
|
};
|
||||||
|
|
||||||
|
class CommandUnhide : public ICommand
|
||||||
|
{
|
||||||
|
const wchar_t* m_command = nullptr;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
CommandUnhide();
|
||||||
|
virtual ~CommandUnhide();
|
||||||
|
|
||||||
|
virtual bool CompareCommand(std::wstring& command);
|
||||||
|
virtual void LoadArgs(Arguments& args);
|
||||||
|
virtual void PerformCommand(Connection& connection);
|
||||||
|
};
|
@ -3,6 +3,9 @@ hiddencli [connection] <command>
|
|||||||
|
|
||||||
connection:
|
connection:
|
||||||
|
|
||||||
|
gate <%name%>
|
||||||
|
Set specific connection gate name (driver device name)
|
||||||
|
|
||||||
commands:
|
commands:
|
||||||
|
|
||||||
hide <file|dir|regval|regkey> <%path%>
|
hide <file|dir|regval|regkey> <%path%>
|
||||||
|
Loading…
Reference in New Issue
Block a user