Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

少前登录验证机制 #3

Open
KasumigaokaUtaha opened this issue Sep 25, 2019 · 15 comments
Open

少前登录验证机制 #3

KasumigaokaUtaha opened this issue Sep 25, 2019 · 15 comments

Comments

@KasumigaokaUtaha
Copy link
Contributor

大佬你好,我这几天在研究这个项目与登录有关的函数代码(主要是这三个方法:protocol.User.Login, protocol.User.GetDigitalSkyNbUid, protocol.User.Index)。因为我自己尝试着按照首先密码登录帐号,请求DigitalSkyNbUid,最后请求Index获取各种仓库信息这个流程走的时候,发现最后在请求Index的时候总是会返回error:0。我也是用设置了cookieJar的http.Client发送的这三个请求,header除了cookie以外只设置了User-Agent和Content-Type,对于Index的请求的请求体格式就是和protocol.User.Index这个方法里设置的({time: time.Now().Unix()})一样。反复尝试了很多次,一直没有想明白到底是什么造成的请求Index总是返回error:0而不是玩家的仓库信息。尝试用的代码有点长,需要发出来吗?谢谢了

@KasumigaokaUtaha
Copy link
Contributor Author

另外还有一个问题就是,少前的很多HTTP请求的请求体里都会有附带一个req_id,我看项目的代码里那个是当前时间*100000后再根据请求的顺序依次叠加。这个是用来防止重放攻击吗?会不会我请求Index每次都返回error:0也和这个有什么联系呢?

@ihciah
Copy link
Owner

ihciah commented Sep 25, 2019

大佬你好,我这几天在研究这个项目与登录有关的函数代码(主要是这三个方法:protocol.User.Login, protocol.User.GetDigitalSkyNbUid, protocol.User.Index)。因为我自己尝试着按照首先密码登录帐号,请求DigitalSkyNbUid,最后请求Index获取各种仓库信息这个流程走的时候,发现最后在请求Index的时候总是会返回error:0。我也是用设置了cookieJar的http.Client发送的这三个请求,header除了cookie以外只设置了User-Agent和Content-Type,对于Index的请求的请求体格式就是和protocol.User.Index这个方法里设置的({time: time.Now().Unix()})一样。反复尝试了很多次,一直没有想明白到底是什么造成的请求Index总是返回error:0而不是玩家的仓库信息。尝试用的代码有点长,需要发出来吗?谢谢了

1 你修改版本号了吗?
2 使用我的这份代码是不是可以拿到结果?
3 你对照下请求鉴权码是不是生成对了,我的这部分代码在cipher包里。

另外还有一个问题就是,少前的很多HTTP请求的请求体里都会有附带一个req_id,我看项目的代码里那个是当前时间*100000后再根据请求的顺序依次叠加。这个是用来防止重放攻击吗?会不会我请求Index每次都返回error:0也和这个有什么联系呢?

req_id 主要是服务端拿来做幂等的。其实你乱写一个每次随机值也没关系,防止万一被搞就实现成相同的算法了。

@KasumigaokaUtaha
Copy link
Contributor Author

  1. 版本号是指 “{"app_id":"0002000100021001","version":"1.0"}”里面的version吗?这个我没有修改过
  2. 用你的那份代码能够得到正确的结果。
  3. sign是在请求DigitalSkyNbUid后解密拿到的,后续请求Index/index的时候用的outdatacode是用sign作为密码加密的这个数据{"time": time.Now().Unix()}。

代码我上传到gist上了 https://gist.github.com/KasumigaokaUtaha/293d88b95ad587751f11dd1ac4e9691e
不知道能不能请dalao有空的时候帮忙看看问题出在哪里?非常感谢

@ihciah
Copy link
Owner

ihciah commented Sep 25, 2019

版本号建议修改,可能后端没有验证吧,验证了你号就没了。

我已经不记得这堆逻辑了2333
建议走一下代理抓下包,对比下就知道了。
我这边用的 burp 你可以试一下。

@KasumigaokaUtaha
Copy link
Contributor Author

