作者:蒸米@阿里移动安全

序言

微信作为手机上的第一大应用,有着上亿的用户。并且很多人都不只拥有一个微信帐号,有的微信账号是用于商业的,有的是用于私人的。可惜的是官方版的微信并不支持多开的功能,并且频繁更换微信账号也是一件非常麻烦的事,于是大家纷纷在寻找能够在手机上登陆多个微信账号的方法,相对于iOS,Android上早就有了很成熟的产品,比如360 OS的微信双开和LBE的双开大师就可以满足很多用户多开的需求。

但是在iOS上,因为苹果的安全机制,并没有任何知名的IT厂商推出微信多开的产品,反而是各种小公司的微信双开产品满天飞。但使用这些产品真的安全吗?今天我们就来看看这些产品的真面目。

一、 “倍推微信分身”初探

 

这次要分析的产品名字叫”倍推微信分身”,可以实现非越狱iOS上的微信多开。这个app的安装是通过itms-services,也就是企业证书的安装模式进行安装的。服务器是架在59os.com。可以看到除了微信分身以外,还有很多别的破解应用提供下载:

app安装完后的图标和微信的一模一样,只是名字变成了“倍推微信分身”:

下载完倍推微信分身,并登陆后,可以看到首页与原版微信并没有太大的变化,只是左上角多了一个VIP的标志:

我们知道,根据苹果的系统机制,一台iOS设备上不允许存在多个Bundle ID一样的app。因此,我们猜测这个微信分身app是修改过Bundle ID的。于是我们查看一下Info.plist,果然Bundle ID已经做了修改:

但是研究过iOS上微信分身的人一定知道,微信app在启动以及发送消息的时候会对Bundle ID做校验的,如果不是” com.tencent.xin”就会报错并退出。那么”倍推微信分身”是怎么做到的呢?经过分析,原来”倍推微信分身”是通过hook的手段,在app启动的时候对BundleID做了动态修改。至于怎么进行非越狱iOS上的hook可以参考我之前写的两篇文章:

【iOS冰与火之歌番外篇 - 在非越狱手机上进行AppHook】

http://drops.wooyun.org/papers/12803

【iOS冰与火之歌番外篇 -App Hook答疑以及iOS 9砸壳】

http://drops.wooyun.org/papers/13824

于是我们对”倍推微信分身”的binary进行分析,发现这个binary在启动的时候会load一个伪装成一个png文件的第三方的dylib– wanpu.png:

用file指令可以看到这个伪png文件其实是一个包含了armv7和arm64的dylib:

我们看到这个伪图片就像是一个寄生虫一样存在于微信app的体内,特别像dota里的Naix(俗称小狗)的终极技能 - 寄生,因此我们把这个高危样本称之为ImgNaix。

二、wanpu.png分析

 

用ida打开wanpu.png,可以看到这个dylib分别对BundleID,openURL和NewMainFrameViewController进行了hook:

BundleID不用说,是为了让app在运行的时候改回”com.tencent.xin”。

NewMainFrameViewController的hook函数就是在微信主页上显示VIP的图片,以及传输一些非常隐私的用户数据(ssid, mac, imei等)到开发者自己的服务器上:


OpenURL这个hook就很有意思了,这个函数本身是用来处理调用微信的URL Schemes的。看过我之前写过的《iOS URL Scheme 劫持》的文章的人一定知道这个”倍推微信分身”是有能力进行URL Scheme劫持的,如果在Info.plist里进行了声明,手机上所有使用的URL Schemes的应用都有可能被hijack。

除了这些hook以外,我们在竟然在”倍推微信分身”的逆向代码里,发现了Alipay的SDK!一个没想到,在”倍推微信分身”的帮助下,支付宝和微信支付终于走到了一起:

因为捆绑了支付宝的SDK,”倍推微信分身”可以调用支付宝的快捷支付功能:

通过网络抓包分析,我们可以看到”倍推微信分身”会发送一些服务收费的数据到手机上:

经分析,”倍推微信分身”之所以加入支付宝sdk是为了对这个微信多开app进行收费。因为天下没有免费的午餐,软件开发者之所以制作腾讯的盗版软件”倍推微信分身”就是为了能够获取到一定的收入,所以才会接入支付SDK的。

三、高危接口分析

 

