经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Android » 查看文章
5.分析snkrs的Android的DeviceID生产规则
来源:cnblogs  作者:Code老司机  时间:2019/11/4 8:32:17  对本文有异议

分析Android的DeviceID生产

前面已经把web端的分析了一些,要想实现其实容易也难,容易是规则很容易,难是时间生成控制很难,我之前大概花了一周时间分析和梳理,然后行为测试,之前我已经讲过canvas中的fp生产,但是怎么生产唯一的canvas base64,这个就要知道webgl了,具体我不阐述。下面我实现后的一些函数结构,大家可以参考

协议

授权协议:只允许研究、学习目的的分享、使用、修改,不允许任何商业用途。转载请注明出处,感谢。

生产出来的函数结构

2019-11-01-16-49-32

本文主要讲android端的deviceId生产规则,在一些请求的时候会提交这样的阐述,这是android端,ios端类似,只是加密算法不一致而已,我也分析过了。
2019-11-01-16-51-43

在android端实现,大概是通过aes加密,android端aeskey如下

  1. //aes
  2. public static aesKey = Buffer.from([
  3. 16,
  4. -59,
  5. 20,
  6. -5,
  7. -54,
  8. -85,
  9. 110,
  10. 61,
  11. -51,
  12. -99,
  13. 70,
  14. -78,
  15. 11,
  16. -44,
  17. 3,
  18. 5,
  19. -120,
  20. 58,
  21. -14,
  22. 74,
  23. 13,
  24. -122,
  25. 35,
  26. 120,
  27. 14,
  28. -60,
  29. 67,
  30. 73,
  31. -58,
  32. -90,
  33. 42,
  34. 112,
  35. ]);

解密算法

如果我们解密aes后其实会得到这样一个对象数据,对象数据拆分,其实就是0500keylenkeylen 大概是这的格式,每次上传deviceId,会有一个时间戳,大概算法如下

2019-11-01-16-54-48

  1. /**
  2. * 获取客户端时间
  3. */
  4. public static getClientTime(): string {
  5. const date = new Date();
  6. let v = `${date.getUTCFullYear()} ${(date.getUTCMonth() + 1).toString().padStart(2, '0')} ${date.getUTCDate().toString().padStart(2, '0')} `;
  7. v += `${date.getUTCHours().toString().padStart(2, '0')}:`;
  8. v += `${date.getUTCMinutes().toString().padStart(2, '0')}:${date.getUTCSeconds().toString().padStart(2, '0')}.`;
  9. v += `${date.getUTCMilliseconds()}`;
  10. return v;
  11. }

反序列化函数大概长这样

  1. /**
  2. * 反序列化参数
  3. * @param str
  4. */
  5. public static deSerializationInfo(str: string): any {
  6. const map: any = {};
  7. let v = str.substring(4, str.length - 4); //0500
  8. const head = v.substring(0, 4); //头部
  9. const mapLen = parseInt(head, 16);
  10. v = v.slice(4);
  11. for (let i = 0; i < mapLen; i++) {
  12. //key
  13. let keyHead = v.substring(0, 4); //头部
  14. v = v.slice(4);
  15. let len = parseInt(keyHead, 16);
  16. const key = v.substring(0, len);
  17. v = v.slice(len);
  18. //body
  19. keyHead = v.substring(0, 4); //头部
  20. v = v.slice(4);
  21. len = parseInt(keyHead, 16);
  22. const val = v.substring(0, len);
  23. v = v.slice(len);
  24. map[key] = val;
  25. }
  26. return map;
  27. }

2019-11-01-16-58-27

如果自己实现算法后,尽量要进行顺向加密和逆向解密,这样保证数据是完全没问题的,文本就点播到这里,后面可能会写android端akamai的生产规则,android端代码分析比较烦,生产规则也比较复杂,涉及到非对称加密,所以验证起来也比较难。目前这个akamai 的bot sdk大概完工了2个部分,一个部分是web端的,一个是android端的,后续我会开源一个球鞋监控系统和公众号,大家可以关注公众号接收最新的球鞋通知,nice app通过手动绑定账号nice帮你抢snkrs鞋,他们真聪明,账号钱也省了,出问题也不管自己的事,对吧,还可以测试一波自己的bot系统是否靠谱,厉害厉害。

博客: https://github.com/zhaojunlike

原文链接:http://www.cnblogs.com/xiaojunzi/p/11778112.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号