吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 31465|回复: 139
收起左侧

[Android 原创] 攻破国内某大型APP抓包hook签名检测,居然只是想替它实现懒人自动下一条视频播放?

    [复制链接]
GoodGoodStudy 发表于 2018-11-27 11:01
本帖最后由 GoodGoodStudy 于 2018-11-28 10:12 编辑

本文仅限学习交流,请勿用于非法以及商业用途,转载请注明出处By Good good study/ 道义名

最近XX是越来越火了,做为一个在互联网一线的工作者,必须要追的上潮流,,赶紧下载XX玩玩。有一天在家里做运动,想边运动边看看抖音,打开XX发现XX播放完居然不能自动切换到下一个视频,必须要手滑~~百度一下,发现有很多网友对这个需求的呼声很高哈,,不知道XX为啥不加上这个功能在设置里可切换呢,,,,,
clipboard.png
,,,在这样的背景和自身的需求下遂花精写下此文,,,,,
先看看实现效果,自动跳过广告,播放完自动跳到下一个视频(非完善版本,仅以学习的态度大致实现功能哈)
百度视频演示:https://pan.baidu.com/s/1XmA6VdpVMbG4yejnRMyelw

下面是分析过程:老规矩,,先apktool反编译一下,,
clipboard1.png
无壳,,这就好办了,那就直接修改代码吧,,,先手动注入一个log工具类,用来打印关键信息
clipboard2.png
然后回编译,签名安装到手机上,卧槽,,出现了这个界面
1542100074.png
应该是有签名安全检测,,通过经验猜测对话框应该是从主Activity中弹出来的?通过资源搜索定位大法验证了猜测是正确的,检测签名对话框的代码如下:
clipboard4.png
下面来看看推荐fragment 视频列表,来看看它是怎么实现的,先大概猜测一下,应该是通过recycleView来实现的?but,下一秒啪啪打脸,,通过ddms工具分析发现是通过重写ViewPage来实现的 ,,呃呃呃~~~
dex.png
clipboard6.png
知道是怎么实现的那就好办了,,,,首先我们要实现视频自动切换到下一个视频播放这个需求大致可分为二步
1、找到视频播放结束的回调函数
2、在视频播放结束的回调函数中调用ViewPage的setCurrentItem(postion+1)方法

