一个库,它允许您获取身份验证令牌,以便您可以登录到nosale官方服务器

nosauth的Python项目详细描述


诺斯塔莱Auth

一个简单的库,允许您为NoS0577登录包生成“魔力”值

包裹

当您使用Gameforge启动器登录时,将使用新的登录包NoS0577

看起来是这样的: "NoS0577 " + SESSION_TOKEN + " " + INSTALLATION_GUID + " 003662BF" + " " + REGION_CODE + char(0xB) + "0.9.3.3126" + " 0 " + MD5_STR(MD5_FILE("NostaleClientX.exe") + MD5_FILE("NostaleClient.exe"))

  • NoS0577-包的头,常量值
  • SESSION_TOKEN-此库生成的值,在该值之后,登录包中有两个空格
  • INSTALLATION_GUID-在安装过程中生成的Id,出于登录目的,它可能是随机的,存储在windows注册表中的InstallationId中的SOFTWARE\\WOW6432Node\\Gameforge4d\\TNTClient\\MainApp
  • 003662BF-随机值转换为十六进制
  • REGION_CODE-GF您所在地区的代码-4用于PL
  • char(0xB)-带ASCII码的单个字符0xB
  • 0.9.3.3114-客户端的当前版本,可以从NostaleClientX.exe文件版本
  • 0-常量值
  • MD5_STR(MD5_FILE("NostaleClientX.exe") + MD5_FILE("NostaleClient.exe"))-MD5由NostaleClientX.exe以及NostaleClient.exe在

没用的东西

客户做了一些无用的东西(至少对我们来说)像

  1. 当您按“Start”时,启动器生成的GUID基本上类似于伪随机GUID,并将其保存到名为_TNT_SESSION_ID的环境变量中
  2. Launcher用gf参数启动客户机
  3. Client从系统环境变量中读取_TNT_SESSION_ID值,该值进一步用于在启动器中标识客户机(如果您运行多个NosTale客户机)
  4. 现在,客户机和启动程序使用JSON-RPC协议讨论新创建的pipe。在
  5. 客户端使用_TNT_SESSION_ID值查询启动器,客户端请求USERNAME和{}等信息,然后使用简单算法将code转换为{},并与登录包一起发送

核心部分

授权

要先获得令牌,您需要对自己进行身份验证。为此,您需要将POST请求发送到https://spark.gameforge.com/api/v1/auth/sessions,然后发送only once。在

在请求头中,您需要从windows注册表中指定TNT-Installation-Id。 在请求的正文中,您需要指定JSON内容:

  • email-您的电子邮件
  • locale-示例:pl_PL
  • password-您的密码

在回复中,您将得到JSON内容:

  • token-稍后在API请求中使用的值,它不是在登录包中使用的值

帐目

因为有一段时间你可能会绑定多个游戏帐户到你的GF帐户。要处理它,您需要向GET请求https://spark.gameforge.com/api/v1/user/accounts

在请求头中,您需要指定:

  • TNT-Installation-Id-来自windows注册表的值
  • User-Agent-例如Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36
  • Authorization-Bearer+TOKEN_FROM_AUTH_REQUEST

在响应中,您将得到所有帐户的JSON数组。列表中的顶级键是account ids。在

差不多了

要获得正确的令牌,您需要向POST请求https://spark.gameforge.com/api/v1/auth/thin/codes 在请求头中,您需要指定:

  • TNT-Installation-Id-来自windows注册表的值
  • User-Agent-随时间的变化,例如GameforgeClient/2.0.48
  • Authorization-Bearer+TOKEN_FROM_AUTH_REQUEST

在请求JSON正文中,您需要指定:

  • platformGameAccountId-上一节中所选帐户的id

在回复中,您将得到JSON内容:

  • code-您要查找的值

您可以使用从api/v1/auth/thin/sessions获得的身份验证令牌多次调用api/v1/auth/thin/codes

最后,会话令牌

要使用登录包中的code,需要将其转换为SESSION_TOKEN。转换非常简单。它将code更改为十六进制字符串。在

假设您得到code等于a857263a-3fc1-4c60-ad78-9b6d9a2a0691,在转换之后它看起来像61383537323633612D336663312D346336302D616437382D396236643961326130363931,因为您从code转换字符一个元素一个元素地放入hexstring中,因此:

  • a->;97->;0x61->;61
  • 8->;56->;0x38->;38

以此类推,因此字符串看起来像6138...

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java查询,该查询应返回特定相关实体的实体   java创建了两个可运行的JAR,它们使用相同的库而不需要两次   java swing应用程序如何设置面板中组件的高度(和宽度)   在fat jar中找不到java JasperReport文件错误   kotlin在java中如何称呼这个构造函数?   java为什么被零除是一个不可恢复的问题?   java为SUTime添加用于解析季度的自定义规则   java merge 2带所有元素的排序列表   从字符串StringUtils Java中提取数字   java ForLoops最大和最小数   java我可以为嵌入式tomcat 8定义始终保持活动状态的最小executer线程数吗?   java当metod返回ResponseEntry<Resource>抛出错误时,如何返回ModelandView?   java片段翻译和电话定位错误   javagwt:如何让regex(模式和匹配器)在客户端工作   java EAR文件和“WebSphere增强的EAR”之间有什么区别?