吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 16785|回复: 83

[Android 原创] 【Xposed】抖音短视频检测 Xposed 分析

  [复制链接]
发表于 2018-1-8 18:28 | 显示全部楼层
本帖最后由 zpp0196 于 2018-2-5 12:48 编辑

不知道从哪个版本开始抖音加入了 Xposed 检测,但是这个检测并不影响 APP 的使用,只是简单的用 Toast 提示(但是每次进去看着也很不舒服),如果没有安装 Xposed 自然不会有任何的提示,那既然他是检测 Xposed 的,那我就用 Xposed 解决他,下面是分析思路:

用到的工具:
apk:抖音短视频_v1.6.8.apk
IDE:Android Studio 3.0
反编译工具:Android killer 1.3.1.0、MT 管理器 2.4.4(需要 VIP)


1. 首先先看一下 hook 前的原图:

S80107-144804.jpg

2. 找关键字:

Xposed 为关键字(突破点)在工程(抖音短视频_v1.6.8.apk)中搜索,最后确定最有嫌疑的位置为:classes2/com.ss.android.ugc.aweme.app.i.smali
TIM截图20180107150502.jpg

3. 分析代码:

smali 源码不好分析所以我转换成 Java 代码分析:
转换完可以看到 com.ss.android.ugc.aweme.app.i 这个类中有 4 个 boolean 返回值的方法:
private static boolean a() *
public static boolean a(Context paramContext)
private static boolean b() *
private static boolean b(Context paramContext) *
其中带 * 号的方法里面可以搜到 Xposed 关键字:
private static boolean a():
TIM截图20180107151650.jpg
private static boolean b():
TIM截图20180107151705.jpg
private static boolean b(Context paramContext):
TIM截图20180107151723.jpg

但是并没有像上面图中那样完整的一句话(基本都在 Log 中)。

4. 首次试水:

[Java] 纯文本查看 复制代码
package me.zpp0196.ss.xpatch;

import android.content.Context;
import android.util.Log;

import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodReplacement;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage;

/**
 * Created by zpp0196 on 2018/1/8.
 */

public class Hook implements IXposedHookLoadPackage{
        @Override
        public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable{
                if(!lpparam.packageName.equals("com.ss.android.ugc.aweme")){
                        return;
                }
                
                findAndHookMethod("com.ss.android.ugc.aweme.app.i", lpparam.classLoader, "a", new XC_MethodReplacement(){
                        @Override
                        protected Object replaceHookedMethod(MethodHookParam param) throws Throwable{
                                logI("com.ss.android.ugc.aweme.app.i.a()");
                                return false;
                        }
                });
                
                findAndHookMethod("com.ss.android.ugc.aweme.app.i", lpparam.classLoader, "a", Context.class, new XC_MethodReplacement(){
                        @Override
                        protected Object replaceHookedMethod(MethodHookParam param) throws Throwable{
                                logI("com.ss.android.ugc.aweme.app.i.a(Context param)");
                                return false;
                        }
                });
                
                findAndHookMethod("com.ss.android.ugc.aweme.app.i", lpparam.classLoader, "b", new XC_MethodReplacement(){
                        @Override
                        protected Object replaceHookedMethod(MethodHookParam param) throws Throwable{
                                logI("com.ss.android.ugc.aweme.app.i.b()");
                                return false;
                        }
                });
                
                findAndHookMethod("com.ss.android.ugc.aweme.app.i", lpparam.classLoader, "b", Context.class, new XC_MethodReplacement(){
                        @Override
                        protected Object replaceHookedMethod(MethodHookParam param) throws Throwable{
                                logI("com.ss.android.ugc.aweme.app.i.b(Context param)");
                                return false;
                        }
                });
        }
        
        private void findAndHookMethod(String p1, ClassLoader lpparam, String p2, Object... parameterTypesAndCallback){
                try{
                        XposedHelpers.findAndHookMethod(p1, lpparam, p2, parameterTypesAndCallback);
                }catch(Throwable throwable){
                        logE(throwable.getMessage());
                }
        }
        
        private void logI(String msg){
                if(BuildConfig.DEBUG)
                        Log.i(getTAG(), msg);
        }
        
        private void logE(String msg){
                if(BuildConfig.DEBUG)
                        Log.e(getTAG(), msg);
        }
        
        private String getTAG(){
                return getClass().getSimpleName();
        }
}

