dy设备deviceid iid注册分析

这篇具有很好参考价值的文章主要介绍了dy设备deviceid iid注册分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

dy设备deviceid iid注册分析,快手 | 抖音,APP逆向项目,java,数据库,开发语言
很明显是一个post包,device_register
可以看到请求体加密了 那么 请求体是什么呢?

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

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

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


看下params参数:

cdid:

dy设备deviceid iid注册分析,快手 | 抖音,APP逆向项目,java,数据库,开发语言
dy设备deviceid iid注册分析,快手 | 抖音,APP逆向项目,java,数据库,开发语言

dy设备deviceid iid注册分析,快手 | 抖音,APP逆向项目,java,数据库,开发语言
只找到个从SharedPreferences xml拿,没有就uuid;

openudid:

dy设备deviceid iid注册分析,快手 | 抖音,APP逆向项目,java,数据库,开发语言


x_ss_stub:

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

dy设备deviceid iid注册分析,快手 | 抖音,APP逆向项目,java,数据库,开发语言


搜出来个这玩意,兄弟们想想这是干啥,注册,激活。。
dy设备deviceid iid注册分析,快手 | 抖音,APP逆向项目,java,数据库,开发语言

ttencrypt:

搜一下:/service/2/device_register/

dy设备deviceid iid注册分析,快手 | 抖音,APP逆向项目,java,数据库,开发语言

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;
        }
    }

可以看到整个注册这个接口的流程;
dy设备deviceid iid注册分析,快手 | 抖音,APP逆向项目,java,数据库,开发语言
这一段代码是核心,看到是发请求去了;

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: 确实没啥东西;
dy设备deviceid iid注册分析,快手 | 抖音,APP逆向项目,java,数据库,开发语言

sendEncryptLog:
dy设备deviceid iid注册分析,快手 | 抖音,APP逆向项目,java,数据库,开发语言
dy设备deviceid iid注册分析,快手 | 抖音,APP逆向项目,java,数据库,开发语言
如果包含str.contains(“/service/2/app_log/”)就去走ttEncrypt 加密,目前走else
dy设备deviceid iid注册分析,快手 | 抖音,APP逆向项目,java,数据库,开发语言
else: 也是压缩 ttEncrypt 加密
dy设备deviceid iid注册分析,快手 | 抖音,APP逆向项目,java,数据库,开发语言

dy设备deviceid iid注册分析,快手 | 抖音,APP逆向项目,java,数据库,开发语言

dy设备deviceid iid注册分析,快手 | 抖音,APP逆向项目,java,数据库,开发语言

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

我们在看下,整体接口:
dy设备deviceid iid注册分析,快手 | 抖音,APP逆向项目,java,数据库,开发语言
看到确实是发了很多接口,注册,激活,日志包等等;而且必须是六神注册,密文注册,这样设备才可用;

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

为了权重更好,甚至注册完之后还需要发一些日志包,过一些验证码,提高设备权重;文章来源地址https://www.toymoban.com/news/detail-665548.html

到了这里,关于dy设备deviceid iid注册分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 中国青年报APP设备注册

    Authorization: Bearer xxxxxeyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 X-Request-Id : 32da7b1b-a858-3140-8f32-b21ec43c109a 主要解决这两个参数的生成算法。 主页栏目列表接口: https://i.cyol.com/peony/v1/group?module_name=hometype=navchannel=28Dga1xp title=温暖的BaoBao 栏目下 有很多新闻如下: 接口:https://i.cyol.com/peony/v1/c

    2024年02月16日
    浏览(16)
  • 某果app逆向分析

    分析流程: App-Signature: package com.p330tt.sdk.http.Interceptor; /* renamed from: c */ public MapString, String m20821c(b0 b0Var) throws IOException { package p399la; /* renamed from: la.a / / compiled from: DataController */ public class DataController { /* renamed from: b */ public String m20884b(int i, String str, String str2) { return this.f1502

    2024年02月06日
    浏览(25)
  • 米斗APP逆向分析

    该app难点就是个360数字壳 : com.touchtv.midou 直接脱壳处理,脱完壳分析dex: package com.touchtv.internetSDK.network; 时间戳 ,md5 ,64se64 , 还有请求的url ,参数等做了一些操作。 我们重点看下:\\\"X-ITOUCHTV-Ca-Signature“ 走了一个r方法: =======判断x(str) 其除了请求中/baoliaoservice,则秘钥为:

    2024年02月12日
    浏览(25)
  • xx音乐app逆向分析

    目标 看一下评论的请求 抓包 这里使用httpcanary 请求包如下 参数分析 首先看看变化的参数 结果如下 clienttime是时间戳,那么只要知道key是怎么来的就行了 反编译apk 直接用jadx反编译,使用最新版本的可以不用内存大小。 接着就要看看是不是在java层。首先搜索show_admin_tags试试

    2024年02月10日
    浏览(33)
  • 某嘀大厂APP逆向分析

    sign解密,为header及data中的key-value拼接,并进行前后和盐值拼接,进行MD5加密; 本章记录定位的算法位置,方便后续观看; demo:

    2024年02月16日
    浏览(27)
  • 对某数藏app逆向安全分析

    目录 前言 分析 加密参数分析 webview调试 1.webviewdebughook调试 2.webviewpp调试 源码静态分析 x-request-id x-token sign: web端调试,逆向 uniapp调试分析 流程分析 尝试主动调用 广告(不喜忽略) 结语 昨晚我群里有个老哥在问移动端滑块怎么分析 因为大多app端的滑块都是加载在webview上的

    2024年02月06日
    浏览(26)
  • 某安全对抗行走APP逆向分析

    https://api5.xxxx.com/xxx-rest-service/message/fun_getnearby 看一下参数: opentime:时间戳 reqdata:base64编码 sign 未知,需要解密

    2024年02月07日
    浏览(31)
  • 某Flutter-APP逆向分析

    图例: Flutter 打包后的so文件所在位置 使用IDA打开 libflutter.so文件,在 Srings window中搜索 ssl_server字符串,通过交互引用,可以查找到具体的引用函数,如下所示: 主要思路:Flutter框架通过中间人proxy无法拦截到数据包,需绕过其对证书绑定的判断。通过对libflut

    2024年02月13日
    浏览(25)
  • Android APP逆向分析工具和方法汇总

    受益于移动设备的广泛普及,移动应用近年来得到了蓬勃发展。基于移动设备集成的各类传感器,众多功能丰富的移动应用被开发出来,聚集了大量高价值用户隐私数据,包括用户身份信息、地理位置信息、账户资料信息等。用户在享受移动应用带来便利的同时,其隐私安全

    2024年02月12日
    浏览(37)
  • uniapp:蓝牙设备ios与安卓端deviceId不一致问题及ios端获取蓝牙mac地址方法

    在uniapp开发项目中,主要是指APP端,使用API接口: uni.getBluetoothDevices 或者 uni.onBluetoothDeviceFound 查找到的蓝牙设备数据里deviceId值不一样: 在安卓中deviceId即mac地址 在ios中deviceId即uuid 如何在ios端也能获取到mac地址? 通常情况下,蓝牙设备必定是有独一无二的mac地址,只是在

    2024年02月09日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包