From e2379c4956099294994e090b9bede94bbbbdcab1 Mon Sep 17 00:00:00 2001 From: auth12 Date: Thu, 16 Jul 2020 13:37:51 +0100 Subject: Added windows support on client. --- client/src/assembler/assembler.cpp | 31 ------------------------------- client/src/assembler/assembler.h | 31 ------------------------------- client/src/assembler/opcodes.h | 9 --------- client/src/assembler/shellcode.cpp | 31 +++++++++++++++++++++++++++++++ client/src/assembler/shellcode.h | 29 +++++++++++++++++++++++++++++ client/src/client/client.cpp | 25 ++++++++++++++++--------- client/src/client/client.h | 14 +++++++------- client/src/include.h | 17 +++++++++-------- client/src/main.cpp | 4 +++- 9 files changed, 95 insertions(+), 96 deletions(-) delete mode 100644 client/src/assembler/assembler.cpp delete mode 100644 client/src/assembler/assembler.h delete mode 100644 client/src/assembler/opcodes.h create mode 100644 client/src/assembler/shellcode.cpp create mode 100644 client/src/assembler/shellcode.h (limited to 'client/src') diff --git a/client/src/assembler/assembler.cpp b/client/src/assembler/assembler.cpp deleted file mode 100644 index cf41ad1..0000000 --- a/client/src/assembler/assembler.cpp +++ /dev/null @@ -1,31 +0,0 @@ -#include "../include.h" -#include "assembler.h" - -void assembler::start() {} - -void assembler::push(const std::vector& args) { - if (!m_x64) { - for (auto it = args.rbegin(); it != args.rend(); ++it) { - m_assembler.push(*it); - } - return; - } - - // 64bit impl -} - -void assembler::call(const uintptr_t addr) {} - -void assembler::end() { - if (m_x64) { - } - - void* func; - m_runtime.add(&func, &m_code); - - const size_t size = m_code.codeSize(); - - m_buf.resize(size); - - std::memcpy(&m_buf[0], func, size); -} \ No newline at end of file diff --git a/client/src/assembler/assembler.h b/client/src/assembler/assembler.h deleted file mode 100644 index 00c7362..0000000 --- a/client/src/assembler/assembler.h +++ /dev/null @@ -1,31 +0,0 @@ -#pragma once - -#include - -using namespace asmjit; - -class assembler { - std::vector m_buf; - - CodeHolder m_code; - JitRuntime m_runtime; - x86::Assembler m_assembler; - - bool m_x64; - public: - assembler(const bool x64 = false) : m_x64{x64} { - Environment env(x64 ? Environment::kArchX64 : Environment::kArchX86); - - m_code.init(env); - m_code.attach(&m_assembler); - } - - void start(); - void push(const std::vector &args); - void call(const uintptr_t addr); - void save_ret(const uintptr_t addr); - void end(); - - auto &operator()() const { return m_buf; } - auto &operator->() const { return m_assembler; } -}; \ No newline at end of file diff --git a/client/src/assembler/opcodes.h b/client/src/assembler/opcodes.h deleted file mode 100644 index 5268b45..0000000 --- a/client/src/assembler/opcodes.h +++ /dev/null @@ -1,9 +0,0 @@ -#pragma once - - -namespace assembler { - enum opcodes : uint8_t { - nop = 0x90, - ret = 0xc3 - }; -}; \ No newline at end of file diff --git a/client/src/assembler/shellcode.cpp b/client/src/assembler/shellcode.cpp new file mode 100644 index 0000000..af3160b --- /dev/null +++ b/client/src/assembler/shellcode.cpp @@ -0,0 +1,31 @@ +#include "../include.h" +#include "shellcode.h" + +void sc::start() {} + +void sc::push(const std::vector& args) { + if (!m_x64) { + for (auto it = args.rbegin(); it != args.rend(); ++it) { + m_assembler.push(*it); + } + return; + } + + // 64bit impl +} + +void sc::call(const uintptr_t addr) {} + +void sc::end() { + if (m_x64) { + } + + void* func; + m_runtime.add(&func, &m_code); + + const size_t size = m_code.codeSize(); + + m_buf.resize(size); + + std::memcpy(&m_buf[0], func, size); +} \ No newline at end of file diff --git a/client/src/assembler/shellcode.h b/client/src/assembler/shellcode.h new file mode 100644 index 0000000..6fb2f61 --- /dev/null +++ b/client/src/assembler/shellcode.h @@ -0,0 +1,29 @@ +#pragma once + +using namespace asmjit; + +class sc { + std::vector m_buf; + + CodeHolder m_code; + JitRuntime m_runtime; + x86::Assembler m_assembler; + + bool m_x64; + public: + sc(const bool x64 = false) : m_x64{x64} { + Environment env(x64 ? Environment::kArchX64 : Environment::kArchX86); + + m_code.init(env); + m_code.attach(&m_assembler); + } + + void start(); + void push(const std::vector &args); + void call(const uintptr_t addr); + void save_ret(const uintptr_t addr); + void end(); + + auto &operator()() const { return m_buf; } + auto &operator->() const { return m_assembler; } +}; \ No newline at end of file diff --git a/client/src/client/client.cpp b/client/src/client/client.cpp index 43ee6c7..8e71e81 100644 --- a/client/src/client/client.cpp +++ b/client/src/client/client.cpp @@ -2,23 +2,30 @@ #include "client.h" void tcp::client::start(const std::string_view server_ip, const uint16_t port) { - SSL_library_init(); + wolfSSL_library_init(); - m_ssl_ctx = SSL_CTX_new(TLS_client_method()); + m_ssl_ctx = wolfSSL_CTX_new(wolfTLS_client_method()); - int ret = SSL_CTX_load_verify_locations(m_ssl_ctx, "ssl/rootCA.crt", nullptr); + int ret = wolfSSL_CTX_load_verify_locations(m_ssl_ctx, "ssl/rootCA.crt", nullptr); if (ret != 1) { io::logger->error("failed to load ca."); return; } - SSL_CTX_set_verify(m_ssl_ctx, SSL_VERIFY_PEER, 0); + wolfSSL_CTX_set_verify(m_ssl_ctx, SSL_VERIFY_PEER, 0); + + WSADATA data; + ret = WSAStartup(MAKEWORD(2, 2), &data); + if (ret != 0) { + io::logger->error("failed to initialize WSA."); + return; + } m_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (m_socket == -1) { io::logger->error("failed to create socket."); return; } - + sockaddr_in server_addr; server_addr.sin_family = AF_INET; @@ -32,13 +39,13 @@ void tcp::client::start(const std::string_view server_ip, const uint16_t port) { return; } - m_server_ssl = SSL_new(m_ssl_ctx); - SSL_set_fd(m_server_ssl, m_socket); + m_server_ssl = wolfSSL_new(m_ssl_ctx); + wolfSSL_set_fd(m_server_ssl, m_socket); - ret = SSL_connect(m_server_ssl); + ret = wolfSSL_connect(m_server_ssl); if (ret != 1) { - ret = SSL_get_error(m_server_ssl, ret); + ret = wolfSSL_get_error(m_server_ssl, ret); io::logger->error("secure connection failed, code {}", ret); return; } diff --git a/client/src/client/client.h b/client/src/client/client.h index 4239651..40b8e53 100644 --- a/client/src/client/client.h +++ b/client/src/client/client.h @@ -27,8 +27,8 @@ class client { int m_socket; std::atomic m_active; - SSL* m_server_ssl; - SSL_CTX* m_ssl_ctx; + WOLFSSL* m_server_ssl; + WOLFSSL_CTX* m_ssl_ctx; public: int state; @@ -48,11 +48,11 @@ class client { } int write(const void* data, size_t size) { - return SSL_write(m_server_ssl, data, size); + return wolfSSL_write(m_server_ssl, data, size); } int read(void* data, size_t size) { - return SSL_read(m_server_ssl, data, size); + return wolfSSL_read(m_server_ssl, data, size); } int read_stream(std::vector& out); @@ -75,9 +75,9 @@ class client { operator bool() const { return m_active; } void shutdown() { - close(m_socket); - SSL_shutdown(m_server_ssl); - SSL_free(m_server_ssl); + closesocket(m_socket); + wolfSSL_shutdown(m_server_ssl); + wolfSSL_free(m_server_ssl); m_active = false; } diff --git a/client/src/include.h b/client/src/include.h index fe46e5a..562b52f 100644 --- a/client/src/include.h +++ b/client/src/include.h @@ -1,6 +1,12 @@ #pragma once + +#include #include +#include +#include +#include + #include #include #include @@ -26,16 +32,11 @@ #include #include -#include -#include -#include -#include -#include -#include - #include #include #include #include -#include \ No newline at end of file +#include + +#include \ No newline at end of file diff --git a/client/src/main.cpp b/client/src/main.cpp index cef083f..330096c 100644 --- a/client/src/main.cpp +++ b/client/src/main.cpp @@ -1,7 +1,7 @@ #include "include.h" #include "util/io.h" #include "client/client.h" -#include "assembler/assembler.h" +#include "assembler/shellcode.h" int main(int argc, char* argv[]) { io::init(); @@ -114,4 +114,6 @@ int main(int argc, char* argv[]) { break; } } + + std::cin.get(); } -- cgit v1.2.3 From 4e6a09d486ed462ee4cf38c3735a12d530dc09d4 Mon Sep 17 00:00:00 2001 From: auth12 <67507608+auth12@users.noreply.github.com> Date: Sun, 19 Jul 2020 11:45:43 -0700 Subject: Added asmjit. Fixed solution file. --- client/src/client/client.h | 3 +++ client/src/include.h | 9 +-------- client/src/shellcode/shellcode.h | 2 +- client/src/util/io.h | 4 ++++ 4 files changed, 9 insertions(+), 9 deletions(-) (limited to 'client/src') diff --git a/client/src/client/client.h b/client/src/client/client.h index 40b8e53..f4769d4 100644 --- a/client/src/client/client.h +++ b/client/src/client/client.h @@ -1,4 +1,7 @@ #pragma once + +#include + #include "../util/io.h" #include "../util/events.h" #include "packet.h" diff --git a/client/src/include.h b/client/src/include.h index 562b52f..a810eed 100644 --- a/client/src/include.h +++ b/client/src/include.h @@ -32,11 +32,4 @@ #include #include -#include -#include -#include -#include - -#include - -#include \ No newline at end of file +#include \ No newline at end of file diff --git a/client/src/shellcode/shellcode.h b/client/src/shellcode/shellcode.h index 5f0e135..4a87dca 100644 --- a/client/src/shellcode/shellcode.h +++ b/client/src/shellcode/shellcode.h @@ -1,6 +1,6 @@ #pragma once -#include +#include using namespace asmjit; diff --git a/client/src/util/io.h b/client/src/util/io.h index 8eae321..b1a09f9 100644 --- a/client/src/util/io.h +++ b/client/src/util/io.h @@ -1,5 +1,9 @@ #pragma once +#include +#include +#include + namespace io { extern std::shared_ptr logger; -- cgit v1.2.3