这一次, 小程演示怎么让一个 App 自动地运行, 从而代替手工的操作. 同样以 "微信" 以例, 实现在一个微信群里面, 对所有的成员, 自动地一个一个地发出添加好友的请求.
知识点还是之前介绍的东西, 流程方面还是跟踪与最终注入. 因为这是一个系列的文章讲解(微信公众号 "广州小程" -> 逆向开发), 所以读者可以联系前面的文章来理解, 用自己的话 "翻译" 成自己的知识与经验.
本文解决一个问题: 如何让第三方程序自动化地运行.
(一)批量添加好友的效果
小程使用 "奇哥" 的账号, 在某个群里面向所有人请求加好友, 程序运行的效果是这样的:
同样, 如果是附近的人, 也可以做到自动批量地发出请求:
需要解释一下, 这种批量加好友的行为是被微信限制的, 并且会对违规者作出处罚. 那加人的限制是怎么样的? 小程在网上找了一个说法, 读者可以了解一下:
2017 + 微信加人限制规则:
微信群: 最多每天 30~50 个, 保险是 20 人, 超过对方收不到验证信息.
附近的人: 15 个每次, 每天最多 3 次, 每次之间最少间隔 * 分钟;
摇一摇: 15 个每次, 每天最多 3 次, 每次之间最少间隔 * 分钟;
搜索微信号: 6 个每次, 每天最多 5 次, 每次之间最少间隔 * 分钟;
手机通讯录: 8 个每次, 每天最多 6 次, 每次之间最少间隔 * 分钟;
漂流瓶: 5 个每次, 每天最多 3 次, 每次之间最少间隔 * 分钟;
主动加好友: 每天每个微信号, 最多 30 个;
被动加好友: 每天每个微信号, 最多 180 个.
如果被限制了, 会有什么表现呢? 首先, 不会有特别的通知告诉你, 但你发送的请求不会去到别人那里(如果是在 "附近的人", 那就是你可以看到别人, 而别人看不到你; 你打呼, 别人不会收到.), 而且, 需要过一个星期或更长时间, 才能正常 "交流".
所以, 应该慎用批量加好友的功能.
小程在这里只是演示 "如何自动化", 目的并非加好友.
(二)如何实现
先是跟踪目标函数.
(1)群成员列表的界面类是什么?
由此可见, ChatRoomInfoViewController 是一个目标, 它的结构是这样的:
注意 m_arrMemberList 这个变量, 它就是所有群成员的数组, 每一个成员是一个 CContact.
(2)点击每一个群成员
点击一个成员, 就是调用 - (void)openContactInfo:(id)arg1 这个函数, 传入的就是成员.
可以想像, 只要循环调用这个函数, 并传入不同的成员, 就可以达到批量点击成员的目的.
(3)触发添加成员
点击成员后, 进到 "成员详细资料" 页面, 这个页面所在类是这样的:
再作一些猜测与跟踪, 就可以知道, 点击 "添加到通讯录", 触发的函数是 ContactInfoViewController::onSendVerifyMsg.
(4)发送请求
到了这一步, 就是填写打招呼的内容了. 一个好的招呼应该是带上对方昵称的, 而这个昵称可以从成员信息中取得. 如果微信的 UITextField 有长度限制 (有些版本作了限制) 的话, 还可以重写文本框的回调以取消限制.
发送请求的类:
(三)总结
小程在这里给出一个批量自动化的思路:
手动进到群成员列表, 然后进入自动化流程.
在 ChatRoomInfoViewController::viewDidLoad 完成时, 取得 m_arrMemberList 即成员列表, 循环打开每个成员.
使用 CContact::isMyContact, 判断成员是否已经添加过了, 如果是则下一个成员.
每点击一个成员时, 设置一个变量的状态, 然后进入等待, 直到这个变量的状态变化, 再进入下一个成员的点击.
点击成员, 进入到 "详细资料" 界面, 同时, UINavigationController 进入等待若干秒(比如 4 秒), 若干秒后执行返回操作(不管最终是否添加成功).
进入验证界面, 在 SendVerifyMsgViewController::viewDidLoad 时, 设置好 UITextField 的内容, 再触发 onSendVerifyMsg 的调用.
验证如果成功, 则验证界面会自动消失, 如果失败 (失败有回调) 则需要主动调用一下成功时的调用使得验证界面消失. 这时即使有 alertview 弹框也不影响后续的操作.
UINavigationController 执行返回操作, 并设置可以下一个成员.
ChatRoomInfoViewController 执行下一个成员.
总结一下, 这一次演示了自动添加好友的实现, 重点在于对基础技能的运用.
来源: https://www.cnblogs.com/freeself/p/10715926.html