开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 17027|回复: 26
收起左侧

[技术专题] 抖音 As Cp Mas 算法调用

[复制链接]
结帖率:100% (17/17)
发表于 2019-3-17 15:43:07 | 显示全部楼层 |阅读模式   四川省绵阳市
本帖最后由 秦天 于 2019-3-17 19:08 编辑

论坛没看见有人发,我来发吧~
抖音最近一直挺火,我也分析了以下这个APP。一开始我想逆出纯算法,无奈实力不允许。
在这分享一下Android Studio写APP调用抖音算法的实现。
首先逆向APP(   具体逆向方法过程就不详说了   )  找到 As Cp Mas 的位置
  1. //v2=Url/POST 中的ts参数   v0_2 = 是Url      v3_3是数组,Get/Post,格式为{"a","1","b","2"}       V1_2=Url/POST中的device_id参数
复制代码
  1. v1_2 = UserInfo.getUserInfo(v2, URLDecoder.decode(((String)v0_2)), v3_3, v1_2);
复制代码
  1. v6_1 = v1_2;
  2.          String[] v5_3 = v3_3;
  3.             if(!TextUtils.isEmpty(((CharSequence)v6_1))) {
  4.                 int v1_3 = v6_1.length();
  5.                 if(v1_3 % 2 == 0) {
  6.                     v2 = v1_3 >> 1;
  7.                     v3_2 = v6_1.substring(0, v2);
  8.                     com.ss.sys.ces.g.a v4_2 = com.ss.sys.ces.g.b.a(GlobalContext.getContext(), ((long)AwemeApplication.z().m()));
  9.                     v4_2.a(o.a());
  10.                     String v4_3 = com.ss.android.common.applog.l.a(v4_2.a(v3_2.getBytes()));
  11.                     v0 = (((String)v0_2)) + "&as=" + v3_2 + "&cp=" + v6_1.substring(v2, v1_3);
  12.                     return v0 + "&mas=" + v4_3;
  13.                 }
  14.                 v0 = (((String)v0_2)) + "&as=a1qwert123&cp=cbfhckdckkde1";
  15.                 f.a(v0, v5_3, v6_1, com.ss.android.common.applog.d.l(), ((long)v2));
  16.                 return v0;
  17.             }
复制代码

根据上面代码知道 加密代码是再 UserInfo.getUserInfo(int,String,String[],String)

getUserInfo 是一个 Native 方法   这个方法再Libcms.so中(别问我怎么知道的,过程有点长)


将这个UserInfo类全部复制到  Android Studio (注意路径,类名 得一致)
在 吧cms.so 复制到   Android Studio  写以下代码
UserInfo.setAppId(1128);
UserInfo.initUser("a3668f0afac72ca3f6c1697d29e0e1bb1fef4ab0285319b95ac39fa42c38d05f");
String Url = "https://iu-hl.snssdk.com/passport/auth/login/?retry_type=no_retry&mcc_mnc=46000&iid=65890761809&device_id=50321920862&ac=wifi&channel=update&aid=1128&app_name=aweme&version_code=530&version_name=5.3.0&device_platform=android&ssmix=a&device_type=mx5&device_brand=meizu&language=zh&os_api=22&os_version=5.1.1&uuid=865166026749633&openudid=d240410dcc715514&manifest_version_code=530&resolution=720*1280&dpi=240&update_version_code=5302&_rticket=1552476032695&ts=1552476031";

String[] arr2 = {"os_api","22","device_type","mx5","device_platform","android","ssmix","a","iid","65890761809","manifest_version_code","530","dpi","240","uuid","865166026749633","version_code","530","app_name","aweme","version_name","5.3.0","openudid","d240410dcc715514","device_id","50321920862","resolution","720*1280","os_version","5.1.1","language","zh","device_brand","meizu","ac","wifi","update_version_code","5302","aid","1128","channel","update","mcc_mnc","46000"};

String v0_4 = UserInfo.getUserInfo(1552476031, Url, arr2, "50321920862");
int v1_2 = v0_4.length();

if (v1_2 % 2 == 0) {
    String v2_2 = v0_4.substring(0, v1_2 >> 1);
    v0_4 = "as=" + v2_2 + "&cp=" + URLEncoder.encode(v0_4.substring(v1_2 >> 1, v1_2)) + "&mas=" + bytesToHex(com.ss.sys.ces.a.e(v2_2.getBytes()));
}
Log.e(Tag, v0_4);

