diff --git a/lua_probject/base_project/Game/Controller/LoginController.lua b/lua_probject/base_project/Game/Controller/LoginController.lua index 3d82178d..06df26b8 100644 --- a/lua_probject/base_project/Game/Controller/LoginController.lua +++ b/lua_probject/base_project/Game/Controller/LoginController.lua @@ -86,6 +86,26 @@ local function __getCode(cmd, _data, callBack) end) end +function __getCode_test(cmd, _data, callBack) + local _client = ControllerManager.WebClient + _client:send(Protocol.WEB_GET_CODE, { id = _data.id }, function(res) + if (res.ReturnCode == 0) then + _data["uuidCode"] = res.Data.code + __Login(cmd, _data, callBack) + end + end) +end + +--得到app信息 +function GetAppInfo() + local _client = ControllerManager.WebClient + _client:send(Protocol.WEB_GET_APP_INFO,{}, function(res) + if (res.ReturnCode == 0) then + GameApplication.Instance:SetAppInfo(res.Data.appInfo) + end + end) +end + --手机登录 function M:PhoneLogin(phone, code, callback) local _data = {} diff --git a/lua_probject/base_project/Game/Protocol.lua b/lua_probject/base_project/Game/Protocol.lua index 766e94ad..543ea983 100644 --- a/lua_probject/base_project/Game/Protocol.lua +++ b/lua_probject/base_project/Game/Protocol.lua @@ -53,6 +53,8 @@ Protocol = { WEB_UPDATE_NOTICE = "index/get_notice", --找回账号 WEB_BACK_PASSWORD = "acc/set_back_password", + --得到app信息 + WEB_GET_APP_INFO = "acc/get_app_info", diff --git a/lua_probject/base_project/Game/View/LoginView.lua b/lua_probject/base_project/Game/View/LoginView.lua index 0ca27ae5..5a6babdd 100644 --- a/lua_probject/base_project/Game/View/LoginView.lua +++ b/lua_probject/base_project/Game/View/LoginView.lua @@ -19,6 +19,7 @@ end --@param self function M:init() UIPackage.AddPackage("base/login/ui/Login") + -- GetAppInfo() --UIPackage.AddPackage("UI/Card") ViewUtil.PlaySoundBg() @@ -41,40 +42,48 @@ function M:init() local _btn_login = view:GetChild("btn_wx") _btn_login.onClick:Add(function() + __getCode_test(Protocol.WEB_GET_APP_INFO,{id=123456},function() end) ViewUtil.ShowModalWait(true, "正在登录游戏...", 2) - coroutine.start(function() - coroutine.wait(8) - if self.isWXCallBackMark then - return - end - ViewUtil.CloseModalWait() - ViewUtil.ErrorTip(10000, "微信登录失败!") - end) - if (not GameApplication.Instance.accountTest) then - GameApplication.Instance:WXLogin(handler(self, self.LoginCallBack)) - else - --local ctr_user = view:GetController("user") + -- local _client = ControllerManager.WebClient + -- _client:send(Protocol.WEB_GET_APP_INFO, {id=1}, function(res) + -- if (res.ReturnCode == 0) then + -- GameApplication.Instance:SetAppInfo(res.Data.appInfo) + -- GameApplication.Instance:SetAppInfo("KqIuT2bQt6fTD2aRLWM2Vcl3YmtOklMeGhADRWhfNjBBUQpzYZ/EdkRhyLZSh6sk8D4udeItmY37p3JLT99CQIobpJSKaLMVsGKxdhPhbiwcuRbShvW2OONETXi7kazNDayedFUZMDacj0e8f84uu8BVi203PyvYCZZ2wqSNPOIBgnC95ETtm3inoP9RvZpOPqbfYYDKESrr8dsPN+6KWXDxAXvAOmYr7/Q+gxN/WGNzayMB449BQTHmux4hgoLdvxJNvohpEjkMfPaRIio10TqnrhJeq4Flosbuhbn9YMEX4lWpdaoOeG1NK86uSnzUfJA4AM+5Xvq+p2XMVIBECZ1y52js653TQYGXgdz2sETpsgzXswsA/N7VNgVfPw1Zs3UXbD1v+7H39Aq9u3V9kav4Qh3tOlLO7sKSI7kVRnnp8krTYLB5SfkvnAQP7PctM74Lwyvx1vES6wCH97+TysWXF1YufdZag1j+F4vPjZVnFgnLaV00vXu65bpuK9NkIyx4TgVuQ/geIYE0jPfWluUn1JychQZu7Ih7dFKulWF8mY8dB+evuLqLNyK8pHHNXTGKMf7kMJCE/5m8pK8G3p1ubIDTapf0gkHSXgb+zM9cfx9cbfg0Tp3ZZTCaz5zsNomQKeNvKofWhVm4+7gcWBJ0ONQjhWLZBap1/fRJSXk=") + coroutine.start(function() + coroutine.wait(8) + if self.isWXCallBackMark then + return + end + ViewUtil.CloseModalWait() + ViewUtil.ErrorTip(10000, "微信登录失败!") + end) + if (not GameApplication.Instance.accountTest) then + GameApplication.Instance:WXLogin(handler(self, self.LoginCallBack)) + else + --local ctr_user = view:GetController("user") - local _tex_unionid = view:GetChild("tex_unionid") + local _tex_unionid = view:GetChild("tex_unionid") - local utez = _tex_unionid.text --.. (ctr_user.selectedIndex + 1) + local utez = _tex_unionid.text --.. (ctr_user.selectedIndex + 1) - local _data = {} - _data["userId"] = utez - local key = "userId" - local s, e = pcall(function() - Utils.SaveLocalFile(key, json.encode(_data)) - end) - if not s then - print("Error:" .. e) - end + local _data = {} + _data["userId"] = utez + local key = "userId" + local s, e = pcall(function() + Utils.SaveLocalFile(key, json.encode(_data)) + end) + if not s then + print("Error:" .. e) + end - DataManager.SelfUser.acc = utez - DataManager.SelfUser.nick_name = utez - DataManager.SelfUser.sex = 1 - DataManager.SelfUser.head_url = "" - self:LoginCallBack(0) - end + DataManager.SelfUser.acc = utez + DataManager.SelfUser.nick_name = utez + DataManager.SelfUser.sex = 1 + DataManager.SelfUser.head_url = "" + self:LoginCallBack(0) + end + -- end + -- end) end) local btn_phone = view:GetChild("btn_phone") diff --git a/wb_unity_pro/Assets/Plugins/Android/network.jar b/wb_unity_pro/Assets/Plugins/Android/network_bar.jar_bar similarity index 100% rename from wb_unity_pro/Assets/Plugins/Android/network.jar rename to wb_unity_pro/Assets/Plugins/Android/network_bar.jar_bar diff --git a/wb_unity_pro/Assets/Plugins/Android/network_bar.jar_bar.meta b/wb_unity_pro/Assets/Plugins/Android/network_bar.jar_bar.meta new file mode 100644 index 00000000..e91c2768 --- /dev/null +++ b/wb_unity_pro/Assets/Plugins/Android/network_bar.jar_bar.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 10780e01b5496d84488e91ec3fbf10d4 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/wb_unity_pro/Assets/Plugins/Android/wb_android.jar b/wb_unity_pro/Assets/Plugins/Android/wb_android.jar new file mode 100644 index 00000000..8d0be12b Binary files /dev/null and b/wb_unity_pro/Assets/Plugins/Android/wb_android.jar differ diff --git a/wb_unity_pro/Assets/Plugins/Android/network.jar.meta b/wb_unity_pro/Assets/Plugins/Android/wb_android.jar.meta similarity index 93% rename from wb_unity_pro/Assets/Plugins/Android/network.jar.meta rename to wb_unity_pro/Assets/Plugins/Android/wb_android.jar.meta index d0d0971b..1dcde736 100644 --- a/wb_unity_pro/Assets/Plugins/Android/network.jar.meta +++ b/wb_unity_pro/Assets/Plugins/Android/wb_android.jar.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c30b7448361d11948bf212d4bae1edb7 +guid: b7da94a71a78a0c48a9d26d9dd368eab PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/wb_unity_pro/Assets/Scripts/GameApplication.cs b/wb_unity_pro/Assets/Scripts/GameApplication.cs index 5d6ef83a..611ffd7e 100644 --- a/wb_unity_pro/Assets/Scripts/GameApplication.cs +++ b/wb_unity_pro/Assets/Scripts/GameApplication.cs @@ -271,6 +271,19 @@ public class GameApplication : MonoBehaviour if (result != 10) _wxlogin_callback = null; } + public void SetAppInfo(string data) + { + + Debug.Log($"appinfo:{RSAHelper.Decrypt(data)}"); + Hashtable map = (Hashtable)MiniJSON.Json.Deserialize(RSAHelper.Decrypt(data)); + Debug.Log($"appinfo2:{map["appid"]},{map["appSecret"]}"); + WXData.SetAppInfo(map["appid"] as string,map["appSecret"] as string); + PlatformAndroid.Instance.SetAppInfo(map["appid"] as string); +#if UNITY_ANDROID + +#endif + } + public void WXLogin(LuaFunction callback) { if (!buildApp) return; diff --git a/wb_unity_pro/Assets/Scripts/Platform/PlatformAndroid.cs b/wb_unity_pro/Assets/Scripts/Platform/PlatformAndroid.cs index e67eb7ea..a8ad0bc3 100644 --- a/wb_unity_pro/Assets/Scripts/Platform/PlatformAndroid.cs +++ b/wb_unity_pro/Assets/Scripts/Platform/PlatformAndroid.cs @@ -22,9 +22,16 @@ public class PlatformAndroid :MonoBehaviour //Debug.LogError("初始化安卓=========="); _player = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); _activity = _player.GetStatic("currentActivity"); + // Debug.LogError("==============="); } } + public void SetAppInfo(string id) + { + if (_activity == null) return; + _activity.Call("__setapk", id); + } + public void UpdateApp(string url) { diff --git a/wb_unity_pro/Assets/Scripts/Platform/WXData.cs b/wb_unity_pro/Assets/Scripts/Platform/WXData.cs index 99726f21..9ad903db 100644 --- a/wb_unity_pro/Assets/Scripts/Platform/WXData.cs +++ b/wb_unity_pro/Assets/Scripts/Platform/WXData.cs @@ -3,12 +3,17 @@ using System.Collections; public static class WXData { - - const string _appId = "wx40ac640ee6bd1116"; - const string _appSecret = "cde030153f5b97874c5e6063c70c0f97"; + private static string _appId = "wx12345678"; + private static string _appSecret = "2sfas2435gt574gfdw357"; static string _accessToken; static string _refreshToken; static string _openid; + + public static void SetAppInfo(string id,string scret) + { + _appId = id; + _appSecret = scret; + } //------------------------------------------------------------- public static string GetApplyTokenURL(string code) { diff --git a/wb_unity_pro/Assets/Scripts/RSAHelper.cs b/wb_unity_pro/Assets/Scripts/RSAHelper.cs index 6d3efc4f..9194a5fd 100644 --- a/wb_unity_pro/Assets/Scripts/RSAHelper.cs +++ b/wb_unity_pro/Assets/Scripts/RSAHelper.cs @@ -7,7 +7,7 @@ public static class RSAHelper private static string publicKey = "MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmZLmb4paD13E2uOueFStT1g8OnA4JQYkN4PZl/il7Nb05EbZrRbQz/5VbiZxc+S4asfFrrU0d++gjiluiAbBBhgtQSi+eNZuJ2wrBxjvN3W9d14XMmZKDg21Knu7tDUwOlEfCPVMZ/nJ+9YU6mnEvme29UgpI4RbEIIWPuDW3DavbaOvZ/cYP+0m2pxU3mETwDbVpbM3LimJ4JOBIs7XhV2UqEUfRVCYiuZUkydOCs1TgTJRJC5qgYpx4wUZ0ja7t9jP3klg/vjjyA1SDnC98bQLR5QzVJE1LvI2Rr3AHfZS0hckg0WAR87D1R8sGjmQ0TUi4qanpQYhEL4dBH8a6TX/xssobM7M+XgFsGiT4fWG18JhJM98rhVEk2AUaXgnFNf3OyLP+NuYrqjYamuug00s2azCl/rQCkvnLWO4W+lPn27ZinnBRg1+r2fNws7dPPa/8tWScRcTtfaidYsQP2lnYJvFgc299HdQL7iFgL336NihUxll09Hhm7vf8+N0ZP5TLE8SRoSfHNgHup6k9YG5e+V9bW4VckQFgPPBlHSS0mDEOvD9d54+F1cBg/sG8XMduW5WhfroYsMbRzB9a4rIfctn6yqpM+ot2EW8CKgiOVM5lJQhBwX5rMKnMTaApt6EIigY6jRVFNCOtQPDZ9prLBsp3asQxf7Vg9kfrVUCAwEAAQ=="; private static string privateKey = - "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"; + "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"; // 公钥加密 public static string Encrypt(string plainText) @@ -28,36 +28,37 @@ public static class RSAHelper /// RSACryptoServiceProvider 实例 private static RSACryptoServiceProvider CreateFromBase64PublicKey(string base64PublicKey) { + byte[] keyBytes = Convert.FromBase64String(base64PublicKey); // 解析 DER 格式的公钥,获取 Modulus 和 Exponent int offset = 0; if (keyBytes[offset++] != 0x30) throw new Exception("Invalid public key format"); - ReadLength(keyBytes, ref offset); // 跳过序列长度 + ReadLengthPublic(keyBytes, ref offset); // 跳过序列长度 // 跳过算法标识部分 if (keyBytes[offset++] != 0x30) throw new Exception("Invalid public key format"); - ReadLength(keyBytes, ref offset); + ReadLengthPublic(keyBytes, ref offset); offset += 13; // rsaEncryption OID + NULL if (keyBytes[offset++] != 0x03) throw new Exception("Invalid public key format"); - int bitStringLength = ReadLength(keyBytes, ref offset); + int bitStringLength = ReadLengthPublic(keyBytes, ref offset); offset++; // unused bits if (keyBytes[offset++] != 0x30) throw new Exception("Invalid public key format"); - ReadLength(keyBytes, ref offset); + ReadLengthPublic(keyBytes, ref offset); // 读取 Modulus if (keyBytes[offset++] != 0x02) throw new Exception("Invalid public key format"); - int modulusLength = ReadLength(keyBytes, ref offset); + int modulusLength = ReadLengthPublic(keyBytes, ref offset); byte[] modulus = new byte[modulusLength]; Array.Copy(keyBytes, offset, modulus, 0, modulusLength); offset += modulusLength; // 读取 Exponent if (keyBytes[offset++] != 0x02) throw new Exception("Invalid public key format"); - int exponentLength = ReadLength(keyBytes, ref offset); + int exponentLength = ReadLengthPublic(keyBytes, ref offset); byte[] exponent = new byte[exponentLength]; Array.Copy(keyBytes, offset, exponent, 0, exponentLength); @@ -69,7 +70,7 @@ public static class RSAHelper return rsa; } - private static int ReadLength(byte[] data, ref int offset) + private static int ReadLengthPublic(byte[] data, ref int offset) { int length = data[offset++]; if ((length & 0x80) == 0x80) @@ -84,10 +85,147 @@ public static class RSAHelper return length; } + /// + /// 从 Base64 私钥(PKCS#1 或 PKCS#8)得到 RSACryptoServiceProvider(适用于 Unity2019.4) + /// + public static RSACryptoServiceProvider LoadPrivateKeyFromBase64(string base64) + { + if (string.IsNullOrEmpty(base64)) throw new ArgumentNullException(nameof(base64)); + byte[] data = Convert.FromBase64String(base64); + + // 先尝试解析为 PKCS#8(PrivateKeyInfo -> OCTET STRING 包 PKCS#1) + try + { + byte[] pkcs1 = TryExtractPkcs1FromPkcs8(data); + return LoadPkcs1(pkcs1); + } + catch (Exception) + { + // 如果不是 PKCS#8,再尝试直接解析 PKCS#1 + return LoadPkcs1(data); + } + } + + private static byte[] TryExtractPkcs1FromPkcs8(byte[] data) + { + int offset = 0; + // Expect: SEQUENCE + if (data[offset++] != 0x30) throw new Exception("Not a valid ASN.1 SEQUENCE (PKCS#8)"); + ReadLength(data, ref offset); // skip top-level length + + // Optional version INTEGER (usually present) + if (data[offset] == 0x02) + { + offset++; // tag + int verLen = ReadLength(data, ref offset); + offset += verLen; + } + + // Next should be algorithmIdentifier (SEQUENCE) — skip it properly + if (data[offset] != 0x30) throw new Exception("Invalid PKCS#8, missing alg sequence"); + offset++; // tag + int algLen = ReadLength(data, ref offset); + offset += algLen; + + // Next should be OCTET STRING (privateKey) + if (data[offset++] != 0x04) throw new Exception("Invalid PKCS#8, missing privateKey OCTET STRING"); + int pkcs1Len = ReadLength(data, ref offset); + if (offset + pkcs1Len > data.Length) throw new Exception("Invalid lengths in PKCS#8"); + byte[] inner = new byte[pkcs1Len]; + Buffer.BlockCopy(data, offset, inner, 0, pkcs1Len); + return inner; + } + + private static RSACryptoServiceProvider LoadPkcs1(byte[] data) + { + int offset = 0; + if (data[offset++] != 0x30) throw new Exception("Invalid PKCS#1: no SEQUENCE"); + ReadLength(data, ref offset); + + // version INTEGER (skip) + if (data[offset] == 0x02) + { + offset++; // tag + int vlen = ReadLength(data, ref offset); + offset += vlen; + } + + RSAParameters p = new RSAParameters(); + p.Modulus = ReadInteger(data, ref offset, "Modulus"); + p.Exponent = ReadInteger(data, ref offset, "Public Exponent"); + p.D = ReadInteger(data, ref offset, "Private Exponent"); + p.P = ReadInteger(data, ref offset, "P"); + p.Q = ReadInteger(data, ref offset, "Q"); + p.DP = ReadInteger(data, ref offset, "DP"); + p.DQ = ReadInteger(data, ref offset, "DQ"); + p.InverseQ = ReadInteger(data, ref offset, "InverseQ"); + + var rsa = new RSACryptoServiceProvider(); + rsa.ImportParameters(p); + return rsa; + } + + private static byte[] ReadInteger(byte[] data, ref int offset, string nameForError = null) + { + if (data[offset] != 0x02) + { + // 报错时输出附近几个字节,便于调试 + string hexSnippet = GetHexSnippet(data, offset, 12); + throw new Exception($"Expected INTEGER at offset {offset} ({nameForError ?? ""}), but found 0x{data[offset]:X2}. Nearby: {hexSnippet}"); + } + offset++; // skip INTEGER tag + int len = ReadLength(data, ref offset); + + // 如果有前导 0x00, 去掉(去除符号位) + if (len > 0 && data[offset] == 0x00) + { + offset++; + len--; + } + + if (len < 0 || offset + len > data.Length) throw new Exception("Invalid integer length"); + byte[] value = new byte[len]; + Buffer.BlockCopy(data, offset, value, 0, len); + offset += len; + return value; + } + + private static int ReadLength(byte[] data, ref int offset) + { + if (offset >= data.Length) throw new Exception("Invalid offset while reading length"); + int length = data[offset++]; + + if ((length & 0x80) == 0) // short form + { + return length; + } + int bytesCount = length & 0x7F; + if (bytesCount <= 0 || bytesCount > 4) throw new Exception("Invalid length bytes"); + if (offset + bytesCount > data.Length) throw new Exception("Invalid length (overflow)"); + int val = 0; + for (int i = 0; i < bytesCount; i++) + { + val = (val << 8) | data[offset++]; + } + return val; + } + + private static string GetHexSnippet(byte[] data, int offset, int maxLen) + { + int start = Math.Max(0, offset - 6); + int end = Math.Min(data.Length, offset + maxLen); + System.Text.StringBuilder sb = new System.Text.StringBuilder(); + for (int i = start; i < end; i++) + { + sb.AppendFormat("{0:X2} ", data[i]); + } + return sb.ToString().Trim(); + } + // 私钥解密 public static string Decrypt(string cipherText) { - using (RSACryptoServiceProvider rsa = RSAHelper.CreateFromBase64PublicKey(privateKey)) + using (RSACryptoServiceProvider rsa = RSAHelper.LoadPrivateKeyFromBase64(privateKey)) { byte[] data = Convert.FromBase64String(cipherText); byte[] dec = rsa.Decrypt(data, false); diff --git a/wb_unity_pro/Assets/Scripts/VerCheck.cs b/wb_unity_pro/Assets/Scripts/VerCheck.cs index 15c50d7d..3896f37c 100644 --- a/wb_unity_pro/Assets/Scripts/VerCheck.cs +++ b/wb_unity_pro/Assets/Scripts/VerCheck.cs @@ -91,6 +91,7 @@ public class VerCheck : MonoBehaviour //公用 string init_url = "http://127.0.0.1:9898/NewFK/config/init2_1.json"; + //string init_url = "http://8.138.120.167:9898/NewFK/config/init2_1.json"; if (isGFF==false&&isDXYGFF==false) { diff --git a/wb_unity_pro/Assets/Source/Generate/GameApplicationWrap.cs b/wb_unity_pro/Assets/Source/Generate/GameApplicationWrap.cs index ae515ebc..6775dac0 100644 --- a/wb_unity_pro/Assets/Source/Generate/GameApplicationWrap.cs +++ b/wb_unity_pro/Assets/Source/Generate/GameApplicationWrap.cs @@ -15,6 +15,7 @@ public class GameApplicationWrap L.RegFunction("InitBugly", InitBugly); L.RegFunction("SetBuglyUserID", SetBuglyUserID); L.RegFunction("AddBuglyUserValue", AddBuglyUserValue); + L.RegFunction("SetAppInfo", SetAppInfo); L.RegFunction("WXLogin", WXLogin); L.RegFunction("GetRoomID", GetRoomID); L.RegFunction("PlayMuisc", PlayMuisc); @@ -177,6 +178,23 @@ public class GameApplicationWrap } } + [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))] + static int SetAppInfo(IntPtr L) + { + try + { + ToLua.CheckArgsCount(L, 2); + GameApplication obj = (GameApplication)ToLua.CheckObject(L, 1); + string arg0 = ToLua.CheckString(L, 2); + obj.SetAppInfo(arg0); + return 0; + } + catch (Exception e) + { + return LuaDLL.toluaL_exception(L, e); + } + } + [MonoPInvokeCallbackAttribute(typeof(LuaCSFunction))] static int WXLogin(IntPtr L) { diff --git a/wb_unity_pro/Assets/StreamingAssets/Pack.byte b/wb_unity_pro/Assets/StreamingAssets/Pack.byte index 2997b150..8647a289 100644 Binary files a/wb_unity_pro/Assets/StreamingAssets/Pack.byte and b/wb_unity_pro/Assets/StreamingAssets/Pack.byte differ diff --git a/wb_unity_pro/Pack/Android/base/base_script/asset_pack1.0.23.bytes b/wb_unity_pro/Pack/Android/base/base_script/asset_pack1.0.23.bytes index 596ef1e7..722d3e91 100644 Binary files a/wb_unity_pro/Pack/Android/base/base_script/asset_pack1.0.23.bytes and b/wb_unity_pro/Pack/Android/base/base_script/asset_pack1.0.23.bytes differ diff --git a/wb_unity_pro/Pack/Android32/base/base_script/asset_pack1.0.23.bytes b/wb_unity_pro/Pack/Android32/base/base_script/asset_pack1.0.23.bytes index 156668d4..b6dd7070 100644 Binary files a/wb_unity_pro/Pack/Android32/base/base_script/asset_pack1.0.23.bytes and b/wb_unity_pro/Pack/Android32/base/base_script/asset_pack1.0.23.bytes differ