这一次,小程演示怎么让一个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执行下一个成员。

总结一下,这一次演示了自动添加好友的实现,重点在于对基础技能的运用。


iOS逆向开发(8):微信自动添加好友的更多相关文章

  1. iOS逆向开发(1):基础工具 | ssh | scp | socat

    小白:小程,我一直想问,什么是逆向来着?是逆向行驶吗? 小程:理解为逆向行驶也没错.一般的项目是从无到有,而逆向是从已有的状态入手,分析出已有的流程与结构的手段. iOS上的逆向开发,是一件有趣的事情 ...

  2. iOS逆向开发(6):微信伪造位置

    仍然以微信为例,实战地练习一下使用Reveal.iOSOpenDev等工具注入APP的流程,积累经验.这一系列的文章都是学习过程的总结,不带任何商业目的. 本文解决一个问题:如何伪造一个经纬度,在微信 ...

  3. iOS逆向开发(5):微信强制升级的突破 | 多开 | 微信5.0

    接下来的几篇文章,小程以微信为例,实战地演示一下:如何注入iOS的APP.其中使用到的知识,基本在前面的文章中都有介绍到. 小白:小程,我想用回旧版本的微信! 小程:为什么要用旧版本微信呢? 小白:你 ...

  4. iOS逆向开发(7):微信伪装他人

    上一节小程介绍了微信在进入"附近的人"时修改位置信息的办法,这一次,小程来修改"自己"的信息,伪装成别人. 但是,这里的伪装只是"本地的伪装" ...

  5. iOS逆向开发(4):注入目标函数 | fishhook | MobileSubstrate | MSHookFunction | iOSOpenDev

    从获得APP的所有类声明,到锁定目标类与函数,现在是时候注入函数了. 所谓"注入函数",小程的意思是让APP执行到小程写的代码中,跟"钩子"的概念一致.小程把个 ...

  6. iOS逆向开发(3):锁定APP的目标类与函数 | reveal | lldb | debugserver | 远程调试

    之前介绍了怎么获取APP的所有类的结构信息,这个有什么用呢?用处大了,比如以这一步为基础,下一步通过注入来做更多研究工作. 注入的最小单位是函数,实际上,编译执行的程序在编译后,类就不复存在了,留下来 ...

  7. iOS逆向开发(2):获取APP的类声明 | class-dump | dumpdecrypted

    之前介绍了怎么操作越狱的iOS设备(以下简称为手机),但简单操作手机并不是目标,小程的目标是手机上特定的APP,比如微信.淘宝.QQ音乐等等,因为小程可以从这些APP上拿到一些有用的信息或资源--比如 ...

  8. iOS逆向开发(0):修改二进制代码与重签名 | hopper | codesigh

    小白:小程,你知道有些iOS程序是没人性的吗?老是不按我的意愿来运行! 小程:我怎么知道你的意愿就是有人性的? 本文解决一个问题:修改别人的二进制程序并运行起来. 让别人的程序按你的意愿来运行,文明一 ...

  9. 使用nodejs的wxmnode模块,开发一个微信自动监控提醒功能,做个天气预报。

    这个模块是一个公众号的模块,名字叫"帮你看着". 原本这个公众号是做股票监控提醒的,我也没炒股.因为接口支持写入任何内容,所以可以有其他的用处.比如做成天气预报定时提醒. 我们去n ...

随机推荐

  1. 我的 FPGA 学习历程(13)—— 电子钟项目

    在秒表上一些其他模块就可以变成电子钟了,使用以下约定: 使用 KEY[0] 作为复位按键,复位后显示 00:00. 使用 KEY[1] 作为调整/暂停按键,暂停时电子钟调整的两个灯管保持 1Hz 的频 ...

  2. HTML 5将给开发者带来什么?

    在新的时代里,相信网页技术会伴随HTML 5的来临进入大洗牌的局面,HTML 5旨在解决Web中的交互,媒体,本地操作等问题,一些浏览器已经尝试支持HTML 5的一些功能,而开发者们有望最终从那些We ...

  3. (lua) 基于cocos 的插入光效

    具体的表现是:移动滚动容器到头部, 新增icon淡入并掉入格子,显示格子中的图标,icon放大并淡出 function UISkyResource:playActivedEffect(id) then ...

  4. js == 运算规则解析

    1.先了解一下基本类型和复杂类型划分的依据 JS中的值有两种类型:原始类型(Primitive).对象类型(Object).原始类型包括:Undefined.Null.Boolean.Number和S ...

  5. ubuntu18.04新体验

    虽然ubuntu18.04LST版本早出来了,但自己原来的ubuntu16.04还可以用,就懒得折腾了. 但最近ubuntu崩了,就想尝尝鲜...结果发现还挺好用的,准确地说,ubuntu是越来越好用 ...

  6. CF F. Shovels Shop(前缀和预处理+贪心+dp)

    F. Shovels Shop time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  7. laravel 目录权限

    chown -R www:www /data/wwwroot   #变更目录所有者并向下传递 find /data/wwwroot/ -type d -exec chmod 755 {} \;   # ...

  8. svn错误:更新源码出现校验和不匹配问题

    svn 的文本校验和不匹配: 最近在更新自动化源代码的时候出现了一个错误:svn: Checksum mismatch while updating.... 查了下google,原来是在更新源码出现校 ...

  9. 一个自己研究出来的字符串匹配算法-k子串算法

    前言 最近工作中需要写一个算法,而写完这个算法我却发现了一个很有意思的事情.需要的这个算法是这样的:对于A,B两个字符串,找出最多K个公共子串,使得这K个子串长度和最大.百度之没有这样的算法,然后就开 ...

  10. [Swift]LeetCode95. 不同的二叉搜索树 II | Unique Binary Search Trees II

    Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1 ...