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
請尊重版權,轉載請通過本人許可。
