Mac下的破解软件真的安全吗?

华盟原创文章投稿奖励计划

我们发现很多Mac用户对自身的安全并不是很重视,针对用户的恶意软件逐渐增多,窃取用户的隐私, 监控用户的日常行为, 恶意推广广告, etc。因此,我们应该提高自身的安全意识, 警钟长鸣。

0×01 前言

小夏是一名普通Mac用户,某天,他打算试试思维导图来记录工作学习。

他问同事小芳:“Mac下有啥好用的思维导图软件?”

小芳:“XMind呀,很实用的思维导图软件。”

小夏:“那到哪里下载,要钱吗?”

小芳:“哎,你百度XMind破解版呀! 不需要花钱的,直接安装!”

小夏:“这么方便!我试试!”

0×02 样本概述

Xmind是一款实用的思维导图软件,正版官网售价高达99刀, 这个价格当然对普通用户无法承受, 通过搜索,很多站点都提供了破解版下载

1

对比相同版本号的正版和破解版, hash如下:

dab95dbad19995aeb88cc5d1bb0a7912  XMind_orig   //正版   v3.7.1

我们发现该样本采集了用户的很多隐私信息, 上传到了第三方服务器,采集信息如下图

1

目的:1、黑产非法售卖用户信息, 泄漏用户隐私2、广告推广, 获取盈利3、钓鱼执法, 发送侵权律师函4、etc

下面我们对该样本详细分析

0×03 基本信息

在Mac应用中,OSX系统下的Mach-O是可执行文件格式,程序跑起来解析Mach-O,然后链接系统的库文件以及第三方动态库。

我们使用MachOView进行解析

1

在可执行文件 Load Commands 字段中记录了程序的加载指令,LC_LOAD_DYLIB是程序加载的动态库,其中Name字段记录了该动态库的路径,通常程序启动会根据该字段加载动态库。这里发现其加载了新增的两个动态库文件libcJFishPoolHook.dylib、libXMindHook.dylib。除此之外,XMind使用Java编写,移植到Mac平台,可执行文件也没有什么值得重点分析。

总结一下,主要做了如下事情:

1、程序启动初始化,获取资源文件。

2、加载.ini配置文件,得到启动的参数键值对。

3、将参数解析,然后运行加载Library(Java打包的动态库).

1

直接对比正版和破解版的包目录,在包中我们发现了多出来的2个dylib文件

1

libC.JFishPoolHook.dylib
libXMindHook.dylib

下面对这2个dylib进行详细分析

0×04 dylib分析

对于Mac/iOS中使用到的dylib,可以使用class-dump和hoppper结合进行反汇编分析。class-dump又是一款开源解析MachO利器,与MachOView相似的是,他可按照MachO偏移量,找寻符号表(Symbol Table),从而导出类名和方法名,但是他提供了诸多参数用于导出不同架构的MachO链接符号表。使用如下命令导出类名方法名到文件中:


$ class-dump --arch x86_64 libCJFishPoolHook.dylib > header.txt
$ cat header.txt

1

从导出结果来看,很可疑的是CJFishPoolHook类,该类有多达16个成员, 写该动态库的程序员非常老实,没有进行任何加密、混淆类名、方法名的操作,因此从字面上也不难猜出其含义为qq号、微信号、手机号、邮箱号、操作系统、CPU类型、内存、MAC地址、内网IP、公网IP、用户名、应用列表、设备ID,是否上传信息、开启应用和关闭应用的时间。

1

第二个动态库的类方法较少,很明显能猜出,hook了程序的函数,修改程序运行逻辑。

主要方法为:

1、init初始化方法

2、ExChangeImp,Method Swizzling动态交换函数指针,用于hook

3、BuyHook

4、CheckUpdatesHook

5、HelpHook

6、TitleHook

7、OpenURLHook

8、DateMenuItemHook

最后还使用了一个加密方法方法,该方法传入第一个参数(明文),第二个参数key用于加密内容。

@interface NSString (AES)

+ (id)AESDecrypt:(id)arg1 password:(id)arg2;

+ (id)AESEncrypt:(id)arg1 password:(id)arg2;

@end