需要注意的是,”倍推微信分身”打开的url数据都是服务端可控的,并且没有进行加密,黑客可以使用MITM (Man-in-the-middle attack) 随意修改推送的内容,进行钓鱼攻击等操作。比如我通过DNS劫持就能够随意修改推送给用户的数据,以及诱导用户去下载我自己设定的企业app,简直和XcodeGhost一模一样(具体细节可以参考我之前发表的《你以为服务器关了这事就结束了? - XcodeGhost截胡攻击和服务端的复现,以及UnityGhost预警》http://drops.wooyun.org/papers/9024)。

这里我们进行DNS劫持并修改了推送的内容,同时我们把URL替换成了另一个企业应用的下载plist:

可以看到我们在启动”倍推微信分身”的时候弹出了更新对话框,还无法取消:

点击后,”倍推微信分身”下载了我们替换后的企业应用,一个伪装成微信的假app:

除此之外,在分析的过程中,我们还发现”倍推微信分身”app还存在非常多的高危接口,并且可以利用第三方服务器的控制进行远程调用:

(1). “倍推微信分身”app利用动态加载的方式调用了很多私有API。比如app使用了MobileCoreServices里的[LSApplicationWorkspace allInstalledApplications]来获取手机上安装的应用:

比如app使用了SpringBoardServices的SBSLaunchApplicationWithIdentifier。这个API 可以在不需要urlscheme的情况下调起目标app:

比如app加载了和应用安装有关的私有Framework MobileInstallation以及预留了通过URL Scheme安装企业app的接口:

(2). “倍推微信分身”app预留了一整套文件操作的高危接口,可以直接对微信app内的所有文件进行操作,这些文件包括好友列表,聊天记录,聊天图片等隐私信息。

要知道在iOS上,聊天记录等信息都是完全没有加密的保存在MM.sqlite文件里的:

总结

 

虽然我们在样本分析的过程中除了获取用户隐私外,暂时没有捕获到恶意攻击的行为,但这个”倍推微信分身”预留了大量高危的接口(私有API,URL Scheme Hijack,文件操作接口等),并且破解者是可以随便修改客户端的内容,因此不要说推送任意广告和收费信息了,连窃取微信账号密码的可能性都有,简直就像一颗定时炸弹装在了手机上。这样的微信双开你还敢用吗?

从这个样本中,我们已经看到在非越狱iOS上的攻防技术已经变的非常成熟了,无论是病毒(XcodeGhost)还是破解软件(ImgNaix)都利用了很多苹果安全机制的弱点,并且随着研究iOS安全的人越来越多,会有更多的漏洞会被发现 (e.g., 利用XPC漏洞过App沙盒http://drops.wooyun.org/papers/14170)。此外,iOS上的app不像Android,简直一点防护措施都没有,当遇到黑客攻击的时候几乎会瞬间沦陷。正如同我在MDCC 2015开发者大会上所讲的,XcodeGhost只是一个开始而已,随后会有越来越多的危机会出现在iOS上,请大家做好暴风雨来临前的准备吧!

作者:蒸米@阿里移动安全,更多安全技术文章,请查看阿里聚安全博客

 

微信双开是定时炸弹?关于非越狱iOS上微信分身高危插件ImgNaix的分析的更多相关文章

  1. 微信团队分享:极致优化,iOS版微信编译速度3倍提升的实践总结

    1.引言 岁月真是个养猪场,这几年,人胖了,微信代码也翻了. 记得 14 年转岗来微信时,用自己笔记本编译微信工程才十来分钟.如今用公司配的 17 年款 27-inch iMac 编译要接近半小时:偶 ...

  2. video 在微信中,安卓全屏和ios上如何内联播放?H5同层播放器相关接入规范

    今天在做一个分享页面的时候需要播放视屏用了video,然后各种坑开始了: <video src="http://xxx.mp4 " id="myVideo" ...

  3. IOS上微信在输入框弹出键盘后,页面不恢复,下方有留白,有弹窗弹出时页面内容感应区域错位

    问题说明: ios中,键盘的弹起,页面会往上挪动,使输入框展示在页面中间,键盘隐藏页面会下挪恢复原状. 在微信移动端,ios页面不恢复,下方有留白. 收起键盘的瞬间,如果有弹窗弹出,此时时页面内容应区 ...

  4. 解决ios上微信无法捕获返回键按钮事件的问题

    1 //匿名函数 $(function(){ getHistory(); var flag=false; setTimeout(function(){ flag=true },1000) window ...

  5. 一步一步实现iOS微信自己主动抢红包(非越狱)

    前言:近期笔者在研究iOS逆向project,顺便拿微信来练手,在非越狱手机上实现了微信自己主动抢红包的功能. 题外话:此教程是一篇严肃的学术探讨类文章,只用于学习研究,也请读者不要用于商业或其它非法 ...

  6. 使用Xcode7非美刀购买开发者帐号,非越狱安装IOS ipa

    做苹果开发,需要至少99美刀注册开发者帐号,这样写出来的程序才可以在真机上运行调试,才可以发布到app store,现在xcode7之后苹果有了调整,除了发布到app store还是需要美刀帐号,其它 ...

  7. iOS修改手机定位(非越狱任意位置)

    利用开发者的一些调试功能,我们可以修改非越狱的苹果手机定位,模拟任意位置. 经测试,此方法仅限开发者调试使用,并不能长时间修改手机定位. 1. 首先需要了解一些坐标系的知识 iOS,原生坐标系为 WG ...

  8. ios 给微信开发一个插件并安装到未越狱的手机上教程

    现来整体说一下思路,首先给越狱的手机开发一个插件并安装上去,然后去越狱手机上找到相应的动态库和对应的微信APP安装包,拷贝出来,然后重新签名,就可以安装到未越狱的手机上了 1.首先你的电脑需要安装th ...

  9. iOS钉钉远程打卡助手(支持越狱和非越狱)

    前言:本文主要讲述使用hook方式实现钉钉远程打卡功能,涉及到tweak相关知识,如果你不想了解具体实现细节可直接到我的Github地址参考安装(包含越狱和非越狱两种方法)   你是不是像小编一样每个 ...

随机推荐

  1. Linux系统目录结构以及简单说明

    Linux系统目录结构以及简单说明 linux目录图: / root --- 启动Linux时使用的一些核心文件.如操作系统内核.引导程序Grub等. home --- 存储普通用户的个人文件 ftp ...

  2. CSS布局经典—圣杯布局与双飞翼布局

    在我之前的博客网页整体布局完全剖析-剖完你不进来看一下么?中总结单列.两列.三列固宽与变宽布局,我还以为已经囊括了所有经典的网页布局方法了呢,当然除了CSS3的弹性盒模型没有涉及到,现在看来确实是自己 ...

  3. SOUI更新到2.0

    更新: 1.修改uiresbuilder,增加资源ID自动生成功能.包括自动提取所有布局中控件的name,自动生成ID,自动提取字符串表,颜色表.具体使用方式参见下一篇. 2.修改布局中引用字符串的方 ...

  4. 【Android进阶学习】shape和selector的结合使用(转)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://liangruijun.blog.51cto.com/3061169/732310 ...

  5. mysql从身份证号中提取生日、性别

    SELECT p.ID, p.IDCardNo, IF ( LENGTH(p.IDCardNo) , CAST( , ) AS DATETIME ), CAST( CONCAT( ', , ) ) A ...

  6. java内存模型(待完善)

    JMM 1.内存模型的抽象. 本地内存是JMM的一个抽象概念,并不是真实存在,它涵盖了缓存,写缓冲区,寄存器以及其他的硬件和编译器优化. 2.内存可见性问题? ? 3.重排序  编译器优化重排序   ...

  7. Protocol Buffer搭建及示例

    本文来源:http://www.tanhao.me/code/150911.html/ Protocol Buffer(简称Protobuf或PB)是由Google推出的一种数据交换格式,与传统的XM ...

  8. Data组件的JSON数据格式

    {     // "@type" - 类型标识,"table"表明这个JSON是一个table结构的数据     "@type" : &qu ...

  9. jquery插件开发

    jQuery是一个封装的很好的类,比如我们用语句$("#btn1") 会生成一个 jQuery类的实例. 一.jQuery插件开发注意要点 1.使用闭包,避免全局依赖,避免第三方破 ...

  10. 条码固定资产管理PDA应用

    条码固定资产管理解决方案 一.客户挑战与需求 随着企业经营管理的不断升级,固定资产管理的高效化.智能化管理越来越受到企业管理人员的重视.然而,固定资产具有数量大.种类多.价值高.使用周期长.使用地点分 ...