diff --git a/.gitignore b/.gitignore index 53f8253..c6127b3 100644 --- a/.gitignore +++ b/.gitignore @@ -50,4 +50,3 @@ modules.order Module.symvers Mkfile.old dkms.conf -.vs/* diff --git a/MinecraftEducationEditionLoginSkip.sln b/MinecraftEducationEdition.sln similarity index 95% rename from MinecraftEducationEditionLoginSkip.sln rename to MinecraftEducationEdition.sln index ae6404f..2eef70e 100644 --- a/MinecraftEducationEditionLoginSkip.sln +++ b/MinecraftEducationEdition.sln @@ -1,36 +1,35 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.30114.105 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MinecraftEducationEdition", "MinecraftEducationEdition\MinecraftEducationEdition.vcxproj", "{917B2AEB-964D-4499-8108-4E356C91D5E9}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|x64 = Release|x64 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {917B2AEB-964D-4499-8108-4E356C91D5E9}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {917B2AEB-964D-4499-8108-4E356C91D5E9}.Debug|x64.ActiveCfg = Debug|x64 - {917B2AEB-964D-4499-8108-4E356C91D5E9}.Debug|x64.Build.0 = Debug|x64 - {917B2AEB-964D-4499-8108-4E356C91D5E9}.Debug|x86.ActiveCfg = Debug|Win32 - {917B2AEB-964D-4499-8108-4E356C91D5E9}.Debug|x86.Build.0 = Debug|Win32 - {917B2AEB-964D-4499-8108-4E356C91D5E9}.Release|Any CPU.ActiveCfg = Release|Win32 - {917B2AEB-964D-4499-8108-4E356C91D5E9}.Release|Any CPU.Build.0 = Release|Win32 - {917B2AEB-964D-4499-8108-4E356C91D5E9}.Release|x64.ActiveCfg = Release|x64 - {917B2AEB-964D-4499-8108-4E356C91D5E9}.Release|x64.Build.0 = Release|x64 - {917B2AEB-964D-4499-8108-4E356C91D5E9}.Release|x86.ActiveCfg = Release|Win32 - {917B2AEB-964D-4499-8108-4E356C91D5E9}.Release|x86.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {CBDDD1CF-AD3F-4107-B580-BFACEB76CBFF} - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30114.105 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MinecraftEducationEdition", "MinecraftEducationEdition\MinecraftEducationEdition.vcxproj", "{917B2AEB-964D-4499-8108-4E356C91D5E9}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {917B2AEB-964D-4499-8108-4E356C91D5E9}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {917B2AEB-964D-4499-8108-4E356C91D5E9}.Debug|x64.ActiveCfg = Debug|x64 + {917B2AEB-964D-4499-8108-4E356C91D5E9}.Debug|x64.Build.0 = Debug|x64 + {917B2AEB-964D-4499-8108-4E356C91D5E9}.Debug|x86.ActiveCfg = Debug|Win32 + {917B2AEB-964D-4499-8108-4E356C91D5E9}.Debug|x86.Build.0 = Debug|Win32 + {917B2AEB-964D-4499-8108-4E356C91D5E9}.Release|Any CPU.ActiveCfg = Release|Win32 + {917B2AEB-964D-4499-8108-4E356C91D5E9}.Release|x64.ActiveCfg = Release|x64 + {917B2AEB-964D-4499-8108-4E356C91D5E9}.Release|x64.Build.0 = Release|x64 + {917B2AEB-964D-4499-8108-4E356C91D5E9}.Release|x86.ActiveCfg = Release|Win32 + {917B2AEB-964D-4499-8108-4E356C91D5E9}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {CBDDD1CF-AD3F-4107-B580-BFACEB76CBFF} + EndGlobalSection +EndGlobal diff --git a/MinecraftEducationEdition/MinecraftEducationEdition.c b/MinecraftEducationEdition/MinecraftEducationEdition.c index 8bbb10c..5b4c6d7 100644 --- a/MinecraftEducationEdition/MinecraftEducationEdition.c +++ b/MinecraftEducationEdition/MinecraftEducationEdition.c @@ -2,33 +2,23 @@ #include #include #include -#include #include -#include -#include #include int* pointer_path; int num_ptr; -/* -* Gets the base address of the main module for any process id -* I totally didnt steal this from StackOverflow. -*/ -uintptr_t GetProcessBaseAddress(DWORD processId) + +HMODULE* GetProcessBaseAddress(HANDLE process) // from stackoverflow { - /* - * Open the process - */ - uintptr_t baseAddress = 0; - HANDLE processHandle = OpenProcess(PROCESS_ALL_ACCESS, TRUE, processId); + DWORD_PTR baseAddress = 0; + HANDLE processHandle = OpenProcess(PROCESS_ALL_ACCESS,TRUE,process); HMODULE* moduleArray; LPBYTE moduleArrayBytes; DWORD bytesRequired; if (processHandle) { - // Enumarate through all process modules if (EnumProcessModules(processHandle, NULL, 0, &bytesRequired)) { if (bytesRequired) @@ -42,11 +32,9 @@ uintptr_t GetProcessBaseAddress(DWORD processId) moduleCount = bytesRequired / sizeof(HMODULE); moduleArray = (HMODULE*)moduleArrayBytes; - - // Get the first module in the process (main exe) if (EnumProcessModules(processHandle, moduleArray, bytesRequired, &bytesRequired)) { - baseAddress = (uintptr_t)(moduleArray[0]); + baseAddress = moduleArray[0]; } LocalFree(moduleArrayBytes); @@ -60,378 +48,203 @@ uintptr_t GetProcessBaseAddress(DWORD processId) return baseAddress; } -/* -* Obtains a process id from -* a given executable name -* (eg, Minecraft.Windows.exe) -* Returns NULL if not found. -*/ -DWORD GetProcId(WCHAR* name) -{ - PROCESSENTRY32 entry; - entry.dwSize = sizeof(PROCESSENTRY32); - - // Save a snapshot of all open processes - HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); - - // Get the first process - if (Process32First(snapshot, &entry) == TRUE) - { - // Enumerate through all processes - while (Process32Next(snapshot, &entry) == TRUE) - { - // Check if the file name matches - if (wcscmp(entry.szExeFile, name) == 0) - { - return entry.th32ProcessID; - } - } - } - - // Remove the snapshot. - CloseHandle(snapshot); - return 0; -} - -/* -* Entry Point - Runs when the program starts -*/ int main(int argc, char* argv[]) { + HWND hWnd = NULL; FILE* ptr_file; char MEE_POINTER_FILE[0x2048]; - int LOGIN_STEP_VALUE = -1; - - char* tmp; #ifdef _WIN64 - printf_s("!!! x64 Version can ONLY be used for the 64 Bit Versions of the game!\n"); + printf_s("!!! x64 Version can ONLY be used for the 64 Bit Versions of the game!\n"); #else - printf_s("!!! x86 Version can ONLY be used for the 32 Bit Versions of the game!\n"); + printf_s("!!! x86 Version can ONLY be used for the 32 Bit Versions of the game!\n"); #endif - - /* - * Check for command line arguments: - * - * --help - Shows list of commands - * --ptr - Sets the filename to read pointer paths from - * --lstep - What to set the login step value to. - */ - strncpy_s(MEE_POINTER_FILE, 0x2048, "mee.ptr", 0x2048); - if(argc > 1) + if (argc == 1) { - for (int i = 0; i < argc; i++) - { - - if (strcmp(argv[i], "--help") == 0) - { - printf_s("--ptr \n"); - printf_s("--lstep \n"); - return; - } - - if(strcmp(argv[i],"--ptr") == 0) - strncpy_s(MEE_POINTER_FILE, 0x2048, argv[i+1], 0x2048); - - if (strcmp(argv[i], "--lstep") == 0) - LOGIN_STEP_VALUE = strtol(argv[i + 1], &tmp, 10); - - } - - printf_s("MEE.PTR FILE : %s\nLOGIN STEP VALUE: %i\n", MEE_POINTER_FILE, LOGIN_STEP_VALUE); + strncpy_s(MEE_POINTER_FILE, 0x2048, "mee.ptr", 0x2048); + } + else + { + strncpy_s(MEE_POINTER_FILE, 0x2048, argv[1], 0x2048); } - /* - * Parse Pointer Path File (mee.ptr) - * ASCII Hex Numbers, seperated by " > " - * And converts it to a array of intergers. - */ + // Read text file printf_s("Loading %s\n", MEE_POINTER_FILE); - if ((_access(MEE_POINTER_FILE, 0)) != -1) // If the mee.ptr file exists AND the process has permission to read it.. + if ((access(MEE_POINTER_FILE, 0)) != -1) { - // Open the pointer file fopen_s(&ptr_file, MEE_POINTER_FILE, "r"); - - /* - * This next part just gets the size - * of mee.ptr file - */ - - // Seek to the end of the file fseek(ptr_file, 0, SEEK_END); - // Get the current position int sz = ftell(ptr_file)+1; - // Seek to the start of the file fseek(ptr_file, 0, SEEK_SET); - /* - * Allocate a buffer the size of mee.ptr - * then read the contents of the mee.ptr file - * into that buffer - */ - - // Allocate (sz) bytes of memory for the buffer. char* file_contents = (char*)malloc(sz); - // Set the newly allocated buffer to all 0x00 memset(file_contents, 0x00, sz); - // Read the contents of mee.ptr into the buffer. fread(file_contents, sz, 1, ptr_file); - /* - * Create a copy of the pointer path file buffer - * This is so we can scan through and mess with the pointers to it - * Without messing up the our original copy - */ - - // Allocate (sz) bytes of memory for the buffer char* work_buf = (char*)malloc(sz); - // Copy contents of previously read file into the new buffer memcpy_s(work_buf, sz, file_contents, sz); - /* - * Count the total number of elements - * From mee.ptr file. - */ - - // Set the total number of elements in the pointer path to 0 - num_ptr = 0; - - // Pointer to the next element, NULL for now. - char* next_token1 = NULL; - - // Get a pointer to the first occurance of " > " + num_ptr = 0; + char* next_token1 = NULL; char* token = strtok_s(work_buf, " > ", &next_token1); - // Repeat this until there is no more " > " left - while (token != NULL) { - // Get the pointer to the next " > ". + // Count number of ptrs + while (token != NULL) { token = strtok_s(NULL, " > ",&next_token1); - // Add 1 to the total number of elements - num_ptr ++; + num_ptr += 1; } - // Free up memory used for counting the list of elements - free(work_buf); - - /* - * Create a new 2nd copy of the pointer path file buffer - */ - - // Allocate buffer the size of the mee.ptr file - work_buf = (char*)malloc(sz); - // Copy contents of mee.ptr file into new buffer - memcpy_s(work_buf, sz, file_contents, sz); - - /* - * Allocate the memory required for the interger array - * Then convert each ASCII Hex Code to an int - * And store it in the pointer paths array. - */ - - // Allocate memory buffer the size of the required int array pointer_path = (int*)malloc(num_ptr * sizeof(int)); - // Pointer to the next element, NULL for now. + work_buf = (char*)malloc(sz); + memcpy_s(work_buf, sz, file_contents, sz); + char* next_token2 = NULL; - // Get the pointer to the first element (seperated by " > ") + char* tmp; + char* ptrs = strtok_s(work_buf, " > ",&next_token2); - // Convert the ascii string to a int value, and put it into the int array pointer_path[0] = (int)strtol(ptrs, &tmp, 16); - // Repeat until read all pointers + // Use ptr + for(int i = 1; i < num_ptr; i++){ - // Read the next element (seperated by " > ") ptrs = strtok_s(NULL, " > ", &next_token2); - // Convert the ascii string to a int value, and put it into the int array pointer_path[i] = (int)strtol(ptrs, &tmp, 16); } - // Finally close the mee.ptr file fclose(ptr_file); - // Free up memory used for reading the list of elements - free(work_buf); - // Free up memory used for the file contents - free(file_contents); - printf_s("Loaded %s!\n", MEE_POINTER_FILE); } - else // If no mee.ptr file is found ... OR the process dont have permission to read it + else { - // Set number of elements to a default number + printf_s("Failed, using default pointer path (MCEE 1.12.60 UWP x64)\n"); num_ptr = 8; - // Allocate enough space for an int array of that size pointer_path = (int*)malloc(num_ptr * sizeof(int)); - #ifdef _WIN64 // This code is only included if the project is built as win64 version - printf_s("Failed, using default pointer path (MCEE 1.17.30 UWP x64)\n"); - // Use a default pointer path. - pointer_path[0] = 0x3607D48; - pointer_path[1] = 0x0; - pointer_path[2] = 0x50; - pointer_path[3] = 0xA8; - pointer_path[4] = 0xE8; - pointer_path[5] = 0x0; - pointer_path[6] = 0x630; - pointer_path[7] = 0x10; - #else // if its NOT the win64 version.. - printf_s("Failed, using default pointer path (MCEE 1.17.30 Win32 x86)\n"); - // Use a default pointer path. - pointer_path[0] = 0x2CBF0FC; - pointer_path[1] = 0x0; - pointer_path[2] = 0x7C; - pointer_path[3] = 0x0; - pointer_path[4] = 0x68; - pointer_path[5] = 0xC; - pointer_path[6] = 0x2E4; - pointer_path[7] = 0x8; - #endif + + pointer_path[0] = 0x025949E0; + pointer_path[1] = 0x120; + pointer_path[2] = 0x08; + pointer_path[3] = 0x38; + pointer_path[4] = 0x30; + pointer_path[5] = 0x58; + pointer_path[6] = 0x480; + pointer_path[7] = 0x0; } - /* - * Print the currently in use - * pointer path to the output of the terminal - */ - - // Print "Pointer Path: " - printf_s("\nPointer Path: "); - for (int i = 0; i < num_ptr; i++) // Repeat for all elements in the path + printf_s("\nPointer Path: "); + for (int i = 0; i < num_ptr; i++) { - // Print the hex encoding of the current element - printf_s("%x", pointer_path[i]); - if (i != num_ptr - 1) // if its not the last element + printf_s("%x", pointer_path[i]); + if (i != num_ptr - 1) { - // Print " > " - printf_s(" > "); + printf_s(" > "); } } - // Print a newline - printf_s("\n"); + printf_s("\n"); - /* - * This part is the part that actually patches - * Education edition's memory space - */ - - // Process ID of minecraft educattion ediion application, (currently 0) - DWORD proc_id = 0; - printf_s("\nPlease open Minecraft Education Edition\n"); + // Hack the universe. - /* - * Repeatidly check if "Minecraft.Windows.exe" or "Minecraft.Win10.DX11.exe" is open - */ - while (proc_id == 0) + printf_s("\n\nPlease open Minecraft Education Edition\n"); + while (hWnd == NULL) { - proc_id = GetProcId(L"Minecraft.Windows.exe"); // Try to get the process ID for "Minecraft.Windows" - if (proc_id == 0) // If the process ID is NULL (process not found) - proc_id = GetProcId(L"Minecraft.Win10.DX11.exe"); // Try to get the process ID for "Minecrat.Win10.DX11.exe" + hWnd = FindWindow(0, L"Minecraft: Education Edition"); } - // Print the process ID + printf_s("MCEE Window Handle: %x\n", hWnd); + DWORD proc_id; + GetWindowThreadProcessId(hWnd, &proc_id); printf_s("MCEE Process ID: %x\n", proc_id); - // Try to open the process. HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, TRUE, proc_id); - // Print the process handle - printf_s("MCEE Process Handle: 0x%p\n", hProcess); + printf_s("MCEE Process Handle: %x\n", hProcess); + #ifdef _WIN64 + long long int baseAddress = (long long int)GetProcessBaseAddress(proc_id); + printf_s("MCEE Base Addr: %llx\n", baseAddress); + #else + int baseAddress = (int)GetProcessBaseAddress(hProcess); + printf_s("MCEE Base Addr: %x\n", baseAddress); + #endif - if (!hProcess) // If failed to open the process (eg no permission) + if (!hProcess) { - // Display a message box saying to try with admin rights MessageBox(NULL, L"Cannot open process!\r\nTry \"Run as administrator\"", L"Error!", MB_OK + MB_ICONERROR); } else { - // Base Address of the minecraft education edition process (NULL for now) - uintptr_t baseAddress = 0; - while(baseAddress == 0) // Repeat until the base address is not NULL. - // Try to get the base address of the Minecraft Education Edition Process - baseAddress = GetProcessBaseAddress(proc_id); + // Read first ptr + printf_s("Waiting for game to Initalize.\n"); + #ifdef _WIN64 + long long int cur_ptr = baseAddress + pointer_path[0]; + long long int ptr = 0; + #else + int cur_ptr = baseAddress + pointer_path[0]; + int ptr = 0; + #endif - printf_s("MCEE Base Addr: 0x%p\n", (void*)baseAddress); - printf_s("Waiting for game to initalize....\n"); - - read_ptr_path: - - // recalculate base address idk why but this seems to be required. - baseAddress = GetProcessBaseAddress(proc_id); - - - // Read first element - uintptr_t first_ptr = pointer_path[0]; - uintptr_t cur_ptr = baseAddress + first_ptr; - uintptr_t ptr = 0; - uintptr_t new_ptr = 0; - - // Read first element from the games memory - ReadProcessMemory(hProcess, (LPCVOID)cur_ptr, &ptr, sizeof(uintptr_t), 0); - if (ptr == 0) - goto read_ptr_path; - - - /* - * Follow all elements - * in the path, until you reach - * the pointer to the login step value. - */ - for (int i = 1; i < num_ptr-1; i++) + while (ptr == 0) { + #ifdef _WIN64 + ReadProcessMemory(hProcess, cur_ptr, &ptr, sizeof(long long int), 0); + #else + ReadProcessMemory(hProcess, cur_ptr, &ptr, sizeof(int), 0); + #endif + } + + printf_s("Pointer 1: %x == %x\n", cur_ptr, ptr); + + for (int i = 1; i < num_ptr-1; i++) // Follow path... + { + #ifdef _WIN64 + long long int new_ptr = 0; + #else + int new_ptr = 0; + #endif + cur_ptr = ptr + pointer_path[i]; - ReadProcessMemory(hProcess, (LPCVOID)cur_ptr, &new_ptr, sizeof(uintptr_t), 0); + #ifdef _WIN64 + ReadProcessMemory(hProcess, cur_ptr, &new_ptr, sizeof(long long int), 0); + #else + ReadProcessMemory(hProcess, cur_ptr, &new_ptr, sizeof(int), 0); + #endif if (new_ptr == 0) { i -= 1; - goto read_ptr_path; + continue; } else { ptr = new_ptr; + } - } + + printf_s("Pointer %i: %x == %x\n", i, cur_ptr, ptr); } - // final addition - ptr += pointer_path[num_ptr-1]; + // Wait for 0x1 + printf_s("Waiting for login screen.\n"); + int login_stage = 0; - // Wait for Welcome Screen. - int login_step_value = 0; - ReadProcessMemory(hProcess, (LPCVOID)ptr, &login_step_value, sizeof(int), 0); - - if (login_step_value != 0x0) + while (1) { - - printf_s("Final Ptr: 0x%p\n", (void*)ptr); - - printf_s("Current Login Step: %i\n", login_step_value); - if (LOGIN_STEP_VALUE != -1) + ReadProcessMemory(hProcess, (void*)ptr, &login_stage, sizeof(int), 0); + if (login_stage == 0x1 || login_stage == 0x4) { - printf_s("Trying login stage %i", LOGIN_STEP_VALUE); - WriteProcessMemory(hProcess, (LPVOID)ptr, &LOGIN_STEP_VALUE, sizeof(int), 0); - goto finish; + printf_s("Trying login stage 6...\n"); // Backwards Comp (1.9 and lower) + int login_success = 6; + WriteProcessMemory(hProcess, (void*)ptr, &login_success, sizeof(int), 0); + + Sleep(1 * 500); + + printf_s("Trying login stage 8...\n"); + login_success = 8; + WriteProcessMemory(hProcess, (void*)ptr, &login_success, sizeof(int), 0); + + break; } - - printf_s("Trying login stage 5...\n"); // Backwards Comp (0.xx) - int login_step_value = 5; - WriteProcessMemory(hProcess, (LPVOID)ptr, &login_step_value, sizeof(int), 0); - - Sleep(1 * 200); - - printf_s("Trying login stage 6...\n"); // Backwards Comp (1.9 and lower) - login_step_value = 6; - WriteProcessMemory(hProcess, (LPVOID)ptr, &login_step_value, sizeof(int), 0); - - Sleep(1 * 200); - - printf_s("Trying login stage 8...\n"); - login_step_value = 8; - WriteProcessMemory(hProcess, (LPVOID)ptr, &login_step_value, sizeof(int), 0); - } - else - goto read_ptr_path; - - finish: - CloseHandle(hProcess); printf_s("\nBlessed Be!\n"); + Sleep(5 * 1000); return 0; } } diff --git a/MinecraftEducationEdition/MinecraftEducationEdition.vcxproj b/MinecraftEducationEdition/MinecraftEducationEdition.vcxproj index 32ff4b5..a994093 100644 --- a/MinecraftEducationEdition/MinecraftEducationEdition.vcxproj +++ b/MinecraftEducationEdition/MinecraftEducationEdition.vcxproj @@ -23,33 +23,33 @@ Win32Proj {917b2aeb-964d-4499-8108-4e356c91d5e9} MinecraftEducationEdition - 10.0 - MinecraftEducationEditionLoginSkip + 10.0.19041.0 + MinecraftEducationEdition Application true - v143 + v142 Unicode Application false - v143 + v142 true Unicode Application true - v143 + v142 Unicode Application false - v143 + v142 true Unicode @@ -91,10 +91,6 @@ true WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) true - MultiThreaded - None - MaxSpeed - Default Console @@ -138,7 +134,6 @@ true NDEBUG;_CONSOLE;%(PreprocessorDefinitions) true - MultiThreaded Console diff --git a/MinecraftEducationEdition/Resource.aps b/MinecraftEducationEdition/Resource.aps index 648f430..ce9d593 100644 Binary files a/MinecraftEducationEdition/Resource.aps and b/MinecraftEducationEdition/Resource.aps differ diff --git a/MinecraftEducationEdition/Resource.rc b/MinecraftEducationEdition/Resource.rc index 16fdf17..23d8af6 100644 --- a/MinecraftEducationEdition/Resource.rc +++ b/MinecraftEducationEdition/Resource.rc @@ -12,55 +12,6 @@ ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// English (United States) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -#pragma code_page(1252) - -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - -VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,5,0,0 - PRODUCTVERSION 1,5,0,0 - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x40004L - FILETYPE 0x1L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "140904b0" - BEGIN - VALUE "CompanyName", "SilicaAndPina" - VALUE "FileDescription", "Skip the login screen in Minecraft Education Edition." - VALUE "FileVersion", "1.5.0.0" - VALUE "InternalName", "MEELoginSkip.exe" - VALUE "LegalCopyright", "MIT Licensed (2021)" - VALUE "OriginalFilename", "MEELoginSkip.exe" - VALUE "ProductName", "Minecarft Education Edtion Login Skip" - VALUE "ProductVersion", "1.5.0.0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x1409, 1200 - END -END - -#endif // English (United States) resources -///////////////////////////////////////////////////////////////////////////// - - ///////////////////////////////////////////////////////////////////////////// // English (United Kingdom) resources diff --git a/README.md b/README.md index 10d6772..48adb4f 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,2 @@ # MCEELoginSkip -Skip Login Screen on Minecraft Education Edition - -you may need to open mee.ptr in notepad, and copy paste whatever ptr path for the version you are using, -for a somewhat-complete list, see here: https://gist.github.com/KuromeSan/73d76f784bdecedf4c571332572ebc63 - -arguments: - ---help - show help screen ---lstep - set login step to a specific value ---ptr - use custom file as mee.ptr. +Skip Login Screen on Minecraft Education Edition