当前位置: 首页 > 科技观察

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

时间:2023-03-17 12:01:45 科技观察

我们发现很多Mac用户都不太注意自身的安全,针对用户的恶意软件也逐渐增多,窃取用户隐私、监控用户日常行为、恶意推广广告等。因此,我们应该提高自身安全意识,警钟长鸣。0×01前言小霞是一个普通的Mac用户。有一天,他打算尝试用思维导图来记录工作和学习。他问他的同事小方:“Mac有什么好用的思维导图软件吗?”小方:“XMind,一款非常实用的思维导图软件。”小霞:“哪里可以下载?要钱吗?”方:“嘿,你有百度XMind破解版!不用花钱,安装就行!”小夏:“太方便了!我试试看!”0×02样例概述Xmind是一款实用的思维导图软件,正版官网售价高达99刀。当然,这个价格对于普通用户来说是承受不起的。通过搜索,很多网站都提供了破解版下载,可以对比相同版本号的正版。该样本收集了大量用户隐私信息并上传至第三方服务器。收集到的信息如下图所示。4.等等接下来,我们将对样本进行详细分析。0×03基本信息在Mac应用程序中,OSX系统下的Mach-O是一种可执行文件格式。程序运行解析Mach-O,然后链接到系统库文件和第三方动态库。我们使用MachOView在可执行文件的LoadCommands字段中分析记录程序的加载指令。LC_LOAD_DYLIB为程序加载的动态库,Name字段记录了动态库的路径。通常,程序会根据这个字段加载动态库。这里发现它加载了两个新的动态库文件libcJFishPoolHook.dylib和libXMindHook.dylib。另外,XMind是用Java编写的,移植到Mac平台,可执行文件不值得分析。总结起来,主要有以下几点:程序启动初始化,资源文件获取。加载.ini配置文件,获取启动参数键值对。解析参数,然后运行并加载Library(Java封装的动态库)。直接对比正版和破解版的包目录。在包中,我们发现了2个额外的dylib文件libC.JFishPoolHook.dyliblibXMindHook.dylib。2dylibs详细分析0×04dylib分析对于Mac/iOS中使用的dylibs,可以结合class-dump和hopper进行反汇编分析。class-dump是另一个用于分析MachO的开源工具。与MachOView类似,它可以根据MachO的偏移量找到符号表(SymbolTable),从而导出类名和方法名,但是它提供了很多用于导出MachO链接符号表的参数,适用于不同的架构。使用如下命令将类名和方法名导出到文件中:libC.JFishPoolHook.dyliblibXMindHook.dylib从导出结果来看,CJFishPoolHook类有多达16个成员,非常可疑。写动态库的程序员很老实,没有任何加密,类名和方法名的混淆,所以不难猜出qq号、微信号、手机号、邮箱号、操作系统、CPU的含义类型、内存、MAC地址、内网IP、公网IP、用户名、应用列表、设备ID、是否上传信息、应用打开关闭时间。第二个动态库的类方法较少。很明显可以猜到程序的函数被hook了,修改了程序的逻辑。主要方法有:init初始化方法ExChangeImp,MethodSwizzling动态交换函数指针,用于hookBuyHookCheckUpdatesHookHelpHookTitleHookOpenURLHookDateMenuItemHook***也使用了加密方法,该方法传入第一个参数(明文),第一个第二个参数key用于加密内容。@interfaceNSString(AES)+(id)AESDecrypt:(id)arg1password:(id)arg2;+(id)AESEncrypt:(id)arg1password:(id)arg2;@end@interfaceNSString(Number)-(BOOL)isPureFloat;-(BOOL)isPureLongLong;-(BOOL)isPureInt;@end0×05抓包分析通过上面的简单分析不难猜到,他将采集到的信息发送到服务器,分析了样本与服务器的通信通过抓包过程如下:第一次向服务器发送checklocked,返回值为0,表示可以传输设备信息,下次数据用于上传用户信息。正文是AES加密后的base-encoded密文。由于密钥已经存在,我们可以尝试解密请求密文。通过静态分析得知,它使用的是AES加密算法,密钥是硬编码在代码中的。结合上面的过程,了解到加密算法的第一个参数是kCCEncrypt,第二个是kCCAlgorithmAES128,第三个是加密填充模式kCCOptionECBMode。基于此,我们写的AES解密方法应该是:CCCryptorStatuscryptStatus=CCCrypt(kCCDecrypt,kCCAlgorithmAES128,kCCOptionECBMode,//ECBModekeyPtr,kCCKeySizeAES128,iv,[selfbytes],dataLength,/*input*/buffer,bufferSize,/*output*/numBytesEncrypted);密钥是:iMdpgSr642Ck:7!@解密后的密文如下看看这个样本是如何获取到这些用户的隐私的。0×06用户隐私收集静态分析CJFishPoolHook.dylib会获取用户隐私信息,流程如下在应用初始化过程中,单例类的CJFishPoolHook执行初始化Init,然后在Init方法中进行初始化成员操作,包括以上16条消息。初始化完成后,开始抓取用户信息startCapture。其中包括获取用户联系方式(getContact)、获取设备信息(getDevice)、判断设备是否需要上传信息(checkLocked)、获取应用ID(getProduct)、获取设备上的应用列表(getFeature),以及获取地理位置(getLocation),获取开始时间(getHabitStart)。最后一步是将所有数据上传到服务器,并使用AES加密算法对httpbody进行加密。恶意收集QQ信息、电话号码、微信号、应用列表应用从Library/Containers/com.tencent.qq/Data/Library/ApplicationSupport/QQ目录获取个人QQ信息。在这个目录中,保存着用户的临时聊天记录、截图等信息。从/Applications遍历机器上安装的应用程序,形成一个应用程序列表。恶意推广libCJFishPoolHook.dylib修改更新xmind官网,推广自有广告站点进程注入,使用MethodSwizzlinghookMenuItem、Button等按钮使其失效或重定向到其他网站,拦截注册激活检查更新功能。难怪启动app后发现激活按钮无效,无法更新版本,购买激活产品跳转至其他网站。0×07小结本次逆向分析过程清晰,仅从网络传输和静态分析就可以了解到重新打包后的应用运行状态的全过程。对于这家公司收集用户信息的行为,我不想过多评论。主要从两个方面来概括。对于开发者来说,有必要了解一些基本的防御方法,注意网络传输安全和存储安全。将编码的密钥放在应用程序中也很好。软件是否会被破解,密钥是否会泄露,我们无从知晓,一旦暴露,很容易被用来解密密文信息。此外,直接使用基本编码内容、数据位或操作编码更易于分析。同时,我们可以通过混淆加密、反调试等手段来增加软件破解的难度。另一方面,从用户的角度来看,下载安装未经验证的软件是一件非常危险的事情,比如著名的XcodeGhost事件,其实就是开发者安装了未经官方验证的开发软件,导致开发的程序带有是窃取和上传大量用户信息的后门。本文所描述的只是个人信息安全的一角,但它的存在不容忽视。就像本文libCJFishPoolHook的名字一样,真正的意思是一个鱼池。软件使用者是一条鱼,养在饼干的鱼塘里。等鱼长大了,就应该收起来。在过去的六年里,Mac的销量一直在增长,这意味着越来越多的苹果用户。用户多了,生态系统中的软件产量必然会增加,更多的恶意软件会浑水摸鱼Mac恶意软件发展史