记一次破解
很久很久以前
(小学时)那时候我喜欢用这种APP做点任务赚点小钱。就是那种下载一个APP给几毛钱那种。
然后不知道怎么都下载了一个叫《红包锁屏》的APP。
这类APP为了推广,肯定会实行邀请好友奖励政策的。
这个APP也不例外,邀请一个APP奖励\(2\)元。
就是每个用户都有一个邀请码,如果别的用户下载注册这个APP,然后填写你的邀请码,你就可以获得奖励。
我老老实实下载APP,邀请了几个好友,搞了不知道多久,赚了\(80\)多提现了。买了个地下拳王李青
然后就没什么高质量的任务了,于是就没弄了。
(到了初中)不知道怎么,我又下载了这APP。
现在,参加信息学竞赛的我,知识显然比以前多了不少。
安装这个APP后,我注意到一个细节。
第一次打开APP,会进入一个填写邀请码的界面。
\(\color{red}{\text{???不用注册就能填写邀请码???}}\)
于是验证我的猜想。
我乱填了一个,显然这是没有用的。
然后进入APP,注册,登录。
记下我的邀请码,然后清除这个APP的数据,再打开。
又进入了填写邀请码的界面,然后我填写我自己的邀请码。
之后直接用刚才注册的账号登录。果然,账户余额多了\(1\)元。(过了这么久,现在邀请只奖励\(1\)元了)
那岂不是可以。。。???
于是我再次清除数据,打开APP,输入我的邀请码,登录。
然后账户余额并没有变。
\(\cdots\)
现在的我懂得分析,所以我开始想为什么这一次不行。
经验告诉我,它很可能是检测了设备号。同一设备填写的邀请码只有一次生效。
为了验证猜想,我打开电脑,打开夜神模拟器,安装了这个APP,然后填写我的邀请码,我的余额加了\(1\)元。
然后清除数据,再打开,填写邀请码,并没有什么用。
我用模拟器自带的功能把设备号换了,然后重启。
清除数据后再输入邀请码,果然,我的余额又多了\(1\)元。
此时的我兴奋无比。
我开始使用这个方法刷邀请。
但是好景不长,我才刷了不到\(20\)元,我的账号就被封了。
\(\cdots\)
你以为我会就这么放弃吗?
我用接码平台(不知道的百度)接收验证码重新注册了一个账号。
然后分析封号的原因。
对,肯定是我邀请的人都是注册后什么都没干,一看就是刷的。
而且我还猜测这个封号是人工封的,而非系统自动判断。(不要问我怎么猜的)
所以这次我每更换一次设备号,都做2个任务再弄下一个,表示这是个真实用户。
果然,这样弄了八九个后都没有被封号。
应该是可行了。
但这样太慢了,还要人操作。
所以我到网上去搜有没有什么脚本软件。
然后并没有找到emmm...
但是
我是谁?
程序员啊!
于是我自己写了一个支持录制各种操作的脚本,专门为这次计划服务。效果肯定吊打网上的脚本啊
脚本实现了全流程:清除数据,输入邀请码,下载APP,更改设备号,重启。
于是我挂了一个下午(上学去了),虽然此时已经被预料之外的弹窗退出的预定轨道,但是余额已经有\(40\)多了。
我去商城兑换了一个计算器。越想越高兴。
什么景不长来着?
我的号又被封了。
\(\cdots\)
这次应该是绝望了吧。。
你以为就这样结束了吗?
令我没想到的是,\(3\)天后,我竟然真的收到了一个计算器!
原来,即使封号了兑换订单也会处理!
我去查了下这个APP
再看看它的开发公司
似乎还不是什么小公司。。
不管了,干就完了。
但现在这个方法效率实在太低,而且还不稳定。
所以考虑改进方法。
每次用模拟器去改设备号,还要重启,占用了大量时间,为什么不在软件层面去修改设备号呢?
所以我想到了一个\(Xposed\)模块:《应用变量》
那么现在,总不能用\(PC\)的程序去模拟点击模拟器吧,这样太复杂太难了。
所以还不如直接写个安卓的程序,在模拟器内部操作。
模拟点击用什么?辅助服务啊。
于是开工。我去网上查找了一些相关用法,然后动用全套工具,包括找控件\(id\)等
调试了很久,终于弄出了最初版本。
能够实现
打开红包锁屏->输入邀请码->点确定->进入主界面后返回桌面->打开应用变量->点全部随机->点应用设置->点清除数据->返回桌面
完整的流程。
虽然返回桌面后会停顿一下(我也不知道为什么),但是效率已经非常可观了。
细心的读者应该会注意到这次少了做任务步骤,为什么呢?
回到出发点,做任务是为了防封,而封号是工作人员发现后封的。
所以现在我们换一个解决方案:赶在工作人员发现之前刷够然后完成兑换。
之前被封是因为是手动的,效率有限,所以很容易被发现。
现在不同了,只要十分钟就能刷满\(40\)元,然后兑换一个充电宝。
测试,成功,充电宝到货。
我当然不会就此满足。
因为每兑换一个商品就要换一个账号,而注册账号是要用到接码平台的,手机访问接码平台又太不方便。
于是我上网搜了\(Android\)中发送\(HTTP\)请求的方法,然后用接码平台提供的\(API\)接口,把接码平台嵌入了程序内。
而且写了个悬浮窗,支持收缩、展开、滑动,登录后,随时接码。而且显示接码平台余额。
我还给脚本加了个开关,放在悬浮窗里。
然后算法也改进了,不是返回桌面然后找到红包锁屏打开,而是直接根据包名打开这个应用。
有了这个,我就能很方便地用手机去刷了。
后来我换了台手机,不能\(root\)了。
但我也不会善罢甘休的。
配合\(virtual\ xposed\),依然可以实现所有功能。
于是便有了上图的\(NO\ ROOT\ MODE\)
一不做二不休
看到上图的一套完备的系统,你可能以为就这样结束了。
我对速度的追求可不止这样。
应用变量作为一个知名的\(Xposed\)模块,不是开源的吗?
我干脆直接去下载了应用变量的源码,然后把我的《Supermarket》和它合并。
嗯,完美!
节省了许多时间,效率++
效率的最高境界
你以为这样就结束了吗?
继续对影响效率的因素进行分析。
发现输入邀请码,点确定后会进入主界面,然后要模拟按返回键,然后弹出“是否确认退出”,再模拟按确定键。
加上退出本身会卡一下,这个过程会浪费一些时间。
那么有没有什么办法能让他输入邀请码确定后不进入主界面直接退出呢?
当然有,那我们得向软件本身动手了。
于是我反编译《红包锁屏》,定位到输邀请码界面的\(Activity\),对代码进行解读后,删除了跳转主界面那一句话。
然后回编译,签名,安装。
然后发现的确不会跳转主界面了,但是似乎输入的邀请码并不奏效。
为什么?
初步估计是因为《红包锁屏》后台没有退出(不要问我为什么总估计的那么准,专业的力量)
于是我在跳转主界面的地方加上了\(System.exit(0);\)对应的\(smali\)代码。
至于这个代码怎么来的,自己写一个直接\(exit\)的程序反编译一下就得到了。
现在,终于,成功了!
全程无停歇,一直在红包锁屏和应用变量间切换。
毫不夸张的说,2分钟就能刷满\(40\)。
实战极具观赏性(可惜不能录视频)
这样的话\(10\)分钟就能刷几个充电宝了。
当然我不会那样做,毕竟这么大个公司,我也是怕的,就适当了刷了点。
后来
后来这个公司似乎发现了这个问题,修改了邀请机制,被邀请的人必须做任务,邀请人才会获得奖励,我的这个方法也就随之而废。
真后悔当初没有多刷点,只刷了4个充电宝、1个电子秤、2个优质笔记本、等等等等不记得了
总结
这次经历运用到了
·\(C++\)
·\(Java(Android)\)
·抓包(尝试过,文中未指出)
·各种分析
·\(apk\)反编译
·发送和接受HTTP请求
等多种技术
是一次不错的练手。