当前位置: 首页 > news >正文

ipad协议逆向分析实战篇-1

请使用dnspy环境进行学习研究,切勿用于非法操作

1.首先拿到得到的部署包进行逆向分析

2.解压部署包并找到bin这个文件夹

3.找到Wechat.Api.dll这个文件

4.这两个是协议的核心文件,破解了这个核心文件就可以得出逻辑源码

5.首先把Wechat.Api.dll这个文件进行dnspy反编译

6.拖进去后我们可以得到一些基本信息如下



// 时间戳: 64EF0B8D (2023/8/30 9:27:41)

using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Web;
using Wechat.Api;

[assembly: AssemblyVersion("1.0.0.0")]
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("Wechat.Api")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Wechat.Api")]
[assembly: AssemblyCopyright("版权所有(C)  2019")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("4aed2644-c334-4232-a14e-e2516be77451")]
[assembly: PreApplicationStartMethod(typeof(SwaggerConfig), "Register")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]

7.找到Logincontroller这个项目名称

using System;
using System.Net.Http;
using System.Runtime.CompilerServices;
using System.Threading.Tasks;
using System.Web.Http;
using micromsg;
using MMPro;
using Wechat.Api.Abstracts;
using Wechat.Api.Extensions;
using Wechat.Api.Filters;
using Wechat.Api.Helper;
using Wechat.Api.Request.Login;
using Wechat.Api.Response.Login;
using Wechat.Protocol;
using Wechat.Protocol.Andriod;
using Wechat.Util.Cache;

namespace Wechat.Api.Controllers
{
    /// <summary>
    /// 登陆
    /// </summary> 
    // Token: 0x020000C8 RID: 200
    public class LoginController : WebchatControllerBase
    {
        /// <summary>
        /// 生成二维码
        /// </summary>
        /// <returns></returns>
        // Token: 0x06000487 RID: 1159 RVA: 0x000074C4 File Offset: 0x000056C4
        [HttpGet]
        [NoRequestLog]
        [Route("api/Login/GetQrCode")]
        public Task<HttpResponseMessage> GetQrCodeWithStream()
        {
            LoginController.<GetQrCodeWithStream>d__0 <GetQrCodeWithStream>d__;
            <GetQrCodeWithStream>d__.<>t__builder = AsyncTaskMethodBuilder<HttpResponseMessage>.Create();
            <GetQrCodeWithStream>d__.<>4__this = this;
            <GetQrCodeWithStream>d__.<>1__state = -1;
            <GetQrCodeWithStream>d__.<>t__builder.Start<LoginController.<GetQrCodeWithStream>d__0>(ref <GetQrCodeWithStream>d__);
            return <GetQrCodeWithStream>d__.<>t__builder.Task;
        }

        /// <summary>
        /// 获取登陆二维码
        /// </summary>
        /// <returns></returns> 
        // Token: 0x06000488 RID: 1160 RVA: 0x00007508 File Offset: 0x00005708
        [HttpPost]
        [NoRequestLog]
        [Route("api/Login/GetQrCode")]
        public Task<HttpResponseMessage> GetQrCode(GetQrCode getQrCode)
        {
            ResponseBase<QrCodeResponse> response = new ResponseBase<QrCodeResponse>();
            MM.GetLoginQRCodeResponse result = this.wechat.GetLoginQRcode(0, (getQrCode != null) ? getQrCode.ProxyIp : null, (getQrCode != null) ? getQrCode.ProxyUserName : null, (getQrCode != null) ? getQrCode.ProxyPassword : null, (getQrCode != null) ? getQrCode.DeviceId : null, (getQrCode != null) ? getQrCode.DeviceName : null);
            if (result != null && result.baseResponse.ret == MM.RetConst.MM_OK)
            {
                response.Data = new QrCodeResponse
                {
                    QrBase64 = "data:img/jpg;base64," + Convert.ToBase64String(result.qRCode.src),
                    Uuid = result.uuid,
                    ExpiredTime = DateTime.Now.AddSeconds(result.expiredTime)
                };
            }
            else
            {
                response.Success = false;
                response.Code = "501";
                response.Message = "获取二维码失败";
            }
            return response.ToHttpResponseAsync();
        }