经过分析,,发现抖音没有实现这个接口,如果我们要实现只能自己写了,这个涉及的工作量太大了,有时间再来实现吧~~~~~~~当然我们可以根据在应用开发中的ViewPage知识点,简单的来实现这个功能
1、既然我们获取不到视频播放结束的回调,那我们就找到页面切换的onPageSelected 方法。
clipboard7.png
2、获取视频的时长,获取当前页数据集面,用一个List集合存储所有页面的数据集
通过抓包工具来分析一下数据源是怎么样的,,,打开fiddler 设置代{过}{滤}理,,卧槽,,,居然不能抓包,,,通过分析代码成功找到检测的代码,具体的代码就不贴了,怕被查水表,。贴一下,实现检测代码吧,如下:
1542100359(1).jpg
抓取的数据包如下图:
clipboard10.png
成功获取到视频的时长,是否广告等字段~打开其中的播放链接,发现无水印,,,哈哈哈,原来网上的那些抖音去水印的软件,只是抓取了播放地址而已~
@48pjft{r44b.png
3、在当前页面开启一个视频时长的定时器
4、定时器结束调用ViewPage的setCurrentItem(postion+1)方法实现跳转到下一个页面

至此实现了,破解了抖音抓包hook签名检测,自动播放下一条视频,获取无水印视频链接的功能。下载地址:https://pan.baidu.com/s/1gLC9wPDr4lq5Aw2IswFBpg  提取码:jw8d
注入的代码
clipboard1111.png
实现自动切换到下一条视频的smail代码如下:

[C] 纯文本查看 复制代码
.method public static nextPlay(ILcom/ss/android/ugc/aweme/feed/model/Aweme;Lcom/ss/android/ugc/aweme/common/widget/VerticalViewPager;)V
    .locals 3
    .param p0, "postion"    # I
    .param p1, "mAweme"    # Lcom/ss/android/ugc/aweme/feed/model/Aweme;
    .param p2, "mVerticalViewPager"    # Lcom/ss/android/ugc/aweme/common/widget/VerticalViewPager;

    .line 24
    :try_start_0
    new-instance v0, Ljava/lang/StringBuilder;

    invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V

    const-string v1, "\u64ad\u653e\u65f6\u957f===\u300b\u300b"

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {p1}, Lcom/ss/android/ugc/aweme/feed/model/Aweme;->getVideo()Lcom/ss/android/ugc/aweme/feed/model/Video;

    move-result-object v1

    invoke-virtual {v1}, Lcom/ss/android/ugc/aweme/feed/model/Video;->getVideoLength()I

    move-result v1

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;

    const-string v1, "\u662f\u5426\u662f\u5e7f\u544a===\u300b\u300b"

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {p1}, Lcom/ss/android/ugc/aweme/feed/model/Aweme;->isAd()Z

    move-result v1

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Z)Ljava/lang/StringBuilder;

    const-string v1, "\u5f53\u524d\u9875\u9762\u89d2\u6807==\u300b\u300b\u300b"

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v0, p0}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;

    const-string v1, "==="

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v0, p2}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;

    invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v0

    invoke-static {v0}, Lcom/lj/LjTools;->showlog(Ljava/lang/String;)V

    .line 25
    sget-object v0, Lcom/ss/android/ugc/aweme/feed/DyTools;->awemeList:Ljava/util/List;

    invoke-interface {v0, p1}, Ljava/util/List;->add(Ljava/lang/Object;)Z

    .line 26
    sget-boolean v0, Lcom/ss/android/ugc/aweme/feed/DyTools;->ispostDelayed:Z

    if-nez v0, :cond_0

    .line 27
    return-void

    .line 30
    :cond_0
    sget-object v0, Lcom/ss/android/ugc/aweme/feed/DyTools;->awemeList:Ljava/util/List;

    invoke-interface {v0, p0}, Ljava/util/List;->get(I)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lcom/ss/android/ugc/aweme/feed/model/Aweme;

    invoke-virtual {v0}, Lcom/ss/android/ugc/aweme/feed/model/Aweme;->isAd()Z

    move-result v0

    if-eqz v0, :cond_1

    .line 31
    const-string v0, "\u5e7f\u544a\u89c6\u9891===\u300b"

    invoke-static {v0}, Lcom/lj/LjTools;->showlog(Ljava/lang/String;)V

    .line 32
    add-int/lit8 v0, p0, 0x1

    invoke-virtual {p2, v0}, Lcom/ss/android/ugc/aweme/common/widget/VerticalViewPager;->setCurrentItem(I)V

    .line 33
    return-void

    .line 35
    :cond_1
    const/4 v0, 0x0

    sput-boolean v0, Lcom/ss/android/ugc/aweme/feed/DyTools;->ispostDelayed:Z

    .line 36
    new-instance v0, Lcom/ss/android/ugc/aweme/feed/DyTools$1;

    invoke-direct {v0, p2, p0}, Lcom/ss/android/ugc/aweme/feed/DyTools$1;-><init>(Lcom/ss/android/ugc/aweme/common/widget/VerticalViewPager;I)V

    sget-object v1, Lcom/ss/android/ugc/aweme/feed/DyTools;->awemeList:Ljava/util/List;

    .line 43
    invoke-interface {v1, p0}, Ljava/util/List;->get(I)Ljava/lang/Object;

    move-result-object v1

    check-cast v1, Lcom/ss/android/ugc/aweme/feed/model/Aweme;

    invoke-virtual {v1}, Lcom/ss/android/ugc/aweme/feed/model/Aweme;->getVideo()Lcom/ss/android/ugc/aweme/feed/model/Video;

    move-result-object v1

    invoke-virtual {v1}, Lcom/ss/android/ugc/aweme/feed/model/Video;->getVideoLength()I

    move-result v1

    int-to-long v1, v1

    .line 36
    invoke-virtual {p2, v0, v1, v2}, Lcom/ss/android/ugc/aweme/common/widget/VerticalViewPager;->postDelayed(Ljava/lang/Runnable;J)Z
    :try_end_0
    .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0

    .line 48
    goto :goto_0

    .line 45
    :catch_0
    move-exception v0

    .line 46
    .local v0, "e":Ljava/lang/Exception;
    invoke-virtual {v0}, Ljava/lang/Exception;->printStackTrace()V

    .line 47
    new-instance v1, Ljava/lang/StringBuilder;

    invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V

    const-string v2, "\u5f02\u5e38\u4e86---\u300b\u300b"

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v0}, Ljava/lang/Exception;->toString()Ljava/lang/String;

    move-result-object v2

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    invoke-static {v1}, Lcom/lj/LjTools;->showlog(Ljava/lang/String;)V

    .line 49
    .end local v0    # "e":Ljava/lang/Exception;
    :goto_0
    return-void
.end method

如果打包后运行程序出现这样的错误: java.lang.VerifyError: Rejecting class,说明你修改的smail代码不合法哈,请重新改写注入的smail代码就可以了
clipboard13.png

道可道非常道,名可名非常名,By Good good study 道义名~~~~~

免费评分

