summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorboris <wzn@moneybot.cc>2018-12-12 20:59:44 +1300
committerboris <wzn@moneybot.cc>2018-12-12 20:59:44 +1300
commit1270999026bd77165edfffebfce277a34761710c (patch)
tree536038a38bb4643acb74adac272d49793959d548
parentec4ad61acbe9e67c5e803e0549841dc5ef5cef2a (diff)
)
-rw-r--r--loader/client/client_windows.cpp1
-rw-r--r--loader/server/client.cpp6
-rw-r--r--loader/server/injection.hpp91
-rw-r--r--loader/server/server.vcxproj1
-rw-r--r--loader/server/server.vcxproj.filters1
5 files changed, 100 insertions, 0 deletions
diff --git a/loader/client/client_windows.cpp b/loader/client/client_windows.cpp
index 3f44d17..5231541 100644
--- a/loader/client/client_windows.cpp
+++ b/loader/client/client_windows.cpp
@@ -25,6 +25,7 @@
-> send original endscene address, send endscene pointer
-> send virtualprotect export
-> receive shellcode from server
+
-> write file and run shellcode
*/
int main( ) {
diff --git a/loader/server/client.cpp b/loader/server/client.cpp
index b749f16..9893b26 100644
--- a/loader/server/client.cpp
+++ b/loader/server/client.cpp
@@ -1,5 +1,6 @@
#include "client.hpp"
#include "server.hpp"
+#include "injection.hpp"
/*
std::vector< byte > server::c_client::receive_message( ) {
@@ -123,5 +124,10 @@ bool server::c_client::handle() {
if(get_msg() != "hello")
return false;
+ inject::c_pe_file pe_file;
+
+ if(!pe_file.get("test.dll"))
+ return false;
+
return true;
}
diff --git a/loader/server/injection.hpp b/loader/server/injection.hpp
new file mode 100644
index 0000000..d750bb5
--- /dev/null
+++ b/loader/server/injection.hpp
@@ -0,0 +1,91 @@
+#pragma once
+
+#include <iterator>
+
+namespace inject {
+ // small wrapper for pe files
+ class c_pe_file {
+ // wew lad
+ bool is_valid_pe() {
+ IMAGE_DOS_HEADER *dos_header;
+ IMAGE_NT_HEADERS *nt_headers;
+
+ // dos header, "mz"
+ dos_header = reinterpret_cast<decltype(dos_header)>(m_file.data());
+
+ if(!dos_header || dos_header->e_magic != IMAGE_DOS_SIGNATURE)
+ return false;
+
+ // nt headers, "pe00"
+ nt_headers = reinterpret_cast<decltype(nt_headers)>(m_file.data() + dos_header->e_lfanew);
+
+ if(!nt_headers || nt_headers->Signature != IMAGE_NT_SIGNATURE)
+ return false;
+
+ return true;
+ }
+
+ public:
+ std::vector<uint8_t> m_file;
+
+ c_pe_file() = default;
+
+ bool get(const char *name) {
+ std::ifstream file_handle(name, std::ios::in | std::ios::binary);
+
+ // do not skip whitespace
+ file_handle.unsetf(std::ios::skipws);
+
+ if(!file_handle.is_open())
+ return false;
+
+ // read file contents
+ m_file.insert(
+ m_file.begin(),
+ std::istream_iterator<uint8_t>(file_handle),
+ std::istream_iterator<uint8_t>()
+ );
+
+ file_handle.close();
+
+ // we read the file, check if it's a pe
+ if(m_file.size() > 0)
+ return is_valid_pe();
+
+ // empty file or not pe
+ return false;
+ }
+
+ // homo wrappers
+ size_t size() {
+ return m_file.size();
+ }
+
+ uint8_t *data() {
+ return m_file.data();
+ }
+ };
+
+ // handles reloc, overwriting pe header with cheat header
+ class c_inject_transaction {
+ c_pe_file m_file;
+ public:
+ c_inject_transaction() = default;
+
+ bool get(c_pe_file &file) {
+ if(!file.size())
+ return false;
+
+ m_file = file;
+ return true;
+ }
+
+ void process_pe_header(std::vector<uint8_t> &cheat_header) {
+ std::memcpy(m_file.data(), cheat_header.data(), cheat_header.size());
+ }
+
+ bool process_reloc() {
+ return true;
+ }
+ };
+} \ No newline at end of file
diff --git a/loader/server/server.vcxproj b/loader/server/server.vcxproj
index 543a42f..63bd5da 100644
--- a/loader/server/server.vcxproj
+++ b/loader/server/server.vcxproj
@@ -36,6 +36,7 @@
</ItemGroup>
<ItemGroup>
<ClInclude Include="client.hpp" />
+ <ClInclude Include="injection.hpp" />
<ClInclude Include="message.hpp" />
<ClInclude Include="server.hpp" />
<ClInclude Include="util.hpp" />
diff --git a/loader/server/server.vcxproj.filters b/loader/server/server.vcxproj.filters
index 5ef28fc..07743d9 100644
--- a/loader/server/server.vcxproj.filters
+++ b/loader/server/server.vcxproj.filters
@@ -5,6 +5,7 @@
<ClInclude Include="server.hpp" />
<ClInclude Include="util.hpp" />
<ClInclude Include="client.hpp" />
+ <ClInclude Include="injection.hpp" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="server.cpp" />