├── FortniteLauncher.sln ├── FortniteLauncher ├── FortniteLauncher.csproj ├── Program.cs └── Utilities │ ├── JSON.cs │ ├── Suspend.cs │ └── Win32.cs └── README.md /FortniteLauncher.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 16 4 | VisualStudioVersion = 16.0.31205.134 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FortniteLauncher", "FortniteLauncher\FortniteLauncher.csproj", "{B45F0C02-D49E-4A92-983E-0BD8DBCA8221}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {B45F0C02-D49E-4A92-983E-0BD8DBCA8221}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {B45F0C02-D49E-4A92-983E-0BD8DBCA8221}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {B45F0C02-D49E-4A92-983E-0BD8DBCA8221}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {B45F0C02-D49E-4A92-983E-0BD8DBCA8221}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | GlobalSection(ExtensibilityGlobals) = postSolution 23 | SolutionGuid = {2CDA3AD3-51E1-488C-AF87-ACE5BACCA8CE} 24 | EndGlobalSection 25 | EndGlobal 26 | -------------------------------------------------------------------------------- /FortniteLauncher/FortniteLauncher.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exe 5 | netcoreapp3.1 6 | LaunchFortnite 7 | ozne 8 | ozne 9 | FortniteLauncher 10 | FortniteLauncher 11 | Fortnite Launcher which bypasses EAC and allows for dll injection and various other things! 12 | ozne 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /FortniteLauncher/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.IO; 4 | using System.Net; 5 | using System.Threading; 6 | using Newtonsoft.Json; 7 | using ProcessSuspend; 8 | using JSON; 9 | 10 | namespace FortniteLauncher 11 | { 12 | public class Program 13 | { 14 | static readonly string LocalAppData = Environment.GetEnvironmentVariable("LocalAppData"); 15 | static readonly bool WinCheck = Environment.OSVersion.Version < new Version(6, 2); 16 | static string Arguments = "TBD"; 17 | 18 | static void Main() 19 | { 20 | Console.Title = "Fortnite Launcher"; 21 | if (WinCheck) 22 | { 23 | Console.Title = "Error!"; 24 | Console.WriteLine("A version of Windows other than Windows 10 has been detected, please upgrade as it is completely free!\nhttps://www.microsoft.com/en-us/software-download/windows10 :PeepoGlad:"); 25 | Console.ReadKey(); 26 | Environment.Exit(0); 27 | } 28 | if (File.Exists(LocalAppData + @"\uFortniteLauncher\Settings.json")) 29 | { } 30 | else { ConfigurateFortnitePath(); } 31 | 32 | WebClient webClient = new WebClient(); 33 | var FLToken = webClient.DownloadString("https://api.nitestats.com/v1/epic/builds/fltoken"); 34 | webClient.Dispose(); 35 | FLTokenJson json = JsonConvert.DeserializeObject(FLToken); 36 | 37 | Console.Clear(); 38 | Console.WriteLine("FL Token: " + json.fltoken); 39 | Console.WriteLine("Fortnite Build: " + json.version); 40 | Console.WriteLine("\nIf you would like to change your Fortnite path, please enter the letter \'c\' instead of your Exchange Code."); 41 | Console.WriteLine("\n\nExchange Code"); 42 | Console.Write("> "); 43 | string exchange = Console.ReadLine(); 44 | if (exchange == "" || exchange.Contains(" ") || exchange.Contains("~") || exchange.Contains("-") || exchange.Contains("+") || exchange.Contains("`") || exchange.Contains("!") || exchange.Contains("@") || exchange.Contains("#") || exchange.Contains("$") || exchange.Contains("%") || exchange.Contains("^") || exchange.Contains("&") || exchange.Contains("*") || exchange.Contains("(") || exchange.Contains(")") || exchange.Contains("_") || exchange.Contains("=") || exchange.Contains("[") || exchange.Contains("]") || exchange.Contains("{") || exchange.Contains("}") || exchange.Contains("|") || exchange.Contains(@"\") || exchange.Contains(";") || exchange.Contains(":") || exchange.Contains("\'") || exchange.Contains("\"") || exchange.Contains(",") || exchange.Contains(".") || exchange.Contains("<") || exchange.Contains(">") || exchange.Contains("?") || exchange.Contains("/")) 45 | { 46 | Console.WriteLine("Invalid Exchange Code!"); 47 | Thread.Sleep(1300); 48 | Environment.Exit(0); 49 | } 50 | if (exchange == "c") 51 | { 52 | Console.Clear(); 53 | ConfigurateFortnitePath(); 54 | Main(); 55 | Environment.Exit(0); 56 | } 57 | 58 | string GetPath = File.ReadAllText(LocalAppData + @"\uFortniteLauncher\Settings.json"); 59 | Settings settings = JsonConvert.DeserializeObject(GetPath); 60 | 61 | Arguments = $"-epicapp=Fortnite -epicenv=Prod -epiclocale=en-us -epicportal -skippatchcheck -NOSSLPINNING -noeac -fromfl=be -fltoken={json.fltoken} -frombe -AUTH_TYPE=exchangecode -AUTH_LOGIN=unused -AUTH_PASSWORD={exchange}"; 62 | var client = new Process 63 | { 64 | StartInfo = 65 | { 66 | FileName = settings.Path + @"\FortniteGame\Binaries\Win64\FortniteClient-Win64-Shipping.exe", 67 | Arguments = Arguments, 68 | UseShellExecute = false 69 | } 70 | }; 71 | var eac = new Process 72 | { 73 | StartInfo = 74 | { 75 | FileName = settings.Path + @"\FortniteGame\Binaries\Win64\FortniteClient-Win64-Shipping_EAC.exe", 76 | Arguments = Arguments, 77 | UseShellExecute = false 78 | } 79 | }; 80 | var launcher = new Process 81 | { 82 | StartInfo = 83 | { 84 | FileName = settings.Path + @"\FortniteGame\Binaries\Win64\FortniteLauncher.exe", 85 | UseShellExecute = false 86 | } 87 | }; 88 | 89 | try 90 | { 91 | client.Start(); 92 | } 93 | catch 94 | { 95 | Console.Clear(); 96 | Console.WriteLine("\nInvalid Fortnite Path!\n"); 97 | Thread.Sleep(1100); 98 | Console.Clear(); 99 | ConfigurateFortnitePath(); 100 | Console.Clear(); 101 | Main(); 102 | Environment.Exit(0); 103 | } 104 | launcher.Start(); 105 | SuspendProcess.Suspend("FortniteLauncher"); 106 | eac.Start(); 107 | SuspendProcess.Suspend("FortniteClient-Win64-Shipping_EAC"); 108 | 109 | client.WaitForExit(); 110 | eac.Kill(); 111 | launcher.Kill(); 112 | 113 | Console.WriteLine("\nozne: This launcher"); 114 | Console.WriteLine("VastBlast: NiteStats which is used for grabbing the FL Token"); 115 | Thread.Sleep(2600); 116 | } 117 | 118 | public static void ConfigurateFortnitePath() 119 | { 120 | try 121 | { Directory.Delete(LocalAppData + @"\uFortniteLauncher", true); } 122 | catch { } 123 | Directory.CreateDirectory(LocalAppData + @"\uFortniteLauncher"); 124 | Console.WriteLine("Fortnite Path (Directory that contains Engine and FortniteGame)"); 125 | Console.Write("> "); 126 | string ReadPath = Console.ReadLine(); 127 | using (StreamWriter sw = File.CreateText(LocalAppData + @"\uFortniteLauncher\Settings.json")) 128 | { 129 | sw.WriteLine("{"); 130 | sw.WriteLine($" \"Path\": \"{ReadPath}\""); 131 | sw.Write("}"); 132 | sw.Close(); 133 | } 134 | string ReplaceThings = File.ReadAllText(LocalAppData + @"\uFortniteLauncher\Settings.json"); 135 | ReplaceThings = ReplaceThings.Replace(@"\", @"\\"); 136 | File.WriteAllText(LocalAppData + @"\uFortniteLauncher\Settings.json", ReplaceThings); 137 | return; 138 | } 139 | } 140 | } 141 | -------------------------------------------------------------------------------- /FortniteLauncher/Utilities/JSON.cs: -------------------------------------------------------------------------------- 1 | namespace JSON 2 | { 3 | public class Settings 4 | { 5 | public string Path { get; set; } 6 | } 7 | 8 | public class FLTokenJson 9 | { 10 | public string version { get; set; } 11 | public string fltoken { get; set; } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /FortniteLauncher/Utilities/Suspend.cs: -------------------------------------------------------------------------------- 1 | using System.Diagnostics; 2 | using System.Threading.Tasks; 3 | using Win32; 4 | 5 | namespace ProcessSuspend 6 | { 7 | public class SuspendProcess 8 | { 9 | // taken from https://stackoverflow.com/questions/71257/suspend-process-in-c-sharp 10 | public static Task Suspend(string text) 11 | { 12 | foreach (Process LeProcess in Process.GetProcesses()) 13 | { 14 | if (LeProcess.ProcessName == text) 15 | { 16 | LeProcess.Suspend(); 17 | } 18 | } 19 | return Task.CompletedTask; 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /FortniteLauncher/Utilities/Win32.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.Runtime.InteropServices; 4 | 5 | namespace Win32 6 | { 7 | public static class ProcessExtension 8 | { 9 | [Flags] 10 | public enum ThreadAccess : int 11 | { 12 | TERMINATE = (0x0001), 13 | SUSPEND_RESUME = (0x0002), 14 | GET_CONTEXT = (0x0008), 15 | SET_CONTEXT = (0x0010), 16 | SET_INFORMATION = (0x0020), 17 | QUERY_INFORMATION = (0x0040), 18 | SET_THREAD_TOKEN = (0x0080), 19 | IMPERSONATE = (0x0100), 20 | DIRECT_IMPERSONATION = (0x0200) 21 | } 22 | [DllImport("kernel32.dll")] 23 | static extern IntPtr OpenThread(ThreadAccess dwDesiredAccess, bool bInheritHandle, uint dwThreadId); 24 | [DllImport("kernel32.dll")] 25 | static extern uint SuspendThread(IntPtr hThread); 26 | [DllImport("kernel32.dll")] 27 | static extern int ResumeThread(IntPtr hThread); 28 | 29 | public static void Suspend(this Process process) 30 | { 31 | foreach (ProcessThread thread in process.Threads) 32 | { 33 | var pOpenThread = OpenThread(ThreadAccess.SUSPEND_RESUME, false, (uint)thread.Id); 34 | if (pOpenThread == IntPtr.Zero) 35 | { 36 | break; 37 | } 38 | SuspendThread(pOpenThread); 39 | } 40 | } 41 | public static void Resume(this Process process) 42 | { 43 | foreach (ProcessThread thread in process.Threads) 44 | { 45 | var pOpenThread = OpenThread(ThreadAccess.SUSPEND_RESUME, false, (uint)thread.Id); 46 | if (pOpenThread == IntPtr.Zero) 47 | { 48 | break; 49 | } 50 | ResumeThread(pOpenThread); 51 | } 52 | } 53 | } 54 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

If this was useful for you, please consider giving this repository a star, it means much more than you know!

2 |

3 | At the moment, FortniteLauncher is semi broken. 4 |
5 | Ever since the 16.40 update, you can go in lobby and avoid the game being closed by clicking outside of the box instead of the confirm button, but no matter what after around 20-30 seconds, the game will close automatically. 6 |
7 |
8 | This launcher will likely be completely patched in a future update, when that happens, this repository will become archived and no support will be given for this. 9 |

10 |

11 | 12 |

13 | 14 |

15 |
16 | info 17 |
18 | Downloads 19 | Downloads 20 |

21 |

22 | 23 |

FortniteLauncher

24 |

25 | Simple Fortnite launcher which bypasses EAC and allows for dll injection, it also allows for efficiently using Epic's services on older builds! 26 |

27 |
28 | 29 |

CLIENT TO-DO

30 |

31 | You *need* an exchange code generator, this can be done using https://github.com/ThisNils/exchange-code-generator, a Discord bot like AK47, or the manual way. 32 |

33 |
34 |
35 | 36 |

CREDIT

37 |

38 | Me: Maintaining the launcher. 39 |
40 | VastBlast: NiteStats, which is used to grab the FLToken. 41 |
42 | Newtonsoft.Json library for reading FLToken, and reading/writing saved path. 43 |

44 |
45 | 46 |

EXTRA

47 |

48 | Incase you have any issues, you can contact me on Discord at: ozne#3303 49 |

50 | --------------------------------------------------------------------------------