        /// <summary>
        /// 检查是否登陆
        /// </summary>
        /// <param name="uuid">UUid</param>
        /// <returns></returns> 
        // Token: 0x06000489 RID: 1161 RVA: 0x000075F0 File Offset: 0x000057F0
        [HttpPost]
        [Route("api/Login/CheckLogin/{Uuid}")]
        public Task<HttpResponseMessage> CheckLogin(string uuid)
        {
            ResponseBase<CheckLoginResponse> response = new ResponseBase<CheckLoginResponse>();
            CustomerInfoCache result = this.wechat.CheckLoginQRCode(uuid, 1);
            CheckLoginResponse checkLoginResponse = new CheckLoginResponse();
            checkLoginResponse.State = result.State;
            checkLoginResponse.Uuid = result.Uuid;
            checkLoginResponse.WxId = result.WxId;
            checkLoginResponse.NickName = result.NickName;
            checkLoginResponse.Device = result.Device;
            checkLoginResponse.HeadUrl = result.HeadUrl;
            checkLoginResponse.Mobile = result.BindMobile;
            checkLoginResponse.Email = result.BindEmail;
            checkLoginResponse.Alias = result.Alias;
            checkLoginResponse.DeviceId = result.DeviceId;
            checkLoginResponse.DeviceName = result.DeviceName;
            if (result.WxId != null)
            {
                checkLoginResponse.Data62 = this.wechat.Get62Data(result.WxId);
            }
            response.Data = checkLoginResponse;
            return response.ToHttpResponseAsync();
        }

        /// <summary>
        /// Data62登陆
        /// </summary>
        /// <param name="data62Login"></param>
        /// <returns></returns>
        // Token: 0x0600048A RID: 1162 RVA: 0x000076C8 File Offset: 0x000058C8
        [HttpPost]
        [Route("api/Login/Data62Login")]
        public Task<HttpResponseMessage> Data62Login(Data62Login data62Login)
        {
            ResponseBase<MM.ManualAuthResponse> response = new ResponseBase<MM.ManualAuthResponse>();
            MM.ManualAuthResponse result = this.wechat.UserLogin(data62Login.UserName, data62Login.Password, data62Login.Data62, data62Login.ProxyIp, data62Login.ProxyUserName, data62Login.ProxyPassword, null, 1);
            response.Data = result;
            return response.ToHttpResponseAsync();
        }

        /// <summary>
        /// DataA16登陆
        /// </summary>
        /// <param name="dataA16Login"></param>
        /// <returns></returns>
        // Token: 0x0600048B RID: 1163 RVA: 0x0000771C File Offset: 0x0000591C
        [HttpPost]
        [Route("api/Login/DataA16Login")]
        public Task<HttpResponseMessage> DataA16Login(DataA16Login dataA16Login)
        {
            ResponseBase<MM.ManualAuthResponse> response = new ResponseBase<MM.ManualAuthResponse>();
            MM.ManualAuthResponse result = this.wechat.AndroidManualAuth(dataA16Login.UserName, dataA16Login.Password, dataA16Login.DataA16, Guid.NewGuid().ToString(), dataA16Login.ProxyIp, dataA16Login.ProxyUserName, dataA16Login.ProxyPassword);
            response.Data = result;
            return response.ToHttpResponseAsync();
        }

