dy设备deviceid iid注册分析

news2024/11/18 17:32:15

清楚缓存,重新打开app, 点击同意按钮,会触发设备注册;

在这里插入图片描述
很明显是一个post包,device_register
可以看到请求体加密了 那么 请求体是什么呢?

很老版本思路:都是直接明文注册
较老版本思路:在反编译后请求体通过一个bool来判断,是否走,ttencrypt;
这个地方可以hook明文也可以直接修改bool值,让抓包直接抓到明文;

正常情况下,是将请求体压缩后,走ttencrypt,进行密文注册;

我们接着往下走,看新版是否有变化;


看下params参数:

cdid:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
只找到个从SharedPreferences xml拿,没有就uuid;

openudid:

在这里插入图片描述


x_ss_stub:

这个值就很普通了,java层,post包的时候会把data转成字符串进行md5的一个值;

在这里插入图片描述


搜出来个这玩意,兄弟们想想这是干啥,注册,激活。。
在这里插入图片描述

ttencrypt:

搜一下:/service/2/device_register/

在这里插入图片描述

private boolean LIZ(String str, JSONObject jSONObject) {
        String[] strArr;
        boolean z;
        Throwable th;
        ChangeQuickRedirect changeQuickRedirect;
        String str2;
        ChangeQuickRedirect changeQuickRedirect2;
        ChangeQuickRedirect changeQuickRedirect3;
        l4Z l4z;
        String C;
        boolean z2;
        ChangeQuickRedirect changeQuickRedirect4 = LIZ;
        if (PatchProxy.isEnable(changeQuickRedirect4)) {
            PatchProxyResult proxy = PatchProxy.proxy(new Object[]{str, jSONObject}, this, changeQuickRedirect4, false, 5);
            if (proxy.isSupported) {
                return ((Boolean) proxy.result).booleanValue();
            }
        }
        try {
            byte[] bytes = str.getBytes("UTF-8");
            System.currentTimeMillis();
            ChangeQuickRedirect changeQuickRedirect5 = l5V.LIZ;
            if (PatchProxy.isEnable(changeQuickRedirect5)) {
                PatchProxyResult proxy2 = PatchProxy.proxy(PatchProxy.getEmptyArgs(), null, changeQuickRedirect5, true, 1);
                if (proxy2.isSupported) {
                    strArr = (String[]) proxy2.result;
                    if (strArr == null) {
                        for (String str3 : strArr) {
                            byte[] bArr = (byte[]) bytes.clone();
                            if (!StringUtils.isEmpty(str3)) {
                                Logger.debug();
                                if (TextUtils.isEmpty(jSONObject.optString("device_id")) || TextUtils.isEmpty(jSONObject.optString("install_id"))) {
                                    z = true;
                                } else {
                                    z = false;
                                }
                                try {
                                    ChangeQuickRedirect changeQuickRedirect6 = LIZ;
                                    if (PatchProxy.isEnable(changeQuickRedirect6)) {
                                        PatchProxyResult proxy3 = PatchProxy.proxy(PatchProxy.getEmptyArgs(), this, changeQuickRedirect6, false, 7);
                                        if (proxy3.isSupported) {
                                            z2 = ((Boolean) proxy3.result).booleanValue();
                                        }
                                    }
                                    ChangeQuickRedirect changeQuickRedirect7 = l5V.LIZ;
                                    if (PatchProxy.isEnable(changeQuickRedirect7)) {
                                        PatchProxyResult proxy4 = PatchProxy.proxy(PatchProxy.getEmptyArgs(), null, changeQuickRedirect7, true, 4);
                                        if (proxy4.isSupported) {
                                            z2 = ((Boolean) proxy4.result).booleanValue();
                                        }
                                    }
                                    if (l5V.LIZJ != null) {
                                        z2 = l5V.LIZJ.LIZ();
                                    }
                                    try {
                                        if (str3.indexOf(63) < 0) {
                                            new StringBuilder();
                                            C = O.C(str3, "?");
                                        } else {
                                            new StringBuilder();
                                            C = O.C(str3, "&");
                                        }
                                        str2 = NetUtil.sendEncryptLog(C, bArr, this.LIZJ.LJIILL, false, (String[]) null, (Map) null, (String) null, z, false);
                                    } catch (RuntimeException unused) {
                                        l4Q.LIZ(Monitor.Key.register, Monitor.State.f_to_bytes);
                                        try {
                                            str2 = NetUtil.doPost(str3, bytes, true, "application/json; charset=utf-8", false, (Map) null, z, false);
                                            String C2 = O.C("device_register response: ", str2);
                                            changeQuickRedirect2 = l4T.LIZ;
                                            if (PatchProxy.isEnable(changeQuickRedirect2)) {
                                            }
                                            changeQuickRedirect3 = l4T.LIZ;
                                            if (PatchProxy.isEnable(changeQuickRedirect3)) {
                                            }
                                            l4z = l4T.LIZIZ;
                                            if (l4z != null) {
                                            }
                                            if (str2 != null) {
                                            }
                                            l4Q.LIZ(Monitor.Key.register, Monitor.State.f_resp_error);
                                        } catch (Throwable th2) {
                                            th = th2;
                                            l4Q.LIZ(Monitor.Key.register, Monitor.State.f_net);
                                            l5O l5o = this.LIZJ;
                                            changeQuickRedirect = l5O.LIZIZ;
                                            if (PatchProxy.isEnable(changeQuickRedirect)) {
                                            }
                                            if (th instanceof CommonHttpException) {
                                            }
                                        }
                                    }
                                    String C22 = O.C("device_register response: ", str2);
                                    changeQuickRedirect2 = l4T.LIZ;
                                    if (PatchProxy.isEnable(changeQuickRedirect2) || !PatchProxy.proxy(new Object[]{C22}, null, changeQuickRedirect2, true, 1).isSupported) {
                                        changeQuickRedirect3 = l4T.LIZ;
                                        if (PatchProxy.isEnable(changeQuickRedirect3)) {
                                            try {
                                            } catch (Throwable th3) {
                                                th = th3;
                                                l4Q.LIZ(Monitor.Key.register, Monitor.State.f_net);
                                                l5O l5o2 = this.LIZJ;
                                                changeQuickRedirect = l5O.LIZIZ;
                                                if (PatchProxy.isEnable(changeQuickRedirect)) {
                                                    PatchProxyResult proxy5 = PatchProxy.proxy(new Object[]{th}, l5o2, changeQuickRedirect, false, 21);
                                                    if (proxy5.isSupported) {
                                                        if (!((Boolean) proxy5.result).booleanValue()) {
                                                            throw th;
                                                        }
                                                    }
                                                }
                                                if (th instanceof CommonHttpException) {
                                                    int responseCode = ((CommonHttpException) th).getResponseCode();
                                                    if (l5o2.LJJIIJ) {
                                                        continue;
                                                    } else if (responseCode < 200) {
                                                        continue;
                                                    } else if (responseCode == 301) {
                                                        continue;
                                                    } else if (responseCode != 302) {
                                                        throw th;
                                                    }
                                                } else {
                                                    continue;
                                                }
                                            }
                                        }
                                        l4z = l4T.LIZIZ;
                                        if (l4z != null) {
                                            l4z.LIZ(C22, null);
                                        }
                                    }
                                    if (str2 != null || str2.length() == 0) {
                                        l4Q.LIZ(Monitor.Key.register, Monitor.State.f_resp_error);
                                    } else if (LIZ(new JSONObject(str2))) {
                                        return true;
                                    }
                                } catch (Throwable th4) {
                                    th = th4;
                                    l4Q.LIZ(Monitor.Key.register, Monitor.State.f_net);
                                    l5O l5o22 = this.LIZJ;
                                    changeQuickRedirect = l5O.LIZIZ;
                                    if (PatchProxy.isEnable(changeQuickRedirect)) {
                                    }
                                    if (th instanceof CommonHttpException) {
                                    }
                                }
                            }
                        }
                        return false;
                    }
                    throw new IllegalArgumentException("url is null");
                }
            }
            strArr = (l5V.LIZIZ == null || l5V.LIZIZ.length <= 0 || StringUtils.isEmpty(l5V.LIZIZ[0])) ? new String[]{O.C("https://", l5V.LIZLLL, "/service/2/device_register/"), O.C("https://", l5V.LIZLLL, "/service/2/device_register/")} : l5V.LIZIZ;
            if (strArr == null) {
            }
        } catch (Throwable unused2) {
            l4Q.LIZ(Monitor.Key.register, Monitor.State.f_exception);
            return false;
        }
    }

