feat: add main
This commit is contained in:
@@ -0,0 +1,134 @@
|
|||||||
|
#include <seallib/log.h>
|
||||||
|
#include <tinymitm/proxy.h>
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
#include "utils.h"
|
||||||
|
#include "log-sink.h"
|
||||||
|
#include "proxy-configurator.h"
|
||||||
|
#include "cache-cleaner.h"
|
||||||
|
|
||||||
|
#include <consoleapi.h>
|
||||||
|
#include <processenv.h>
|
||||||
|
#include <cassert>
|
||||||
|
#include <processthreadsapi.h>
|
||||||
|
#include <handleapi.h>
|
||||||
|
|
||||||
|
// from: WinBase.h
|
||||||
|
#define CREATE_NO_WINDOW 0x08000000
|
||||||
|
|
||||||
|
bool running = true;
|
||||||
|
TinyMITMProxy* proxy;
|
||||||
|
ProxyConfigurator* conf;
|
||||||
|
CacheCleaner* cleaner ;
|
||||||
|
|
||||||
|
BOOL WINAPI consoleHandler(DWORD dwType)
|
||||||
|
{
|
||||||
|
if (dwType == CTRL_C_EVENT || dwType == CTRL_CLOSE_EVENT || dwType == CTRL_LOGOFF_EVENT ||
|
||||||
|
dwType == CTRL_SHUTDOWN_EVENT)
|
||||||
|
{
|
||||||
|
if (conf) conf->clearProxy();
|
||||||
|
running = false;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void StartWatchdog()
|
||||||
|
{
|
||||||
|
DWORD pid = GetCurrentProcessId();
|
||||||
|
|
||||||
|
/*
|
||||||
|
this probably looks so sketchy for some antiviruses
|
||||||
|
should test, probably
|
||||||
|
*/
|
||||||
|
std::string psCommand =
|
||||||
|
std::format("powershell.exe -WindowStyle Hidden -Command \""
|
||||||
|
"$proc = Get-Process -Id {} -ErrorAction SilentlyContinue;"
|
||||||
|
"if ($proc) {{ $proc.WaitForExit(); }}"
|
||||||
|
"$reg = 'HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings';"
|
||||||
|
"Set-ItemProperty -Path $reg -Name ProxyEnable -Value 0;"
|
||||||
|
"Set-ItemProperty -Path $reg -Name ProxyServer -Value '';"
|
||||||
|
"rundll32.exe user32.dll,UpdatePerUserSystemParameters;\"",
|
||||||
|
pid);
|
||||||
|
|
||||||
|
STARTUPINFOA si = {sizeof(si)};
|
||||||
|
PROCESS_INFORMATION pi;
|
||||||
|
RtlZeroMemory(&si, sizeof(si));
|
||||||
|
RtlZeroMemory(&pi, sizeof(pi));
|
||||||
|
|
||||||
|
CreateProcessA(NULL, const_cast<char*>(psCommand.c_str()), NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &si,
|
||||||
|
&pi);
|
||||||
|
|
||||||
|
CloseHandle(pi.hProcess);
|
||||||
|
CloseHandle(pi.hThread);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool run()
|
||||||
|
{
|
||||||
|
seallib::Logger mainLog("Main");
|
||||||
|
mainLog.addSink(std::make_shared<ConOutSink>());
|
||||||
|
|
||||||
|
mainLog.info("Init");
|
||||||
|
|
||||||
|
mainLog.info("Setting up cache cleaner");
|
||||||
|
cleaner = new CacheCleaner();
|
||||||
|
cleaner->init();
|
||||||
|
|
||||||
|
mainLog.info("Creating proxy");
|
||||||
|
TinyMITMConfig mitmConfig;
|
||||||
|
mitmConfig.port = 44444;
|
||||||
|
mitmConfig.threadCount = 255;
|
||||||
|
mitmConfig.caName = utils::randomizeString(32);
|
||||||
|
proxy = new TinyMITMProxy(mitmConfig);
|
||||||
|
|
||||||
|
mainLog.info("Creating configurator and setting proxy addr");
|
||||||
|
conf = new ProxyConfigurator();
|
||||||
|
conf->setProxy("127.0.0.1", 44444);
|
||||||
|
|
||||||
|
mainLog.info("Starting proxy");
|
||||||
|
if (!proxy->init())
|
||||||
|
{
|
||||||
|
mainLog.error("Failed to initialize proxy, shutting down");
|
||||||
|
proxy->shutdown();
|
||||||
|
cleaner->shutdown();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
mainLog.info("Proxy running, Ctrl+C to stop.");
|
||||||
|
while (running)
|
||||||
|
std::this_thread::sleep_for(std::chrono::milliseconds(100));
|
||||||
|
|
||||||
|
mainLog.info("Shutting down...");
|
||||||
|
proxy->shutdown();
|
||||||
|
cleaner->shutdown();
|
||||||
|
|
||||||
|
delete proxy;
|
||||||
|
proxy = nullptr;
|
||||||
|
delete conf;
|
||||||
|
conf = nullptr;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
|
||||||
|
/*
|
||||||
|
handlers for cleaning proxy conf on exit / crash / taskkill / whatever
|
||||||
|
*/
|
||||||
|
|
||||||
|
SetConsoleCtrlHandler(consoleHandler, TRUE);
|
||||||
|
StartWatchdog();
|
||||||
|
|
||||||
|
__try
|
||||||
|
{
|
||||||
|
if (!run()) return 1;
|
||||||
|
}
|
||||||
|
__except (EXCEPTION_EXECUTE_HANDLER)
|
||||||
|
{
|
||||||
|
if (conf) conf->clearProxy();
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user