iOS:通過MonkeyDev逆向微信運動,簡單粗暴非越獄

前言


前一段時間,一直忙于面試,也沒做研究什么稀奇古怪的技術(shù).近來也是學(xué)習(xí)了幾天的iOS逆向工程方面的知識,這里就班門弄斧下,看看如何通過逆向工程來修改微信運動數(shù)據(jù).先看一下效果圖.



前期準備


在逆向之前我們需要準備一下以下工作.以方便我們的逆向功能能順利開發(fā).

需要技能:

1.懂基本的終端指令以及操作.

2.會使用Xcode.

3.一臺未越獄的iPhone.


1. 安裝PP助手

PP助手這是主要的功能是下載越獄ipa文件,也就是脫殼文件.這里是什么脫殼文件就不過描述了.


2. 安裝class-dump

class-dump主要是用來查看脫殼之后的Mach-O文件的所能暴露出來的頭文件.如何安裝呢?

方式一:可以直接從下面的下載地址中直接下載運行好的class-dump文件.

→ → →class-dump下載傳送門

方式二:也可以去github搜索class-dump下載xcode工程運行取出Finder中的class-dump.

然后把class-dump復(fù)制到/usr/local/bin/class-dump即可(OS X 10.11以上).

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


3. 安裝MonkeyDev

其實為什么安裝MonkeyDev呢?MonkeyDev是集成與OpenDev的,但是OpenDev在13年就不在更新了,所以AloneMonkey就在此基礎(chǔ)上做了進一步的更新,而且更加簡單,更加傻瓜式.具體安裝步驟可以查看原文博客.

MonkeyDev原文安裝鏈接

安裝完成之后,在新建項目的時候就會有如下的模塊.


修改微信運動數(shù)據(jù)的邏輯原理


整體的示意圖如上圖所示.我們把通過PP助手下載的越獄ipa文件通過class-dump指令來查看所有包含類的頭文件.然后編寫動態(tài)庫.通過runtime的機制動態(tài)注入到破殼文件中.然后對注入完成的文件進行重新簽名,最后安裝應(yīng)用程序.

其中MonkeyDev的作者已經(jīng)把其中的三步進行了封裝,我玩了玩之后,發(fā)現(xiàn)相當?shù)暮唵未直o腦.


通過PP助手下載破殼ipa文件


我們打開PP助手,然后通過"越獄程序"模塊下載"微信",如下所示.

下載完成之后,在Finder里面找到對應(yīng)的ipa文件 拿出來備用.如下圖所示.


通過Class-dump指令查看所有頭文件信息(本文可不操作)


首先,我們先把.ipa文件進行解壓.如下所示.


解壓之后找到里面的WeChat,然后顯示包內(nèi)容.

找到包里面的WeChat文件,如下所示.

拿出來.然后使用下面class-dump指令格式

class-dump -H "Mach-O文件路徑" -o "導(dǎo)出Headers文件的路徑"

這里我直接把WeChat這個Mach-O文件放到了桌面之上.所以指令如下圖所示.

執(zhí)行完成之后,我們就可以看到桌面上多了一個Headers的文件夾,打開之后全是WeChat里面的頭文件.然后我們可以使用Sublime Text這個工具快速查找我們所要的類.如下所示.


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


使用MonkeyDev完成三部曲.


這時候我們就創(chuàng)建一個MonkeyApp工程出來.如下所示.

緊接著.我們需要做的就是把我們的ipa文件放到指定位置(當然是放在工程目錄下了,這里就不多說了.).然后添加到工程中去.里面的put ipa or app here文件不要刪除.

接著我們就需要編譯所需要的動態(tài)庫就好.編寫DemoDylib.m文件就好.


把DemoDylib.m文件中所有的內(nèi)容刪除(除導(dǎo)入頭文件外).添加如下代碼.

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; //隨意改數(shù) 
}  
  
  
  
CHConstructor // code block that runs immediately upon load  
{  
    @autoreleasepool  
    {  
        CHLoadLateClass(WCDeviceStepObject);  
        CHHook(0, WCDeviceStepObject,m7StepCount);  
    }  
}  

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

然后運行完動態(tài)庫,在運行App,即可安裝成功兩個微信.

這時候就算大功告成了.打開新安裝的微信運動即可.等待幾分鐘數(shù)據(jù)就可修改完成代碼中的數(shù)字了.


結(jié)束


到此就結(jié)束了本篇博客,騷棟班門弄斧了,Demo過大,這里就不上傳了,如果有問題,歡迎指導(dǎo)批評.騷棟在此謝過了.


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容