参与人数 58吾爱币 +59 热心值 +52 收起 理由
cc亮子 + 1 + 1 我很赞同!
runbird + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
至尊舞帝 + 1 + 1 之前用的xp模块,现在知道实现的原理了,很赞
yanguichao -1 + 1 非常卡。下载有水印。反复提示注入打印。
Prick + 1 + 1 热心回复!
心想事成×龙 + 1 + 1 虽然不知道在讲什么,但是好厉害的样子
xlsummer + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
17634387807 + 1 + 1 我很赞同!
Cailgun + 1 + 1 我很赞同!
huang0817 + 1 + 1 用心讨论,共获提升!
HackerMaple + 1 + 1 热心回复!
十载 + 1 + 1 用心讨论,共获提升!
灵魂歌手 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
xgameboy + 1 + 1 大神收下我的膝盖
AMNOTSR + 1 + 1 我很赞同!
花轮同学 + 1 + 1 牛逼,支持
hnwang + 1 + 1 用心讨论,共获提升!
Woodmon + 1 + 1 我很赞同!
终结天蝎 + 1 + 1 我很赞同!
52pj2018 + 1 + 1 虽然懵逼,但觉厉害
hqzxc123 + 1 + 1 膜拜大佬。。厉害
涛之雨 + 1 + 1 用心讨论,共获提升!
sdad1997 + 1 + 1 用心讨论,共获提升!
sam43125 + 1 + 1 用心讨论,共获提升!
theSeven + 1 + 1 我很赞同!
qaz003 + 1 666
BY丶显示 + 2 + 1 谢谢@Thanks!
激动的石榴 + 1 + 1 热心回复!
nrtzz + 1 + 1 为什么还没有抖音的人出来让楼主去他们公司上班???
xinkui + 1 + 1 谢谢@Thanks!
笙若 + 1 + 1 谢谢@Thanks!
Tim-52Pojie + 1 + 1 无名天地之始,有名万物之母
静叶流云 + 1 + 1 用心讨论,共获提升!
莫奇 + 1 + 1 感谢分享
郑尼茨 + 1 用心讨论,共获提升!
test0001 + 1 + 1 谢谢@Thanks!
buddama + 1 我很赞同!
执念i_ + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
夏雨微凉 + 2 + 1 热心回复!
Boommi6 + 1 谢谢@Thanks!
我不是黑黑 + 1 + 1 牛的一逼
chatter + 1 用心讨论,共获提升!
cs86575208 + 1 + 1 我很赞同!
LGwork + 1 热心回复!这个能不能实现无水印下载
Likey + 2 + 1 免费赠送
CrazyXyu + 1 + 1 热心回复!
caishuwei119 + 1 + 1 我很赞同!
sgyz520 + 1 + 1 我很赞同!
Titanic + 3 + 1 Good good study.
tanlini + 1 + 1 为什么给你加币,因为很久以前我就在想,这个SB软件为什么不能自动下一条。
小怕i + 1 + 1 大佬牛逼
Tunny + 1 保存视频到本地查看还有水印,APP打开会提示更新,
Vsir + 1 谢谢@Thanks!
哇噻大王 + 1 + 1 用心讨论,共获提升!
叹息生锈的剑 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Saup + 1 + 1 膜拜大佬
断刃 + 1 + 1 谢谢@Thanks!
GenW + 3 + 1 good good and get

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| GoodGoodStudy 发表于 2018-11-27 14:12
马克 发表于 2018-11-27 14:00
楼主你的附件是不是有问题,我安装后1不能自动播放,2下载的视频有水印。

无水印的视频是以log的形式打印的,过滤ljtoo,并没有修改保存那个地方代码
tanlini 发表于 2018-11-27 14:47
软件还有很多小问题,望改善。
1、有时不能自动下一条。
2、有时会倒着放,也就是回到上一条,不是往下一条走。
总体还是不错的,可靠性有待加强。
chatter 发表于 2018-11-27 11:04
楼主,建议重新编辑一下,排版比较乱,而且图片全挂了。。 代码的背景色亮眼
 楼主| GoodGoodStudy 发表于 2018-11-27 11:16
chatter 发表于 2018-11-27 11:04
楼主,建议重新编辑一下,排版比较乱,而且图片全挂了。。 代码的背景色亮眼

哈哈,已经重新上传了图片,,,,,,
pikachu888 发表于 2018-11-27 11:28
不错不错,学习了.话说抖音是没有加壳的吗?
先有我后有天 发表于 2018-11-27 11:28 来自手机
膜拜大佬
lhk0207 发表于 2018-11-27 11:35
果然是大佬!!!感谢分享!
Bruce_HD 发表于 2018-11-27 11:36
学习学习了。
15240327578 发表于 2018-11-27 11:37
谢谢楼主!
白云飘飘456 发表于 2018-11-27 11:49
楼主好厉害!
头像被屏蔽
哇噻大王 发表于 2018-11-27 11:50
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 18:44

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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