时时勤拂拭,勿使惹尘埃

TOC

Categories

综合报告(五)多开技术调研



一、多开技术应用场景

有多开技术需求的场景主要有如下情况:
  1. 为了将生活和工作完全分开,所以要两个帐号一个工作用,一个生活用
  2. 企业公司帐号的管理运营人员,需要同时顾及公司和个人帐号
  3. 部分应用支持好友容量有限,如微信号最多支持5000人左右的好友容量,对于微商、营销类而言,一个帐号的好友容量完全不能满足,故需多个帐号
  4. 敏感or其他行业需要保护个人隐私 or 伪造身份时使用小号,如黑/灰产交易、伪造身份套取信息等
  5. 养号、测试、积赞等
其中微信营销对多开技术需求最为迫切,从收集到的众多微信多开样本信息来看,多数都是以营销为噱头来推广传播,同时还添加了不少扩展功能,如批量转发、批量点赞、甚至是暴力加好友等......
淘宝虽然屏蔽了“微信多开”的关键词,但实际使用其他接近的关键词如“微信多开开包”还是能搜到大量的售卖信息
大致上只有简单的多开功能及不闪退保证的售价都在2-3元之间,而增加了一键转发、一键点暂等营销功能的版本售价都飙升到了20-30及以上
但由于微信多开app多为私人所编写,大部分含有盗号外挂或者木马,属于高危地带
故微信多开牟利方式:
  1. 收费使用微信多开app
  2. app中植入恶意代码,通过恶意代码窃取隐私并获利

二、多开技术原理

多开技术原理主要有如下几类:
  1. 修改app,使其可以与原版本同时存在,如Android/iOS上的各微信多开版本都是使用此方法
    1. 最基本的只用重打包修改app的包名/bundle id使其能与原版本同时安装即可
    2. 部分app会验证是否同一设备 or 多开app在同一设备上出现信息推送问题,此时需要给每个app分配不同的设备id、serial序列号和MAC地址等
  2. Android手机系统层做隔离,如android for work、miui8手机分身、奇酷手机
    1. Android 5及之后版本支持Android for work的企业安全解决方案,基于Android 本身的多用户架构,其工作账户和个人账户并存于同一个界面下的,桌面上会有两套不同的图标,便于工作数据和个人数据分隔开,同时能够对工作数据进行隔离和加密。借助伙伴管理解决方案,IT 管理员可强制执行全套策略,控制应用程序的分布并能远程擦除所有业务数据,因此能够对 Android for Work 应用程序进行管理。
      1. Android for Work应用:https://play.google.com/store/apps/details?id=com.google.android.apps.work.core&hl=zh_CN
    2. miui8有一个手机分身模式,同样基于Android多用户的基础上底层做了数据分和进程分离和很高强度的安全加固,保证了手机分身和主用户之间的高度安全隔离,同时在交互设计上又做了很多细节优化
    3. 奇酷手机只支持微信单一app的多开,原理上应该是基于360开发的动态加载框架DroidPlugin来实现,主要是通过hook各个主要的service,替换ActivitymanagerNative,并使用动态代理的方式替换activity,service等
      1. 源码:https://github.com/Qihoo360/DroidPlugin
  3. Android下三方多开app,如LBE的平行空间、双开助手、应用克隆 (App Clone)
    1. LBE平行空间,基于容器的虚拟化实现, 并推出了名为MultiDroid的移动计算平台上的虚拟化系统引擎
    2. 利用hook or 动态加载Binder Hook、Handler Hook、Native Hook等,四大组件用代理实现,如:startActivity(A) ==》hook ==》 startActivity(ProxyA) 
涉及到的AttackPattern:
  1. Manipulate/AttackPattern.Repackage.a  重打包修改包名/bundle id
  2. Steal/AttackPattern.Network.a   部分存在恶意代码窃取帐号密码聊天记录等
  3. Market/AttackPattern.Provider.a   多开app产业链

三、微信多开技术分析

3.1 iOS版本微信多开APP技术

  • 参考:
  • 安装方式
    • 企业证书+itms协议
  • iOS多开难点
    • 苹果系统机制一台iOS设备上不允许存在多个Bundle ID一样的app
      • 故该样本bundle id为:com.qenpeno.bao
    • 微信app在启动以及发送消息的时候会对Bundle ID做校验的,如果不是” com.tencent.xin”就会报错并退出
  • 多开app使用技术
    • 重打包后,通过hook的手段,在app启动的时候对BundleID做了动态修改
      • 非越狱iOS上的hook
        • Mach-O LC_LOAD_DYLIB Hook
          • 通过修改binary本身来加载第三方dylib并实现hook,具体思路是:
            • 提取ipa中的二进制文件 -> 修改二进制文件的Load Commands列表,加入要hook的dylib –> hook.dylib在函数constructor函数中完成对特定函数的hook->对修改后的ipa进行签名,打包和安装。
      • 详细过程
        • binary在启动的时候通过Mach-O格式的LC_LOAD_DYLIB指令load一个伪装成一个png文件的第三方的dylib – wanpu.png
          • 这个伪png文件其实是一个包含了armv7和arm64的dylib
        • 这个dylib分别对BundleID,openURL和NewMainFrameViewController进行了hook:
          • hook BundleID是为了让app在运行的时候改回”com.tencent.xin”
          • NewMainFrameViewController的hook函数就是在微信主页上显示VIP的图片,以及传输一些非常隐私的用户数据(ssid, mac, imei等)到开发者自己的服务器上
  • 同样从网上搜集到的iOS app多开修改教程来看,也只是简单修改了bundle id(未越狱hook尚属于高端技术)