版本号我抓包的时候发现一直都没变过啊?有必要修改吗?
我抓包测试了蛮久 各种参数也都改过了 但现在还是有很大概率返回error:0。虽然现在有时候也会返回正确的应答。但是做不到像你的代码那样每次都是返回正确的应答。

@ihciah
Copy link
Owner

ihciah commented Sep 26, 2019

版本号我抓包的时候发现一直都没变过啊?有必要修改吗?

这个代码是我一年前写的,版本更新应该会有所变动吧。

@KasumigaokaUtaha
Copy link
Contributor Author

好像找到问题所在了,outdatacode里面出现/和+这两个符号的时候,你的代码会把这两个符号转换成%2F和%2B,而我的代码就是没有转换。
那个version:“1.0"确实是没有变动过,不知道这个字段是代表什么的。另外的包含version的字段都是在获取服务器地址的时候动态更新的,所以这个代码到现在还能用hhh。我是之前看有人做少前重装芯片计算找到这儿来的,因为后来一次更新导致获取用户仓库信息的数据被加密了,nga上好一段时间都没有办法,后来看到很多项目都是用了这个项目的cipher包做的解密。我比较好奇这个解密用的函数以及那个defaultkey(”yundoudou“)都是通过逆向少前的apk得到的吗?

@ihciah
Copy link
Owner

ihciah commented Sep 26, 2019

那个version:“1.0"确实是没有变动过,不知道这个字段是代表什么的。另外的包含version的字段都是在获取服务器地址的时候动态更新的,所以这个代码到现在还能用hhh。

我说的版本号不是这个。
主要是下面几个:
https://github.com/ihciah/GFHelper/blob/master/protocol/network.go#L119
https://github.com/ihciah/GFHelper/blob/master/usercenter/usercenter.go#L69
https://github.com/ihciah/GFHelper/blob/master/usercenter/usercenter.go#L75
https://github.com/ihciah/GFHelper/blob/master/usercenter/usercenter.go#L81
我觉得可以更新一下扔到const.go里去。

说到常量,https://github.com/ihciah/GFHelper/blob/master/gameact/levels.go 里面也有大量我口胡出来的数值==

这个代码写的时候其实从cipher包到usercenter包是越写越乱的,也没重构。cipher、protocol、gameact其实还好,usercenter那边太乱了,感兴趣可以重构一下。

我是之前看有人做少前重装芯片计算找到这儿来的,因为后来一次更新导致获取用户仓库信息的数据被加密了,nga上好一段时间都没有办法,后来看到很多项目都是用了这个项目的cipher包做的解密。

如果可以的话求帮推广一下哈,这样我也没白写。

我比较好奇这个解密用的函数以及那个defaultkey(”yundoudou“)都是通过逆向少前的apk得到的吗?

不然我还能口胡一个不成==

@ihciah
Copy link
Owner

ihciah commented Sep 26, 2019

从工程上讲这份代码挺炸的==连testcase都没有。
But it works.
希望有人能帮我把它改的漂亮一些吧。

@KasumigaokaUtaha
Copy link
Contributor Author

 版本号我这几天去抓一下改了发PR吧
gameact我还没有看到那里XD
protocol那边我觉得很多方法写的地方有点分散 看的时候得不停的切换不同的文件 虽然这样划分从功能上看是比较清晰
testcase写起来会比较费事点吧 上学期我们做了一个小项目 第一次写testcase就挺头疼的
我看现在好像只写了1-6到6-6的自动刷关什么的吗?没有太细看 感觉可以把后面的常用的刷经验或者炸狗的关卡加上 说不定这样会有更多的人对这个项目感兴趣

@ihciah
Copy link
Owner

ihciah commented Sep 28, 2019

 版本号我这几天去抓一下改了发PR吧
gameact我还没有看到那里XD
protocol那边我觉得很多方法写的地方有点分散 看的时候得不停的切换不同的文件 虽然这样划分从功能上看是比较清晰
testcase写起来会比较费事点吧 上学期我们做了一个小项目 第一次写testcase就挺头疼的
我看现在好像只写了1-6到6-6的自动刷关什么的吗?没有太细看 感觉可以把后面的常用的刷经验或者炸狗的关卡加上 说不定这样会有更多的人对这个项目感兴趣

