目录
[TOC]
前言
最近拾起了我的破MI6想玩玩一些BT手游,于是乎找了一些“*奏网”的软件合集,不成想玩之前要分享他们团队的链接到200人的Q群3次才可以玩,我一个连QQ都没有的人,只能动起了不太好的心思...
鉴于论坛规则,我这里并不放出成品
,请大家自行搜索下载,理论上思路正确,都可以搞定的。此篇重在分享QQ群引流
的破解思路,软件中出现的广告、更新和弹窗引流并不在此篇讲解范围。
工欲善其事必先利其器
- AndroidKiller_v1.3.1(Win端)
- MT管理器2.9 and NP管理器2.7.4(Android端)
- 能网上冲浪的浏览器
好戏开场了
1.安装应用并分析:
这里一共有三个按钮可点击:
- 联系作者:点击后打开一个QQ客服对话框
- 加入QQ群:点击后跳转至“犯罪组织”Q群
- 确定:点击后跳转至QQ分享页
其实这个引流的逻辑并不完善,你可以通过切换QQ分享页或者分享至我的电脑完成3次分享,但毕竟我是个没有QQ的杀手...
如果看到这里你用的是电脑的话,那就用AndroidKiller_v1.3.1
进行下一步。如果是Android手机的话就用MT管理器2.9 and NP管理器2.7.4
进行下一步,为什么Android手机是两个类似的软件呢,因为我没有MT管理器的会员!如果你用的是Ios手机,那可以关闭教程了...
此篇以AndroidKiller_v1.3.1
为主,事实上用MT等工具更简单...
2.用AndroidKiller打开并尝试搜索关键字
很遗憾,虽然一顿操作猛如虎,但是并没有什么卵用。这里要说明一下,虽然截图显示是搜索“本团队”三个字,但实际搜索前需要先点击左下角aA
按钮,然后选择文本转Unicode
后搜索。比如我们接下来搜索“分享”这两个字:
3.找到关键代码并通过Java反编译去理解
这里的smali_classes5\...\MainActivity.smali
非常可疑,为什么呢可疑呢?因为我把所有搜索结果都点进去看了一遍,确定了这个是...
进入这个文件后通过方法列表跳转到onclick
方法,为什么是这个方法,因为你是通过点击
这个方法去分享并累计次数的:
我的习惯是找到关键点先通过java源码看看逻辑,因为smali我不会...
不知道是这个app的问题还是我AndroidKiller有问题,当我点击使用工具查看当前JAVA源码
按钮时,会弹窗提醒我未找到对应的APK源码,请确认是否已丢失
,所以我用NP管理器
的Java反编译功能截个图给大家看看,查看Java源码的方法很多,巧的是我电脑都没有...tips:MT管理器的Java反编译需要会员才可使用。
这里可以看到一个远程服务器保存的txt
文件,我们用能网上冲浪的浏览器打开looklook:
所以知道我们为什么搜不到关键字了么?人家用txt文本获取的...做了这么多年程序猿,我也属实是又增加了一些奇奇怪怪的知识...
通过反编译的源码,我们大致看出了整个逻辑是怎样的。首先是请求这个txt文件,然后将文件内容填充到当前Activity的组件中,当我们点击相应按钮后,根据填充内容进行判断后进入相应响应。而我们的重点在:
if(this.mShareCount > this.Info.getShareCount()){
startActivity(new Intent(this, this.main));
finish();
}
这个判断很显然告诉我们,只有当本地变量mShareCount
大于txt文本变量getShareCount
后,才可以正常进入软件。
所以我们的思路逐渐就清晰起来了:
- 找到这个判断
- 修改这个判断
- 编译和签名软件
- 愉快的享用
返回我们的smali代码界面的onClick方法处,完了,一堆看不懂的代码怎么办,没事,还记得Java代码中有个finish
方法么,我们在onClick方法中找到这个调用,你可以通过Ctrl + F
搜索或者凭借你多年的消消乐眼力硬找,不过我推荐用第一种方法...
到了这里还是没头绪,别着急,在Java源码中我们知道,finish
方法前面只有一个 if
判断,所以向上看,锁定第一个判断。在这里我推荐你用第二种方法,因为向上不会超过几行的...
...
if-le v0, v1, :cond_4
.line 44
new-instance v0, Landroid/content/Intent;
iget-object v1, p0, Lcom/Share/MainActivity;->main:Ljava/lang/Class;
invoke-direct {v0, p0, v1}, Landroid/content/Intent;-><init>(Landroid/content/Context;Ljava/lang/Class;)V
invoke-virtual {p0, v0}, Lcom/Share/MainActivity;->startActivity(Landroid/content/Intent;)V
.line 45
invoke-virtual {p0}, Lcom/Share/MainActivity;->finish()V
...
在往上的第7行(不包含finish这行)中,我们发现了if-le
这个方法,在smali语法中,判断函数都是以if-x
这种格式存在的,在这里你可以通过baidu/google/bing
等搜索引擎查询if-le
的作用,或者你可以用鼠标点击一下这个方法,AndroidKiller会提示你该方法的作用,我还是推荐第二种...
if-le vA, vB, :cond** 如果vA小于等于vB则跳转到:cond**
你肯定会疑惑,明明Java反编译的代码中是大于号 >
怎么在这里变成了小于等于 <=
,是不是还得往上找,这里我们再往上看看smali的代码:
...
invoke-virtual {v1}, Lcom/Share/model/AppInfo;->getShareCount()I
move-result v1
if-le v0, v1, :cond_4
.line 44
new-instance v0, Landroid/content/Intent;
...
通过鼠标点击我们得知move-result v1
这个函数的意思是移动上一次方法调用的返回值给v1
,那上一次调用的方法是什么呢?我们再往上看一行...
没错,我们看到了getShareCount()
这个方法,这个方法顾名思义,就是从txt文本中获取需要分享的总次数的,目前设定的是3次,也就是说v1 = 3
。
v1
我们知道是几了以后,那么v0
用屁股都知道了,肯定是本地变量,用于存储分享了几次的计数器,那肯定是从0开始的。
所以0肯定小于等于3,那么if-le v0, v1
成立,跳转:cond_4
处,然而我们并不希望跳转到别的代码处,因为我的屁股告诉我,等式下面才是成功代码的关键...
my ass says:
if-eq vA, vB, :cond** 如果vA等于vB则跳转到:cond**
4.修改smali代码并编译签名输出
我们将if-le
改成if-eq
让等式不成立不跳转,继续执行下面的成功代码即可...
本次分享到此结束,我这个人比较懒,一般都是要用什么就研究什么,有没有下期就看大家的意见了...