可以看到整个注册这个接口的流程;
在这里插入图片描述
这一段代码是核心,看到是发请求去了;

import com.ss.android.common.applog.NetUtil;

str2 = NetUtil.sendEncryptLog(C, bArr, this.LIZJ.LJIILL, false, (String[]) null, (Map) null, (String) null, z, false);

str2 = NetUtil.doPost(str3, bytes, true, "application/json; charset=utf-8", false, (Map) null, z, false);

这个时候,我们看出来已经和老版本有区别了,没有一个bool值来控制是否请求加密,而是直接去加密,若报错才会进行明文注册; 这是一点不同的地方;

doPost: 确实没啥东西;
在这里插入图片描述

sendEncryptLog:
在这里插入图片描述
在这里插入图片描述
如果包含str.contains(“/service/2/app_log/”)就去走ttEncrypt 加密,目前走else
在这里插入图片描述
else: 也是压缩 ttEncrypt 加密
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

ttEncrypt 该加密方式so层,libEncryptor.so

我们在看下,整体接口:
在这里插入图片描述
看到确实是发了很多接口,注册,激活,日志包等等;而且必须是六神注册,密文注册,这样设备才可用;

很明显的,device_register,app_alert ,app_log等等

为了权重更好,甚至注册完之后还需要发一些日志包,过一些验证码,提高设备权重;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/791487.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二、SQL-5.DQL-8).案例练习

