cmzy
V2EX  ›  Android

我是来填坑的,我们搞的插件机制 DroidPlugin 开源成功了。

  •  1
     
  •   cmzy · Aug 27, 2015 · 32354 views
    This topic created in 4093 days ago, the information mentioned may be changed or developed.

    坑在这里: https://www.v2ex.com/t/208961
    填坑 https://github.com/Qihoo360/DroidPlugin

    对,我就在 360 手机助手

    50 replies  •  2016-05-17 15:45:13 +08:00
    abmin521
    abmin521
    Aug 27, 2015 via Android
    1
    你为什么发了两次?
    fengdra
    fengdra
    Aug 27, 2015❤️1
    2
    感觉好可怕,以后流氓程序可以不经允许直接代装软件了
    simon7
    simon7
    Aug 27, 2015 via iPhone
    3
    简直黑科技。
    ljbha007
    ljbha007
    Aug 27, 2015
    4
    大概看了下代码 大致总结思路:
    1. 注册一堆各种配置的备用的 actvity
    2. 用 DexClassloader 加载 apk 中的代码
    3. 对关键系统服务和注册的 activity 使用 InvocationHandler 创建 Proxy 对象
    4. 有专门的入口拦截发送给插件 activity 的 Intent 和做进程调度 我只找到了进程调度的代码 还没找到拦截 Intent 部分
    5. 拦截到启动插件的 activity 的 Intent 后 使用进程调度服务启动 3 中生成的 activity 的 Proxy 对象
    这样就加载了并运行了未安装的 apk
    cmzy
    cmzy
    OP
    Aug 27, 2015 via iPhone
    5
    @ljbha007 思路在 doc 的 ppt 里面有。很清晰的。
    CRight
    CRight
    Aug 27, 2015 via Android
    6
    技术就是技术,不会无脑歧视 360 。
    ljbha007
    ljbha007
    Aug 27, 2015
    7
    @cmzy
    我这个思路是对的吧
    主要就是先用各种 activitystub 占坑 然后用 activity 的 proxy 来接受来自系统的各种生命周期方法 再依次去调用插件 apk 里的各种生命周期方法
    cmzy
    cmzy
    OP
    Aug 27, 2015 via iPhone
    8
    @ljbha007 差不多。但是实际比这复杂。我现在在家爪机上网打字不方便。建议你看下 doc 的 ppt 。它对整体思路有一个大致的总结
    est
    est
    Aug 27, 2015
    9
    @ljbha007 听起来好像很复杂。。。
    cmzy
    cmzy
    OP
    Aug 27, 2015 via iPhone
    10
    @est 确实比想象的复杂。踩过很多坑的
    est
    est
    Aug 27, 2015
    11
    @cmzy 也只有贵厂才有如此奇葩的需求而且真做出来了。。。。。。。。。。
    Epsil0n9
    Epsil0n9
    Aug 27, 2015
    12
    @CRight 360 “靠技术耍流氓”和“耍流氓受歧视”本身就不矛盾,技术一定程度上用钱来堆人才就成功一半了了,毕竟国内人更看重钱或者被所谓的“刚需”逼得看重钱
    janxin
    janxin
    Aug 27, 2015
    13
    只是单纯 plugin 是没这么复杂的
    StackGao
    StackGao
    Aug 27, 2015 via Android
    14
    赞一个,但说不用修改目标 apk ,已经很牛逼了。
    Mac
    Mac
    Aug 27, 2015
    15
    LZ 你们是想干什么。。。
    49
    49
    Aug 27, 2015 via Android
    16
    你们把这种黑科技说出来真的好吗?
    ljbha007
    ljbha007
    Aug 27, 2015
    17
    @est
    @cmzy
    深读了一下 基本上看懂了

    1. 整个框架的入口时 PluginManager.getInstance ().installPackage ()
    2. 上述方法会调用 HandleFactory 中的初始化方法
    3. HandleFactory 中初始化了 用于劫持所有系统关键服务的 Proxy 对象
    4. 通过反射将 VM 中关键的系统服务对象替换为 Proxy 对象
    5. 其中最关键的是 ActivityManager 以及其中的 startActivity 方法
    6. Proxy 对象中的 startActivity 方法根据要启动的 Activity 的包名判断是否是插件 如果是则将启动 Activity 用的 Intent 替换为启动占坑 Activity 的 Intent
    7. 通过 Classloader 动态加载插件 apk 里的代码 然后利用反射调用调用 makeApplication
    8. 通过某种机制用动态加载的代码代替 stub activity ?

    最后一步我没搞懂怎么实现的
    BuilderQiu
    BuilderQiu
    Aug 27, 2015
    18
    叼叼叼。 强行假装了解了。
    silvernoo
    silvernoo
    Aug 27, 2015
    19
    咋感觉 lz 逻辑这么乱肋
    dahvlh
    dahvlh
    Aug 27, 2015 via iPad
    20
    居然可以这样 好神奇
    dahvlh
    dahvlh
    Aug 28, 2015 via iPad
    21
    @dahvlh 这种黑科技放出来肯定招黑的,(´∇`) 放点啥人畜无害常用常用工具库多好
    Justrover
    Justrover
    Aug 28, 2015
    22
    从应用的角度看,对用户百弊无一利。
    从历史的角度看,可能会促进系统安全机制健全。
    ljbha007
    ljbha007
    Aug 28, 2015
    23
    @dahvlh
    这个东西有漏洞 但是影响并不严重 只是用了这个插件系统的应用安全性比较差而已 对其他应用没什么影响

    还有就是装了带这个插件系统的应用的手机也会很不安全 因为插件系统声明了系统所有权限
    emric
    emric
    Aug 28, 2015
    24
    赞。如果是 Google 出的, 你们又要跪舔了。
    niklaus520
    niklaus520
    Aug 28, 2015
    25
    赞!手机助手的啊, cool
    zqqf16
    zqqf16
    Aug 28, 2015
    26
    似乎有点同情广大安卓用户了……
    Athrob
    Athrob
    Aug 28, 2015
    27
    这...
    realpg
    realpg
    Aug 28, 2015
    28
    楼主您好我是做黑产的投资人。
    我不懂技术,我就问一下,我这边写个 APK 总被你们 360 当做恶意程序和病毒杀掉
    我用你这个东西不安装直接去加载能行不?
    不用告诉我技术细节,能行我就在 V2EX 雇俩技术攻关去……
    ljbha007
    ljbha007
    Aug 28, 2015
    29
    @realpg 不行 这个技术得主程序装上插件系统 然后指名道姓的装 apk 才可以
    cnhongwei
    cnhongwei
    Aug 28, 2015
    30
    我靠,看来我不使用任何与周鸿祎相关的软、硬件产品是一个明智的决定。
    realpg
    realpg
    Aug 28, 2015
    31
    @ljbha007
    我就是这么想的啊,主程序又不会被杀
    以前我的 workflow 是这样的,无论是偷偷的啊,还是去市场捐点钱起个高调的游戏名啊,反正让你装上 apk 就行了,这样是会被 360 报警这是个恶意程序不让装的……

    我现在去推广我的带插件系统的主程序就好了啊,然后把那个不让装的动态加载进来……
    ljbha007
    ljbha007
    Aug 28, 2015
    32
    @realpg 靠 我前面就说了有这个坑 因为插件系统会申请所有权限 那么插件也有所有权限
    cmzy
    cmzy
    OP
    Aug 28, 2015 via iPhone
    33
    @realpg 不行的。 1.此机制还有大量缺陷,虽然不需要修改目标 apk ,但是仍需要知道运行原理。 2. 我们不建议将其用于非正当用途,对于插件机制的杀毒检测,我们也有方法。 3. 正常使用需要遵守 lgpl 授权。
    realpg
    realpg
    Aug 28, 2015
    34
    @cmzy
    源程序和目标程序都是我安排人开发的啊,当然知道运行原理了。
    一个搞黑产的你让人遵守 lgpl 授权……
    clino
    clino
    Aug 28, 2015
    35
    上面是装黑产让大家看清楚这个插件机制会被怎么滥用的吧?
    反正 360 的东东我是不会用的,这个技术的用途是不是也很明显?
    希望 google 能堵上这个...
    kyze8439690
    kyze8439690
    Aug 28, 2015
    36
    不愧是 360 出的
    atyun
    atyun
    Aug 28, 2015 via Android
    37
    @emric 问题是 google 并不会开发这个
    baiyemao
    baiyemao
    Aug 28, 2015
    38
    楼主,你确定不会害人么。
    xmoon
    xmoon
    Aug 28, 2015
    39
    不 我觉得会被滥用 既然已经开源了 国内那些肯定不管你啥协议
    fengkuok
    fengkuok
    Aug 28, 2015
    40
    这种东西不需要 root 权限吗?
    WayneWangWM
    WayneWangWM
    Aug 28, 2015
    41
    Github 上还有一个 DynamicLoadApk 开源库了,不过还没完成
    breaklayer
    breaklayer
    Aug 28, 2015
    42
    据说支付宝和微信也有自己的插件框架,不知道这几个有没有什么异同
    029xue
    029xue
    Aug 28, 2015
    43
    https://github.com/Qihoo360/DroidPlugin/blob/master/project/Libraries/DroidPlugin/src/com/morgoo/droidplugin/PluginHelper.java line: 104

    //解决小米 JLB22.0 4.1.1 系统自带的小米安全中心( lbe.security.miui )广告拦截组件导致的插件白屏问题
    private void fuckMiUiLbeSecurity () throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {

    //卸载掉 LBE 安全的 ApplicationLoaders.mLoaders 钩子
    Class ApplicationLoaders = Class.forName ("android.app.ApplicationLoaders");


    估计米厂的人也会写 fuck360Anything ()... 之类的方法。

    国内这环境,猿类相轻。。。
    iluhcm
    iluhcm
    Aug 28, 2015
    44
    这玩意儿小米早就开始用了...

    另外阿里也有插件,不过只在内部开源.
    vmebeh
    vmebeh
    Aug 28, 2015
    45
    安卓手机是不是要爆发第一次管家大战了
    KexyBiscuit
    KexyBiscuit
    Aug 29, 2015 via Android
    46
    技术研究值得赞同, star 已送。
    zhgg0
    zhgg0
    Aug 30, 2015
    47
    这样 360 加固宝还怎么扫描漏洞代码、广告?
    w4lle
    w4lle
    Sep 1, 2015
    48
    占坑
    kaedea
    kaedea
    Oct 12, 2015
    49
    对于 Service 的支持怎么样?
    evitceted
    evitceted
    May 17, 2016
    50
    @cmzy 求教下 用 droidplugin 调起新 apk 后 无法通过退格键返回, 这个问题要怎么解决
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4840 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 97ms · UTC 02:27 · PVG 10:27 · LAX 18:27 · JFK 21:27
    ♥ Do have faith in what you're doing.