吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 156054|回复: 354
上一主题 下一主题
收起左侧

[Android 原创] 《你还在用叉叉助手?你可知道它背后的秘密?》我行我上,深入分析,欢迎交流

    [复制链接]
跳转到指定楼层
楼主
df09 发表于 2018-3-21 17:56 回帖奖励
本帖最后由 df09 于 2018-3-21 18:11 编辑

近日,看见有大佬在分析叉叉助手背后的秘密(https://www.52pojie.cn/thread-714265-1-1.html)。哇擦,我手机上就装了一个。正当我也准备和大家一样将叉叉拖进垃圾桶的时候,我迟疑了,作为一个爱逆向爱探索的大三狗,我必须探索真理。而且还有人质疑我不行,我无法分析。我表示我行。
说罢,拿出安卓的抓包神器Packet Capture,清理叉叉助手的缓存,然后开始抓包,打开叉叉助手等个十几秒,停止抓包。
emm....请求略多啊,不过其中我发现了一个6m的请求。联系之前大佬的文章,就是它了。

果断命令行curl http://downapk.guopan.cn/2017-08-21/e29bd24ed9ff4a1a1d47979ea3a32314.apk -o output.apk
然后当然是大名鼎鼎的apktool伺候拉

解包后整体情况一览
assets:

lib:

classes:(用JDGUI看的)

,apktool出错了吗,为啥解出来的东西感觉也是个apktool(还有一个aapt的so)。。。我特意用jdgui看了看我自己的apktool.jar

????(黑人问号),这部分简直就是apktool嘛。。不过我每个目录翻看了下,更加像一个阉割了的apktool。叉叉助手为啥会有apktool的代码???
这样还是不好分析,还是先分析他的入口类吧。MultiApkHelper。这个类竟然没有被混淆,分析起来就easy了。
这个函数最长了,我就先从他入手吧
[Java] 纯文本查看 复制代码
public String generateNewApk(JSONObject jSONObject, ProgressListener progressListener) {
        Object obj = null;
        getVersion();
        if (progressListener == null) {
            AnonymousClass1 anonymousClass1 = new ProgressListener(this) {
                final /* synthetic */ MultiApkHelper a;

                {
                    this.a = r1;
                }
            };
        }
        JSONObject jSONObject2;
        try {
            String string = jSONObject.getString("package_name");
            String string2 = jSONObject.getString("target_name");
            this.mIsInjectSpeed = jSONObject.getBoolean("is_speed");
            this.mIsInjectAssist = jSONObject.getBoolean("is_assist");
            this.mIsInjectSplash = jSONObject.getBoolean("is_splash");
            this.mAssistUid = jSONObject.getInt("assist_uid");
            this.mAssistUrl = jSONObject.getString("assist_url");
            this.mHasLocalAssist = jSONObject.getBoolean("has_local_assist");
            if (jSONObject.has("new_package_name") || string.contains("xxAssistant") || string.contains("xxnoroot")) {
                obj = 1;
                this.mIsInjectSpeed = false;
                this.mIsInjectAssist = false;
                this.mIsInjectSplash = false;
            }
            try {
                if (isAppInjected(string)) {
                    jSONObject2 = new JSONObject();
                    jSONObject2.put("is_multi_success", false);
                    jSONObject2.put("inject_speed_success", false);
                    jSONObject2.put("inject_assist_success", false);
                    jSONObject2.put("msg", "应用已经被多开过了");
                    jSONObject2.put("apk_path", "");
                    progressListener.onFinish(jSONObject2);
                    return null;
                }
                String string3;
                if (obj != null) {
                    string3 = jSONObject.has("new_package_name") ? jSONObject.getString("new_package_name") : generateRandomPackageName();
                } else {
                    string3 = string + FEATURE_STRING + System.currentTimeMillis();
                }
                String str = getTempWorkingPath() + string3 + File.separator + "package";
                File file = new File(str + File.separator + "dist");
                if (file.mkdirs() || file.isDirectory()) {
                    long currentTimeMillis = System.currentTimeMillis();
                    coma2.apk.q.a aVar = new coma2.apk.q.a();
                    progressListener.onProgressUpdate(0);
                    deleteGeneratedApk(new File(getTempWorkingPath()));
                    progressListener.onProgressUpdate(3);
                    d.a(TAG, "拷贝apk...");
                    String sourceApkPath = getSourceApkPath(string);
                    if (new File(sourceApkPath).exists()) {
                        String substring = sourceApkPath.substring(sourceApkPath.lastIndexOf(File.separator) + 1, sourceApkPath.length());
                        d.a(TAG, "fileName = " + substring);
                        d.a(TAG, "拷贝apk成功 cost " + (System.currentTimeMillis() - currentTimeMillis));
                        currentTimeMillis = System.currentTimeMillis();
                        progressListener.onProgressUpdate(15);
                        d.a(TAG, "开始解apk包...");
                        if (obj != null) {
                            f.a(sourceApkPath, str);
                        } else {
                            coma2.apk.d.a.a(new String[]{"d", sourceApkPath, "-o", str, "-s", "-f"});
                        }
                        d.a(TAG, "解apk包成功 cost " + (System.currentTimeMillis() - currentTimeMillis));
                        currentTimeMillis = System.currentTimeMillis();
                        progressListener.onProgressUpdate(32);
                        System.gc();
                        File file2 = new File(getTempWorkingPath() + "output_dir");
                        if (!file2.exists()) {
                            file2.mkdirs();
                        }
                        progressListener.onProgressUpdate(48);
                        d.a(TAG, "开始做坏事...");
                        aVar.a = sourceApkPath;
                        aVar.b = str + File.separator + "dist" + File.separator + substring;
                        aVar.c = getTempWorkingPath() + "output_dir" + File.separator + string3 + "_signed_unaligned.apk";
                        aVar.d = str;
                        aVar.e = getTempWorkingPath() + string3 + File.separator + "temp";
                        aVar.f = string;
                        aVar.g = string3;
                        aVar.h = string2;
                        new File(aVar.e).mkdirs();
                        if (obj == null) {
                            doDirtyHack(aVar);
                        } else {
                            coma2.apk.n.a aVar2 = new coma2.apk.n.a();
                            d.a(TAG, "parse axml : " + aVar2.a(aVar.d + File.separator + "AndroidManifest.xml"));
                            aVar2.d(aVar.g);
                            aVar2.c(aVar.h);
                            d.a(TAG, "after modify package name : " + aVar2.a());
                            d.a(TAG, "save axml : " + aVar2.b(aVar.d + File.separator + "AndroidManifest.xml"));
                        }
                        d.a(TAG, "坏事做完了 cost " + (System.currentTimeMillis() - currentTimeMillis));
                        progressListener.onProgressUpdate(56);
                        File file3 = new File(getTempWorkingPath() + string3 + File.separator + "temp.apk");
                        if (!file3.exists()) {
                            file3.createNewFile();
                        }
                        c.a(sourceApkPath, file3.getAbsolutePath());
                        progressListener.onProgressUpdate(76);
                        currentTimeMillis = System.currentTimeMillis();
                        d.a(TAG, "重新打包...");
                        if (obj != null) {
                            f.b(str, file3.getAbsolutePath());
                        } else {
                            coma2.apk.d.a.a(new String[]{"b", str, "-o", file3.getAbsolutePath()});
                        }
                        d.a(TAG, "打包完毕 cost " + (System.currentTimeMillis() - currentTimeMillis));
                        progressListener.onProgressUpdate(93);
                        long currentTimeMillis2 = System.currentTimeMillis();
                        d.a(TAG, "开始签名...");
                        k kVar = new k();
                        kVar.a("testkey");
                        kVar.a(file3.getAbsolutePath(), aVar.c);
                        d.a(TAG, "签名成功 cost " + (System.currentTimeMillis() - currentTimeMillis2));
                        progressListener.onProgressUpdate(99);
                        System.gc();
                        progressListener.onProgressUpdate(100);
                        jSONObject2 = new JSONObject();
                        jSONObject2.put("is_multi_success", true);
                        jSONObject2.put("inject_speed_success", this.mInjectSpeedSuccess);
                        jSONObject2.put("inject_assist_success", this.mInjectAssistSuccess);
                        jSONObject2.put("msg", "成功");
                        jSONObject2.put("apk_path", aVar.c);
                        progressListener.onFinish(jSONObject2);
                        return aVar.c;
                    }
                    throw new Exception("包名" + string + "对应的apk路径未能找到");
                }
                throw new Exception("create dist dir failed");
            } catch (Throwable th) {
                th.printStackTrace();
            }
            return null;
        } catch (Exception e) {
            e.printStackTrace();
            jSONObject2 = new JSONObject();
            try {
                jSONObject2.put("is_multi_success", false);
                jSONObject2.put("inject_speed_success", false);
                jSONObject2.put("inject_assist_success", false);
                jSONObject2.put("msg", "应用已经被多开过了");
                jSONObject2.put("apk_path", "");
                progressListener.onFinish(jSONObject2);
                return null;
            } catch (JSONException e2) {
                e2.printStackTrace();
                return null;
            }
        }
    }

大家喜欢看可以自己看,没混淆简单的一比。我就说下重点吧。
1、jSONObject.getString("package_name");获取了一个包名
2、会检测包名是否符合某种正则表达式,符合就停止,否则继续
3、根据包名通过PackageManager获取apk的存放路径
4、然后通过coma2.apk.d.a.a(new String[]{"d", sourceApkPath, "-o", str, "-s", "-f"});解apk包,这里迟点再看看coma2.apk.d.a.a干了啥
5、然后干坏事(这里迟点再分析)
6、然后coma2.apk.d.a.a(new String[]{"b", str, "-o", file3.getAbsolutePath()});打包apk
7、对apk包签名,实际上assets里面的keys目录下的东西就是签名的keystore文件

我发现他日志提到的解包和打包都用到了coma2.apk.d.a.a这个类,我们接下来分析下这个类

em....好吧,连人家的日志都没去掉,看了实锤了,这明明就是大名鼎鼎的apktool嘛。。。那之前的解包和打包也就明了了,其实就是利用apktool来对apk包进行反编译和回编。
不过在此也有点佩服叉叉的开发人员,竟然把apktool移植到手机上了。想当年我想在手机上破解apk的时候还要root还要装busybox什么的很麻烦呢。。。他才2M的安装包就搞定了。。。之前用了一个工具装手机上要50M。。。

好了,最后我们看回去第五步,看下究竟干了什么坏事,解开叉叉的背后的秘密

这么多行代码,实际上有用就就只有doDirtyHack和另外一个分支的代码了,其他可以忽略。简单先看else的分支吧。
这个大概就是在改AndroidManifest.xml的内容,那是谁的AndroidManifest.xml的呢?看回前面我们就可以知道,这个实际上就是解包后的AndroidManifest.xml。跟进去看,看到了关键字
label,package

那看来就是在通过某种方式修改应用名称和应用包名了。

好了,回到doDirtyHack。看下到底有多dirty
[Java] 纯文本查看 复制代码
private void doDirtyHack(coma2.apk.q.a aVar) {
                                        String str;
                                        d.a(TAG, "开始修改包名...");
                                        String a = com.apktool.util.f.a(aVar.d + File.separator + "AndroidManifest.xml", aVar.g, aVar.h);
                                        int i = 0;
                                        if (a.contains("@string/")) {
                                            str = a.split("/")[1];
                                        } else {
                                            i = 1;
                                            str = a;
                                        }
                                        d.a(TAG, "修改包名完毕");
                                        if (aVar.h != null && aVar.h.length() > 0) {
                                            d.a(TAG, "开始修改游戏名为" + aVar.h + "...");
                                            if (i == 0) {
                                                com.apktool.util.f.b(aVar.d + File.separator + "res", "name", aVar.h, str);
                                            }
                                            d.a(TAG, "修改游戏名成功");
                                        }
                                        if (this.mIsInjectSpeed || this.mIsInjectAssist || this.mIsInjectScript) {
                                            d.a(TAG, "开始准备注入的资源");
                                            com.apktool.util.b.d(aVar);
                                            d.a(TAG, "准备完毕,开始注入manifest");
                                            com.apktool.util.b.a(aVar);
                                            d.a(TAG, "注入manifest完毕,开始注入资源");
                                            com.apktool.util.b.c(aVar);
                                            d.a(TAG, "注入资源完毕,开始注入dex");
                                            com.apktool.util.b.b(aVar);
                                            d.a(TAG, "注入dex完毕");
                                        }
                                        JSONObject jSONObject = new JSONObject();
                                        JSONObject jSONObject2 = new JSONObject();
                                        jSONObject.put("version", getVersion());
                                        jSONObject.put("xxPkgName", this.mContext.getPackageName());
                                        if (this.mIsInjectSpeed) {
                                            jSONObject2.put("so_name", "libxxspeedmanager-multi.so");
                                            jSONObject2.put("so_path", "app_speed/libxxspeedmanager-multi.so");
                                            jSONObject2.put("so_construct", "xx_speed_manager_init");
                                            jSONObject2.put("apk_name", "xxp_plugin_speed.apk");
                                            jSONObject2.put("apk_path", "app_speed/xxp_plugin_speed.apk");
                                            jSONObject2.put("apk_entry", "com.xx.speed.XXPlugin");
                                            jSONObject2.put("url", "");
                                            jSONObject.put("speed", jSONObject2);
                                        }
                                        jSONObject2 = getAssistJsonObj(aVar);
                                        if (this.mIsInjectAssist && jSONObject2 != null) {
                                            jSONObject.put("assist", jSONObject2);
                                        }
                                        File file = new File(aVar.d + File.separator + "assets");
                                        File file2 = new File(file, "multi_config.json");
                                        if (!file.exists()) {
                                            file.mkdirs();
                                        }
                                        if (!file2.exists()) {
                                            file2.createNewFile();
                                        }
                                        c.a(jSONObject.toString().getBytes(), file2.getAbsolutePath());
                                        d.a(TAG, "multi_config.json:\n" + jSONObject.toString());
                                    }

emmm....我感觉看log就知道什么回事了..不过脚踏实地的我,不能被他欺骗,我们慢慢分析。
修改包名大致看了下,好像一直在操作xml文件。emmm。。。看来没骗我,果然是改了AndroidManifest.xml的package字段,其实就是改包名拉,学过安卓的都知道。


d.a(TAG, "开始准备注入的资源");
com.apktool.util.b.d(aVar);
看下都准备了啥?

emmm....看来之前assets里面的classes.dex用上了,解压出来了。InjectActivity.dex也一并拷过去。
我们手动解压看下里面是什么玩意

额。这图标好熟悉啊,不就是我用过的叉叉的加速器吗。原来这个classes.dex就是一个加速器插件啊,还用到了substrate,估计就是用来hook时间的函数的。晚点可以分析下,看下能不能把加速器搞过来自己用。

d.a(TAG, "准备完毕,开始注入manifest");
com.apktool.util.b.a(aVar);
这个注入manifest内容比较多,大致就是把刚刚解压的classes.dex里面的AndroidManifest.xml和前面用apktool解压出来的AndroidManifest.xml进行融合,融合成新的一个???

d.a(TAG, "注入manifest完毕,开始注入资源");
com.apktool.util.b.c(aVar);
这个也是老长老长的,大致就是把刚刚解压的classes.dex里面的res文件和前面用apktool解压出来的res合并起来。

d.a(TAG, "注入资源完毕,开始注入dex");
com.apktool.util.b.b(aVar);
这个就是直接把几个dex也合体成一个dex了

????叉叉助手这是要干嘛,为啥要将两个apk合体???额,想起之前分析到classes.dex是一个加速器相关的apk,那到这里,基本可以实锤了!!!!!!

叉叉干的坏事就是。。。。把一个加速器和一个apk合体???????(手动黑人问号???)
emm....突然,我想起叉叉有一个功能.....

我tm....分析半天,原来其实就是分析叉叉的这个功能模块。。。为啥不早点想起来啊。。。。。

结论就是:

叉叉下载了这个apk,然后用动态加载apk的方法,加载这里面的代码,然后用他来多开游戏。。。

点评

其实我建议喷子去用苹果,完全没有后台下载。  发表于 2018-3-23 16:45
估计是官方看到了,有点急,连忙注册个新号来科普~~  发表于 2018-3-22 15:07
我不信楼主是新注册的萌新,赶紧交代你是哪位大佬的马甲  发表于 2018-3-22 13:37
如果你不是在16號註冊的,我還真以為是來消毒的...膜拜高手  发表于 2018-3-21 18:33

免费评分

参与人数 200威望 +3 吾爱币 +202 热心值 +188 收起 理由
J日薄西山 + 1 + 1 感觉好像应该学到了什么,好吧我的错觉
帝王攻 + 1 用心讨论,共获提升!
liuquanxl + 1 谢谢@Thanks!
花语熙 + 1 + 1 用心讨论,共获提升!
wionch + 1 + 1 膜拜中...
Cmilyci + 1 + 1 一脸懵逼的来,一脸懵逼的走。
黑化的狂三 + 1 一脸懵逼的来,一脸懵逼的走
wurenhuiyi + 1 + 1 我很赞同!
晓丶玉女 + 1 + 1 就需要你这样的热心群众
J970925 + 1 + 1 谢谢@Thanks!
初晓微凉 + 1 + 1 大佬就是大佬.....
bb8820 + 1 用心讨论,共获提升!
王932123 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
我爱杨欣 + 1 + 1 我反正是一脸懵逼的来,一脸懵逼的走。
钱三条 + 1 用心讨论,共获提升!
carher + 1 + 1 用心讨论,共获提升!
Pingerfy + 1 + 1 简直扭伤了天,厉害厉害
Sen + 1 + 1 是不是官方坐不住了。。。。。
qooo123456 + 1 + 1 用心讨论,共获提升!
王豆豆爱吃糖 + 1 我很赞同!
xsj-126 + 1 + 1 谢谢@Thanks!
askerr + 1 + 1 用心讨论,共获提升!
小白半枚 + 1 + 1 我很赞同!
0huanglei1 + 1 + 1 我很赞同!
柏塔 + 1 + 1 用心讨论,共获提升!
TanSent + 1 + 1 热心回复!
梅猫饼 + 1 + 1 用心讨论,共获提升!
zzp007 + 1 + 1 热心回复!
wstcytx + 1 + 1 我很赞同!
何必囚心于你 + 1 大佬们撕逼,好可怕
Ganle-Yan + 1 + 1 用心讨论,共获提升!
至尊舞帝 + 1 + 1 膜拜大神
NanJiniu + 1 + 1 膜拜大佬学习了
云月明 + 1 + 1 用心讨论,共获提升!
52niqiangge + 1 + 1 膜拜大佬
more138 + 1 注册时间暴露了你的行踪
mingou + 1 + 1 然而……emmmmmm
季谢尔 + 1 + 1 用心讨论,共获提升!
zyc888 + 1 + 1 我很赞同!
you + 1 + 1 我很赞同!
WINNA123 + 1 + 1 我很赞同!
52Shyc + 1 + 1 热心回复!
lch8046878 + 1 + 1 认认真真看完,到最后。。。你是要笑死我然后继承我44码的鞋么,哈哈啊哈哈.
sxm0531 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
54556 + 1 + 1 我很赞同!
touhoufans + 1 + 1 我很赞同!
jgbbhgj + 1 + 1 6
li5shuo3 + 1 + 1 我很赞同!
masaike + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
okkid + 1 + 1 膜拜大佬!
ssswsf + 1 + 1 热心回复!
ren332427516 + 1 + 1 热心回复!
593365053 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
FantasyOwl + 2 + 1 谢谢@Thanks!
天上一朵云 + 1 谢谢@Thanks!
xuemantian0304 + 1 用心讨论,共获提升!
杀猪用牛刀 + 1 + 1 这个不是很明显的吗
watle9527 + 1 + 1 哈哈哈
wanmei + 3 + 1 热心回复!
曼妥思 + 1 + 1 满分小品
bxy123 + 1 + 1 热心回复!
juejue + 1 + 1 热心回复!
O丶ne丨柒夜彡 + 1 + 1 谢谢@Thanks!
yangyan6011795 + 1 热心回复!
huhuaa8 + 1 + 1 一顿操作猛如虎,查看战绩v5
莫奇 + 1 + 1 谢谢@Thanks!
zy1234 + 1 + 1 热心回复!
ttxhxz + 1 + 1 我很赞同!
weijinming1994 + 1 用心讨论,共获提升!
it_xiaowu + 1 + 1 谢谢@Thanks!
2842752363 + 1 用心讨论,共获提升!
z1191530625 + 1 + 1 热心回复!
HaoChen + 1 用心讨论,共获提升!
woainba5474 + 1 + 1 666,楼主这波操作猛如虎
mmmmme + 1 + 1 膜拜一下
逝去de枫 + 1 也就是说实际上就是在自己运行的镜像上修改?
jmkflb + 1 + 1 热心回复!
修罗本灭世 + 1 + 1 我很赞同!
荒唐梦 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
mzl123 + 1 + 1 用心讨论,共获提升!
大象 + 1 + 1 给大佬端茶
yu490025278 + 1 + 1 热心回复!
9D8147 + 1 + 1 用心讨论,共获提升!
zzzxcv + 1 + 1 我很赞同!
骑着熊猫去看海 + 1 + 1 我很赞同!
hxy310 + 1 + 1 大佬厉害!!!!!
ya010203 + 1 + 1 用心讨论,共获提升!
timeday + 1 + 1 谢谢@Thanks!
MW1314 + 1 + 1 大佬好样的,人家怼你就应该怼回去!
爱上璇妹妹 + 1 + 1 热心回复!
aichoupang + 1 + 1 实力打脸 佩服大佬
航行天下 + 1 + 1 热心回复!
sunbang521 + 1 + 1 谢谢@Thanks!
我是神金币 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
momosys + 1 + 1 谢谢@Thanks!
ん字拖 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
jiang3986633 + 1 + 1 我很赞同!
jiaoshu + 1 + 1 热心回复!
nvliu66 + 1 我很赞同!
eec + 1 用心讨论,共获提升!

查看全部评分

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

受到警告 推荐
张晋 发表于 2018-3-21 18:54
大苏打实打实的

免费评分

参与人数 49吾爱币 -37 热心值 +1 收起 理由
zgcwkj + 2 给你回点血吧。。。
Ghang + 1 回个血,不要乱
soulcaoyue + 1 + 1 回血回血
174888 -1 广告贴,请遵守论坛版规!
qwe110120v + 1 给你回点血吧
愚弄者fff -1 不好意思,没忍住
瓜子吧3 -1 不好意思没忍住
7win -1 我很赞同!
ZeroKong + 1 给你回点血 =-=你这太恐怖了
zhaoweifu + 1 给你回点血 有点惨
jion -1 你牛
niorker -1 我很赞同!
浅陌angle + 1 给你回点血 有点吓人啊你
fan_xu + 1 给你一分回血吧,下次不要搞事情了
笑无悔 -1 用心讨论,共获提升!
really -1 此为违规行为,请遵守论坛版规!
zhouvip666 -1 广告贴,请遵守论坛版规!
羊之心羽 -1 这样灌水活不了多久!
Hibiya + 1 太惨
FantasyOwl -1 用心讨论,共获提升!
℡LOVE -1 请勿灌水,提高回帖质量是每位会员应尽的义务!
tchivs -1 请勿灌水,提高回帖质量是每位会员应尽的义务!
逍遥一仙 -1 请勿灌水,提高回帖质量是每位会员应尽的义务!
莫奇 -1 请勿灌水,提高回帖质量是每位会员应尽的义务!
凡华 + 1 吓人,回点血
何故 -1 请勿灌水,提高回帖质量是每位会员应尽的义务!
解破吾爱 + 1 请勿灌水,提高回帖质量是每位会员应尽的义务!
源木其棋 -1 请勿灌水,提高回帖质量是每位会员应尽的义务!
小白峰峰 -1 请勿灌水,提高回帖质量是每位会员应尽的义务!
13824869398 + 1 给你回点血吧,下次不要这样回复了
卩丶雨夜灬 -1 请勿灌水,提高回帖质量是每位会员应尽的义务!
q505870719 + 1 此为违规行为,请遵守论坛版规!
w731883875 -1 请勿灌水,提高回帖质量是每位会员应尽的义务!
candyl6 -1 请勿灌水,提高回帖质量是每位会员应尽的义务!
l7518597 -1 请勿灌水,提高回帖质量是每位会员应尽的义务!
moda -1 请勿灌水,提高回帖质量是每位会员应尽的义务!
丶丿後宫 -1 请勿灌水,提高回帖质量是每位会员应尽的义务!
by_aka -1 请勿灌水,提高回帖质量是每位会员应尽的义务!
FS丶街头篮球 -1 请勿灌水,提高回帖质量是每位会员应尽的义务!
123-木头人 -1 此为违规行为,请遵守论坛版规!
首席鉴淫师 -1 此为违规行为,请遵守论坛版规!
小俊的风潇 -1 请勿灌水,提高回帖质量是每位会员应尽的义务!
di7gan -1 请勿灌水,提高回帖质量是每位会员应尽的义务!
全能控 -1 请勿灌水,提高回帖质量是每位会员应尽的义务!
喵帕斯 -1 请勿灌水,提高回帖质量是每位会员应尽的义务!
len -1 请勿灌水,提高回帖质量是每位会员应尽的义务!
Godfather.Cr -16 请勿灌水,提高回帖质量是每位会员应尽的义务!
msoayu56 -1 --------
shakeai -1 请勿灌水,提高回帖质量是每位会员应尽的义务!

查看全部评分

推荐
落雨时 发表于 2018-3-24 10:45
虽然你做的事情没问题。但你没权利说别人学艺不精就不能发帖?
而且他那帖子也没说错什么东西,也不知道你在跳脚什么。

免费评分

参与人数 1吾爱币 +1 收起 理由
未知的事物 + 1 虽然中肯,但是原po那个帖子有点骇人听闻的味道了啊,结论下的草率了,防微.

查看全部评分

推荐
mumu324 发表于 2018-3-21 18:01 来自手机
1,偷偷后台下载东西就是流氓行为。2,你们没办法担保以后偷偷下载的东西是不是没有安全问题的。把root权限给你们,你们就应该什么都公开。

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
ljscx_001 + 1 + 1 我很赞同!

查看全部评分

推荐
moya503 发表于 2018-3-21 19:23 来自手机
他们把我们说的偷偷后台下载这种行为称之为静默下载,还自豪的说是一种微创新呢
推荐
qq8803128 发表于 2018-3-21 18:14
mumu324 发表于 2018-3-21 18:01
1,偷偷后台下载东西就是流氓行为。2,你们没办法担保以后偷偷下载的东西是不是没有安全问题的。把root权限 ...

笑不动 自己去看看腾讯  支付宝  不都是后台下载  下载完成再告诉你  不懂技术的不要乱说
推荐
mumu324 发表于 2018-3-21 17:59 来自手机
本帖最后由 mumu324 于 2018-3-21 18:02 编辑

竟然果然还是来了。
推荐
狂暴补师亚丝娜 发表于 2018-3-21 18:13 来自手机
其实发帖的那位楼主应该是为大家着想,毕竟叉叉的确是偷偷下载东西。不过真相大白就好了。感谢两位大神,一位大神为大家着想,另一位技术大神,感谢他分析清楚了叉叉助手。不过叉叉助手偷偷下载是否可以改善?又被腾讯杀了可能以后还会有误会。

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
610100 + 1 + 1 我很赞同!

查看全部评分

4#
胭倾几多影 发表于 2018-3-21 18:05
墙都不服就服你!
5#
 楼主| df09 发表于 2018-3-21 18:08 |楼主
mumu324 发表于 2018-3-21 18:01
1,偷偷后台下载东西就是流氓行为。2,你们没办法担保以后偷偷下载的东西是不是没有安全问题的。把root权限 ...

你还给叉叉root权限的呀,我都不给叉叉root权限的,电脑激活就用了,这样安全放心
6#
qq8803128 发表于 2018-3-21 18:09
插件化而已,叉叉的多开是最垃圾  最原始的版本的  没有研究的意义  再说现在很多SDK都是动态加载APK的  你分析的很对
7#
茅山小僧 发表于 2018-3-21 18:10
6666666666,真相大白!!技术很牛,真正的剖析
10#
cuijiaming 发表于 2018-3-21 18:20
学习了谢谢大佬的警示
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-15 10:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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