1、查询年龄为20,21,22,23岁的员工信息 select * from emp where age in(20, 21, 22, 23) and gender 女; 2、查询性别为男&#xff0c;并且年龄在20-40岁&#xff08;含&#xff09;以内的姓名为三个字的员工 select * from emp where gender 男 && age between 2…

如何从任何地方远程解决电脑问题?

​如何远程解决电脑问题&#xff1f; “嗨&#xff01;我有一台Windows 10家用电脑。我外出旅行&#xff0c;但我的家人告诉我我的电脑有一段时间无法正常工作。我该如何远程检查电脑并解决相应的问题&#xff1f;提前谢谢&#xff01;” 您是否正在寻找远程解决电…

重庆市北斗新型智慧城市政府项目

技术栈&#xff1a;使用vue2JavaScriptElementUIvuexaxiosmapboxcesium 项目描述&#xff1a;重庆市北斗新型智慧城市政府项目是基于千寻孪界开发的一款智慧城市项目&#xff0c;包含车辆实时位置定位&#xff0c;智能设备的报警&#xff0c;基础设施的部设等等功能 工作内容&a…

javascript 7种继承-- 寄生式继承分析(5)

文章目录 概要继承的进化史技术名词解释寄生式继承案列分析源代码解析效果图小结 概要 这阵子在整理JS的7种继承方式&#xff0c;发现很多文章跟视频&#xff0c;讲解后都不能让自己理解清晰&#xff0c;索性自己记录一下&#xff0c;希望个位发表需要修改的意见&#xff0c;共…

C++多线程编程(第一章 多线程基本使用)

C 11&#xff1b; C 14; C 17; C 20&#xff1b; 1、为什么要多线程 任务分解 耗时的操作&#xff0c;任务分解&#xff0c;实时响应 数据分解 充分利用多核CPU处理数据 数据流分解 读写分离&#xff0c;解耦合设计 2、相关代码 1、初步&#xff1a; join(),detach() …

【数学建模】时间序列分析

文章目录 1. 条件2. 模型分类3. SPSS处理时间序列 1. 条件 1.使用于具有时间、数值两种要素 2.数据具有周期性可以使用时间序列分解 2. 模型分类 叠加模型【YTSCI】 序列的季节波动变化越来越大&#xff0c;反映变动之间的关系发生变化乘积序列【YTSC*I】 时间序列波动保持恒…

JavaSwing+MySQL的学生选课系统

点击以下链接获取源码&#xff1a; https://download.csdn.net/download/qq_64505944/88101629?spm1001.2014.3001.5503 Jdk&#xff1a;1.8 MySQL&#xff1a;5.7 功能&#xff1a;可以进行选课与查看学生基本资料 在这里插入图片描述

Jmeter GET 请求 参数为 Json 串且参数中存在变量的转化

目录 前言&#xff1a; 1.在 HTTP 请求下添加 BeanShell PreProcessor 前置处理器&#xff1a; 2.在 BeanShell PreProcessor 的实现&#xff1a; 3.在 HTTP 请求中的使用方式&#xff1a; 4.参数化的数据方式&#xff1a; 5.请求结果&#xff1a; 前言&#xff1a; 在 A…

