抖音xogrgon、device_id、xlog

冬晨夕阳 2020-12-10 20:05:23 12514

本文仅提供思路,以学习为目标,分析下目前抖音算法的解决方法。

xgorgon简介

xgorgon是APP接口中请求时需要携带的加密参数,每次动态生成。

xgorgon算法在libcms.so中。

xgorgon目前分为xg0306,xg0401,xg0404,xg0408等版本。

目前xg0306相对于04的风控更容易获取数据。

xgorgon生成

可以通过hook框架进行调用,比如xposed 和 unidbg。

xposed-hook具体思路

下载完apk之后,使用 andriodkiller 进行反编译
全局搜索 x-gorgon关键字(13版本之后不可用)

在这里插入图片描述

localHashMap.put(“X-Gorgon”, com.ss.a.b.a.c(com.ss.sys.ces.a.leviathan(i, com.ss.a.b.a.b(paramString.toString()))));

img

可以看到 xgorgon 是经过这些个方法生成的。

leviathan 是Native方法,在so文件中。
so文件混淆非常复杂不建议去逆向,可以通过编写 hook 脚本通过 xpostd 调用该方法。

import de.robv.android.xposed.callbacks.XC_LoadPackage;

    public byte[] hk_leviathan(int i,int time, byte[] s){
        return (byte[]) XposedHelpers.callStaticMethod(XposedHelpers.findClass("com.ss.sys.ces.a", lpparam classLoader), "" +
                "" +
                "", i, time, s);
    }

本地搭建服务

然后可以搭本地服务,其他的参数也是相同的做法。

    public NanoHTTPD.Response serve(NanoHTTPD.IHTTPSession session) {
        String msg = "";
        Map<String, String> parms = session.getParms();
        if (parms.get("url") == null && parms.get("formdata") == null) {
            String msg2 = msg + "<html><body><h1>Aweme Server</h1>\n";
            msg = msg2 + "<form action'?' 'method='get'>\n  URL: <input type='text' name='url'><br>\n  FORMDATA: <input type='text' name='formdata'><br>\n  <input type='submit' value='提交'>\n</form>";
        } else {
            try {
                String url = URLDecoder.decode(parms.get("url"), "utf-8");
                String formdata = URLDecoder.decode(parms.get("formdata"), "utf-8");
                msg = msg + get_device(url, formdata);
            } catch (Exception e) {
                XposedBridge.log(e.toString());
            }
        }
        return newFixedLengthResponse(msg);
    }

案例: https://blog.csdn.net/weixin_43582101/article/details/108012579

抖音device_id设备注册

device_id简介

device_id是设备号,在请求时需要携带的身份信息,标示了当前手机的ID。抖音会基于设备号做一系列的风控。

设备号和xgorgon及cookie都是请求数据的关键

device_id生成

和上面思路相同,先找到在哪个so文件中,在libEncryptor.so

然后找到注册方法,通过hook调用。

unidbg-hook具体思路

unidbg 是一个标准的 java 项目。基于 unicorn 的逆向工具,可以调用安卓的 so 文件。
github:https://github.com/zhkl0228/unidbg

载入unidbg的安卓虚拟机,即可调用 libEncryptor.so 中的方法:"ttEncrypt([BI)[B"。


public class TTEncryptUtils
{
  private final AndroidEmulator emulator;
  private final VM vm;
  private final Module module;
  private final DvmClass TTEncryptUtils;
  private final boolean logging;

  public static byte[] startTTEncypt(String filePath, String postData) {
    TTEncryptUtils utils = new TTEncryptUtils(filePath, true);
    byte[] data = utils.ttEncrypt(postData);
    Inspector.inspect(data, "ttEncrypt");
    try {
      utils.destroy();
    } catch (IOException e) {
      e.printStackTrace();
    } 
    return data;
  }

  public TTEncryptUtils(String filePath, boolean logging) {
    this.logging = logging;

    this.emulator = (AndroidEmulator)new AndroidARMEmulator("com.douyin.lx.did");
    Memory memory = this.emulator.getMemory();
    memory.setLibraryResolver((LibraryResolver)new AndroidResolver(23, new String[0]));

    this.vm = this.emulator.createDalvikVM(null);
    this.vm.setVerbose(logging);

    File file = getSoFile(filePath);
    DalvikModule dm = this.vm.loadLibrary(file, false);
    dm.callJNI_OnLoad((Emulator)this.emulator);
    this.module = dm.getModule();

    this.TTEncryptUtils = this.vm.resolveClass("com/bytedance/frameworks/encryptor/EncryptorUtil", new DvmClass[0]);
  }

当有了xgorgon和设备id之后,就可以完成很多数据采集工作了。像用户视频、粉丝数据、评论数据、搜索数据等。

xlog

xlog是抖音算法中的一个,具体的作用是对于设备信息的风控,xlog在本地获取到设备的状态,比如设备型号、内存信息、手机号、是否是模拟器、是否安装了xposed等等一系列环境监测。

如果只是为了采集数据,就不需要来关注xlog的问题了。xlog对于设备注册之后的激活其实无关紧要。但是需要去协议完成一些操作的时候,还是需要过了风控的。

xlog.snssdk.com/v2/ ,v2代表了xlog的版本,目前应该还是以v2为主。

解决方法其实还是可以像上面两种一样,通过hook调用来实现,但是效果一般,毕竟除了xlog还有其他环境监测的算法,比如applog等


每个版本的抖音算法不尽相同,掌握了正确的方法才能实现算法。

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 76 9 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
冬晨夕阳
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区