上一篇文章我們準(zhǔn)備了逆向所需的所有工具和文件,接著我們開(kāi)始對(duì)于企業(yè)微信的代碼進(jìn)行分析,這里沒(méi)有使用ida進(jìn)行反匯編分析是由于企業(yè)微信的代碼比較容易定位。
(一)cycript定位打卡頁(yè)面控制器
1. ssh到手機(jī),如果有不知道怎么用電腦連接手機(jī)的可以去看我上一篇文章或者百度一下,進(jìn)入企業(yè)微信所在進(jìn)程,cycript -p wework,查看企業(yè)微信的頁(yè)面結(jié)構(gòu)(圖1),我們可以看到tabBarController(圖2)
點(diǎn)擊進(jìn)入到打卡頁(yè)面,查看當(dāng)前控制器,并且在導(dǎo)出的企業(yè)微信頭文件中找到對(duì)應(yīng)控制器的.h文件(圖3),不難發(fā)現(xiàn)打卡控制器叫做WWKAttendanceBinaryCheckViewController。
(二)hook定位方法
找到WWKAttendanceBinaryCheckViewController對(duì)應(yīng)的.h文件,查看頭文件的相關(guān)方法屬性和引入很容易發(fā)現(xiàn)涉及到定位功能的類分別有WWKAttendanceBinaryCheckViewController ,WWKLocationRetriever,WWKLocationRetrieverBaseTask,他們之間的關(guān)系為WWKLocationRetrieverBaseTask使用騰訊地圖定位功能獲取當(dāng)前經(jīng)緯度代理回調(diào)到WWKLocationRetriever中,WWKAttendanceBinaryCheckViewController獲取WWKLocationRetriever中代理得到的最新經(jīng)緯度進(jìn)行地圖api接口調(diào)用得到當(dāng)前位置信息,判斷是否在打卡范圍內(nèi)。
我們hook出對(duì)應(yīng)的方法,將經(jīng)緯度修改為打卡范圍內(nèi)的任意經(jīng)緯度即可(圖4),這里我創(chuàng)建了一個(gè)單例,用于存放經(jīng)緯度,并且進(jìn)行是否hook該方法的判斷
(三)增加功能開(kāi)關(guān)
到這里為止我們已經(jīng)能夠達(dá)到預(yù)期的目的了,但是為了方便能夠隨時(shí)進(jìn)行切換修改定位功能,我在企業(yè)微信首頁(yè)的右上角彈窗中增加了一個(gè)開(kāi)關(guān),增加bool值判斷,增加一個(gè)item的方法也是獲取到當(dāng)前頁(yè)面中呈現(xiàn)的視圖類,hook了mItemsArray的set方法和tableView的點(diǎn)擊方法(圖5,圖6)
(四)總結(jié)
大功告成,command+r運(yùn)行在手機(jī)上,不管是越獄還是非越獄手機(jī)都沒(méi)有問(wèn)題,大家自己進(jìn)行嘗試吧,如果有任何的問(wèn)題歡迎溝通。
注:對(duì)于修改經(jīng)緯度實(shí)現(xiàn)不在范圍內(nèi)打卡不是本人的初衷,只是為了研究ios逆向,不會(huì)將此功能應(yīng)用在生活中,誠(chéng)信為本。