网络流量监视器vnStat

什么是 vnStat &#xff1f; vnStat 是一个网络流量监视器&#xff0c;它使用内核提供的网络接口统计信息作为信息源。这意味着 vnStat 实际上不会嗅探任何流量&#xff0c;并且无论网络流量速率如何&#xff0c;都可以确保系统资源的轻度使用。 安装 在群晖上以 Docker 方式安…

Hive内部表和外部表

表类型详解 表分类 在Hive中,表类型主要分为两种 第一种&#xff1a;内部表 也叫管理表表目录会创建在集群上的{hive.metastore.warehouse.dir}下的相应的库对应的目录中。默认创建的表就是内部表 第二种&#xff1a;外部表 外部表需要使用关键字"external"&#xff…

勘探开发人工智能应用:地震层位解释

1 地震层位解释 层位解释是地震构造解释的重要内容&#xff0c;是根据目标层位的地震反射特征如振幅、相位、形态、连续性、特征组合等信息在地震数据体上进行追踪解释获得地震层位数据的方法。 1.1 地震信号、层位与断层 图1.1 所示为地震信号采集的过程&#xff0c;地面炮…

Sip网络音频对讲广播模块, sip网络寻呼话筒音频模块

Sip网络音频对讲广播模块&#xff0c; sip网络寻呼话筒音频模块 一、模块介绍 SV-2101VP和 SV-2103VP网络音频对讲广播模块 是一款通用的独立SIP音频功能模块&#xff0c;可以轻松地嵌入到OEM产品中。该模块对来自网络的SIP协议及RTP音频流进行编解码。 该模块支持多种网络协议…

ks webdid 滑块注册

web和app其实都一样&#xff0c;主要是针对于设备进行风控&#xff0c;web设备叫webdid; webdid注册出来&#xff0c;过了ks滑块激活&#xff0c;测试了主页&#xff0c;评论等接口都可以跑&#xff0c;平均也就2s注册一个&#xff0c;如果开并发那就更快了&#xff1b; 不过一…

React Native 0.72 版本,带来诸多更新

经过漫长的等待,React Native 终于迎来了0.72 版本,此处版本带来了Metro重要的功能更新、性能优化、开发人员体验的改进以及其他一些重要的变化。我们可以从下面的链接中获取此次版本更新的内容:0.72更新内容 一、Metro 新功能 众所周知,Metro 是 React Native 默认的 Jav…

图像处理之hough圆形检测

hough检测原理 点击图像处理之Hough变换检测直线查看 下面直接描述检测圆形的方法 基于Hough变换的圆形检测方法 对于一个半径为 r r r&#xff0c;圆心为 &#xff08; a , b &#xff09; &#xff08;a,b&#xff09; &#xff08;a,b&#xff09;的圆&#xff0c;我们将…

模拟量采集S_ITR函数(信捷C语言FC)

模拟量采集和转换函数非常简单,这里不再介绍,想了解具体算法的可以查看下面博客文章: PLC模拟量输入 模拟量转换FC S_ITR_博途模拟量转换程序_RXXW_Dor的博客-CSDN博客模拟量采集、工业现场应用特别广泛、大部分传感器的测量值和输出信号都是线型关系,所以我们可以利用线性…

SpringBoot中定时任务开启多线程避免多任务堵塞

场景 SpringBoot中定时任务与异步定时任务的实现&#xff1a; SpringBoot中定时任务与异步定时任务的实现_霸道流氓气质的博客-CSDN博客 使用SpringBoot原生方式实现定时任务&#xff0c;已经开启多线程支持&#xff0c;以上是方式之一。 除此之外还可通过如下方式。 为什…

对话商汤王晓刚:“百模大战”下半场,如何才能突出重围?

点击关注 文 | 姚悦 今年最早发布的那批大模型&#xff0c;现在怎么样了&#xff1f; 近期&#xff0c;商汤科技宣布“商汤日日新SenseNova”大模型体系完成了第一次重大迭代。这距离其发布过去3个月时间。 “每天不断接到用户调用&#xff0c;收到建议反馈后&#xff0c;每隔…

Java开发基础系列(十二):集合对象(List接口)

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; Java开发基础系列(十二)&#xff1a;集合对象(List接口) ⏱️ 创作时间…

【技术】国标GB视频平台设备接入EasyCVR后,如何获取RTMP与RTSP视频流

安防视频监控平台EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力&#xff0c;比…