一个反向工程包加密和解密例程,以模拟NosTale客户端或服务器

noscrypto的Python项目详细描述


无加密

一个反向工程包加密-加密和解密例程,以模拟NosTale客户端或服务器。在

摘要

这个项目的目标是重新创建一个算法,用于加密/解密NosTale客户端和服务器之间交换的网络包。我见过许多公开密码,但我认为它们都没有产生与真正的客户机或服务器完全相同的输出(尤其是当涉及特殊字符,如ąśżź等)时。其中大多数库的问题是错误的掩码生成算法。如果您遇到此库产生的输出与游戏客户端或服务器产生的原始输出不同,请立即报告。在

安装

请使用pypi安装此库:

pip install noscrypto

测试

单元测试在noscrypto/tests下可用

使用

所有函数都接受bytes作为输入,并返回{}作为输出。请记住,每个函数只接受和输出单个数据包。这一点非常重要,例如作为客户机解密世界数据包,因为有时服务器在一次调用中发送多个数据包(它们被0xFF拆分,您应该逐块解密数据包)

客户

函数可以像

fromnoscryptoimportClient

在客户端.LoginEncrypt

加密您的数据包,以便登录服务器可以读取它。如果不存在\n字符,则自动在数据包末尾添加\n字符。在

^{pr2}$

在客户端.LoginDecrypt

解密登录结果包,以便您可以读取它

>>>Client.LoginDecrypt(b'\x75\x70\x78\x7B\x72\x2F\x44\x19').decode("ascii")'failc 5\n'

在Client.world加密

加密您的软件包,以便世界服务器可以读取它。除了packet之外,您还需要提供您的session(您从登录服务器收到的)。最后一个参数is_first_packet(默认值False)必须设置为True,前提是要将第一个数据包发送到world server(会话数据包)

>>>Client.WorldEncrypt("hey!".encode("ascii"),1337,False)b'}\x10\x13\xffWx'

在Client.world解密

解密服务器发送的world包,以便您可以读取它

>>>Client.WorldDecrypt(b'\x04\x8C\x8B\x9E\x8B\x96\x16\x65\x16\x65\x1A\x41\xA4\x14\x15\x46\x8E\xFF')b'stat 221 221 60 60 0 1024\n'

服务器

函数可以像

fromnoscryptoimportServer

在服务器.loginecrypt

加密您的数据包,以便客户端可以读取它。如果不存在\n字符,则自动在数据包末尾添加\n字符。在

>>>Server.LoginEncrypt("hello world".encode("ascii"))b'wt{{~/\x86~\x81{s\x19'

在Server.LoginDecrypt

从客户端解密登录数据包,以便您可以读取它

>>>Server.LoginDecrypt(b'\xba\xb5\xc9\xd8').decode("ascii")'hey\n'

在服务器.WorldEncrypt

加密世界数据包,以便客户端可以读取它

>>>Server.WorldEncrypt("stat 221 221 60 60 0 1024\n".encode("ascii"))b'\x04\x8c\x8b\x9e\x8b\x96\x16e\x16e\x1aA\xa4\x14\x15F\x8e\xff'

在Server.world解密

解密客户端软件包,以便world server可以读取它。除了packet之外,还需要提供客户机session。最后一个参数is_first_packet(默认值False)必须设置为True,前提是你还没有从客户端接收到第一个包(会话包)。在

>>>Server.WorldDecrypt(b'}\x10\x13\xffWx',1337,False).decode("ascii")'hey!'

欢迎加入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”之间有什么区别?