编译后重启手机运行抖音 APP,依然会有提示,而且日志里面也没有打印任何有用的信息,证明这些方法都没有被调用过(起码目前是这样)。

5. 入手 strings.xml

既然在 java 代码里面没找到,Xposed 这个关键字也没有在 strings.xml 里面出现,那还有一种可能就是 Toast 中的字符串是拼接得到的,这次换一种搜索方式:
这次只搜前面的几个字「检测到」:
TIM截图20180107152949.jpg
果然搜到了,将 "%s" 换成 "Xposed" 不就是上面 Toast 的内容了么,接着在 public.xml 中搜索他的 id(a_v)
TIM截图20180107153303.jpg
很明显用到的是第二个 type="string" 的,接着将他的 id(0x7f09020d) 转换为 10 进制(2131296781) 再次搜索结果没有搜到任何东西,以前就遇到过这种坑,然后我选择换工具继续找。

6. 换工具继续找:

PS:电脑端有其他工具应该也可以查出来,不过我不常用,用的多的还是手机上的 MT 管理器,照猫画虎,按照个人习好来。
这个 apk 有 3 个 dex 文件,除过 classes2 中的 R$string 以外,能搜到的唯一一个结果在 classes1/com.ss.android.ugc.aweme.app.b.a.i 里面:
S80107-15450182.jpg
反编译(需要会员)直接查看 java 源码得到:
[Java] 纯文本查看 复制代码
public class i implements a {
    public static ChangeQuickRedirect a;
 
    public void a() {
        if (PatchProxy.isSupport(new Object[0], this, a, false, 4264, new Class[0], Void.TYPE)) {
            PatchProxy.accessDispatch(new Object[0], this, a, false, 4264, new Class[0], Void.TYPE);
        } else if (com.ss.android.ugc.aweme.app.i.a(AwemeApplication.t())) {
            n.a(AwemeApplication.t(), String.format(AwemeApplication.t().getString(0x7f09020d), new Object[]{com.ss.android.ugc.aweme.app.i.b}));
            c.a("find_hook", com.ss.android.ugc.aweme.app.i.b, null);
        }
    }
}

看到 format()getString(0x7f09020d) 就可以猜到这一行应该就是显示 Toast 的方法,他没有返回值,应该不是判断的方法而是显示 Toast 的方法。

7. 再次试水:

这个相对于上面的可能性很大,所以直接 hook 打印日志测试:
[Java] 纯文本查看 复制代码
package me.zpp0196.ss.xpatch;

import android.util.Log;

import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodReplacement;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage;

/**
 * Created by zpp0196 on 2018/1/8.
 */

public class Hook implements IXposedHookLoadPackage{
        @Override
        public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable{
                if(!lpparam.packageName.equals("com.ss.android.ugc.aweme")){
                        return;
                }
                
                logI("start hook ShakeSound");
                
                findAndHookMethod("com.ss.android.ugc.aweme.app.b.a.i", lpparam.classLoader, "a", new XC_MethodReplacement(){
                        @Override
                        protected Object replaceHookedMethod(MethodHookParam param) throws Throwable{
                                logI( "com.ss.android.ugc.aweme.app.b.a.i.a()");
                                return null;
                        }
                });
        }
        
        private void findAndHookMethod(String p1, ClassLoader lpparam, String p2, Object... parameterTypesAndCallback){
                try{
                        XposedHelpers.findAndHookMethod(p1, lpparam, p2, parameterTypesAndCallback);
                }catch(Throwable throwable){
                        logE(throwable.getMessage());
                }
        }
        
        private void logI(String msg){
                if(BuildConfig.DEBUG)
                        Log.i(getTAG(), msg);
        }
        
        private void logE(String msg){
                if(BuildConfig.DEBUG)
                        Log.e(getTAG(), msg);
        }
        
        private String getTAG(){
                return getClass().getSimpleName();
        }
}

编译运行,结果就是那个烦人的 Toast 没有了:

S80107-155718.jpg
控制台的 log:
01-08 18:13:59.469 7209-7209/? I/Hook: start hook ShakeSound
01-08 18:13:59.607 7209-7209/? I/Hook: com.ss.android.ugc.aweme.app.b.a.i.a()
01-08 18:14:00.047 7242-7242/? I/Hook: start hook ShakeSound
01-08 18:14:00.096 7242-7242/? I/Hook: com.ss.android.ugc.aweme.app.b.a.i.a()
01-08 18:14:00.737 7305-7305/? I/Hook: start hook ShakeSound
01-08 18:14:00.770 7305-7305/? I/Hook: com.ss.android.ugc.aweme.app.b.a.i.a()


