diff --git a/battleye.8.17.2020/BEDaisy.sys b/badeye/badeye/BEDaisy.sys
similarity index 100%
rename from battleye.8.17.2020/BEDaisy.sys
rename to badeye/badeye/BEDaisy.sys
diff --git a/badeye/badeye/badeye.vcxproj b/badeye/badeye/badeye.vcxproj
index 1ef8ad8..fe9df24 100644
--- a/badeye/badeye/badeye.vcxproj
+++ b/badeye/badeye/badeye.vcxproj
@@ -24,6 +24,7 @@
{faadd55d-e2c8-4e6d-be7e-6d8b5209f4f0}
badeye
10.0
+ badeye
@@ -78,9 +79,11 @@
true
+ $(ProjectName)
false
+ $(ProjectName)
@@ -116,6 +119,7 @@
true
_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
true
+ stdcpp17
Console
@@ -148,6 +152,9 @@
+
+
+
diff --git a/badeye/badeye/badeye.vcxproj.filters b/badeye/badeye/badeye.vcxproj.filters
index 02a3f13..c011e7b 100644
--- a/badeye/badeye/badeye.vcxproj.filters
+++ b/badeye/badeye/badeye.vcxproj.filters
@@ -9,6 +9,9 @@
{93995380-89BD-4b04-88EB-625FBE52EBFB}
h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd
+
+ {7d90a3bf-3270-443e-8add-02f28e77071a}
+
@@ -20,4 +23,9 @@
Source Files
+
+
+ Resource Files
+
+
\ No newline at end of file
diff --git a/badeye/badeye/icon.rc b/badeye/badeye/icon.rc
new file mode 100644
index 0000000..5856874
--- /dev/null
+++ b/badeye/badeye/icon.rc
@@ -0,0 +1,3 @@
+// Icon Resource Definition
+#define MAIN_ICON 102
+MAIN_ICON ICON "small.ico"
\ No newline at end of file
diff --git a/badeye/badeye/main.cpp b/badeye/badeye/main.cpp
index cf607d4..3a0ee88 100644
--- a/badeye/badeye/main.cpp
+++ b/badeye/badeye/main.cpp
@@ -9,7 +9,13 @@ int main(const int argc, const char** argv)
return -1;
}
- const auto lsass_pid = util::get_process_id(L"lsass.exe");
+ if (!util::get_pid(L"BEService.exe"))
+ {
+ std::perror("[-] please run BattlEye...\n");
+ return -1;
+ }
+
+ const auto lsass_pid = util::get_pid(L"lsass.exe");
std::printf("[+] lsass_pid => %p\n", lsass_pid);
nozzle::injector inject(argv[1], lsass_pid);
diff --git a/badeye/badeye/nozzle.hpp b/badeye/badeye/nozzle.hpp
index 3a0243e..4e406cf 100644
--- a/badeye/badeye/nozzle.hpp
+++ b/badeye/badeye/nozzle.hpp
@@ -104,7 +104,7 @@ namespace util
data.insert(data.begin(), std::istream_iterator(fstr), std::istream_iterator());
}
- inline uint32_t get_process_id(const std::wstring_view process_name)
+ inline uint32_t get_pid(const std::wstring_view process_name)
{
// open a system snapshot of all loaded processes
uq_handle snap_shot{ CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0), &CloseHandle };
@@ -506,7 +506,7 @@ namespace nozzle
void injector::set_target(std::wstring proc_name)
{
- target_pid = util::get_process_id(proc_name);
+ target_pid = util::get_pid(proc_name);
}
void* injector::get_pe_image() const
diff --git a/badeye/badeye/small.ico b/badeye/badeye/small.ico
new file mode 100644
index 0000000..eb0fc5a
Binary files /dev/null and b/badeye/badeye/small.ico differ
diff --git a/badeye/inside/bedaisy.hpp b/badeye/inside/bedaisy.hpp
index c9e296b..7e1c9b5 100644
--- a/badeye/inside/bedaisy.hpp
+++ b/badeye/inside/bedaisy.hpp
@@ -10,7 +10,7 @@ using ioctl_data = struct { HANDLE drv_handle; void* return_addr; };
namespace bedaisy
{
- struct beioctl
+ struct beioctl_t
{
void* ret_addr;
void* handle;
@@ -20,7 +20,7 @@ namespace bedaisy
size_t* bytes_read;
};
- inline ioctl_data get_ioctl_data()
+ __forceinline ioctl_data get_ioctl_data()
{
const auto wpm =
reinterpret_cast(
@@ -47,20 +47,20 @@ namespace bedaisy
return { {}, {} };
}
- inline void read(HANDLE proc_handle, std::uintptr_t addr, void* buffer, std::size_t size)
+ __forceinline void read(HANDLE proc_handle, std::uintptr_t addr, void* buffer, std::size_t size)
{
if (!addr || !buffer || !size)
return;
const auto [daisy_handle, return_addr] = get_ioctl_data();
- const beioctl ioctl_data
+ beioctl_t ioctl_data
{
return_addr,
proc_handle,
addr,
buffer,
size,
- (size_t*)0xFFFFFFF3423424
+ nullptr
};
DWORD bytes_read;
@@ -72,18 +72,18 @@ namespace bedaisy
sizeof ioctl_data,
nullptr,
NULL,
- &bytes_read,
+ (LPDWORD)&bytes_read,
nullptr
);
}
- void write(HANDLE proc_handle, std::uintptr_t addr, void* buffer, std::size_t size)
+ __forceinline void write(HANDLE proc_handle, std::uintptr_t addr, void* buffer, std::size_t size)
{
if (!proc_handle || !addr)
return;
const auto [daisy_handle, return_addr] = get_ioctl_data();
- const beioctl ioctl_data
+ beioctl_t ioctl_data
{
return_addr,
proc_handle,
@@ -108,7 +108,7 @@ namespace bedaisy
}
template
- inline T read(HANDLE proc_handle, std::uintptr_t addr)
+ __forceinline T read(HANDLE proc_handle, std::uintptr_t addr)
{
if (!addr || !proc_handle)
return {};
@@ -119,7 +119,7 @@ namespace bedaisy
}
template
- inline void write(HANDLE proc_handle, std::uintptr_t addr, const T& data)
+ __forceinline void write(HANDLE proc_handle, std::uintptr_t addr, const T& data)
{
if (!proc_handle || !addr)
return;
diff --git a/badeye/inside/dllmain.cpp b/badeye/inside/dllmain.cpp
index ba168fc..d8860d4 100644
--- a/badeye/inside/dllmain.cpp
+++ b/badeye/inside/dllmain.cpp
@@ -1,29 +1,34 @@
-#include "rust.hpp"
+#include "utils.hpp"
-void example()
+void run_example()
{
OutputDebugStringA("[lsass] main thread created!");
+
const auto proc_handle =
- OpenProcess(
- PROCESS_QUERY_INFORMATION, FALSE,
- utils::get_pid(L"RustClient.exe")
- );
+ OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, utils::get_pid(L"notepad.exe"));
- if (proc_handle)
+ if (proc_handle == INVALID_HANDLE_VALUE)
{
- rust::set_fov(proc_handle, 120.f);
- OutputDebugStringA("[lsass] set fov!");
+ OutputDebugStringA("[lsass] failed to open handle to system process...");
+ return;
}
-}
+ const auto ntdll_base =
+ reinterpret_cast(GetModuleHandleA("ntdll.dll"));
+
+ if (bedaisy::read(proc_handle, ntdll_base) == IMAGE_DOS_SIGNATURE)
+ OutputDebugStringA("[lsass] read ntdll MZ from notepad.exe using BEDaisy.sys...\n");
+ else
+ OutputDebugStringA("[lsass] failed to read MZ...\n");
+}
std::atomic init = false;
-extern "C" NTSTATUS nt_close(void* handle)
+extern "C" auto nt_close(void* handle) -> NTSTATUS
{
if (!init.exchange(true))
{
OutputDebugStringA("[lsass] creating thread!");
- CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)&example, NULL, NULL, NULL);
+ CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)&run_example, NULL, NULL, NULL);
}
return NULL;
}
\ No newline at end of file
diff --git a/badeye/inside/inside.vcxproj b/badeye/inside/inside.vcxproj
index 2caaa24..6b9a20c 100644
--- a/badeye/inside/inside.vcxproj
+++ b/badeye/inside/inside.vcxproj
@@ -165,7 +165,6 @@
-
diff --git a/badeye/inside/inside.vcxproj.filters b/badeye/inside/inside.vcxproj.filters
index bcfddca..bdb77d8 100644
--- a/badeye/inside/inside.vcxproj.filters
+++ b/badeye/inside/inside.vcxproj.filters
@@ -21,8 +21,5 @@
Header Files
-
- Header Files
-
\ No newline at end of file
diff --git a/badeye/inside/rust.hpp b/badeye/inside/rust.hpp
deleted file mode 100644
index 69813c8..0000000
--- a/badeye/inside/rust.hpp
+++ /dev/null
@@ -1,30 +0,0 @@
-#pragma once
-#include "utils.hpp"
-#define GFX_MANAGER 0x28C6F30
-#define CAMERA_MANAGER 0xB8
-#define CAMERA_FOV 0x18
-
-namespace rust
-{
- void set_fov(HANDLE proc_handle, float fov_value)
- {
- const auto asm_base = utils::get_module_base(proc_handle, L"GameAssembly.dll");
-
- if (!asm_base)
- return;
-
- const auto gfx_manager = bedaisy::read(
- proc_handle, asm_base + GFX_MANAGER);
-
- if (!gfx_manager)
- return;
-
- const auto camera_manager = bedaisy::read(
- proc_handle, gfx_manager + CAMERA_MANAGER);
-
- if (!camera_manager)
- return;
-
- bedaisy::write(proc_handle, camera_manager + CAMERA_FOV, fov_value);
- }
-}
\ No newline at end of file
diff --git a/badeye/inside/utils.hpp b/badeye/inside/utils.hpp
index cf9a8ad..7793e62 100644
--- a/badeye/inside/utils.hpp
+++ b/badeye/inside/utils.hpp
@@ -7,17 +7,17 @@
namespace utils
{
- struct nt_peb
+ typedef struct _nt_peb
{
std::uintptr_t res[2];
std::uintptr_t image_base;
std::uintptr_t ldr;
std::uintptr_t proc_params;
- };
+ } nt_peb;
- inline uint32_t get_pid(const std::wstring_view process_name)
+ __forceinline auto get_pid(const std::wstring_view process_name) -> std::uint32_t
{
- const auto handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
+ const auto handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
if (handle == INVALID_HANDLE_VALUE)
return !CloseHandle(handle);
@@ -34,7 +34,7 @@ namespace utils
return NULL;
}
- inline PPEB get_process_peb(const HANDLE process_handle)
+ __forceinline auto get_process_peb(const HANDLE process_handle) -> nt_peb*
{
PROCESS_BASIC_INFORMATION process_info{};
ULONG bytes_returned;
@@ -47,20 +47,18 @@ namespace utils
&bytes_returned
) != ERROR_SUCCESS)
return nullptr;
- return process_info.PebBaseAddress;
+
+ return reinterpret_cast(process_info.PebBaseAddress);
}
- // could do a snapshot but i have this code handy atm...
- inline std::uintptr_t get_proc_base(const HANDLE proc_handle)
+ __forceinline auto get_proc_base(const HANDLE proc_handle) -> std::uintptr_t
{
- if (!proc_handle) return {};
const auto ppeb = reinterpret_cast(get_process_peb(proc_handle));
const auto peb = bedaisy::read(proc_handle, ppeb);
return peb.image_base;
}
- // could do a snapshot but i have this code handy atm...
- inline std::uintptr_t get_module_base(const HANDLE proc_handle, const wchar_t* module_handle)
+ __forceinline auto get_module_base(const HANDLE proc_handle, const wchar_t* module_handle) -> std::uintptr_t
{
const auto ppeb = reinterpret_cast(get_process_peb(proc_handle));
const auto peb = bedaisy::read(proc_handle, ppeb);
diff --git a/battleye.8.17.2020/cmd.exe b/battleye.8.17.2020/cmd.exe
deleted file mode 100644
index 2c97cc5..0000000
Binary files a/battleye.8.17.2020/cmd.exe and /dev/null differ
diff --git a/example/BattlEye (8.17.2020)/BEDaisy (8.17.2020).sys b/example/BattlEye (8.17.2020)/BEDaisy (8.17.2020).sys
new file mode 100644
index 0000000..592f663
Binary files /dev/null and b/example/BattlEye (8.17.2020)/BEDaisy (8.17.2020).sys differ
diff --git a/battleye.8.17.2020/BELauncher.exe b/example/BattlEye (8.17.2020)/BELauncher.exe
similarity index 100%
rename from battleye.8.17.2020/BELauncher.exe
rename to example/BattlEye (8.17.2020)/BELauncher.exe
diff --git a/battleye.8.17.2020/BattlEye/BEClient_x64.dll b/example/BattlEye (8.17.2020)/BattlEye/BEClient_x64.dll
similarity index 100%
rename from battleye.8.17.2020/BattlEye/BEClient_x64.dll
rename to example/BattlEye (8.17.2020)/BattlEye/BEClient_x64.dll
diff --git a/battleye.8.17.2020/BattlEye/BELauncher.ini b/example/BattlEye (8.17.2020)/BattlEye/BELauncher.ini
similarity index 71%
rename from battleye.8.17.2020/BattlEye/BELauncher.ini
rename to example/BattlEye (8.17.2020)/BattlEye/BELauncher.ini
index 931a3b0..d03d4fd 100644
Binary files a/battleye.8.17.2020/BattlEye/BELauncher.ini and b/example/BattlEye (8.17.2020)/BattlEye/BELauncher.ini differ
diff --git a/battleye.8.17.2020/BattlEye/BEService_x64.exe b/example/BattlEye (8.17.2020)/BattlEye/BEService_x64.exe
similarity index 100%
rename from battleye.8.17.2020/BattlEye/BEService_x64.exe
rename to example/BattlEye (8.17.2020)/BattlEye/BEService_x64.exe
diff --git a/battleye.8.17.2020/BattlEye/Install_BattlEye.bat b/example/BattlEye (8.17.2020)/BattlEye/Install_BattlEye.bat
similarity index 100%
rename from battleye.8.17.2020/BattlEye/Install_BattlEye.bat
rename to example/BattlEye (8.17.2020)/BattlEye/Install_BattlEye.bat
diff --git a/battleye.8.17.2020/BattlEye/Privacy/cs-CZ.txt b/example/BattlEye (8.17.2020)/BattlEye/Privacy/cs-CZ.txt
similarity index 100%
rename from battleye.8.17.2020/BattlEye/Privacy/cs-CZ.txt
rename to example/BattlEye (8.17.2020)/BattlEye/Privacy/cs-CZ.txt
diff --git a/battleye.8.17.2020/BattlEye/Privacy/cs.txt b/example/BattlEye (8.17.2020)/BattlEye/Privacy/cs.txt
similarity index 100%
rename from battleye.8.17.2020/BattlEye/Privacy/cs.txt
rename to example/BattlEye (8.17.2020)/BattlEye/Privacy/cs.txt
diff --git a/battleye.8.17.2020/BattlEye/Privacy/de-DE.txt b/example/BattlEye (8.17.2020)/BattlEye/Privacy/de-DE.txt
similarity index 100%
rename from battleye.8.17.2020/BattlEye/Privacy/de-DE.txt
rename to example/BattlEye (8.17.2020)/BattlEye/Privacy/de-DE.txt
diff --git a/battleye.8.17.2020/BattlEye/Privacy/de.txt b/example/BattlEye (8.17.2020)/BattlEye/Privacy/de.txt
similarity index 100%
rename from battleye.8.17.2020/BattlEye/Privacy/de.txt
rename to example/BattlEye (8.17.2020)/BattlEye/Privacy/de.txt
diff --git a/battleye.8.17.2020/BattlEye/Privacy/en-US.txt b/example/BattlEye (8.17.2020)/BattlEye/Privacy/en-US.txt
similarity index 100%
rename from battleye.8.17.2020/BattlEye/Privacy/en-US.txt
rename to example/BattlEye (8.17.2020)/BattlEye/Privacy/en-US.txt
diff --git a/battleye.8.17.2020/BattlEye/Privacy/en.txt b/example/BattlEye (8.17.2020)/BattlEye/Privacy/en.txt
similarity index 100%
rename from battleye.8.17.2020/BattlEye/Privacy/en.txt
rename to example/BattlEye (8.17.2020)/BattlEye/Privacy/en.txt
diff --git a/battleye.8.17.2020/BattlEye/Privacy/es-ES.txt b/example/BattlEye (8.17.2020)/BattlEye/Privacy/es-ES.txt
similarity index 100%
rename from battleye.8.17.2020/BattlEye/Privacy/es-ES.txt
rename to example/BattlEye (8.17.2020)/BattlEye/Privacy/es-ES.txt
diff --git a/battleye.8.17.2020/BattlEye/Privacy/es-MX.txt b/example/BattlEye (8.17.2020)/BattlEye/Privacy/es-MX.txt
similarity index 100%
rename from battleye.8.17.2020/BattlEye/Privacy/es-MX.txt
rename to example/BattlEye (8.17.2020)/BattlEye/Privacy/es-MX.txt
diff --git a/battleye.8.17.2020/BattlEye/Privacy/es.txt b/example/BattlEye (8.17.2020)/BattlEye/Privacy/es.txt
similarity index 100%
rename from battleye.8.17.2020/BattlEye/Privacy/es.txt
rename to example/BattlEye (8.17.2020)/BattlEye/Privacy/es.txt
diff --git a/battleye.8.17.2020/BattlEye/Privacy/fr-FR.txt b/example/BattlEye (8.17.2020)/BattlEye/Privacy/fr-FR.txt
similarity index 100%
rename from battleye.8.17.2020/BattlEye/Privacy/fr-FR.txt
rename to example/BattlEye (8.17.2020)/BattlEye/Privacy/fr-FR.txt
diff --git a/battleye.8.17.2020/BattlEye/Privacy/fr.txt b/example/BattlEye (8.17.2020)/BattlEye/Privacy/fr.txt
similarity index 100%
rename from battleye.8.17.2020/BattlEye/Privacy/fr.txt
rename to example/BattlEye (8.17.2020)/BattlEye/Privacy/fr.txt
diff --git a/battleye.8.17.2020/BattlEye/Privacy/it-IT.txt b/example/BattlEye (8.17.2020)/BattlEye/Privacy/it-IT.txt
similarity index 100%
rename from battleye.8.17.2020/BattlEye/Privacy/it-IT.txt
rename to example/BattlEye (8.17.2020)/BattlEye/Privacy/it-IT.txt
diff --git a/battleye.8.17.2020/BattlEye/Privacy/it.txt b/example/BattlEye (8.17.2020)/BattlEye/Privacy/it.txt
similarity index 100%
rename from battleye.8.17.2020/BattlEye/Privacy/it.txt
rename to example/BattlEye (8.17.2020)/BattlEye/Privacy/it.txt
diff --git a/battleye.8.17.2020/BattlEye/Privacy/ja-JP.txt b/example/BattlEye (8.17.2020)/BattlEye/Privacy/ja-JP.txt
similarity index 100%
rename from battleye.8.17.2020/BattlEye/Privacy/ja-JP.txt
rename to example/BattlEye (8.17.2020)/BattlEye/Privacy/ja-JP.txt
diff --git a/battleye.8.17.2020/BattlEye/Privacy/ja.txt b/example/BattlEye (8.17.2020)/BattlEye/Privacy/ja.txt
similarity index 100%
rename from battleye.8.17.2020/BattlEye/Privacy/ja.txt
rename to example/BattlEye (8.17.2020)/BattlEye/Privacy/ja.txt
diff --git a/battleye.8.17.2020/BattlEye/Privacy/ko-KR.txt b/example/BattlEye (8.17.2020)/BattlEye/Privacy/ko-KR.txt
similarity index 100%
rename from battleye.8.17.2020/BattlEye/Privacy/ko-KR.txt
rename to example/BattlEye (8.17.2020)/BattlEye/Privacy/ko-KR.txt
diff --git a/battleye.8.17.2020/BattlEye/Privacy/ko.txt b/example/BattlEye (8.17.2020)/BattlEye/Privacy/ko.txt
similarity index 100%
rename from battleye.8.17.2020/BattlEye/Privacy/ko.txt
rename to example/BattlEye (8.17.2020)/BattlEye/Privacy/ko.txt
diff --git a/battleye.8.17.2020/BattlEye/Privacy/nl-NL.txt b/example/BattlEye (8.17.2020)/BattlEye/Privacy/nl-NL.txt
similarity index 100%
rename from battleye.8.17.2020/BattlEye/Privacy/nl-NL.txt
rename to example/BattlEye (8.17.2020)/BattlEye/Privacy/nl-NL.txt
diff --git a/battleye.8.17.2020/BattlEye/Privacy/nl.txt b/example/BattlEye (8.17.2020)/BattlEye/Privacy/nl.txt
similarity index 100%
rename from battleye.8.17.2020/BattlEye/Privacy/nl.txt
rename to example/BattlEye (8.17.2020)/BattlEye/Privacy/nl.txt
diff --git a/battleye.8.17.2020/BattlEye/Privacy/pl-PL.txt b/example/BattlEye (8.17.2020)/BattlEye/Privacy/pl-PL.txt
similarity index 100%
rename from battleye.8.17.2020/BattlEye/Privacy/pl-PL.txt
rename to example/BattlEye (8.17.2020)/BattlEye/Privacy/pl-PL.txt
diff --git a/battleye.8.17.2020/BattlEye/Privacy/pl.txt b/example/BattlEye (8.17.2020)/BattlEye/Privacy/pl.txt
similarity index 100%
rename from battleye.8.17.2020/BattlEye/Privacy/pl.txt
rename to example/BattlEye (8.17.2020)/BattlEye/Privacy/pl.txt
diff --git a/battleye.8.17.2020/BattlEye/Privacy/pt-BR.txt b/example/BattlEye (8.17.2020)/BattlEye/Privacy/pt-BR.txt
similarity index 100%
rename from battleye.8.17.2020/BattlEye/Privacy/pt-BR.txt
rename to example/BattlEye (8.17.2020)/BattlEye/Privacy/pt-BR.txt
diff --git a/battleye.8.17.2020/BattlEye/Privacy/pt.txt b/example/BattlEye (8.17.2020)/BattlEye/Privacy/pt.txt
similarity index 100%
rename from battleye.8.17.2020/BattlEye/Privacy/pt.txt
rename to example/BattlEye (8.17.2020)/BattlEye/Privacy/pt.txt
diff --git a/battleye.8.17.2020/BattlEye/Privacy/ru-RU.txt b/example/BattlEye (8.17.2020)/BattlEye/Privacy/ru-RU.txt
similarity index 100%
rename from battleye.8.17.2020/BattlEye/Privacy/ru-RU.txt
rename to example/BattlEye (8.17.2020)/BattlEye/Privacy/ru-RU.txt
diff --git a/battleye.8.17.2020/BattlEye/Privacy/ru.txt b/example/BattlEye (8.17.2020)/BattlEye/Privacy/ru.txt
similarity index 100%
rename from battleye.8.17.2020/BattlEye/Privacy/ru.txt
rename to example/BattlEye (8.17.2020)/BattlEye/Privacy/ru.txt
diff --git a/battleye.8.17.2020/BattlEye/Privacy/tr-TR.txt b/example/BattlEye (8.17.2020)/BattlEye/Privacy/tr-TR.txt
similarity index 100%
rename from battleye.8.17.2020/BattlEye/Privacy/tr-TR.txt
rename to example/BattlEye (8.17.2020)/BattlEye/Privacy/tr-TR.txt
diff --git a/battleye.8.17.2020/BattlEye/Privacy/tr.txt b/example/BattlEye (8.17.2020)/BattlEye/Privacy/tr.txt
similarity index 100%
rename from battleye.8.17.2020/BattlEye/Privacy/tr.txt
rename to example/BattlEye (8.17.2020)/BattlEye/Privacy/tr.txt
diff --git a/battleye.8.17.2020/BattlEye/Privacy/zh-CN.txt b/example/BattlEye (8.17.2020)/BattlEye/Privacy/zh-CN.txt
similarity index 100%
rename from battleye.8.17.2020/BattlEye/Privacy/zh-CN.txt
rename to example/BattlEye (8.17.2020)/BattlEye/Privacy/zh-CN.txt
diff --git a/battleye.8.17.2020/BattlEye/Privacy/zh-TW.txt b/example/BattlEye (8.17.2020)/BattlEye/Privacy/zh-TW.txt
similarity index 100%
rename from battleye.8.17.2020/BattlEye/Privacy/zh-TW.txt
rename to example/BattlEye (8.17.2020)/BattlEye/Privacy/zh-TW.txt
diff --git a/battleye.8.17.2020/BattlEye/Privacy/zh.txt b/example/BattlEye (8.17.2020)/BattlEye/Privacy/zh.txt
similarity index 100%
rename from battleye.8.17.2020/BattlEye/Privacy/zh.txt
rename to example/BattlEye (8.17.2020)/BattlEye/Privacy/zh.txt
diff --git a/battleye.8.17.2020/BattlEye/Uninstall_BattlEye.bat b/example/BattlEye (8.17.2020)/BattlEye/Uninstall_BattlEye.bat
similarity index 100%
rename from battleye.8.17.2020/BattlEye/Uninstall_BattlEye.bat
rename to example/BattlEye (8.17.2020)/BattlEye/Uninstall_BattlEye.bat
diff --git a/example/BattlEye (8.17.2020)/cmd.exe.lnk b/example/BattlEye (8.17.2020)/cmd.exe.lnk
new file mode 100644
index 0000000..681f53e
Binary files /dev/null and b/example/BattlEye (8.17.2020)/cmd.exe.lnk differ
diff --git a/battleye.8.17.2020/README.md b/example/README.md
similarity index 100%
rename from battleye.8.17.2020/README.md
rename to example/README.md
diff --git a/example/badeye.exe b/example/badeye.exe
new file mode 100644
index 0000000..7183ea4
Binary files /dev/null and b/example/badeye.exe differ
diff --git a/example/desktop.ini b/example/desktop.ini
new file mode 100644
index 0000000..d1ead95
--- /dev/null
+++ b/example/desktop.ini
@@ -0,0 +1,2 @@
+[LocalizedFileNames]
+Command Prompt.lnk=@%SystemRoot%\system32\shell32.dll,-22022
diff --git a/example/example.bat b/example/example.bat
new file mode 100644
index 0000000..962dc71
--- /dev/null
+++ b/example/example.bat
@@ -0,0 +1,2 @@
+start notepad.exe
+start badeye.exe inside.dll
\ No newline at end of file
diff --git a/example/inside.dll b/example/inside.dll
new file mode 100644
index 0000000..8741092
Binary files /dev/null and b/example/inside.dll differ