开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1390|回复: 0
收起左侧

[Android逆向] 我的春光公寓 协议分享

[复制链接]
结帖率:100% (1/1)
发表于 2023-8-5 21:24:59 | 显示全部楼层 |阅读模式   湖北省武汉市
        public string Encrypt(string Text, string sKey)
        {
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            byte[] inputByteArray;
            inputByteArray = Encoding.UTF8.GetBytes(Text);
            des.Key = Encoding.UTF8.GetBytes(sKey.Substring(0, 8));
            des.IV = Encoding.UTF8.GetBytes(sKey.Substring(0, 8));
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();
            return HttpUtility.UrlEncode(Convert.ToBase64String(ms.ToArray()));
        }
        public string Decrypt(string Text, string sKey)
        {
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            int len;
            len = Text.Length / 2;
            byte[] inputByteArray = new byte[len];
            int x, i;
            for (x = 0; x < len; x++)
            {
                i = Convert.ToInt32(Text.Substring(x * 2, 2), 16);
                inputByteArray[x] = (byte)i;
            }
            des.Key = Encoding.ASCII.GetBytes(sKey.Substring(0, 8));
            des.IV = Encoding.ASCII.GetBytes(sKey.Substring(0, 8));
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
            cs.Write(inputByteArray, 0, inputByteArray.Length);
            cs.FlushFinalBlock();
            return Encoding.UTF8.GetString(ms.ToArray());
        }

        private string EncodeBytes_bs1(string data)
        {
            return Encoding.UTF8.GetString(EncodeBytes_bs1(Tool.ToBytesFromHexString(data)));
        }
        private byte[] EncodeBytes_bs1(byte[] data)
        {
            int len = data.Length;
            for (int i = 0; i < data.Length; i++)
            {
                data[i] ^= (byte)((len >> 1) + i);
            }
            return data;
        }

        private async  Task<string> loadArchive(string account, string token)
        {
            //var content = EncodeBytes_bs1(Encoding.UTF8.GetBytes($"account={account}&token={token}"));
            var content = $"openId={account}&token={token}&deviceId={textBox_deviceId.Text}";
            Dictionary<string, string> headers = new Dictionary<string, string>();
            headers.Add("User-Agent", "Mozilla/5.0");
            headers.Add("Sec-Fetch-Site", "cross-site");
            headers.Add("Sec-Fetch-Mode", "cors");
            headers.Add("Sec-Fetch-Dest", "empty");
            headers.Add("xweb_xhr", "1");
            HttpClient client = new HttpClient();
            foreach (var item in headers)
            {
                client.DefaultRequestHeaders.Add(item.Key, item.Value);
            }
            StringContent content1 = new StringContent(content, Encoding.UTF8, "application/x-www-form-urlencoded");
            //StreamContent content1 = new StreamContent(new MemoryStream(content));
            HttpResponseMessage resp = await client.PostAsync("https://simh5.soloknight.xyz:9443/FDH5Server/game/wx/loadArchive", content1);
            var ret = await resp.Content.ReadAsStringAsync();
            return lzw_decompress(JObject.Parse(ret)["data"].ToString());
        }
        private async  Task<string> saveArchive(string data, string account, string token)
        {
            //var content = EncodeBytes_bs1(Encoding.UTF8.GetBytes($"account={account}&token={token}"));
            var content = $"data={lzw_compress(data).ToUpper()}&openId={account}&token={token}&deviceId={textBox_deviceId.Text}";
            Dictionary<string, string> headers = new Dictionary<string, string>();
            headers.Add("User-Agent", "Mozilla/5.0");
            headers.Add("Sec-Fetch-Site", "cross-site");
            headers.Add("Sec-Fetch-Mode", "cors");
            headers.Add("Sec-Fetch-Dest", "empty");
            headers.Add("xweb_xhr", "1");
            HttpClient client = new HttpClient();
            foreach (var item in headers)
            {
                client.DefaultRequestHeaders.Add(item.Key, item.Value);
            }
            StringContent content1 = new StringContent(content, Encoding.UTF8, "application/x-www-form-urlencoded");
            //StreamContent content1 = new StreamContent(new MemoryStream(content));
            HttpResponseMessage resp = await client.PostAsync("https://simh5.soloknight.xyz:9443/FDH5Server/game/wx/saveArchive", content1);
            var ret = await resp.Content.ReadAsStringAsync();
            return JObject.Parse(ret)["code"].ToString();
        }

        private async  Task<string> login(string account)
        {
            //var content = EncodeBytes_bs1(Encoding.UTF8.GetBytes($"account={account}&token={token}"));
            var content = EncodeBytes_bs1(Encoding.UTF8.GetBytes($"account={account}&deviceId={Guid.NewGuid().ToString().ToUpper()}&version=3.7.0&sgCode=&crcCode={key}&rtPlatform=IPhonePlayer"));
            Dictionary<string, string> headers = new Dictionary<string, string>();
            headers.Add("user-agent", "ProductName/61 CFNetwork/1209 Darwin/20.2.0");
            headers.Add("x-p-mode", "bs1");
            HttpClient client = new HttpClient();
            foreach (var item in headers)
            {
                client.DefaultRequestHeaders.Add(item.Key, item.Value);
            }
            //StringContent stringContent = new StringContent(content, Encoding.UTF8, "application/x-www-form-urlencoded");
            StreamContent content1 = new StreamContent(new MemoryStream(content));
            HttpResponseMessage resp = await client.PutAsync($"{addr}/FDServer/game/login/login", content1);
            var ret = await resp.Content.ReadAsByteArrayAsync();
            var str = Convert.FromBase64String(JObject.Parse(Encoding.UTF8.GetString(EncodeBytes_bs1(ret)))["msg"].ToString());
            return JObject.Parse(Encoding.UTF8.GetString(str))["pKey"].ToString();
        }
        private async  Task<string> archiveLoad(string account, string token)
        {
            //var content = EncodeBytes_bs1(Encoding.UTF8.GetBytes($"account={account}&token={token}"));
            var content = EncodeBytes_bs1(Encoding.UTF8.GetBytes($"account={account}&token={token}"));
            Dictionary<string, string> headers = new Dictionary<string, string>();
            headers.Add("user-agent", "ProductName/61 CFNetwork/1209 Darwin/20.2.0");
            headers.Add("x-p-mode", "bs1");
            HttpClient client = new HttpClient();
            foreach (var item in headers)
            {
                client.DefaultRequestHeaders.Add(item.Key, item.Value);
            }
            //StringContent stringContent = new StringContent(content, Encoding.UTF8, "application/x-www-form-urlencoded");
            StreamContent content1 = new StreamContent(new MemoryStream(content));
            HttpResponseMessage resp = await client.PutAsync($"{addr}/FDServer/game/archive/load", content1);
            var ret = await resp.Content.ReadAsByteArrayAsync();
            ret = EncodeBytes_bs1(ret);
            var str = Convert.FromBase64String(JObject.Parse(Encoding.UTF8.GetString(ret))["msg"].ToString());
            return Encoding.UTF8.GetString(str);
        }
        private async  Task<string> dataLoad(string dataKey, string account, string token)
        {
            //var content = EncodeBytes_bs1(Encoding.UTF8.GetBytes($"account={account}&token={token}"));
            var content = EncodeBytes_bs1(Encoding.UTF8.GetBytes($"dataKey={dataKey}&account={account}&token={token}"));
            Dictionary<string, string> headers = new Dictionary<string, string>();
            headers.Add("user-agent", "ProductName/61 CFNetwork/1209 Darwin/20.2.0");
            headers.Add("x-p-mode", "bs1");
            HttpClient client = new HttpClient();
            foreach (var item in headers)
            {
                client.DefaultRequestHeaders.Add(item.Key, item.Value);
            }
            //StringContent stringContent = new StringContent(content, Encoding.UTF8, "application/x-www-form-urlencoded");
            StreamContent content1 = new StreamContent(new MemoryStream(content));
            HttpResponseMessage resp = await client.PutAsync($"{addr}/FDServer/game/data/load", content1);
            var ret = await resp.Content.ReadAsByteArrayAsync();
            ret = EncodeBytes_bs1(ret);
            var json = Encoding.UTF8.GetString(ret);
            if (!json.Contains("msg"))
            {
                return "";
            }
            var str = Convert.FromBase64String(JObject.Parse(json)["msg"].ToString());
            return Encoding.UTF8.GetString(str);
        }
        private async  Task<string> archiveSave(string data, string account, string token)
        {
            //var content = EncodeBytes_bs1(Encoding.UTF8.GetBytes($"account={account}&token={token}"));
            var content = EncodeBytes_bs1(Encoding.UTF8.GetBytes($"data={HttpUtility.UrlEncode(data)}&account={account}&token={token}"));
            Dictionary<string, string> headers = new Dictionary<string, string>();
            headers.Add("user-agent", "ProductName/61 CFNetwork/1209 Darwin/20.2.0");
            headers.Add("x-p-mode", "bs1");
            HttpClient client = new HttpClient();
            foreach (var item in headers)
            {
                client.DefaultRequestHeaders.Add(item.Key, item.Value);
            }
            //StringContent stringContent = new StringContent(content, Encoding.UTF8, "application/x-www-form-urlencoded");
            StreamContent content1 = new StreamContent(new MemoryStream(content));
            HttpResponseMessage resp = await client.PutAsync($"{addr}/FDServer/game/archive/save", content1);
            var ret = await resp.Content.ReadAsByteArrayAsync();
            ret = EncodeBytes_bs1(ret);
            return Encoding.UTF8.GetString(ret);
        }
        private async  Task<string> dataSave(string dataKey, string data, string account, string token)
        {
            //var content = EncodeBytes_bs1(Encoding.UTF8.GetBytes($"account={account}&token={token}"));
            var content = EncodeBytes_bs1(Encoding.UTF8.GetBytes($"dataKey={dataKey}&content={HttpUtility.UrlEncode(data)}&account={account}&token={token}"));
            Dictionary<string, string> headers = new Dictionary<string, string>();
            headers.Add("user-agent", "ProductName/61 CFNetwork/1209 Darwin/20.2.0");
            headers.Add("x-p-mode", "bs1");
            HttpClient client = new HttpClient();
            foreach (var item in headers)
            {
                client.DefaultRequestHeaders.Add(item.Key, item.Value);
            }
            //StringContent stringContent = new StringContent(content, Encoding.UTF8, "application/x-www-form-urlencoded");
            StreamContent content1 = new StreamContent(new MemoryStream(content));
            HttpResponseMessage resp = await client.PutAsync($"{addr}/FDServer/game/data/save", content1);
            var ret = await resp.Content.ReadAsByteArrayAsync();
            ret = EncodeBytes_bs1(ret);
            return Encoding.UTF8.GetString(ret);
        }


        private byte[] Decompress(byte[] data)
        {
            MemoryStream ms = new MemoryStream();
            GZip.Decompress(new MemoryStream(data), ms, false);
            return ms.ToArray();
        }

        private byte[] Compress(byte[] data)
        {
            MemoryStream ms = new MemoryStream();
            GZip.Compress(new MemoryStream(data), ms, false);
            return ms.ToArray();
        }

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表