iOS逆向開(kāi)發(fā)之微信自動(dòng)添加好友功能
這一次,小程演示怎么讓一個(gè)APP自動(dòng)地運(yùn)行,從而代替手工的操作。同樣以“微信”以例,實(shí)現(xiàn)在一個(gè)微信群里面,對(duì)所有的成員,自動(dòng)地一個(gè)一個(gè)地發(fā)出添加好友的請(qǐng)求。
知識(shí)點(diǎn)還是之前介紹的東西,流程方面還是跟蹤與最終注入。因?yàn)檫@是一個(gè)系列的文章講解(微信公眾號(hào)“廣州小程” -> 逆向開(kāi)發(fā)),所以讀者可以聯(lián)系前面的文章來(lái)理解,用自己的話“翻譯”成自己的知識(shí)與經(jīng)驗(yàn)。
本文解決一個(gè)問(wèn)題:如何讓第三方程序自動(dòng)化地運(yùn)行。
(一)批量添加好友的效果
小程使用“奇哥”的賬號(hào),在某個(gè)群里面向所有人請(qǐng)求加好友,程序運(yùn)行的效果是這樣的:

同樣,如果是附近的人,也可以做到自動(dòng)批量地發(fā)出請(qǐng)求:

需要解釋一下,這種批量加好友的行為是被微信限制的,并且會(huì)對(duì)違規(guī)者作出處罰。那加人的限制是怎么樣的?小程在網(wǎng)上找了一個(gè)說(shuō)法,讀者可以了解一下:
2017+微信加人限制規(guī)則:
微信群:最多每天30~50個(gè),保險(xiǎn)是20人,超過(guò)對(duì)方收不到驗(yàn)證信息。
附近的人:15個(gè)每次,每天最多3次,每次之間最少間隔×分鐘;
搖一搖:15個(gè)每次,每天最多3次,每次之間最少間隔×分鐘;
搜索微信號(hào):6個(gè)每次,每天最多5次,每次之間最少間隔×分鐘;
手機(jī)通訊錄:8個(gè)每次,每天最多6次,每次之間最少間隔×分鐘;
漂流瓶:5個(gè)每次,每天最多3次,每次之間最少間隔×分鐘;
主動(dòng)加好友:每天每個(gè)微信號(hào),最多30個(gè);
被動(dòng)加好友:每天每個(gè)微信號(hào),最多180個(gè)。
如果被限制了,會(huì)有什么表現(xiàn)呢?首先,不會(huì)有特別的通知告訴你,但你發(fā)送的請(qǐng)求不會(huì)去到別人那里(如果是在“附近的人”,那就是你可以看到別人,而別人看不到你;你打呼,別人不會(huì)收到。),而且,需要過(guò)一個(gè)星期或更長(zhǎng)時(shí)間,才能正?!敖涣鳌薄?/p>
所以,應(yīng)該慎用批量加好友的功能。
小程在這里只是演示“如何自動(dòng)化”,目的并非加好友。
(二)如何實(shí)現(xiàn)
先是跟蹤目標(biāo)函數(shù)。
(1)群成員列表的界面類是什么?

由此可見(jiàn),ChatRoomInfoViewController是一個(gè)目標(biāo),它的結(jié)構(gòu)是這樣的:

注意m_arrMemberList這個(gè)變量,它就是所有群成員的數(shù)組,每一個(gè)成員是一個(gè)CContact。
(2)點(diǎn)擊每一個(gè)群成員
點(diǎn)擊一個(gè)成員,就是調(diào)用- (void)openContactInfo:(id)arg1 這個(gè)函數(shù),傳入的就是成員。
可以想像,只要循環(huán)調(diào)用這個(gè)函數(shù),并傳入不同的成員,就可以達(dá)到批量點(diǎn)擊成員的目的。
(3)觸發(fā)添加成員
點(diǎn)擊成員后,進(jìn)到“成員詳細(xì)資料”頁(yè)面,這個(gè)頁(yè)面所在類是這樣的:

再作一些猜測(cè)與跟蹤,就可以知道,點(diǎn)擊“添加到通訊錄”,觸發(fā)的函數(shù)是
ContactInfoViewController::onSendVerifyMsg。
(4)發(fā)送請(qǐng)求
到了這一步,就是填寫打招呼的內(nèi)容了。一個(gè)好的招呼應(yīng)該是帶上對(duì)方昵稱的,而這個(gè)昵稱可以從成員信息中取得。如果微信的UITextField有長(zhǎng)度限制(有些版本作了限制)的話,還可以重寫文本框的回調(diào)以取消限制。
發(fā)送請(qǐng)求的類:

(三)總結(jié)
小程在這里給出一個(gè)批量自動(dòng)化的思路:
手動(dòng)進(jìn)到群成員列表,然后進(jìn)入自動(dòng)化流程。
在ChatRoomInfoViewController::viewDidLoad完成時(shí),取得m_arrMemberList即成員列表,循環(huán)打開(kāi)每個(gè)成員。
使用CContact::isMyContact,判斷成員是否已經(jīng)添加過(guò)了,如果是則下一個(gè)成員。
每點(diǎn)擊一個(gè)成員時(shí),設(shè)置一個(gè)變量的狀態(tài),然后進(jìn)入等待,直到這個(gè)變量的狀態(tài)變化,再進(jìn)入下一個(gè)成員的點(diǎn)擊。
點(diǎn)擊成員,進(jìn)入到“詳細(xì)資料”界面,同時(shí),UINavigationController進(jìn)入等待若干秒(比如4秒),若干秒后執(zhí)行返回操作(不管最終是否添加成功)。
進(jìn)入驗(yàn)證界面,在SendVerifyMsgViewController::viewDidLoad時(shí),設(shè)置好UITextField的內(nèi)容,再觸發(fā)onSendVerifyMsg的調(diào)用。
驗(yàn)證如果成功,則驗(yàn)證界面會(huì)自動(dòng)消失,如果失敗(失敗有回調(diào))則需要主動(dòng)調(diào)用一下成功時(shí)的調(diào)用使得驗(yàn)證界面消失。這時(shí)即使有alertview彈框也不影響后續(xù)的操作。
UINavigationController執(zhí)行返回操作,并設(shè)置可以下一個(gè)成員。
ChatRoomInfoViewController執(zhí)行下一個(gè)成員。
總結(jié)
以上所述是小編給大家介紹的iOS逆向開(kāi)發(fā)之微信自動(dòng)添加好友功能,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!
相關(guān)文章
iOS?Lotusoot模塊化工具應(yīng)用的動(dòng)態(tài)思路
項(xiàng)目的不斷更迭,導(dǎo)致項(xiàng)目越來(lái)越大,越來(lái)越臃腫,為了讓項(xiàng)目更加條理,需要對(duì)項(xiàng)目進(jìn)行模塊化處理,為了減少模塊之間的耦合,于是就有了Lotusoot這個(gè)工具2022-08-08
NSURLSession跨域重定向透?jìng)鱄TTP Header問(wèn)題解決
這篇文章主要為大家介紹了NSURLSession跨域重定向透?jìng)鱄TTP Header問(wèn)題解決方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
iOS實(shí)現(xiàn)動(dòng)態(tài)自適應(yīng)標(biāo)簽
這篇文章主要為大家詳細(xì)介紹了iOS動(dòng)態(tài)自適應(yīng)標(biāo)簽的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
iOS實(shí)現(xiàn)帶動(dòng)畫的環(huán)形進(jìn)度條
這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)帶動(dòng)畫的環(huán)形進(jìn)度條,同時(shí)帶數(shù)字同步效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01
iOS體驗(yàn)性優(yōu)化之RTL適配右滑返回的實(shí)現(xiàn)
這篇文章主要給大家介紹了關(guān)于iOS體驗(yàn)性優(yōu)化之RTL適配右滑返回實(shí)現(xiàn)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01
iOS開(kāi)發(fā)實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能
這篇文章主要為大家詳細(xì)介紹了iOS開(kāi)發(fā)實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
詳解iOS學(xué)習(xí)筆記(十七)——文件操作(NSFileManager)
這篇文章主要介紹了詳解iOS學(xué)習(xí)筆記(十七)——文件操作(NSFileManager),具有一定的參考價(jià)值,有需要的可以了解一下。2016-12-12

