发布于:2017-8-3 10:00 | 123693次阅读 作者: 管理员 | 原作者: 李沛然 | 来自: 原创
感谢android组李沛然分享解答过程。 传入key、code、mode;
j__ZN9CRegCheck18is_user_name_legalERSs 检查参数合法性: ① Key长度必须为0x27 ② 将key按字节与0x20orr ③ Split: 对字符串以“-”截取,需要截取出0x20/4个字符串,所以需要7个’-’。最后校验堆栈中的保存值。 ④ 截取出的字符串对应应全为数字 返回
中间一大段算法对输入的key的split数据进行解析,发现每一段数据只取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/2a,0),解出x,那么y = a1a6^2 + (a2 – a4) * a6 + a3. |
最新评论
查看全部评论(1)
发表评论