#define SCFW_ENABLE_LOAD_MODULE
#define SCFW_ENABLE_UNLOAD_MODULE
#define SCFW_ENABLE_LOOKUP_SYMBOL
#define SCFW_ENABLE_FULL_MODULE_SEARCH
#define SCFW_MODULE_DEFAULT_FLAGS ( \
SCFW_FLAG_DYNAMIC_LOAD \
| SCFW_FLAG_DYNAMIC_UNLOAD \
| SCFW_FLAG_DYNAMIC_RESOLVE \
)
#include <scfw/runtime.h>
#include <scfw/platform/windows/usermode.h>
#include <vmi/shellcode.hpp>
#include <cstdint>
#include <windows.h>
IMPORT_BEGIN();
IMPORT_MODULE("user32.dll");
IMPORT_SYMBOL(MessageBoxA);
IMPORT_END();
namespace sc {
struct bridge_traits : vmi::default_bridge_traits {
static constexpr uint16_t request = 0x0001;
};
struct bridge : vmi::bridge<bridge_traits> {
static constexpr uint16_t method_exit = 0xffff;
static
void
exit(
_In_ int result
)
{
(void)send(
method_exit,
static_cast<uint64_t>(result)
);
}
};
extern "C"
void
__fastcall
entry(
_In_ void* argument1, _In_opt_ void* argument2 )
{
(void)argument2;
vmi::parameter_reader reader{ argument1 };
const auto title = reader.read_string();
const auto text = reader.read_string();
const auto result = MessageBoxA(
NULL,
text,
title,
MB_OK | MB_SETFOREGROUND | MB_TOPMOST
);
bridge::exit(result);
}
}