0x00  一点废话

最近因为Mac软件收费的比较多,所以买了几款正版软件,但是有的软件卖的有点贵,买了感觉不值,不买吧,又觉得不方便,用别人的吧,又怕不安全。于是我就买了正版的Hopper Disassembler然后把这些软件分析一下[滑稽]。

本文cnblog的图片不怎么清楚,提供高清PDF下载。

https://my.pcloud.com/publink/show?code=XZKaIy7ZS5cfJax4mih0UCu985wrczJ17du7

0x01 所需工具

调试工具

Hopper Disassembler (最好正版)

内核追踪

dtrace(系统自带)

0x02 QQ防撤回

先把QQ的主程序拽到我们的Hopper里边,等待它全部分析完,没分析完的时候,右下角有一个红色的Working。它分析完后大概是这个样子。

这时候我们需要寻找一个撤回的类。QQ的这个撤回的类叫QQMessageRevokeEngine(QQ消息撤回引擎)。我们继续查找这个类下面的方法。

这个时候发现该类有如下方法:

[QQMessageRevokeEngine init]

[QQMessageRevokeEngine onDidChangeAccount]

[QQMessageRevokeEngine handleRecallNotify:isOnline:]

[QQMessageRevokeEngine getProcessor]

[QQMessageRevokeEngine revokeMessage:completion:]

[QQMessageRevokeEngine handleRevokeC2CMsgResp:completion:]

[QQMessageRevokeEngine handleRevokeGroupMsgResp:completion:]

[QQMessageRevokeEngine setC2CReqWithMsgArray:drawReq:]

[QQMessageRevokeEngine setClusterReqWithMsgArray:drawReq:]

[QQMessageRevokeEngine .cxx_destruct]

发现init方法,这个是初始化的方法,我们只需要将这个方法给return掉,整个撤回引擎就没用了。

方法头部ret,然后保存测试下,这里会问你是否移除签名,直接移除即可。

保存替换原文件。

和手机端对比下。

0x02 微信防撤回

跟QQ防撤回差不多所以这里不细说,先载入Hopper。查找onRevoke关键字,找到MessageService onRevokeMsg:这个方法,直接return。但是有一点需要注意,就是微信Hopper分析的时间有点长。

保存测试。

0x03 某商业软件分析

QQ和微信都是很好解决的毕竟有Revoke这个关键字,但是接下来我们分析的这个软件,是个VPN连接工具,需要动态内核追踪。因为当时我找不到它的类关键字。

首先,直接打开软件发现这个窗口。提示我们需要激活license。

看来,我们需要先把这个窗口干掉。

先载入Hopper,发现所有跟License有关的方法都在NUShimo这个类里边。

那我们就使用dtrace去监听这个NUShimo类。关掉Hopper,打开一个终端窗口。

打开我们的试用软件。先获取PID然后用dtrace开始监听试用软件。

然后 发现:

NUShimo的这个applicationDidBecomeActive方法好像可以patch掉。

看一眼伪代码发现确实是弹那个激活的窗口的方法。直接头部ret。

保存,然后测试一下。

确实不弹需要注册的窗口了,但是还是不能连接VPN。

看来还得处理这个弹框啊,这个弹框我就懒的用dtrace追踪了,使用字符串查找方法吧。

我们看到它弹的是 You need to activate什么什么的,Hopper搜索这个字符串。

继续追踪调用这个字符串的地方。

再次查找上层调用。

发现来到了这个地方。

发现这个,看一眼伪代码。

发现只要让这个if成立就可以跳过这个框。

这个je跳转是关键跳,直接改成jne。然后保存测试执行。

OK成功,这样虽然显示无效的liense和试用到期,但是依然可以连接VPN。

本文来自 突突兔@Nixi_Team

请尊重版权,转载请通过本人许可。