cms.so,不光只注册了一个叫UserInfo的类,还有[com.ss.sys.ces.a][com.ss.sys.secuni.b.c]在 Android Studio 中创建这个路径以及类 将反编译之后的代码复制进来就可以了。
执行代码发现就得到了v0_4的值了。   把v0_4添加到Url后面即可

抖音的最新版 协议头多了[X-Gorgon][X-Khronos]这两个,缺一不可

X-Khronos  =  十位的 时间戳

Url        =    到大写 (MD5( Url))                         //   Url为有 as cp mas 的Url 也就是你即将提交的 URL   

X-SS-STUB  =     "00000000000000000000000000000000" //   协议头中的  X-SS-STUB  如果为空  用32个0表示

Cookie   =      到大写 (MD5(Cookies))            //   Cookies为你即将提交的Cookies

未知参数="00000000000000000000000000000000"        //  固定即可

X-Gorgon =  Url  + X-SS-STUB  +  Cookies  +  未知参数

X-Gorgon  =   com.ss.sys.ces.a.leviathan( X-Khronos , X-Gorgon )//加密

将得到的 X-Khronos   X-Gorgon 放在协议头就OK了

有一些请求 返回值是乱码的,比如  (https://xlog.snssdk.com/v2/r?os=0&ver=0.5.10.28&m=1&app_ver=.......)
将返回值到HEX 发现 只要是 01 开头的  都可以用 com.ss.sys.ces.a.d   解密   包括mas
提交数据到HEX 如果有      01 开头的 都可以用 com.ss.sys.ces.a.e                  加密   包括mas
现在你可以用  Android Studio 写个服务端。根据实际情况来调用加密了;

写的很草率,凑合着看吧~!


仅限学习交流,不可用作非法用途~





点评

新技能已get√   湖南省永州市  发表于 2019-3-28 08:40

评分

参与人数 2好评 +2 精币 +4 收起 理由
鐵憨憨 + 1 + 2 感谢分享,很给力!~
zxx120 + 1 + 2 新技能已get√

查看全部评分


结帖率:89% (8/9)
发表于 2020-3-7 15:11:54 | 显示全部楼层   福建省宁德市
复制别人的东西,记得写转载! 或写上不是原创的! 没会对你哦!
回复 支持 反对

使用道具 举报

结帖率:100% (4/4)
发表于 2019-8-13 12:06:24 | 显示全部楼层   山东省潍坊市
X-Gorgon 大佬 这个参数怎么解 没看明白
回复 支持 反对

使用道具 举报

结帖率:31% (5/16)

签到天数: 14 天

发表于 2019-4-16 15:13:56 | 显示全部楼层   重庆市重庆市
楼主也不指明版本,每个版本的混淆后类名都不一样的,抖音so层有反调用机制,这种方法未必可行
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)
发表于 2019-4-12 21:47:36 高大上手机用户 | 显示全部楼层   山东省济宁市
收抖音粉丝爬取协yi源码

点评

联系QQ:843114597   四川省成都市  发表于 2019-4-18 23:08
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)
发表于 2019-4-4 11:53:39 | 显示全部楼层   广西壮族自治区玉林市

感谢分享,收藏一下再看
回复 支持 反对

使用道具 举报

结帖率:78% (21/27)
发表于 2019-4-1 12:31:00 | 显示全部楼层   安徽省阜阳市
感谢分享,收藏一下再看
回复 支持 反对

使用道具 举报

结帖率:78% (21/27)
发表于 2019-3-31 13:18:21 | 显示全部楼层   安徽省阜阳市
感谢分享,收藏一下再看
回复 支持 反对

使用道具 举报

结帖率:67% (2/3)
发表于 2019-3-30 12:32:19 | 显示全部楼层   北京市北京市
感谢分享!!!!
回复 支持 反对

使用道具 举报

结帖率:78% (21/27)
发表于 2019-3-29 14:27:47 | 显示全部楼层   安徽省阜阳市
感谢分享,收藏一下再看
回复 支持 反对

使用道具 举报

结帖率:78% (21/27)
发表于 2019-3-29 14:20:06 | 显示全部楼层   安徽省阜阳市
感谢分享,收藏一下再看
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表