5.分析snkrs的Android的DeviceID生产规则
分析Android的DeviceID生产
前面已经把web端的分析了一些,要想实现其实容易也难,容易是规则很容易,难是时间生成控制很难,我之前大概花了一周时间分析和梳理,然后行为测试,之前我已经讲过canvas中的fp生产,但是怎么生产唯一的canvas base64,这个就要知道webgl了,具体我不阐述。下面我实现后的一些函数结构,大家可以参考
协议
授权协议:只允许研究、学习目的的分享、使用、修改,不允许任何商业用途。转载请注明出处,感谢。
生产出来的函数结构
本文主要讲android端的deviceId生产规则,在一些请求的时候会提交这样的阐述,这是android端,ios端类似,只是加密算法不一致而已,我也分析过了。
在android端实现,大概是通过aes加密,android端aeskey如下
//aes
public static aesKey = Buffer.from([
16,
-59,
20,
-5,
-54,
-85,
110,
61,
-51,
-99,
70,
-78,
11,
-44,
3,
5,
-120,
58,
-14,
74,
13,
-122,
35,
120,
14,
-60,
67,
73,
-58,
-90,
42,
112,
]);
解密算法
如果我们解密aes后其实会得到这样一个对象数据,对象数据拆分,其实就是0500keylenkeylen
大概是这的格式,每次上传deviceId,会有一个时间戳,大概算法如下
/**
* 获取客户端时间
*/
public static getClientTime(): string {
const date = new Date();
let v = `${date.getUTCFullYear()} ${(date.getUTCMonth() + 1).toString().padStart(2, '0')} ${date.getUTCDate().toString().padStart(2, '0')} `;
v += `${date.getUTCHours().toString().padStart(2, '0')}:`;
v += `${date.getUTCMinutes().toString().padStart(2, '0')}:${date.getUTCSeconds().toString().padStart(2, '0')}.`;
v += `${date.getUTCMilliseconds()}`;
return v;
}
反序列化函数大概长这样
/**
* 反序列化参数
* @param str
*/
public static deSerializationInfo(str: string): any {
const map: any = {};
let v = str.substring(4, str.length - 4); //0500
const head = v.substring(0, 4); //头部
const mapLen = parseInt(head, 16);
v = v.slice(4);
for (let i = 0; i < mapLen; i++) {
//key
let keyHead = v.substring(0, 4); //头部
v = v.slice(4);
let len = parseInt(keyHead, 16);
const key = v.substring(0, len);
v = v.slice(len);
//body
keyHead = v.substring(0, 4); //头部
v = v.slice(4);
len = parseInt(keyHead, 16);
const val = v.substring(0, len);
v = v.slice(len);
map[key] = val;
}
return map;
}
如果自己实现算法后,尽量要进行顺向加密和逆向解密,这样保证数据是完全没问题的,文本就点播到这里,后面可能会写android端akamai的生产规则,android端代码分析比较烦,生产规则也比较复杂,涉及到非对称加密,所以验证起来也比较难。目前这个akamai 的bot sdk大概完工了2个部分,一个部分是web端的,一个是android端的,后续我会开源一个球鞋监控系统和公众号,大家可以关注公众号接收最新的球鞋通知,nice
app通过手动绑定账号nice帮你抢snkrs鞋,他们真聪明,账号钱也省了,出问题也不管自己的事,对吧,还可以测试一波自己的bot系统是否靠谱,厉害厉害。
博客: https://github.com/zhaojunlike
5.分析snkrs的Android的DeviceID生产规则的更多相关文章
- Android内存机制分析1——了解Android堆和栈
//----------------------------------------------------------------------------------- Android内存机制分析1 ...
- Android:日常学习笔记(2)——分析第一个Android应用程序
Android:日常学习笔记(2)——分析第一个Android应用程序 Android项目结构 整体目录结构分析 说明: 除了APP目录外,其他目录都是自动生成的.APP目录的下的内容才是我们的工作重 ...
- arm上的参数列表传递的分析(以android为例)
1. Linux中可变列表实现的源码分析 查看Linux0.11的内核源代码,对va_list, va_start, va_arg 的实现如下: va_list的实现没有差别,chartypedef ...
- Android 核心分析之十三Android GWES之Android窗口管理
Android GWES之Android窗口管理1基本构架原理 Android的窗口管理是C/S模式的.Android中的Window是表示Top Level等顶级窗口的概念.DecorView是Wi ...
- Android核心分析 之十一Android GWES之消息系统
Android GWES之Android消息系统 ...
- 【转】Android内存机制分析1——了解Android堆和栈
昨天用Gallery做了一个图片浏览选择开机画面的功能,当我加载的图片多了就出现OOM问题.以前也出现过这个问题,那时候并没有深究.这次打算好好分析一下Android的内存机制. 因为我以前是做VC+ ...
- 安卓MonkeyRunner源码分析之与Android设备通讯方式
如前文<谁动了我的截图?--Monkeyrunner takeSnapshot方法源码跟踪分析>所述,本文主要会尝试描述android的自动化测试框架MonkeyRunner究竟是如何和目 ...
- Ztorg木马分析: 从Android root木马演变到短信吸血鬼
本月第二次,Google 从官方应用商店 Google Play 中移除了伪装成合法程序的恶意应用.被移除的应用都属于名叫 Ztorg 的 Android 恶意程序家族.目前为止,发现的几十个新的Zt ...
- Android 程序分析环境搭建-Android 9 -代码下载编译
Android 9 -代码下载编译 一,翻墙下载: 1.背景: 背景: 现在Android framework 开发的同学,整体在公司里面解一些无关痛痒的bug,对于Android framework ...
随机推荐
- java Mail如何发送邮件
1.应用场景:在系统需要发送与用户相关的消息时,而用户不在线,可以采取发送邮件的方式,使用户了解最新的系统情况 或者发送验证码等验证场景 2.实验环境 主要使用mail.jar和activation. ...
- 报表统计——java实现查询某年12个月数据,没数据补0
一般图表绘制例如echarts等,返回数据格式都大同小异.重点是利用sql或者java实现数据格式的转型,接下来是关键部分: 1.mapper层sql语句,返回统计好的月份与对应月份的数据. < ...
- Web前端开发的应用和前景——web 1.0到web 3.0
Web前端开发的应用和前景--web 1.0到web 3.0 Web1.0:(只读时代) 以静态.单向阅读为主,网站内信息可以直接和其他网站信息进行交互,能通过第三方信息平台同时对多家网站信息进行整合 ...
- Kafka 异步消息也会阻塞?记一次 Dubbo 频繁超时排查过程
线上某服务 A 调用服务 B 接口完成一次交易,一次晚上的生产变更之后,系统监控发现服务 B 接口频繁超时,后续甚至返回线程池耗尽错误 Thread pool is EXHAUSTED.因为服务 B ...
- ng service(服务)
ng service(服务) 创建服务命令:ng g service services/+服务名 使用服务的注意事项: 使用(services)服务需要在app.,module.ts(根模块)中引用并 ...
- Web应用程序并发问题处理的一点小经验
在web应用中,一个账户,会有N多个涉及到数字的字段.比如一个账户的金额,积分等.这些字段就涉及到增减的情况.如果是在测试环境下,靠程序员或者测试手动点击.一般是发现不了问题. 一旦上到正式环境下.有 ...
- UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 357: illegal multibyte sequence 错误解决方法(已解决)
今天在搭建数据驱动测试框架的时候遇到这个错误: 好在我英语水平还不错(也就六级水平吧),根据英文提示说是多字节数据顺序是非法的 顺着错误往上找发现 File "C:\Users\Mr雷的电脑 ...
- Rust入坑指南:核心概念
如果说前面的坑我们一直在用小铲子挖的话,那么今天的坑就是用挖掘机挖的. 今天要介绍的是Rust的一个核心概念:Ownership.全文将分为什么是Ownership以及Ownership的传递类型两部 ...
- 控制器向视图传参ModelAndView、Model和Map
ModelAndView类 ModelAndView在spring-webmvc-4.3.18.RELEASE.jar包下,当然其他版本也有,所在包如下 对于那些返回String等类型的处理方法,sp ...
- JVM Java字节码的角度分析switch的实现
目录 Java字节码的角度分析switch的实现 引子 前置知识 一个妥协而又枯燥的方案 switch的实现 回顾历史 字节码分析 其他实现方式? Java字节码的角度分析switch的实现 作者 k ...