        /// <summary>
        /// 62转A16
        /// </summary>
        /// <param name="data62Login"></param>
        /// <returns></returns>
        // Token: 0x0600048C RID: 1164 RVA: 0x00007780 File Offset: 0x00005980
        [HttpPost]
        [Route("api/Login/Data62ToA16")]
        public Task<HttpResponseMessage> Data62ToA16(Data62Login data62Login)
        {
            ResponseBase<Data62ToA16Response> response = new ResponseBase<Data62ToA16Response>();
            MM.ManualAuthResponse result = this.wechat.UserLogin(data62Login.UserName, data62Login.Password, data62Login.Data62, data62Login.ProxyIp, data62Login.ProxyUserName, data62Login.ProxyPassword, null, 1);
            Data62ToA16Response data62ToA16Response = new Data62ToA16Response();
            data62ToA16Response.ManualAuthResponse = result;
            response.Data = data62ToA16Response;
            if (result.baseResponse.ret == MM.RetConst.MM_OK)
            {
                string a16 = Fun.GenDeviceID();
                data62ToA16Response.A16 = a16;
                WechatHelper.QRCode qrcode = this.wechat.A16LoginAndGetQRCode(data62Login.UserName, data62Login.Password, a16, data62Login.ProxyIp, data62Login.ProxyUserName, data62Login.ProxyPassword);
                if (qrcode.status == 1)
                {
                    response.Message = "转换A16成功";
                    return response.ToHttpResponseAsync();
                }
                if (!string.IsNullOrEmpty(qrcode.uuid))
                {
                    string qrurl = "https://login.weixin.qq.com/q/" + qrcode.uuid;
                    MM.GetA8KeyResponse a8KeyResp = this.wechat.GetA8Key(result.accountInfo.wxid, "", qrurl, 2, null);
                    if (a8KeyResp.baseResponse.ret == MM.RetConst.MM_OK && a8KeyResp.fullURL != "")
                    {
                        HttpHelper httpHelper = new HttpHelper();
                        HttpItem httpItem4 = new HttpItem
                        {
                            URL = a8KeyResp.fullURL,
                            UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36",
                            Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"
                        };
                        HttpResult httpResult4 = httpHelper.GetHtml(httpItem4);
                        string urlConfirm = HttpHelper.GetBetweenHtml(httpResult4.Html, "confirm=1", ">");
                        string relaUrl = "https://login.weixin.qq.com/confirm?confirm=1" + urlConfirm.Replace("\"", "");
                        string cookies = HttpHelper.GetSmallCookie(httpResult4.Cookie);
                        httpItem4 = new HttpItem
                        {
                            URL = relaUrl,
                            Method = "POST",
                            ContentType = "application/x-www-form-urlencoded",
                            Cookie = cookies,
                            UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36",
                            Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"
                        };
                        httpResult4 = httpHelper.GetHtml(httpItem4);
                        string returl = string.Concat(new string[]
                        {
                            "https://login.weixin.qq.com/cgi-bin/mmwebwx-bin/login?uuid=",
                            qrcode.uuid,
                            "&r=",
                            ((DateTime.Now.ToUniversalTime().Ticks - 621355968000000000L) / 10000000L).ToString(),
                            "&t=simple_auth/w_qrcode_show&&ticket=",
                            qrcode.ticket,
                            "&wechat_real_lang=zh_CN&idc=2&qrcliticket=",
                            qrcode.qrcliticket
                        });
                        httpItem4 = new HttpItem
                        {
                            URL = returl,
                            UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36",
                            Accept = "*/*"
                        };
                        httpResult4 = httpHelper.GetHtml(httpItem4);
                        string redirect_uri = HttpHelper.GetBetweenHtml(httpResult4.Html, "window.redirect_uri=", ";").Replace("\"", "").Trim();
                        httpItem4 = new HttpItem
                        {
                            URL = redirect_uri,
                            UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36",
                            Accept = "*/*"
                        };
                        httpResult4 = httpHelper.GetHtml(httpItem4);
                        MM.ManualAuthResponse ret = this.wechat.AndroidManualAuth(data62Login.UserName, data62Login.Password, a16, Guid.NewGuid().ToString(), data62Login.ProxyIp, data62Login.ProxyUserName, data62Login.ProxyPassword);
                        if (ret.baseResponse.ret == MM.RetConst.MM_OK)
                        {
                            data62ToA16Response.A16 = a16;
                            data62ToA16Response.ManualAuthResponse = ret;
                            response.Data = data62ToA16Response;
                            response.Message = "转换A16成功";
                            return response.ToHttpResponseAsync();
                        }
                    }
                }
            }
            response.Data = data62ToA16Response;
            response.Message = "转换A16失败";
            response.Success = false;
            return response.ToHttpResponseAsync();
        }

