前言
前一段時(shí)間,一直忙于面試,也沒(méi)做研究什么稀奇古怪的技術(shù).近來(lái)也是學(xué)習(xí)了幾天的iOS逆向工程方面的知識(shí),這里就班門(mén)弄斧下,看看如何通過(guò)逆向工程來(lái)修改微信運(yùn)動(dòng)數(shù)據(jù).先看一下效果圖.
前期準(zhǔn)備
在逆向之前我們需要準(zhǔn)備一下以下工作.以方便我們的逆向功能能順利開(kāi)發(fā).
需要技能:
1.懂基本的終端指令以及操作.
2.會(huì)使用Xcode.
3.一臺(tái)未越獄的iPhone.
1. 安裝PP助手
PP助手這是主要的功能是下載越獄ipa文件,也就是脫殼文件.這里是什么脫殼文件就不過(guò)描述了.
2. 安裝class-dump
class-dump主要是用來(lái)查看脫殼之后的Mach-O文件的所能暴露出來(lái)的頭文件.如何安裝呢?
方式一:可以直接從下面的下載地址中直接下載運(yùn)行好的class-dump文件.
方式二:也可以去github搜索class-dump下載xcode工程運(yùn)行取出Finder中的class-dump.
然后把class-dump復(fù)制到/usr/local/bin/class-dump即可(OS X 10.11以上).
這時(shí)候我們直接在終端上敲出class-dump指令了.如下所示.
3. 安裝MonkeyDev
其實(shí)為什么安裝MonkeyDev呢?MonkeyDev是集成與OpenDev的,但是OpenDev在13年就不在更新了,所以AloneMonkey就在此基礎(chǔ)上做了進(jìn)一步的更新,而且更加簡(jiǎn)單,更加傻瓜式.具體安裝步驟可以查看原文博客.
安裝完成之后,在新建項(xiàng)目的時(shí)候就會(huì)有如下的模塊.
修改微信運(yùn)動(dòng)數(shù)據(jù)的邏輯原理
整體的示意圖如上圖所示.我們把通過(guò)PP助手下載的越獄ipa文件通過(guò)class-dump指令來(lái)查看所有包含類(lèi)的頭文件.然后編寫(xiě)動(dòng)態(tài)庫(kù).通過(guò)runtime的機(jī)制動(dòng)態(tài)注入到破殼文件中.然后對(duì)注入完成的文件進(jìn)行重新簽名,最后安裝應(yīng)用程序.
其中MonkeyDev的作者已經(jīng)把其中的三步進(jìn)行了封裝,我玩了玩之后,發(fā)現(xiàn)相當(dāng)?shù)暮?jiǎn)單粗暴無(wú)腦.
通過(guò)PP助手下載破殼ipa文件
我們打開(kāi)PP助手,然后通過(guò)"越獄程序"模塊下載"微信",如下所示.
下載完成之后,在Finder里面找到對(duì)應(yīng)的ipa文件 拿出來(lái)備用.如下圖所示.
通過(guò)Class-dump指令查看所有頭文件信息(本文可不操作)
首先,我們先把.ipa文件進(jìn)行解壓.如下所示.
解壓之后找到里面的WeChat,然后顯示包內(nèi)容.
找到包里面的WeChat文件,如下所示.
拿出來(lái).然后使用下面class-dump指令格式
class-dump -H "Mach-O文件路徑" -o "導(dǎo)出Headers文件的路徑"
這里我直接把WeChat這個(gè)Mach-O文件放到了桌面之上.所以指令如下圖所示.
執(zhí)行完成之后,我們就可以看到桌面上多了一個(gè)Headers的文件夾,打開(kāi)之后全是WeChat里面的頭文件.然后我們可以使用Sublime Text這個(gè)工具快速查找我們所要的類(lèi).如下所示.
我們主要是用到的是WCDeviceStepObject中的m7StepCount這個(gè)屬性.只要我們修改這個(gè)值就可以修改微信運(yùn)動(dòng)里面的步數(shù)了.
使用MonkeyDev完成三部曲.
這時(shí)候我們就創(chuàng)建一個(gè)MonkeyApp工程出來(lái).如下所示.
緊接著.我們需要做的就是把我們的ipa文件放到指定位置(當(dāng)然是放在工程目錄下了,這里就不多說(shuō)了.).然后添加到工程中去.里面的put ipa or app here文件不要?jiǎng)h除.
接著我們就需要編譯所需要的動(dòng)態(tài)庫(kù)就好.編寫(xiě)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);
}
}
編寫(xiě)完成之后這里有個(gè)坑就是不讓使用runtime庫(kù),修改如圖位置即可,改為NO.
然后運(yùn)行完動(dòng)態(tài)庫(kù),在運(yùn)行App,即可安裝成功兩個(gè)微信.
這時(shí)候就算大功告成了.打開(kāi)新安裝的微信運(yùn)動(dòng)即可.等待幾分鐘數(shù)據(jù)就可修改完成代碼中的數(shù)字了.
結(jié)束
到此就結(jié)束了本篇博客,騷棟班門(mén)弄斧了,Demo過(guò)大,這里就不上傳了,如果有問(wèn)題,歡迎指導(dǎo)批評(píng).騷棟在此謝過(guò)了.