[软件逆向]实战Mac系统下的软件分析+Mac QQ和微信的防撤回的更多相关文章

  1. ubuntu系统下创建软件桌面快捷方式

    转自ubuntu系统下创建软件桌面快捷方式 默认情况下,ubuntu会将自动安装的软件快捷方式保存在/usr/share/applications目录下,如果我们要创建桌面快捷方式,只需要右键-复制- ...

  2. Mac系统下Datagrip打不开、点击没反应?

    有没有可能是因为你从网上下载了一些破解软件导致的? 背景 Mac系统下JB公司家的IDEA. Datagrip.PyCharm 或 Goland 打不开点击没反应-- 分析 大概率是之前安装过 汉化插 ...

  3. Mac系统下React Native环境搭建

    这里记录一下在Mac系统下搭建React Native开发环境的过程: 1. 安装HomeBrew: /usr/bin/ruby -e "$(curl -fsSL https://raw.g ...

  4. MAC系统下,删除.svn文件

    MAC系统下,.svn文件是隐藏的. 如果项目是非export导出的,那么项目中会有很多的.svn文件. 如果项目的体积非常庞大,我们如何快速的批量删除.svn文件呢?下面是操作方法: 打开终端,cd ...

  5. Mac系统下使用VirtualBox虚拟机安装win7--第一步 安装vbox虚拟机

    Mac系统下使用VirtualBox虚拟机安装win7操作步骤: 第一步 安装vbox虚拟机 1.先下载vbox,下载地址:: https://www.virtualbox.org/wiki/Down ...

  6. 曲线救国,解决Mac系统下,Android sdk下载失败的问题

    Mac下翻_墙的问题 话说GFW屏蔽谷歌已经有一阵子了,最近打算在Mac系统下折腾个Android应用,备好了IDE,只欠SDK,无奈下载时因为GFW的缘故,总是失败,我心痛哉! 由于本人偏爱Mac系 ...

  7. MAC系统下Sublime Text3 配置Python3详细教程

    MAC系统下Sublime Text3 配置Python3详细教程(亲测有效) https://blog.csdn.net/weixin_41768008/article/details/798590 ...

  8. Mac系统下编译支持Android平台的最新X264编码器

    Mac系统下编译支持Android平台的最新X264编码器 原文来自 http://www.mingjianhua.com,转载请注明出处 1.首先去官网下载最新的x264源代码,解压到任意目录 ht ...

  9. mac系统下ionic环境配置

    本人是在mac环境下进行配置的: 下载nodejs:https://nodejs.org/download/ 并双击安装 Cordova and Ionic command-line tools 安装 ...

随机推荐

  1. git 服务器搭建及提交代码检查

    本地 git 服务,通常都会选择 gitlab.本人最先也是选择 gitlab,在 centos7 上按照官网的步骤进行安装,下载的速度难以忍受,无奈放弃.最终选择在 docker 中安装 gogs ...

  2. F#周报2019年第17期

    新闻 .NET版本的Apache Spark Apache Spark预览版介绍 F# Apache Spark示例 微软Build 2019大会(5月6日至8日) Rider用于F#的解决方案内的重 ...

  3. chrome如何添加扩展程序及登录

    https://jingyan.baidu.com/album/7e440953191a2b2fc0e2ef0c.html?picindex=3

  4. 获取 BaiduMapSDKDemo SHA1 签名

    用 Android Studio 1.5 运行 BaiduMapsApiASDemo 时,显示 key 验证出错. 原因在于用 keytool -list -keystore debug.keysto ...

  5. 边缘化搭建 DotNet Core 2.1 自动化构建和部署环境(上)

    写在前面 写这篇文章的缘由是由于笔者的对新兴技术方向有所追求,但个人资产有限,只能容许购买一台阿里云低配1核2G服务器.服务器上搭建了 Centos7 & Docker & Jenki ...

  6. 数字对讲系统开发札记(前端linux c 后端 c#)

    前言 数字化是一种趋势,特别是在“提速降费”的大环境下,这种趋势愈发明显.对讲机这种古老的系统也处在时代的变革之中,虽然手机的功能越来越强,让人怀疑对讲机是否还有存在的必要.诚然,对讲机仍然有它的市场 ...

  7. C#效率优化(3)-- 使用foreach时避免装箱

    Introduction: ※本文不是在描述旧版本Unity中mono编译器导致的foreach语句额外装箱错误 博主是一名Unity 3D游戏开发者,游戏使用C#+lua开发,最近在优化C#代码时, ...

  8. Docker两种方式进入后台运行的容器

    1.在启动容器的时候,有时候我们加了参数-d,这时容器自动进入后台运行.如果我们要进入容器,该怎么办?通常使用docker attach命令和nsenter工具. 2.docker attach是Do ...

  9. JavaWeb学习 (十一)————Session

    一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务 ...

  10. 设计模式-----Builder模式

    前言 近日,看到Myabtis中组件中SqlSessionFactory由SqlSessionFactoryBuilder().build()生成时,且采用Builder模式,遂记录学习之. SqlS ...