一共连续打印了 3 次(至于为什么是三次这个要问抖音开发者),并且已经达到了预期的结果并且也不影响 APP 的使用,大功告成。

解析到此结束,感谢观看。
需要此模块的机友可以下载附件中的 zip 解压得到模块打钩重启手机即可(测试1.6.6、1.6.8、1.6.9、1.7.0、1.7.1、1.7.2 可用)。
抖音反 Xposed 检测.zip (76.37 KB, 下载次数: 382)

免费评分

参与人数 23威望 +2 吾爱币 +32 热心值 +21 收起 理由
遥遥科技 + 1 + 1 用心讨论,共获提升!
zzzlucas + 1 + 1 谢谢@Thanks!
why9931 + 1 + 1 666
ctw507 + 1 谢谢@Thanks!
纯白的梦 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
宅友 + 1 + 1 谢谢@Thanks!
旋木过流年 + 1 + 1 谢谢@Thanks!
iamcjsyr + 1 + 1 谢谢@Thanks!
yakun1994 + 1 + 1 谢谢@Thanks!
坤少 + 1 + 1 s8+检测到框架,玩尬舞机不出动作
1163194557 + 1 送给一个会写Xposed的破解大神
aipanpann + 1 + 1 热心回复!
w731883875 + 1 什么个软件就要检测有没有xp,幸好我不用这个抖音
zhangjianfei + 1 + 1 我很赞同!
-1s + 1 + 1 我很赞同!
fangmin723 + 1 + 1 用心讨论,共获提升!
小冬 + 1 + 1 我很赞同!
guan1021 + 1 + 1 热心回复!
tmsq + 1 + 1 谢谢@Thanks!
qtfreet00 + 2 + 12 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
h1825052587 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
610100 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
w13689226302 + 1 + 1 能研究下长安银行app吗?下载了xposed黑名单都不行。。

查看全部评分

本帖被以下淘专辑推荐:

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2018-1-11 14:00 | 显示全部楼层
zpp0196 发表于 2018-1-8 18:48
谁知道呢  都没有抖音的模块就先开始检测框架了  这下好了  真的有模块了

我知道了,谢谢,那我们可不可以下载第三方安全软件来禁止部分软件获取手机的应用列表呢?例如myprivacy软件。期待回复。万分谢谢!

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2018-1-8 20:08 | 显示全部楼层
zpp0196 发表于 2018-1-8 18:48
谁知道呢  都没有抖音的模块就先开始检测框架了  这下好了  真的有模块了

可以的  哈哈哈哈   这下真的有了  逗了

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2018-1-8 18:43 | 显示全部楼层

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2018-1-8 18:44 | 显示全部楼层
早就有提示了  但是不知道为什么抖音会检测框架~

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2018-1-8 18:47 | 显示全部楼层
它检测,咱不用。哈哈哈

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

 楼主| 发表于 2018-1-8 18:48 | 显示全部楼层
安逸2Amour 发表于 2018-1-8 18:44
早就有提示了  但是不知道为什么抖音会检测框架~

谁知道呢  都没有抖音的模块就先开始检测框架了  这下好了  真的有模块了

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2018-1-8 18:51 | 显示全部楼层
厉害了。感谢分享

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

 楼主| 发表于 2018-1-8 18:58 | 显示全部楼层
关于银行金融类 APP 的 Xposed 检测我是没有能力破解的,我也不会去破解,我也是个小白,大家谅解一下。

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2018-1-8 19:02 | 显示全部楼层
他给我两个选择,让我卸载框架,我把它给卸载了,不就看不到了,

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

 楼主| 发表于 2018-1-8 19:05 | 显示全部楼层
Tien丶Hsin 发表于 2018-1-8 19:02
他给我两个选择,让我卸载框架,我把它给卸载了,不就看不到了,

好多人因为这个卸载了抖音   在他还没变成第二个快手之前我先玩着

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2018-1-8 20:06 | 显示全部楼层
厉害了,膜拜

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

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

本版积分规则


免责声明:
吾爱破解所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:Service@52PoJie.Cn

快速回复 收藏帖子 返回列表 搜索

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

GMT+8, 2018-4-25 10:52

Powered by Discuz!

© 2001-2017 Comsenz Inc.

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