V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cmzy
V2EX  ›  Android

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

  •  1
     
  •   cmzy · 2015-08-27 20:01:55 +08:00 · 27437 次点击
    这是一个创建于 3410 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    对,我就在 360 手机助手

    50 条回复    2016-05-17 15:45:13 +08:00
    abmin521
        1
    abmin521  
       2015-08-27 20:19:20 +08:00 via Android
    你为什么发了两次?
    fengdra
        2
    fengdra  
       2015-08-27 21:03:55 +08:00   ❤️ 1
    感觉好可怕,以后流氓程序可以不经允许直接代装软件了
    simon7
        3
    simon7  
       2015-08-27 21:19:00 +08:00 via iPhone
    简直黑科技。
    ljbha007
        4
    ljbha007  
       2015-08-27 21:20:36 +08:00
    大概看了下代码 大致总结思路:
    1. 注册一堆各种配置的备用的 actvity
    2. 用 DexClassloader 加载 apk 中的代码
    3. 对关键系统服务和注册的 activity 使用 InvocationHandler 创建 Proxy 对象
    4. 有专门的入口拦截发送给插件 activity 的 Intent 和做进程调度 我只找到了进程调度的代码 还没找到拦截 Intent 部分
    5. 拦截到启动插件的 activity 的 Intent 后 使用进程调度服务启动 3 中生成的 activity 的 Proxy 对象
    这样就加载了并运行了未安装的 apk
    cmzy
        5
    cmzy  
    OP
       2015-08-27 21:22:41 +08:00 via iPhone
    @ljbha007 思路在 doc 的 ppt 里面有。很清晰的。
    CRight
        6
    CRight  
       2015-08-27 21:23:01 +08:00 via Android
    技术就是技术,不会无脑歧视 360 。
    ljbha007
        7
    ljbha007  
       2015-08-27 21:32:06 +08:00
    @cmzy
    我这个思路是对的吧
    主要就是先用各种 activitystub 占坑 然后用 activity 的 proxy 来接受来自系统的各种生命周期方法 再依次去调用插件 apk 里的各种生命周期方法
    cmzy
        8
    cmzy  
    OP
       2015-08-27 21:35:04 +08:00 via iPhone
    @ljbha007 差不多。但是实际比这复杂。我现在在家爪机上网打字不方便。建议你看下 doc 的 ppt 。它对整体思路有一个大致的总结
    est
        9
    est  
       2015-08-27 21:36:11 +08:00
    @ljbha007 听起来好像很复杂。。。
    cmzy
        10
    cmzy  
    OP
       2015-08-27 21:37:17 +08:00 via iPhone
    @est 确实比想象的复杂。踩过很多坑的
    est
        11
    est  
       2015-08-27 21:41:45 +08:00
    @cmzy 也只有贵厂才有如此奇葩的需求而且真做出来了。。。。。。。。。。
    Epsil0n9
        12
    Epsil0n9  
       2015-08-27 21:45:31 +08:00
    @CRight 360 “靠技术耍流氓”和“耍流氓受歧视”本身就不矛盾,技术一定程度上用钱来堆人才就成功一半了了,毕竟国内人更看重钱或者被所谓的“刚需”逼得看重钱
    janxin
        13
    janxin  
       2015-08-27 22:00:50 +08:00
    只是单纯 plugin 是没这么复杂的
    StackGao
        14
    StackGao  
       2015-08-27 22:04:36 +08:00 via Android
    赞一个,但说不用修改目标 apk ,已经很牛逼了。
    Mac
        15
    Mac  
       2015-08-27 22:51:00 +08:00
    LZ 你们是想干什么。。。
    49
        16
    49  
       2015-08-27 23:14:47 +08:00 via Android
    你们把这种黑科技说出来真的好吗?
    ljbha007
        17
    ljbha007  
       2015-08-27 23:44:13 +08:00
    @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
        18
    BuilderQiu  
       2015-08-27 23:53:31 +08:00
    叼叼叼。 强行假装了解了。
    silvernoo
        19
    silvernoo  
       2015-08-27 23:53:32 +08:00
    咋感觉 lz 逻辑这么乱肋
    dahvlh
        20
    dahvlh  
       2015-08-27 23:58:38 +08:00 via iPad
    居然可以这样 好神奇
    dahvlh
        21
    dahvlh  
       2015-08-28 00:08:42 +08:00 via iPad
    @dahvlh 这种黑科技放出来肯定招黑的,(´∇`) 放点啥人畜无害常用常用工具库多好
    Justrover
        22
    Justrover  
       2015-08-28 00:11:10 +08:00
    从应用的角度看,对用户百弊无一利。
    从历史的角度看,可能会促进系统安全机制健全。
    ljbha007
        23
    ljbha007  
       2015-08-28 00:12:54 +08:00
    @dahvlh
    这个东西有漏洞 但是影响并不严重 只是用了这个插件系统的应用安全性比较差而已 对其他应用没什么影响

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

    我现在去推广我的带插件系统的主程序就好了啊,然后把那个不让装的动态加载进来……
    ljbha007
        32
    ljbha007  
       2015-08-28 08:07:44 +08:00
    @realpg 靠 我前面就说了有这个坑 因为插件系统会申请所有权限 那么插件也有所有权限
    cmzy
        33
    cmzy  
    OP
       2015-08-28 08:26:50 +08:00 via iPhone
    @realpg 不行的。 1.此机制还有大量缺陷,虽然不需要修改目标 apk ,但是仍需要知道运行原理。 2. 我们不建议将其用于非正当用途,对于插件机制的杀毒检测,我们也有方法。 3. 正常使用需要遵守 lgpl 授权。
    realpg
        34
    realpg  
       2015-08-28 08:53:14 +08:00
    @cmzy
    源程序和目标程序都是我安排人开发的啊,当然知道运行原理了。
    一个搞黑产的你让人遵守 lgpl 授权……
    clino
        35
    clino  
       2015-08-28 09:11:58 +08:00
    上面是装黑产让大家看清楚这个插件机制会被怎么滥用的吧?
    反正 360 的东东我是不会用的,这个技术的用途是不是也很明显?
    希望 google 能堵上这个...
    kyze8439690
        36
    kyze8439690  
       2015-08-28 09:31:03 +08:00
    不愧是 360 出的
    atyun
        37
    atyun  
       2015-08-28 10:46:07 +08:00 via Android
    @emric 问题是 google 并不会开发这个
    baiyemao
        38
    baiyemao  
       2015-08-28 11:26:48 +08:00
    楼主,你确定不会害人么。
    xmoon
        39
    xmoon  
       2015-08-28 11:39:31 +08:00
    不 我觉得会被滥用 既然已经开源了 国内那些肯定不管你啥协议
    fengkuok
        40
    fengkuok  
       2015-08-28 14:00:24 +08:00
    这种东西不需要 root 权限吗?
    WayneWangWM
        41
    WayneWangWM  
       2015-08-28 14:13:22 +08:00
    Github 上还有一个 DynamicLoadApk 开源库了,不过还没完成
    breaklayer
        42
    breaklayer  
       2015-08-28 15:28:10 +08:00
    据说支付宝和微信也有自己的插件框架,不知道这几个有没有什么异同
    029xue
        43
    029xue  
       2015-08-28 16:18:09 +08:00
    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
        44
    iluhcm  
       2015-08-28 18:25:38 +08:00
    这玩意儿小米早就开始用了...

    另外阿里也有插件,不过只在内部开源.
    vmebeh
        45
    vmebeh  
       2015-08-28 18:35:09 +08:00
    安卓手机是不是要爆发第一次管家大战了
    KexyBiscuit
        46
    KexyBiscuit  
       2015-08-29 08:49:37 +08:00 via Android
    技术研究值得赞同, star 已送。
    zhgg0
        47
    zhgg0  
       2015-08-30 12:04:56 +08:00
    这样 360 加固宝还怎么扫描漏洞代码、广告?
    w4lle
        48
    w4lle  
       2015-09-01 14:49:56 +08:00
    占坑
    kaedea
        49
    kaedea  
       2015-10-12 11:51:49 +08:00
    对于 Service 的支持怎么样?
    evitceted
        50
    evitceted  
       2016-05-17 15:45:13 +08:00
    @cmzy 求教下 用 droidplugin 调起新 apk 后 无法通过退格键返回, 这个问题要怎么解决
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3103 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 00:15 · PVG 08:15 · LAX 16:15 · JFK 19:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.