好的,蟹蟹!

@xxzl0130
Copy link

我是之前看有人做少前重装芯片计算找到这儿来的,因为后来一次更新导致获取用户仓库信息的数据被加密了,nga上好一段时间都没有办法,后来看到很多项目都是用了这个项目的cipher包做的解密。

我是之前从别处得到了加密方法的信息,本来自己拿C写了一套都已经做成功了,然后发现了这边这个包。。。我就直接用了。。。结果当时nga还有人找到我说原作者让隐藏一下用了这个包的信息= =|||

@ihciah
Copy link
Owner

ihciah commented Nov 27, 2019

我是之前看有人做少前重装芯片计算找到这儿来的,因为后来一次更新导致获取用户仓库信息的数据被加密了,nga上好一段时间都没有办法,后来看到很多项目都是用了这个项目的cipher包做的解密。

我是之前从别处得到了加密方法的信息,本来自己拿C写了一套都已经做成功了,然后发现了这边这个包。。。我就直接用了。。。结果当时nga还有人找到我说原作者让隐藏一下用了这个包的信息= =|||

感谢支持~
有啥好隐藏的?原作者表示不care哈哈哈~

@xxzl0130
Copy link

我是之前看有人做少前重装芯片计算找到这儿来的,因为后来一次更新导致获取用户仓库信息的数据被加密了,nga上好一段时间都没有办法,后来看到很多项目都是用了这个项目的cipher包做的解密。

我是之前从别处得到了加密方法的信息,本来自己拿C写了一套都已经做成功了,然后发现了这边这个包。。。我就直接用了。。。结果当时nga还有人找到我说原作者让隐藏一下用了这个包的信息= =|||

感谢支持~
有啥好隐藏的?原作者表示不care哈哈哈~

当时是这样的

星光下的彩虹
关于最近几个工具
有个问题,最近几个工具的加解密部分用的是ihciah的GFHelper里面的cipher么?
GFHelper的作者对此深表关切,认为过于高调,应该不贴源码链接甚至加上混淆。这一内容也与他们建立的iop网站相关,如果官方改了加密,就只能关站了。
我个人也是觉得把涉及这些内容的代码链接在NGA贴出来不太合适,尤其是在上一个反和谐帖子被官方看到并要求删除的情况下。万一真的改了就得有人去看汇编了。

@ihciah
Copy link
Owner

ihciah commented Nov 28, 2019

我是之前看有人做少前重装芯片计算找到这儿来的,因为后来一次更新导致获取用户仓库信息的数据被加密了,nga上好一段时间都没有办法,后来看到很多项目都是用了这个项目的cipher包做的解密。

我是之前从别处得到了加密方法的信息,本来自己拿C写了一套都已经做成功了,然后发现了这边这个包。。。我就直接用了。。。结果当时nga还有人找到我说原作者让隐藏一下用了这个包的信息= =|||

感谢支持~
有啥好隐藏的?原作者表示不care哈哈哈~

当时是这样的

星光下的彩虹
关于最近几个工具
有个问题,最近几个工具的加解密部分用的是ihciah的GFHelper里面的cipher么?
GFHelper的作者对此深表关切,认为过于高调,应该不贴源码链接甚至加上混淆。这一内容也与他们建立的iop网站相关,如果官方改了加密,就只能关站了。
我个人也是觉得把涉及这些内容的代码链接在NGA贴出来不太合适,尤其是在上一个反和谐帖子被官方看到并要求删除的情况下。万一真的改了就得有人去看汇编了。

我搞这玩意纯属懒得肝游戏(顺便练习一下golang),一开始只是写给自己用的。我的确在IOP的群里但是只是吃瓜围观。
个人看法是,不能因为官方可能会改加密方式就以此限制自己;改了继续crack嘛,老老实实按规矩玩太无聊,去突破规则才是乐趣本身吧。
如果本仓库被官方要求删除了,反正各位手里也有本地备份,我也不算白搞嘻嘻。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants