微信双开是定时炸弹?关于非越狱iOS上微信分身高危插件ImgNaix的分析
作者:蒸米@阿里移动安全
序言
微信作为手机上的第一大应用,有着上亿的用户。并且很多人都不只拥有一个微信帐号,有的微信账号是用于商业的,有的是用于私人的。可惜的是官方版的微信并不支持多开的功能,并且频繁更换微信账号也是一件非常麻烦的事,于是大家纷纷在寻找能够在手机上登陆多个微信账号的方法,相对于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的分析的更多相关文章
- 微信团队分享:极致优化,iOS版微信编译速度3倍提升的实践总结
1.引言 岁月真是个养猪场,这几年,人胖了,微信代码也翻了. 记得 14 年转岗来微信时,用自己笔记本编译微信工程才十来分钟.如今用公司配的 17 年款 27-inch iMac 编译要接近半小时:偶 ...
- video 在微信中,安卓全屏和ios上如何内联播放?H5同层播放器相关接入规范
今天在做一个分享页面的时候需要播放视屏用了video,然后各种坑开始了: <video src="http://xxx.mp4 " id="myVideo" ...
- IOS上微信在输入框弹出键盘后,页面不恢复,下方有留白,有弹窗弹出时页面内容感应区域错位
问题说明: ios中,键盘的弹起,页面会往上挪动,使输入框展示在页面中间,键盘隐藏页面会下挪恢复原状. 在微信移动端,ios页面不恢复,下方有留白. 收起键盘的瞬间,如果有弹窗弹出,此时时页面内容应区 ...
- 解决ios上微信无法捕获返回键按钮事件的问题
1 //匿名函数 $(function(){ getHistory(); var flag=false; setTimeout(function(){ flag=true },1000) window ...
- 一步一步实现iOS微信自己主动抢红包(非越狱)
前言:近期笔者在研究iOS逆向project,顺便拿微信来练手,在非越狱手机上实现了微信自己主动抢红包的功能. 题外话:此教程是一篇严肃的学术探讨类文章,只用于学习研究,也请读者不要用于商业或其它非法 ...
- 使用Xcode7非美刀购买开发者帐号,非越狱安装IOS ipa
做苹果开发,需要至少99美刀注册开发者帐号,这样写出来的程序才可以在真机上运行调试,才可以发布到app store,现在xcode7之后苹果有了调整,除了发布到app store还是需要美刀帐号,其它 ...
- iOS修改手机定位(非越狱任意位置)
利用开发者的一些调试功能,我们可以修改非越狱的苹果手机定位,模拟任意位置. 经测试,此方法仅限开发者调试使用,并不能长时间修改手机定位. 1. 首先需要了解一些坐标系的知识 iOS,原生坐标系为 WG ...
- ios 给微信开发一个插件并安装到未越狱的手机上教程
现来整体说一下思路,首先给越狱的手机开发一个插件并安装上去,然后去越狱手机上找到相应的动态库和对应的微信APP安装包,拷贝出来,然后重新签名,就可以安装到未越狱的手机上了 1.首先你的电脑需要安装th ...
- iOS钉钉远程打卡助手(支持越狱和非越狱)
前言:本文主要讲述使用hook方式实现钉钉远程打卡功能,涉及到tweak相关知识,如果你不想了解具体实现细节可直接到我的Github地址参考安装(包含越狱和非越狱两种方法) 你是不是像小编一样每个 ...
随机推荐
- Linux系统目录结构以及简单说明
Linux系统目录结构以及简单说明 linux目录图: / root --- 启动Linux时使用的一些核心文件.如操作系统内核.引导程序Grub等. home --- 存储普通用户的个人文件 ftp ...
- CSS布局经典—圣杯布局与双飞翼布局
在我之前的博客网页整体布局完全剖析-剖完你不进来看一下么?中总结单列.两列.三列固宽与变宽布局,我还以为已经囊括了所有经典的网页布局方法了呢,当然除了CSS3的弹性盒模型没有涉及到,现在看来确实是自己 ...
- SOUI更新到2.0
更新: 1.修改uiresbuilder,增加资源ID自动生成功能.包括自动提取所有布局中控件的name,自动生成ID,自动提取字符串表,颜色表.具体使用方式参见下一篇. 2.修改布局中引用字符串的方 ...
- 【Android进阶学习】shape和selector的结合使用(转)
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://liangruijun.blog.51cto.com/3061169/732310 ...
- mysql从身份证号中提取生日、性别
SELECT p.ID, p.IDCardNo, IF ( LENGTH(p.IDCardNo) , CAST( , ) AS DATETIME ), CAST( CONCAT( ', , ) ) A ...
- java内存模型(待完善)
JMM 1.内存模型的抽象. 本地内存是JMM的一个抽象概念,并不是真实存在,它涵盖了缓存,写缓冲区,寄存器以及其他的硬件和编译器优化. 2.内存可见性问题? ? 3.重排序 编译器优化重排序 ...
- Protocol Buffer搭建及示例
本文来源:http://www.tanhao.me/code/150911.html/ Protocol Buffer(简称Protobuf或PB)是由Google推出的一种数据交换格式,与传统的XM ...
- Data组件的JSON数据格式
{ // "@type" - 类型标识,"table"表明这个JSON是一个table结构的数据 "@type" : &qu ...
- jquery插件开发
jQuery是一个封装的很好的类,比如我们用语句$("#btn1") 会生成一个 jQuery类的实例. 一.jQuery插件开发注意要点 1.使用闭包,避免全局依赖,避免第三方破 ...
- 条码固定资产管理PDA应用
条码固定资产管理解决方案 一.客户挑战与需求 随着企业经营管理的不断升级,固定资产管理的高效化.智能化管理越来越受到企业管理人员的重视.然而,固定资产具有数量大.种类多.价值高.使用周期长.使用地点分 ...