Most visitors online was 12720 , on 2 May 2024
Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature currently requires accessing the site using the built-in Safari browser.
It possible. Need to activate the debug menu. But in offline mode can only explore an empty world. Monsters and other stuff on the map does not work.As far as i know it can't be ran offline yet.
Does this mean it need to be populated by a server running separately from the client to put it simply?It possible. Need to activate the debug menu. But in offline mode can only explore an empty world. Monsters and other stuff on the map does not work.
It possible. Need to activate the debug menu. But in offline mode can only explore an empty world. Monsters and other stuff on the map does not work.
Just wanted to ask a quick question, when server is complete is it gonna be open source or at least compiled server downloadable publiclyI am interested in private server so that i can host it myself on my pc so i can play the game without internet connection or just host it on my LAN so i can play the game from any any of my computers without having to connect to internet and actual genshin impact serverIf server is gonna be privatley hosted by someone working on the project then it kinda defeats the puropse for those who want to play the game offline as those of us who just want to play without connecting to internet as we wont have the files to host our own local instaceApparently leaving the discord link of a private project in an open forum made skilled people in the discord flee to an even more private discord, along with keeping skilled people away.Also for people pushing for a date>No Man's Sky happened>Cyberpunk 2077 happened>People still want to know a set date for projets that are written on stoneWhen you have expectations, you are setting yourself up for disappointment.
Apparently people are siding with Mihoyo by giving them tips either directly or indirectly on how to make things more difficult, because... i dunno that's their version of helping or supporting?Has there been any progress?
I have also researched a lot...but I am using the earliest alpha version.. There is some progress. I want to join your project team...is there any contact informationIf you can get around the cert pining of the application (possible). Then the game sends limited information to a HTTP based API over TLS. As long as the data is not encrypted in some way after that. It is complete possible to have a private server for this.Collection of URLs I've observed being used by game engine
for the client private server will it be updated monthly version? Or maybe every few monthso/ hey all, Some good progress has been made by others (not my self IRL commitments); It is possible to login to the private server, but all you can do is explore, cant switch characters, use skill...etc. This is not the same as the dev/gm offline mode this is connecting to a private server. TLDR: Still in progress, can now login to a 100% private server.
Woah slow down a bit there , let us just wait and see if there an actual success with the beta launch first before jumping to post production. There has been tonnes of breakthrough but it is very much mid progress , Im far from knowing all this client-server stuff but if I were to guess based on the discussion on discord , it is about 30% , maybe 40% WIP.for the client private server will it be updated monthly version? Or maybe every few months
Have you been able to do some follow up to this? We also recently cracked the xor packet decryption but are now kind of stuck with the sheer amount of traffic we need to analyze... We havent yet looked into the UserAssembly that deep to possibly decrypt the base64 data returned by the server maybe you can help there? Or is there anyone else here who has more insight?Is there a way to get in touch with people who have been working on it? I have reverse engineerd the private beta client and have written server logic for http request handling as well as identified the protocol, they are using enet for communication. I was able to dump the c# definitions, so it should be possible to recover serialized packet classes etc. I also looked into bypassing the mihoyo protection driver (mhyprot2) but not succesfull yet. Let me know if you are interested to work with me and I can share my progress with you. here is a snipped of functions and offsets for asm (cbt1 client):Code:// Namespace: MiHoYoSDKJSON [DefaultMemberAttribute] // RVA: 0x64C20 Offset: 0x64020 public class JSONNode // TypeDefIndex: 4060 { // Fields [DebuggerBrowsableAttribute] // RVA: 0x62E40 Offset: 0x62240 [CompilerGeneratedAttribute] // RVA: 0x62E40 Offset: 0x62240 private bool <IsString>k__BackingField; // 0x10 // Properties public virtual JSONNode Item { get; } public virtual JSONNode Item { get; set; } public virtual string Value { get; } public virtual bool IsString { set; } public virtual JSONArray AsArray { get; } public virtual JSONClass AsObject { get; } // Methods public virtual void Add(string aKey, JSONNode aItem) { } // RVA: 0x34E7A0 Offset: 0x34DBA0 public virtual JSONNode get_Item(int aIndex) { } // RVA: 0x11C99A0 Offset: 0x11C8DA0 public virtual JSONNode get_Item(string aKey) { } // RVA: 0x11C99A0 Offset: 0x11C8DA0 public virtual void set_Item(string aKey, JSONNode value) { } // RVA: 0x34E7A0 Offset: 0x34DBA0 public virtual string get_Value() { } // RVA: 0x238FEE0 Offset: 0x238F2E0 [CompilerGeneratedAttribute] // RVA: 0x62B60 Offset: 0x61F60 public virtual void set_IsString(bool value) { } // RVA: 0xDDA110 Offset: 0xDD9510 public virtual void Add(JSONNode aItem) { } // RVA: 0x238E860 Offset: 0x238DC60 public override string ToString() { } // RVA: 0x238FDB0 Offset: 0x238F1B0 public virtual JSONArray get_AsArray() { } // RVA: 0x238FDE0 Offset: 0x238F1E0 public virtual JSONClass get_AsObject() { } // RVA: 0x238FE60 Offset: 0x238F260 public static JSONNode op_Implicit(string s) { } // RVA: 0x238FFB0 Offset: 0x238F3B0 public static string op_Implicit(JSONNode d) { } // RVA: 0x2390010 Offset: 0x238F410 public static bool op_Equality(JSONNode a, object b) { } // RVA: 0x238FF10 Offset: 0x238F310 public static bool op_Inequality(JSONNode a, object b) { } // RVA: 0x23900A0 Offset: 0x238F4A0 public override bool Equals(object obj) { } // RVA: 0x238E8C0 Offset: 0x238DCC0 public override int GetHashCode() { } // RVA: 0x1F05AE0 Offset: 0x1F04EE0 internal static string Escape(string aText) { } // RVA: 0x238E8D0 Offset: 0x238DCD0 public static JSONNode Parse(string aJSON) { } // RVA: 0x238EB10 Offset: 0x238DF10 public void .ctor() { } // RVA: 0x34E240 Offset: 0x34D640 } // Namespace: MiHoYoSDKJSON [DefaultMemberAttribute] // RVA: 0x64C20 Offset: 0x64020 public class JSONArray : JSONNode, IEnumerable // TypeDefIndex: 4061 { // Fields private List<JSONNode> m_List; // 0x18 // Properties public override JSONNode Item { get; } public override JSONNode Item { get; set; } // Methods public override JSONNode get_Item(int aIndex) { } // RVA: 0x238D780 Offset: 0x238CB80 public override JSONNode get_Item(string aKey) { } // RVA: 0x238D840 Offset: 0x238CC40 public override void set_Item(string aKey, JSONNode value) { } // RVA: 0x238D8B0 Offset: 0x238CCB0 public override void Add(string aKey, JSONNode aItem) { } // RVA: 0x238D450 Offset: 0x238C850 public IEnumerator GetEnumerator() { } // RVA: 0x238D4B0 Offset: 0x238C8B0 public override string ToString() { } // RVA: 0x238D510 Offset: 0x238C910 public void .ctor() { } // RVA: 0x238D720 Offset: 0x238CB20 } // Namespace: [CompilerGeneratedAttribute] // RVA: 0x62B60 Offset: 0x61F60 private sealed class JSONArray.<GetEnumerator>d__14 : IEnumerator<object>, IDisposable, IEnumerator // TypeDefIndex: 4062 { // Fields private int <>1__state; // 0x10 private object <>2__current; // 0x18 public JSONArray <>4__this; // 0x20 private Enumerator<JSONNode> <>s__1; // 0x28 private JSONNode <N>5__2; // 0x40 // Properties private object System.Collections.Generic.IEnumerator<System.Object>.Current { get; } private object System.Collections.IEnumerator.Current { get; } // Methods [DebuggerHiddenAttribute] // RVA: 0x62B70 Offset: 0x61F70 public void .ctor(int <>1__state) { } // RVA: 0xF8E870 Offset: 0xF8DC70 [DebuggerHiddenAttribute] // RVA: 0x62B70 Offset: 0x61F70 private void System.IDisposable.Dispose() { } // RVA: 0x2392780 Offset: 0x2391B80 private bool MoveNext() { } // RVA: 0x23925A0 Offset: 0x23919A0 private void <>m__Finally1() { } // RVA: 0x23927F0 Offset: 0x2391BF0 [DebuggerHiddenAttribute] // RVA: 0x62B70 Offset: 0x61F70 private object System.Collections.Generic.IEnumerator<System.Object>.get_Current() { } // RVA: 0x398760 Offset: 0x397B60 [DebuggerHiddenAttribute] // RVA: 0x62B70 Offset: 0x61F70 private void System.Collections.IEnumerator.Reset() { } // RVA: 0x2392730 Offset: 0x2391B30 [DebuggerHiddenAttribute] // RVA: 0x62B70 Offset: 0x61F70 private object System.Collections.IEnumerator.get_Current() { } // RVA: 0x398760 Offset: 0x397B60 } // Namespace: MiHoYoSDKJSON [DefaultMemberAttribute] // RVA: 0x64C20 Offset: 0x64020 public class JSONClass : JSONNode, IEnumerable // TypeDefIndex: 4063 { // Fields private Dictionary<string, JSONNode> m_Dict; // 0x18 // Properties public override JSONNode Item { get; set; } public override JSONNode Item { get; } // Methods public override JSONNode get_Item(string aKey) { } // RVA: 0x238DE70 Offset: 0x238D270 public override void set_Item(string aKey, JSONNode value) { } // RVA: 0x238DFE0 Offset: 0x238D3E0 public override JSONNode get_Item(int aIndex) { } // RVA: 0x238DF30 Offset: 0x238D330 public override void Add(string aKey, JSONNode aItem) { } // RVA: 0x238D910 Offset: 0x238CD10 public IEnumerator GetEnumerator() { } // RVA: 0x238DA50 Offset: 0x238CE50 public override string ToString() { } // RVA: 0x238DAB0 Offset: 0x238CEB0 public void .ctor() { } // RVA: 0x238DE10 Offset: 0x238D210 } // Namespace: [CompilerGeneratedAttribute] // RVA: 0x62B60 Offset: 0x61F60 private sealed class JSONClass.<GetEnumerator>d__18 : IEnumerator<object>, IDisposable, IEnumerator // TypeDefIndex: 4064 { // Fields private int <>1__state; // 0x10 private object <>2__current; // 0x18 public JSONClass <>4__this; // 0x20 private Enumerator<string, JSONNode> <>s__1; // 0x28 private KeyValuePair<string, JSONNode> <N>5__2; // 0x48 // Properties private object System.Collections.Generic.IEnumerator<System.Object>.Current { get; } private object System.Collections.IEnumerator.Current { get; } // Methods [DebuggerHiddenAttribute] // RVA: 0x62B70 Offset: 0x61F70 public void .ctor(int <>1__state) { } // RVA: 0xF8E870 Offset: 0xF8DC70 [DebuggerHiddenAttribute] // RVA: 0x62B70 Offset: 0x61F70 private void System.IDisposable.Dispose() { } // RVA: 0x2392A70 Offset: 0x2391E70 private bool MoveNext() { } // RVA: 0x2392830 Offset: 0x2391C30 private void <>m__Finally1() { } // RVA: 0x2392AE0 Offset: 0x2391EE0 [DebuggerHiddenAttribute] // RVA: 0x62B70 Offset: 0x61F70 private object System.Collections.Generic.IEnumerator<System.Object>.get_Current() { } // RVA: 0x398760 Offset: 0x397B60 [DebuggerHiddenAttribute] // RVA: 0x62B70 Offset: 0x61F70 private void System.Collections.IEnumerator.Reset() { } // RVA: 0x2392A20 Offset: 0x2391E20 [DebuggerHiddenAttribute] // RVA: 0x62B70 Offset: 0x61F70 private object System.Collections.IEnumerator.get_Current() { } // RVA: 0x398760 Offset: 0x397B60 } // Namespace: MiHoYoSDKJSON public class JSONData : JSONNode // TypeDefIndex: 4065 { // Fields private string m_Data; // 0x18 // Properties public override string Value { get; } // Methods public override string get_Value() { } // RVA: 0x11D4520 Offset: 0x11D3920 public void .ctor(string aData) { } // RVA: 0xF630E0 Offset: 0xF624E0 public override string ToString() { } // RVA: 0x238E090 Offset: 0x238D490 } // Namespace: MiHoYoSDKJSON [DefaultMemberAttribute] // RVA: 0x64C20 Offset: 0x64020 internal class JSONLazyCreator : JSONNode // TypeDefIndex: 4066 { // Fields private JSONNode m_Node; // 0x18 private string m_Key; // 0x20 // Properties public override JSONNode Item { get; } public override JSONNode Item { get; set; } public override JSONArray AsArray { get; } public override JSONClass AsObject { get; } // Methods public void .ctor(JSONNode aNode) { } // RVA: 0x238E440 Offset: 0x238D840 public void .ctor(JSONNode aNode, string aKey) { } // RVA: 0x238E3F0 Offset: 0x238D7F0 private void Set(JSONNode aVal) { } // RVA: 0x238E350 Offset: 0x238D750 public override JSONNode get_Item(int aIndex) { } // RVA: 0x238E6D0 Offset: 0x238DAD0 public override JSONNode get_Item(string aKey) { } // RVA: 0x238E660 Offset: 0x238DA60 public override void set_Item(string aKey, JSONNode value) { } // RVA: 0x238E740 Offset: 0x238DB40 public override void Add(JSONNode aItem) { } // RVA: 0x238E230 Offset: 0x238D630 public override void Add(string aKey, JSONNode aItem) { } // RVA: 0x238E110 Offset: 0x238D510 public override bool Equals(object obj) { } // RVA: 0x238E340 Offset: 0x238D740 public override int GetHashCode() { } // RVA: 0x1F05AE0 Offset: 0x1F04EE0 public override string ToString() { } // RVA: 0x238E3C0 Offset: 0x238D7C0 public override JSONArray get_AsArray() { } // RVA: 0x238E480 Offset: 0x238D880 public override JSONClass get_AsObject() { } // RVA: 0x238E570 Offset: 0x238D970 } // Namespace: MiHoYoSDKJSON public static class JSON // TypeDefIndex: 4067 { // Methods public static JSONNode Parse(string aJSON) { } // RVA: 0x23900C0 Offset: 0x238F4C0 } // Namespace: MiHoYo.SDK internal class MiHoYoSDKConfig // TypeDefIndex: 4068 { // Fields public static string LoginUrlProd; // 0x0 public static string LoginUrlTest; // 0x8 public static string LoginUrlOverseaProd; // 0x10 public static string LoginUrlOverseaTest; // 0x18 // Methods private static void .cctor() { } // RVA: 0x23903E0 Offset: 0x238F7E0 } // Namespace: MiHoYo.SDK public class MiHoYoSDKConfigManager // TypeDefIndex: 4069 { // Fields public static string ACCOUNT_URL; // 0x0 public static MiHoYoSDKConfigManager.EnvType _env; // 0x8 // Methods public static void SetEnv(string env) { } // RVA: 0x2390260 Offset: 0x238F660 public static void Config() { } // RVA: 0x23900D0 Offset: 0x238F4D0 private static void .cctor() { } // RVA: 0x2390360 Offset: 0x238F760 } // Namespace: public enum MiHoYoSDKConfigManager.EnvType // TypeDefIndex: 4070 { // Fields public int value__; // 0x10 public const MiHoYoSDKConfigManager.EnvType ENV_TYPE_PROD = 0; // 0x0 public const MiHoYoSDKConfigManager.EnvType ENV_TYPE_TEST = 1; // 0x0 public const MiHoYoSDKConfigManager.EnvType ENV_TYPE_OVERSEA_PROD = 2; // 0x0 public const MiHoYoSDKConfigManager.EnvType ENV_TYPE_OVERSEA_TEST = 3; // 0x0 } // Namespace: MiHoYo.SDK public class MiHoYoSDKLoginManager : MonoBehaviour // TypeDefIndex: 4071 { // Fields private static float DISPATCH_CONNECT_TIMEOUT_SECOND; // 0x0 private static string _accountUrl; // 0x8 private static Action<string> _callback; // 0x10 private static MiHoYoSDKLoginManager.RequestType _requestType; // 0x18 private static string ACCOUNT_DATA_LIST_FILE; // 0x20 private static string _language; // 0x28 // Methods private void Update() { } // RVA: 0x2392170 Offset: 0x2391570 public static void SetLocale(string language) { } // RVA: 0x2391E50 Offset: 0x2391250 public static string GetAccount() { } // RVA: 0x2390790 Offset: 0x238FB90 public static string GetAccountName() { } // RVA: 0x23904F0 Offset: 0x238F8F0 private static void SetAccount(JSONNode account) { } // RVA: 0x23918E0 Offset: 0x2390CE0 public static void Logout() { } // RVA: 0x2391210 Offset: 0x2390610 private static void ResetAccount() { } // RVA: 0x23917F0 Offset: 0x2390BF0 public static void Login(Action<string> callback) { } // RVA: 0x2390F60 Offset: 0x2390360 private static void LoginByCheckToken(string uid, string token, Action<string> callback) { } // RVA: 0x23908A0 Offset: 0x238FCA0 public static void LoginByPassword(string account, string password, Action<string> callback) { } // RVA: 0x2390C00 Offset: 0x2390000 private IEnumerator ConnectAccountServer(string accountUrl, Action<string> callback) { } // RVA: 0x2390470 Offset: 0x238F870 private void OnConnectAccountServer(string retJsonString, Action<string> callback) { } // RVA: 0x2391340 Offset: 0x2390740 private bool TryGetRetCodeFromJsonString(string jsonString, out JSONNode retJson, out string errorMsg, out int retCode) { } // RVA: 0x2391EB0 Offset: 0x23912B0 public void .ctor() { } // RVA: 0x3617B0 Offset: 0x360BB0 private static void .cctor() { } // RVA: 0x2392300 Offset: 0x2391700 } // Namespace: private enum MiHoYoSDKLoginManager.RequestType // TypeDefIndex: 4072 { // Fields public int value__; // 0x10 public const MiHoYoSDKLoginManager.RequestType DEFAULT = 0; // 0x0 public const MiHoYoSDKLoginManager.RequestType LOGIN_BY_PASSWORD = 1; // 0x0 public const MiHoYoSDKLoginManager.RequestType TOKEN_CHECK = 2; // 0x0 }
any idea if me and two others could join in that discord? were sitting on reversing the 1.4 client atm and have found the xor key decryption. see post above :=)o/ hey all, Some good progress has been made by others (not my self IRL commitments); It is possible to login to the private server, but all you can do is explore, cant switch characters, use skill...etc. This is not the same as the dev/gm offline mode this is connecting to a private server. TLDR: Still in progress, can now login to a 100% private server.