-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.hpp
118 lines (103 loc) · 3.23 KB
/
app.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#pragma once
#include <wx/wx.h>
#include <wx/dcgraph.h>
#include <wx/dcbuffer.h>
#include "HTTP.hpp"
#include "update.hpp"
#include <Windows.h>
#include <TlHelp32.h>
#include <psapi.h>
#include <string>
#include <chrono>
#include "ManualMapper.hpp"
#include "Encryption.hpp"
#define TIME_POINT std::chrono::steady_clock::time_point
#define TIME_NOW() (std::chrono::steady_clock::now())
#define TIME_DIFF(after, before) (std::chrono::duration_cast<std::chrono::microseconds>((after) - (before)).count() / (double)1e+6)
#define ERROR_STR(context, code) (std::to_string((int)(context)) + "-" + std::to_string((int)(code)) + "v" + std::string(INJECTOR_CURRENT_VERSION))
class InjectorApp : public wxApp
{
public:
virtual bool OnInit();
};
class MainFrame;
struct Step
{
std::string Title = "Loading...";
std::string State = "Waiting...";
float Progress = 0.f;
bool Failed = false;
bool Active = false;
TIME_POINT TimeBegan = TIME_NOW();
bool (*handler)(MainFrame*);
Step(std::string title) : Title(title) {}
};
class MainWorker : public wxThread
{
wxFrame* parent;
public:
MainWorker(wxFrame* parent);
void* Entry();
};
class PeriodicPainter : public wxThread
{
wxFrame* parent;
int timeIntervalMS = 0;
public:
PeriodicPainter(wxFrame* parent, int ms);
void* Entry();
};
class MainFrame : public wxFrame
{
public:
constexpr static int Width = 400;
constexpr static int TopbarHeight = 23;
constexpr static int TopbarButtonSize = 32;
constexpr static int TopbarDraggableWidth = Width - TopbarButtonSize * 2;
constexpr static size_t StepCount = 4;
constexpr static int StepListingSize = 50;
constexpr static int StepListingPadding = 0;
constexpr static int StepLoadingRadius = 13;
constexpr static int StepLoadingCirclePadding = StepListingSize / 2 - StepLoadingRadius;
constexpr static int Height = TopbarHeight + (StepListingPadding + StepListingSize) * StepCount + StepListingPadding;
Encryption::Header DLLHeader;
char* DLLFile = nullptr;
size_t DLLFileSize = 0;
HANDLE CSGO = nullptr;
DWORD CSGO_PID = 0;
size_t numDllsLoaded = 0;
size_t totalDllsToLoad = 1;
Step Steps[StepCount] = {
Step("Checking for Injector Updates"),
Step("Finding CS:GO Process"),
Step("Downloading Latest DLL Version"),
Step("Decrypting and Injecting")
};
MainWorker* worker;
struct {
bool Dragging = false;
wxPoint OriginalMousePos; // globally
wxPoint OriginalWindowPos;
} DragData;
struct {
bool CloseHovered = false;
bool MinimizeHovered = false;
int Active = 0; // 0 = none, 1 = close, 2 = minimize
} Topbar;
void OnExit(wxCommandEvent& e);
void OnPaint(wxPaintEvent& e); PeriodicPainter* repainter = new PeriodicPainter(this, 1);
void OnMouseDown(wxMouseEvent& e);
void OnMouseUp(wxMouseEvent& e);
void OnMouseMove(wxMouseEvent& e);
void OnLeaveWindow(wxMouseEvent& e);
void OnEraseBackground(wxEraseEvent& e);
wxDECLARE_EVENT_TABLE();
public:
MainFrame();
bool work(std::string argv);
bool HandleInjectorUpdateStep();
bool HandleFindCSGOStep();
bool HandleDownloadStep();
bool HandleInjectStep();
void Exit();
};