赞
踩
该文章主要提供交流学习使用。严禁用于商业用途,否则由此产生一切后果与作者无关,如有侵权请联系作者进行删除。
某东视频发布h5st 4.7.3
一. 初探
图1
图2
图3
1.全局搜索h5st打上断点找到赋值的地方。
2.发现是t.sign(r)的异步函数生成出来的,r的值一个json,字段分别是appid,body,client,functionId,其中body是加密的。往上看发现加密方式SHA256标准加密。
3.t.sign方法跟进去图3,发现l=new window.ParamsSignMain构造了函数。然后调用sign的方法传入上面的json最后生成了h5st。
4.最后l.sign单步跟进去发现又是vmp。。。。
二. 切入点
1.日志断点把有方法调用的都打上。
2.分析第一遍日志,发现有部分结果出来了,但是不知道生成过程,方法点进去继续打断点,后面都是类似操作。
3.可以看到最后的结果总共有八部分拼接而成。直接从头往下分析一一找出来。
3.长tk开头是最后结果的第八部分。用的AES加密,key是_M6Y?dvfN40VMF[X,iv是0102030405060708
加密内容是fp第二部分,fp是随机生成的可以固定,版本号和一些校验的值,p2的值是cookie中的pin。
ps:这边的AES加密是魔改的不是标准算法。
4.生成一个时间戳第七部分,在调用方法传入时间戳和格式生成第一部分。
ps:request_algo这个接口拿到token,rd和加密方式。加密方式是动态的有md5,HmacMD5,HmacSHA512等
token是第四部分
5.用test方法传入token,fp,上面生成的时间+78,appid,要求的加密方式生成字符串1,然后在把最早传进来的json转成特定的字符串2,在用m.HMAC.init(e,字符串2).finalize(字符串1)生成第五部分
6.最后把八个部分拼接出来。
三. 总结
1.时间戳转换
2.fp的随机生成,可以固定,generateVisitKey这方法生成
3.appId.每个接口对应一个id自己找下。
4.token.request_algo这个接口返回的内容带上fp去请求。
5.看上面第5的方法。
6.版本号,目前4.7
7.时间戳。
8.看上面第3的方法。
最后拼成h5st
四. 测试
成功200.
代码自取:微信公众号Bug攻防
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。