
前言
前一段時間,一直忙於面試,也沒做研究什麼稀奇古怪的技術.近來也是學習了幾天的iOS逆向工程方面的知識,這裡就班門弄斧下,看看如何通過逆向工程來修改微信運動資料.先看一下效果圖.


前期準備
在逆向之前我們需要準備一下以下工作.以方便我們的逆向功能能順利開發.
需要技能:
1.懂基本的終端指令以及操作.
2.會使用Xcode.
3.一臺未越獄的iPhone.
#####1. 安裝PP助手
PP助手這是主要的功能是下載越獄ipa檔案,也就是脫殼檔案.這裡是什麼脫殼檔案就不過描述了.

#####2. 安裝class-dump
class-dump主要是用來檢視脫殼之後的Mach-O檔案的所能暴露出來的標頭檔案.如何安裝呢?
方式一:可以直接從下面的下載地址中直接下載執行好的class-dump檔案.
方式二:也可以去github搜尋class-dump下載xcode工程執行取出Finder中的class-dump.

然後把class-dump複製到**/usr/local/bin/class-dump**即可(OS X 10.11以上).

這時候我們直接在終端上敲出class-dump指令了.如下所示.

#####3. 安裝MonkeyDev 其實為什麼安裝MonkeyDev呢?MonkeyDev是整合與OpenDev的,但是OpenDev在13年就不在更新了,所以AloneMonkey就在此基礎上做了進一步的更新,而且更加簡單,更加傻瓜式.具體安裝步驟可以檢視原文部落格.
安裝完成之後,在新建專案的時候就會有如下的模組.

修改微信運動資料的邏輯原理

整體的示意圖如上圖所示.我們把通過PP助手下載的越獄ipa檔案通過class-dump指令來檢視所有包含類的標頭檔案.然後編寫動態庫.通過runtime的機制動態注入到破殼檔案中.然後對注入完成的檔案進行重新簽名,最後安裝應用程式.
其中MonkeyDev的作者已經把其中的三步進行了封裝,我玩了玩之後,發現相當的簡單粗暴無腦.
通過PP助手下載破殼ipa檔案
我們開啟PP助手,然後通過"越獄程式"模組下載"微信",如下所示.

下載完成之後,在Finder裡面找到對應的ipa檔案 拿出來備用.如下圖所示.

通過Class-dump指令檢視所有標頭檔案資訊(本文可不操作)
首先,我們先把.ipa檔案進行解壓.如下所示.

解壓之後找到裡面的WeChat,然後顯示包內容.

找到包裡面的WeChat檔案,如下所示.

拿出來.然後使用下面class-dump指令格式
class-dump -H "Mach-O檔案路徑" -o "匯出Headers檔案的路徑"
這裡我直接把WeChat這個Mach-O檔案放到了桌面之上.所以指令如下圖所示.

執行完成之後,我們就可以看到桌面上多了一個Headers的資料夾,開啟之後全是WeChat裡面的標頭檔案.然後我們可以使用Sublime Text這個工具快速查詢我們所要的類.如下所示.

我們主要是用到的是WCDeviceStepObject中的m7StepCount這個屬性.只要我們修改這個值就可以修改微信運動裡面的步數了.

使用MonkeyDev完成三部曲.
這時候我們就建立一個MonkeyApp工程出來.如下所示.

緊接著.我們需要做的就是把我們的ipa檔案放到指定位置(當然是放在工程目錄下了,這裡就不多說了.).然後新增到工程中去.裡面的put ipa or app here檔案不要刪除.

接著我們就需要編譯所需要的動態庫就好.編寫DemoDylib.m檔案就好.

把DemoDylib.m檔案中所有的內容刪除(除匯入標頭檔案外).新增如下程式碼.
CHDeclareClass(WCDeviceStepObject); // declare class
CHOptimizedMethod(0, self, unsigned int, WCDeviceStepObject, m7StepCount) // hook method (with no arguments and no return value)
{
// write code here ...
return 98888; //隨意改數
}
CHConstructor // code block that runs immediately upon load
{
@autoreleasepool
{
CHLoadLateClass(WCDeviceStepObject);
CHHook(0, WCDeviceStepObject,m7StepCount);
}
}
複製程式碼

編寫完成之後這裡有個坑就是不讓使用runtime庫,修改如圖位置即可,改為NO.

然後執行完動態庫,在執行App,即可安裝成功兩個微信.


這時候就算大功告成了.開啟新安裝的微信運動即可.等待幾分鐘資料就可修改完成程式碼中的數字了.

結束
到此就結束了本篇部落格,騷棟班門弄斧了,Demo過大,這裡就不上傳了,如果有問題,歡迎指導批評.騷棟在此謝過了.
