posts - 186,  comments - 17,  views - 35万
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

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

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

 

 
分类: iOS , Linux
 
posted on   ZOYOO  阅读(1426)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示