3.2 Android版本微信多开APP技术

包名签名版本hash说明
多开版微信com.tencen1.mmCN=lenovo, OU=lenovo, O=lenovo, L=lenovo, ST=lenovo, C=lenovo6.2682C124E57738971284EC3E665A9E70B0百度加固(为便于对比,下文选取未加固的样本)
正版微信com.tencent.mmCN=Tencent, OU=Tencent Guangzhou Research and Development Center, O=Tencent Technology(Shenzhen) Company Limited, L=Shenzhen, ST=Guangdong, C=865.2.1E97DE1732C5531C4882C5C08B1ABD18E官方版
微信5.2共存版01com.tence01.mm
[email protected], CN=Android, OU=Android, O=Android, L=Mountain View, ST=California, C=US
01586752FCE2CA4430B7A90FBF90644B

微信5.2共存版02com.tence02.mm0F12C13CA07AC623E9DBEBA9C6C5E0FB
微信5.2共存版03com.tence03.mm1F0F7DBC43C49A0DCDA9EC43AFAA5C76
微信5.2共存版04com.tence04.mmB4E983C89859EBCC3EAACDF0F47321D3
  • 多开版启动页面一般都会被植入广告,但进入之后则为正常微信界面了
  • 与iOS相同,Android系统同样不允许存在两个及以上相同包名的app
    • 故该样本包名都会稍微修改一些
    • 然而Android里面app修改包名后,代码里面大量的类名及结构都需要同时修改
      • 如字符串“com.tence01.”就有1851处,smali代码类名“Lcom.tence01/”则有373891处,如weixin这类大app修改起来工程量不低
  • 将同一版本的正版/多开版微信反编译后使用compare软件对比
    • 其主要差异在于多开版本增加了两个类(两个补丁文件格式未知,但即便同为多开版,其hash也并不相同)
    • 当然由于增添了两个模块,但am文件并未修改入口点,故多开版本也会在app启动的入口代码部分增加自己模块的加载(共三处增加代码)
    • 而代码内的主要差异则只有修改包名同时与之匹配的类结构
  • 修改处分析
    • 微信的入口点com/tence02/mm/ui/LauncherUI的onResume里,直接加载了自定义的SV模块来验证设备imei信息
 
    • 然而SV模块实际只是用来做多开软件的收费注册使用(注册验证过程也只是很简单读取本地文件与包名MD5进行对比)
    • 另一个新增的模块com/tuokebao/multiapp/MockDevice,从其命名即可看出是多开相关的,实际则是用于把设备真实id变化修改
      • 故搜索对比该模块的调用部分,可以发现共十多处都是替换掉了正版微信获取设备id的位置
    • 入口点com/tence02/mm/ui/LauncherUI里有一个test方法,但并未被实际调用(应该只是未完成的测试代码)

四、多开技术小结

  • 重打包app技术含量低、规范不严、个人产品居多,极易出现恶意代码
    • iOS版本修改相对容易一些,只用修改bundle id使之共存即可,但未越狱情况下需要重打包做应用内hook修改其获取相关信息
    • Android版本修改相对麻烦,除了修改包名,同时也需要修改与之对应的大量类名和结构
      • 另外由于部分app会验证是否同一设备 or 多开app在同一设备上出现信息推送问题,需要给每个app分配不同的设备id、serial序列号和MAC地址等
      • 推测新版本检测 or 对抗较多,故目前采集到的多开版本主要为较低版本的app
  • 系统原生隔离
    • Android for Work属于企业安全管理解决方案,个人与企业的数据隔离而共存
    • miui8分身模式,更接近于pc上的多用户的概念
    • 奇酷手机虽然目前只支持微信的多开,但随着后续app支持增多使用场景应该较为可观
  • 三方多开app
    • 基于容器的虚拟化实现(LBE平行空间),个人理解的使用场景更适用于类似Android for Work这样的企业安全管理,甚至随着手机性能的增强也可加入云服务行列
    • 基于hook or 动态加载(360 DroidPlugin),开发者、Geek首选(便于学习技术)

0 评论:

发表评论