@interface NSString (Number)

- (BOOL)isPureFloat;

- (BOOL)isPureLongLong;

- (BOOL)isPureInt;

@end

0×05 抓包分析

通过上面的简单分析不难猜测, 他把采集的信息发送到服务端了, 通过抓包分析该样本与服务端通信的过程如下:

第一次向服务端发送了checklocked, 返回值为0, 说明可以传输设备信息

1

接下的data是用来上传用户信息的。Body是经过AES加密后base编码的密文,既然key已经有了,可以尝试解开请求密文

1

通过静态分析我们知道他使用了AES加密算法, 而key就硬编码在代码中

结合上述过程,了解到加密算法的第一个参数为kCCEncrypt,第二个为kCCAlgorithmAES128,第三个为加密的填充模式kCCOptionECBMode。 依据此我们写出的AES解密方法应该为:


 CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,kCCAlgorithmAES128,kCCOptionECBMode, //ECB Mode  
 keyPtr,kCCKeySizeAES128,iv,[self bytes],dataLength, /* input */buffer,bufferSize, /* output */numBytesEncrypted);

key为:iMdpgSr642Ck:7!@

解开的密文为

1

下面我们看看该样本是如何获取这些用户隐私的。

0×06 静态分析

用户隐私收集

CJFishPoolHook.dylib中会获取用户的隐私信息, 其流程如下

1

在应用初始化过程中,单例类的CJFishPoolHook执行初始化Init,随后,在Init方法中进行初始化成员操作,包含上述的16个信息。

在初始化过后,开启捕获用户信息startCapture。这其中包含获取用户联系方式(getContact),获取设备信息(getDevice),判断设备是否需要上传信息(checkLocked),获取应用ID(getProduct),获取设备上的应用列表(getFeature),获取地理位置(getLocation),获取启动时间(getHabitStart)。

最后一步,上传所有数据到服务器,并且使用AES加密算法加密httpbody。

恶意收集QQ信息, 电话, 微信号,应用列表

应用从Library/Containers/com.tencent.qq/Data/Library/Application Support/QQ目录获取个人QQ信息。在该目录下,保存着用户的临时聊天记录,截图等信息。

1

恶意推广

libCJFishPoolHook.dylib修改了更新xmind的官方网站, 推广其自己的广告站点

1

进程注入后,使用Method Swizzling挂钩MenuItem、Button等按钮,使其失效或重定向跳转到其他网站,屏蔽注册、激活检查更新功能。难怪启动应用后发现激活按钮失效,无法进行版本更新,购买激活产品却跳转到另一个网站。

0×07 小结

本次的逆向分析过程清晰,单从网络传输和静态分析上就能了解到该重打包应用运行状态的全部过程。对此公司搜集用户信息的这种行为,不想做过多评价。

主要还是从两个方面进行总结,对于开发者而言,要了解一些基本的防御手段,注重网络传输安全、存储安全,在开发过程中,尽量不要把key明文编码于程序中,哪怕是将二次编码后的key放到应用内也好。我们无法得知软件是否会被破解,key是否会泄露,而一旦暴露出来,则很容易被利用从而解开密文信息。更有甚者,直接使用base编码内容、数据位亦或运算编码,这种更容易被分析。同时我们可以混淆加密、反调试等手段增加软件破解的难度。另一方面,站在用户的角度,下载安装未经验证的软件,是一件很危险的事情,例如著名的XcodeGhost事件,其实就是开发者安装了非官方验证的开发软件,导致开发的程序带有后门,窃取和上传大量用户信息。

本文所述的只是个人信息安全的一角,但却不能忽视他的存在。就同本文中libCJFishPoolHook命名一样,真正的含义是鱼塘,软件使用者是鱼,养在破解者的鱼塘中,等鱼养大了,也该收网了。

过去六年间,Mac销量越来越高,也意味着苹果用户越来越多。而用户一多,生态圈内的软件产出势必增长, 同时也会出现更多恶意软件浑水摸鱼

Mac恶意软件发展历史

1

本文原创,作者:congtou,其版权均为华盟网所有。如需转载,请注明出处:https://www.77169.net/html/173138.html

发表评论