diff options
| author | boris <wzn@moneybot.cc> | 2018-12-12 20:59:44 +1300 |
|---|---|---|
| committer | boris <wzn@moneybot.cc> | 2018-12-12 20:59:44 +1300 |
| commit | 1270999026bd77165edfffebfce277a34761710c (patch) | |
| tree | 536038a38bb4643acb74adac272d49793959d548 | |
| parent | ec4ad61acbe9e67c5e803e0549841dc5ef5cef2a (diff) | |
)
| -rw-r--r-- | loader/client/client_windows.cpp | 1 | ||||
| -rw-r--r-- | loader/server/client.cpp | 6 | ||||
| -rw-r--r-- | loader/server/injection.hpp | 91 | ||||
| -rw-r--r-- | loader/server/server.vcxproj | 1 | ||||
| -rw-r--r-- | loader/server/server.vcxproj.filters | 1 |
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" />
|
