热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

解决手心输入法无法登录账号的问题

问题描述近日在使用电脑处理文字的时候,发现Windows10自带的输入法开始作妖,经常打一个字要卡半天,甚至可以看到电脑自动打字的尴尬场面。因此,我又重新下载回了手心输入法。由于我

问题描述

近日在使用电脑处理文字的时候,发现 Windows 10 自带的输入法开始作妖,经常打一个字要卡半天,甚至可以看到电脑自动打字的尴尬场面。因此,我又重新下载回了手心输入法。由于我手机上也是使用的同样的输入法,便想着可以利用输入法带的同步功能来进行个人词库的同步。然而,在实际使用的过程中,我发现手机端的登录比较顺畅,毕竟一直维护,而电脑端的情况则复杂得多。Windows 平台上的最后一次更新还是在 2018.10.18。打开登录界面就会出现错误提示。

手心输入法-账号登录-无法打开

但是,手机上使用相同的账号可以登录,所以我判断是电脑端在打开鉴权界面时发生了错误。


错误定位与初步调查

于是使用Fiddler进行抓包,果不其然,在抓取的请求列表中发现了与 openapi.360.cn 通信400的结果。

Fiddler-抓包结果

该应用访问的URL是:

https://openapi.360.cn/oauth2/authorize?client_id=ae2a197a0f3a16cb5b088fbd51db155b&response_type=token&redirect_uri=xinshuru.com&scope=basic&display=desktop

openapi.360.cn 是360的应用开放平台,其官方文档位于 这里。在文档的2.1.2节可以看到,该 OAuth 2.0 接口需要一些参数。

请求参数:




















































参数名必选介绍
client_idTrue创建应用时获得的App Key
response_typeTrue此值固定为“code”
redirect_uriFalse授权后要回调的URI,即接收Authorization Code的URI, 其值可以是“oob”。 非“oob”值的redirect_uri所在域名必须与开发者注册应用时所提供的回调地址的域名相匹配
scopeFalse以空格分隔的权限列表,若不传递此参数,代表请求默认的basic权限。(目前只有basic权限)
stateFalse用于保持请求和回调的状态,授权服务器在回调时(重定向用户浏览器到“redirect_uri”时),会在Query Parameter中原样回传该参数
oauth_versionFalse(可选)版本号,如果填写必须为1.0
displayFalse登录和授权页面的展现样式,360桌面应用请传递“desktop”,默认为“default”或空。
reloginFalse仅在实现"使用360账号登陆"功能时才需要传递。当浏览器有360COOKIE时,传递relogin可展示“当前账号登陆确认页”;relogin值请传递公司域名,如www.360.cn可传递"relogin=360.cn"

我又直接使用浏览器打开了手心输入法的授权URL,竟然可以直接打开,还很贴心地给出了错误提示:

360应用授权-手心输入法-错误提示

查询请求参数表格,可以发现 redirect_uri 不是一个必选参数,因此,我直接从 queryString 中删去了该参数,此时,请求URL变成:

https://openapi.360.cn/oauth2/authorize?client_id=ae2a197a0f3a16cb5b088fbd51db155b&response_type=token&scope=basic&display=desktop

再次使用浏览器打开该链接,发现已经可以正常输入账号密码进行登录了:

360应用授权-手心输入法-登录界面

于是,接下来的问题就是如何将客户端的错误请求更改为修改后的正确请求。


问题解决

既然已经定位到了问题,而且找到了可行的方案,现在的问题就是如何拦截并修改输入法客户端发往服务端的请求。

刚好,我使用的抓包软件 Fiddler 就可以设置自定义拦截规则。

Fiddler-菜单栏-自定义规则

打开自定义规则编辑器后,可以根据注释发现其使用的是 JScript.NET 语言。关于该语言的资料可以在这里找到:JScript.NET Reference。

由于我们现在需要完成的事情是修改客户端请求,于是,我们需要改写自定义规则中关于请求的部分。使用 Fiddler ScriptEditor 菜单栏中的 Go-to OnBeforeRequest 选项可以直接定位到与请求相关的方法位置。

Fiddler-自定义规则-编辑页面

在方法体的最后,我们加上自己对 openapi.360.cn 的拦截修改规则:

static function OnBeforeRequest(oSession: Session) {
// 如果你之前没有使用过该功能,下面未注释的代码应该位于注释了的代码后面
/*
if (m_AlwaysFresh && (oSession.oRequest.headers.Exists("If-Modified-Since") || oSession.oRequest.headers.Exists("If-None-Match")))
{
oSession.utilCreateResponseAndBypassServer();
oSession.respOnseCode= 304;
oSession["ui-backcolor"] = "Lavender";
}
*/
if (oSession.HostnameIs("openapi.360.cn")) { // 只处理目标站点
var url = oSession.url; // 当前会话的 URL
var newUrl = url.Replace("redirect_uri=www.xinshuru.com&", String.Empty); // 删去 URL 中 redirect_uri 部分
oSession.url = newUrl; // 替换 URL
}
}

之后,保存(Ctrl+S)该文件即可。如果操作正确,应该看到类似下图的界面:

Fiddler-自定义规则-编辑页面-保存成功

在打开 Fiddler 的情况下,再次打开手心输入法的登录页面,可以看到已经正常打开:

手心输入法-账号登录-正常打开

此时输入用户名和密码即可正常登录,使用同步功能了。



推荐阅读
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • Gitlab接入公司内部单点登录的安装和配置教程
    本文介绍了如何将公司内部的Gitlab系统接入单点登录服务,并提供了安装和配置的详细教程。通过使用oauth2协议,将原有的各子系统的独立登录统一迁移至单点登录。文章包括Gitlab的安装环境、版本号、编辑配置文件的步骤,并解决了在迁移过程中可能遇到的问题。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • .NetCoreWebApi生成Swagger接口文档的使用方法
    本文介绍了使用.NetCoreWebApi生成Swagger接口文档的方法,并详细说明了Swagger的定义和功能。通过使用Swagger,可以实现接口和服务的可视化,方便测试人员进行接口测试。同时,还提供了Github链接和具体的步骤,包括创建WebApi工程、引入swagger的包、配置XML文档文件和跨域处理。通过本文,读者可以了解到如何使用Swagger生成接口文档,并加深对Swagger的理解。 ... [详细]
author-avatar
半路张三_711
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有