游戏安全实验室 首页 活动 查看内容

【答案推荐】预赛android标准版

发布于:2017-8-3 10:00   |    123693次阅读 作者: 管理员    |   原作者: 李沛然   |   来自: 原创

​感谢android组李沛然分享解答过程。


传入key、code、mode;

 

j__ZN9CRegCheck18is_user_name_legalERSs

检查参数合法性:

① Key长度必须为0x27

② key字节与0x20orr

③ Split:

字符串-截取需要截取0x20/4个字符串所以需要7个’-’。最后校验堆栈中的保存

④ 截取出的字符串对应应全为数字

返回

 

中间一大段算法对输入的keysplit数据进行解析,发现每一段数据只取4个字节,如果不足4字节则补0x0(在校验时发现点击按钮后有时成功有时失败不知道是手机问题还是这段代码的问题感觉像这段代码应该是设置为固定每段数据都为4字节),算法流程参照

脚本代码。最后获取到4个变量值

 

开始判断是标准or进阶

标准

code进行base64解码

解码判断解码出的数据长度是否等于0x10,因此BASE64字符串长度为24个字节,最后两字节==

base64了一部分修改了,一个是修改了转换表"OPWvYny#Nopz0$HI34QRSG@dJKq7fghD9Zi*kAB8rsFu56L&Ca^2tTUVEewxlm+/=",还有就是对转换表获取的值进行((a1 >> 4) ^ a1) & 0xff

最后获取到2个变量值。

 

 

以上判断完成后都会开始进入is_tangent函数


Ida查看x86_64的动态库直接看出该函数的作用,稍微理一下公式对应为:

a1a6^2 + (a2 – a4) * a6 + a3 - a5 = 0

(a2-a4)^2 -4a1(a3-a5) = 0

 

居然是抛物线公式,动态调试了一下确定了未知数对应为x = a4,y = a5,再加上抛物线的原理,b^2 – 4ac = 0切点对应为(-b/2a0解出x那么y = a1a6^2 + (a2 – a4) * a6 + a3.


分享到:
踩0 赞0

收藏

上一篇:【答案推荐】预赛PC标准版

下一篇:【答案推荐】预赛PC进阶版

相关阅读
最新评论
引用 Nexus 2017-8-17 09:45
split的算法能否再详细一点?

查看全部评论(1)

B Color Image Link Quote Code Smilies

发表评论

top 问题反馈

返回顶部