        /// <summary>
        /// A16转62
        /// </summary>
        /// <param name="dataA16Login"></param>
        /// <returns></returns>
        // Token: 0x0600048D RID: 1165 RVA: 0x00007B18 File Offset: 0x00005D18
        [HttpPost]
        [Route("api/Login/A16ToData62")]
        public Task<HttpResponseMessage> DataA16To62(DataA16Login dataA16Login)
        {
            ResponseBase<DataA16To62Response> response = new ResponseBase<DataA16To62Response>();
            MM.ManualAuthResponse result = this.wechat.AndroidManualAuth(dataA16Login.UserName, dataA16Login.Password, dataA16Login.DataA16, Guid.NewGuid().ToString(), dataA16Login.ProxyIp, dataA16Login.ProxyUserName, dataA16Login.ProxyPassword);
            DataA16To62Response dataA16To62Response = new DataA16To62Response();
            dataA16To62Response.ManualAuthResponse = result;
            if (result.baseResponse.ret == MM.RetConst.MM_OK)
            {
                string wxnew62 = Util.SixTwoData(Guid.NewGuid().ToString("N"));
                WechatHelper.QRCode qrcode = this.wechat.UserLoginQRCode(dataA16Login.UserName, dataA16Login.Password, wxnew62, dataA16Login.ProxyIp, dataA16Login.ProxyUserName, dataA16Login.ProxyPassword, null, 1);
                if (!string.IsNullOrEmpty(qrcode.uuid))
                {
                    string qrurl = "https://login.weixin.qq.com/q/" + qrcode.uuid;
                    MM.GetA8KeyResponse rsult = this.wechat.GetA8Key(result.accountInfo.wxid, "", qrurl, 2, null);
                    if (!string.IsNullOrEmpty(rsult.fullURL))
                    {
                        HttpHelper httpHelper = new HttpHelper();
                        HttpItem httpItem4 = new HttpItem
                        {
                            URL = rsult.fullURL,
                            UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36",
                            Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"
                        };
                        HttpResult httpResult4 = httpHelper.GetHtml(httpItem4);
                        string urlConfirm = HttpHelper.GetBetweenHtml(httpResult4.Html, "confirm=1", ">");
                        string relaUrl = "https://login.weixin.qq.com/confirm?confirm=1" + urlConfirm.Replace("\"", "");
                        string cookies = HttpHelper.GetSmallCookie(httpResult4.Cookie);
                        httpItem4 = new HttpItem
                        {
                            URL = relaUrl,
                            Method = "POST",
                            ContentType = "application/x-www-form-urlencoded",
                            Cookie = cookies,
                            UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36",
                            Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"
                        };
                        httpResult4 = httpHelper.GetHtml(httpItem4);
                        string returl = string.Concat(new string[]
                        {
                            "https://login.weixin.qq.com/cgi-bin/mmwebwx-bin/login?uuid=",
                            qrcode.uuid,
                            "&r=",
                            ((DateTime.Now.ToUniversalTime().Ticks - 621355968000000000L) / 10000000L).ToString(),
                            "&t=simple_auth/w_qrcode_show&&ticket=",
                            qrcode.ticket,
                            "&wechat_real_lang=zh_CN&idc=2&qrcliticket=",
                            qrcode.qrcliticket
                        });
                        httpItem4 = new HttpItem
                        {
                            URL = returl,
                            UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36",
                            Accept = "*/*"
                        };
                        httpResult4 = httpHelper.GetHtml(httpItem4);
                        string redirect_uri = HttpHelper.GetBetweenHtml(httpResult4.Html, "window.redirect_uri=", ";").Replace("\"", "").Trim();
                        httpItem4 = new HttpItem
                        {
                            URL = redirect_uri,
                            UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36",
                            Accept = "*/*"
                        };
                        httpResult4 = httpHelper.GetHtml(httpItem4);
                        MM.ManualAuthResponse datalogin = this.wechat.UserLogin(dataA16Login.UserName, dataA16Login.Password, wxnew62, null, null, null, null, 1);
                        if (datalogin.baseResponse.ret == MM.RetConst.MM_OK)
                        {
                            response.Message = "转换62成功";
                            dataA16To62Response.Data62 = wxnew62;
                            dataA16To62Response.ManualAuthResponse = datalogin;
                            response.Data = dataA16To62Response;
                            return response.ToHttpResponseAsync();
                        }
                    }
                }
            }
            response.Data = dataA16To62Response;
            response.Message = "转换62失败";
            response.Success = false;
            return response.ToHttpResponseAsync();
        }

        /// <summary>
        /// 二次登陆
        /// </summary>
        /// <param name="wxId"></param>
        /// <returns></returns>
        // Token: 0x0600048E RID: 1166 RVA: 0x00007E78 File Offset: 0x00006078
        [HttpPost]
        [Route("api/Login/TwiceLogin/{wxId}")]
        public Task<HttpResponseMessage> TwiceLogin(string wxId)
        {
            ResponseBase<MM.ManualAuthResponse> response = new ResponseBase<MM.ManualAuthResponse>();
            MM.ManualAuthResponse result = this.wechat.TwiceLogin(wxId, 1);
            if (result == null || result.baseResponse.ret != MM.RetConst.MM_OK)
            {
                response.Success = false;
                response.Code = "501";
                response.Message = (result.baseResponse.errMsg.@string ?? "登陆失败");
            }
            else
            {
                response.Data = result;
                response.Message = "登陆成功";
            }
            return response.ToHttpResponseAsync();
        }

        /// <summary>
        /// 二维码唤醒登录
        /// </summary>
        /// <param name="wxId"></param>
        /// <returns></returns>
        // Token: 0x0600048F RID: 1167 RVA: 0x00007EF4 File Offset: 0x000060F4
        [HttpPost]
        [Route("api/Login/TwiceQrCodeLogin/{wxId}")]
        public Task<HttpResponseMessage> TwiceQrCodeLogin(string wxId)
        {
            ResponseBase<MM.PushLoginURLResponse> response = new ResponseBase<MM.PushLoginURLResponse>();
            MM.PushLoginURLResponse result = this.wechat.TwiceQrCodeLogin(wxId);
            if (result == null || result.baseResponse.ret != MM.RetConst.MM_OK)
            {
                response.Success = false;
                response.Code = "501";
                response.Message = (result.baseResponse.errMsg.@string ?? "登陆失败");
            }
            else
            {
                response.Data = result;
                response.Message = "登陆成功";
            }
            return response.ToHttpResponseAsync();
        }

        /// <summary>
        /// 退出登录
        /// </summary>
        /// <param name="wxId">微信Id</param>
        /// <returns></returns>
        // Token: 0x06000490 RID: 1168 RVA: 0x00007F70 File Offset: 0x00006170
        [HttpPost]
        [Route("api/Login/Logout/{wxId}")]
        public Task<HttpResponseMessage> Logout(string wxId)
        {
            ResponseBase<Wechat.Protocol.InitResponse> response = new ResponseBase<Wechat.Protocol.InitResponse>();
            LogOutResponse result = this.wechat.logOut(wxId);
            if (result == null || result.BaseResponse.Ret != 0)
            {
                response.Success = false;
                response.Code = "501";
                response.Message = (result.BaseResponse.ErrMsg.String ?? "退出失败");
            }
            else
            {
                response.Message = "退出成功";
            }
            return response.ToHttpResponseAsync();
        }

        /// <summary>
        /// 扫码登录其他设备(A16或者62登录的账号可用)
        /// </summary>
        /// <param name="extDeviceLoginConfirmOK"></param>
        /// <returns></returns>
        // Token: 0x06000491 RID: 1169 RVA: 0x00007FE4 File Offset: 0x000061E4
        [HttpPost]
        [Route("api/Login/ExtDeviceLoginConfirmGet")]
        public Task<HttpResponseMessage> ExtDeviceLoginConfirmGet(ExtDeviceLoginConfirmOK extDeviceLoginConfirmOK)
        {
            ResponseBase<ExtDeviceLoginConfirmGetResponse> response = new ResponseBase<ExtDeviceLoginConfirmGetResponse>();
            ExtDeviceLoginConfirmGetResponse result = this.wechat.ExtDeviceLoginConfirmGet(extDeviceLoginConfirmOK.WxId, extDeviceLoginConfirmOK.LoginUrl);
            response.Data = result;
            return response.ToHttpResponseAsync();
        }

        /// <summary>
        /// 确认登录其他设备
        /// </summary>
        /// <param name="extDeviceLoginConfirmOK"></param>
        /// <returns></returns>
        // Token: 0x06000492 RID: 1170 RVA: 0x0000801C File Offset: 0x0000621C
        [HttpPost]
        [Route("api/Login/ExtDeviceLoginConfirmOK")]
        public Task<HttpResponseMessage> ExtDeviceLoginConfirmOK(ExtDeviceLoginConfirmOK extDeviceLoginConfirmOK)
        {
            ResponseBase<ExtDeviceLoginConfirmOKResponse> response = new ResponseBase<ExtDeviceLoginConfirmOKResponse>();
            ExtDeviceLoginConfirmOKResponse result = this.wechat.ExtDeviceLoginConfirmOK(extDeviceLoginConfirmOK.WxId, extDeviceLoginConfirmOK.LoginUrl);
            response.Data = result;
            return response.ToHttpResponseAsync();
        }

        /// <summary>
        /// 获取登陆Url
        /// </summary>
        /// <param name="getLoginUrl"></param>
        /// <returns></returns>
        // Token: 0x06000493 RID: 1171 RVA: 0x00008054 File Offset: 0x00006254
        [HttpPost]
        [Route("api/Login/GetLoginUrl")]
        public Task<HttpResponseMessage> GetLoginUrl(GetLoginUrl getLoginUrl)
        {
            ResponseBase<GetLoginURLResponse> response = new ResponseBase<GetLoginURLResponse>();
            GetLoginURLResponse result = this.wechat.GetLoginURL(getLoginUrl.WxId, getLoginUrl.Uuid);
            response.Data = result;
            return response.ToHttpResponseAsync();
        }

        /// <summary>
        /// 获取62数据
        /// </summary>
        /// <param name="wxId"></param>
        /// <returns></returns>
        // Token: 0x06000494 RID: 1172 RVA: 0x0000808C File Offset: 0x0000628C
        [HttpPost]
        [Route("api/Login/Get62Data/{wxId}")]
        public Task<HttpResponseMessage> Get62Data(string wxId)
        {
            ResponseBase<string> response = new ResponseBase<string>();
            string result = this.wechat.Get62Data(wxId);
            response.Data = result;
            return response.ToHttpResponseAsync();
        }

        /// <summary>
        /// 辅助登录新手机设备
        /// </summary>
        /// <param name="phoneLogin"></param>
        /// <returns></returns>
        // Token: 0x06000495 RID: 1173 RVA: 0x000080BC File Offset: 0x000062BC
        [HttpPost]
        [Route("api/Login/PhoneDeviceLogin")]
        public Task<HttpResponseMessage> PhoneDeviceLogin(PhoneLogin phoneLogin)
        {
            ResponseBase responseBase = new ResponseBase();
            MM.GetA8KeyResponse a8Key = this.wechat.GetA8Key(phoneLogin.WxId, "", phoneLogin.Url, 2, null);
            bool flag = a8Key.fullURL.Contains("https://login.weixin.qq.com");
            if (flag)
            {
                SeleniumHelper seleniumHelper = new SeleniumHelper(Browsers.Chrome);
                try
                {
                    seleniumHelper.GoToUrl(a8Key.fullURL);
                    seleniumHelper.ClickElement(seleniumHelper.FindElementByXPath("/html/body/form/div[3]/p/button"));
                    responseBase.Message = "辅助成功,请在手机再次登录";
                }
                catch (Exception ex)
                {
                    responseBase.Success = false;
                    responseBase.Code = "501";
                    responseBase.Message = "登录失败,二维码已过期-" + ex.Message;
                }
                seleniumHelper.Cleanup();
            }
            else
            {
                responseBase.Success = false;
                responseBase.Code = "501";
                responseBase.Message = "登录失败";
            }
            return responseBase.ToHttpResponseAsync();
        }

        /// <summary>
        /// 辅助登录其他应用(https://open.weixin.qq.com/)
        /// </summary>
        /// <param name="phoneLogin"></param>
        /// <returns></returns>
        // Token: 0x06000496 RID: 1174 RVA: 0x0000819C File Offset: 0x0000639C
        [HttpPost]
        [Route("api/Login/OtherDeviceLogin")]
        public Task<HttpResponseMessage> OtherDeviceLogin(PhoneLogin phoneLogin)
        {
            ResponseBase responseBase = new ResponseBase();
            MM.GetA8KeyResponse a8Key = this.wechat.GetA8Key(phoneLogin.WxId, "", phoneLogin.Url, 2, null);
            bool flag = a8Key.fullURL.Contains("https://open.weixin.qq.com/");
            if (flag)
            {
                SeleniumHelper seleniumHelper = new SeleniumHelper(Browsers.Chrome);
                try
                {
                    seleniumHelper.GoToUrl(a8Key.fullURL);
                    seleniumHelper.ClickElement(seleniumHelper.FindElementByXPath("//*[@id=\"js_allow\"]"));
                    responseBase.Message = "登录成功";
                }
                catch (Exception ex)
                {
                    responseBase.Success = false;
                    responseBase.Code = "501";
                    responseBase.Message = "登录失败,二维码已过期-" + ex.Message;
                }
                seleniumHelper.Cleanup();
            }
            else
            {
                responseBase.Success = false;
                responseBase.Code = "501";
                responseBase.Message = "登录失败";
            }
            return responseBase.ToHttpResponseAsync();
        }

        /// <summary>
        /// 验证身份证
        /// </summary>
        /// <param name="verifyIdCard"></param>
        /// <returns></returns>
        // Token: 0x06000497 RID: 1175 RVA: 0x0000827C File Offset: 0x0000647C
        [Route("api/user/VerifyIdCard")]
        public Task<HttpResponseMessage> VerifyIdCard(VerifyIdCard verifyIdCard)
        {
            ResponseBase<VerifyPersonalInfoResp> response = new ResponseBase<VerifyPersonalInfoResp>();
            VerifyPersonalInfoResp result = this.wechat.VerifyPersonalInfo(verifyIdCard.WxId, verifyIdCard.RealName, verifyIdCard.IdCardType, verifyIdCard.IDCardNumber);
            response.Data = result;
            return response.ToHttpResponseAsync();
        }
    }
}

得到核心信息以及请求详细参数也可以进行修改

8.结束(仅供学习参考使用)

相关文章:

  • 深度学习 基本理论 3 :物体检测(Anchor base/NMS/softmax/损失函数/BCE/CE/zip
  • what is BERT?
  • Nacos:通过Dockerfile构建自定义Nacos镜像
  • 【linux】Ubuntu 22.04.3 LTS截屏
  • VS游戏打包教程
  • 洛谷最经典题目之--垂直柱状图
  • 面试宝典之消息中间件面试题
  • set -e的作用
  • 【踩坑】flask_uploads报错cannot import name ‘secure_filename‘
  • 简单的天天酷跑小游戏实现
  • 全自动网页生成系统网站源码重构版
  • 基于SpringBoot+Vue实现的二手交易系统
  • openssl3.2 - 自己构建openssl.exe的VS工程(在编译完的源码版本上)
  • TensorRT模型优化模型部署(七)--Quantization量化(PTQ and QAT)(二)
  • 观成科技-加密C2框架EvilOSX流量分析
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • Git 使用集
  • Hexo+码云+git快速搭建免费的静态Blog
  • HTML5新特性总结
  • HTML-表单
  • HTTP--网络协议分层,http历史(二)
  • in typeof instanceof ===这些运算符有什么作用
  • ng6--错误信息小结(持续更新)
  • Redis 懒删除(lazy free)简史
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • vuex 学习笔记 01
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 那些被忽略的 JavaScript 数组方法细节
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 全栈开发——Linux
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 什么是Javascript函数节流?
  • 使用 QuickBI 搭建酷炫可视化分析
  • 数组的操作
  • 一个JAVA程序员成长之路分享
  • 移动端 h5开发相关内容总结(三)
  • hi-nginx-1.3.4编译安装
  • Java总结 - String - 这篇请使劲喷我
  • (12)Hive调优——count distinct去重优化
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (转载)Linux网络编程入门
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NET/C# 使窗口永不获得焦点
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • .Net转前端开发-启航篇,如何定制博客园主题
  • .project文件
  • @SuppressWarnings注解
  • [20160807][系统设计的三次迭代]
  • [AutoSar]BSW_Com02 PDU详解
  • [C#]猫叫人醒老鼠跑 C#的委托及事件
  • [C语言]——函数递归
  • [Java][Android][Process] ProcessBuilder与Runtime差别
  • [JDBC-1] JDBC Base Template
  • [Linux] CE知识随笔含Ansible、防火墙、VIM、其他服务