200人的Q群分享3次才能使用的简单破解

查看 88|回复 9
作者:brujah   
目录
[TOC]
前言
最近拾起了我的破MI6想玩玩一些BT手游,于是乎找了一些“*奏网”的软件合集,不成想玩之前要分享他们团队的链接到200人的Q群3次才可以玩,我一个连QQ都没有的人,只能动起了不太好的心思...
鉴于论坛规则,我这里并不放出成品,请大家自行搜索下载,理论上思路正确,都可以搞定的。此篇重在分享QQ群引流的破解思路,软件中出现的广告、更新和弹窗引流并不在此篇讲解范围。
工欲善其事必先利其器
  • AndroidKiller_v1.3.1(Win端)
  • MT管理器2.9 and NP管理器2.7.4(Android端)
  • 能网上冲浪的浏览器

    好戏开场了
    1.安装应用并分析:


    Screenshot_2020-06-02-14-04-35-156.jpg (125.73 KB, 下载次数: 3)
    下载附件
    软件启动页
    2020-6-2 15:44 上传

    这里一共有三个按钮可点击:
  • 联系作者:点击后打开一个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打开并尝试搜索关键字


    批注 2020-06-02 132731.png (134.21 KB, 下载次数: 5)
    下载附件
    搜索本团队结果页
    2020-6-2 15:45 上传

    很遗憾,虽然一顿操作猛如虎,但是并没有什么卵用。这里要说明一下,虽然截图显示是搜索“本团队”三个字,但实际搜索前需要先点击左下角aA按钮,然后选择文本转Unicode后搜索。比如我们接下来搜索“分享”这两个字:


    批注 2020-06-02 142007.png (160.66 KB, 下载次数: 3)
    下载附件
    搜索分享结果页
    2020-6-2 15:46 上传

    3.找到关键代码并通过Java反编译去理解
    这里的smali_classes5\...\MainActivity.smali非常可疑,为什么呢可疑呢?因为我把所有搜索结果都点进去看了一遍,确定了这个是...
    进入这个文件后通过方法列表跳转到onclick方法,为什么是这个方法,因为你是通过点击这个方法去分享并累计次数的:


    批注 2020-06-02 142331.png (535.51 KB, 下载次数: 3)
    下载附件
    方法页
    2020-6-2 15:47 上传

    我的习惯是找到关键点先通过java源码看看逻辑,因为smali我不会...
    不知道是这个app的问题还是我AndroidKiller有问题,当我点击使用工具查看当前JAVA源码按钮时,会弹窗提醒我未找到对应的APK源码,请确认是否已丢失,所以我用NP管理器的Java反编译功能截个图给大家看看,查看Java源码的方法很多,巧的是我电脑都没有...tips:MT管理器的Java反编译需要会员才可使用。


    Screenshot_2020-06-02-14-34-10-763_player.normal.np.jpg (352.13 KB, 下载次数: 2)
    下载附件
    反编译1
    2020-6-2 15:47 上传

    这里可以看到一个远程服务器保存的txt文件,我们用能网上冲浪的浏览器打开looklook:


    批注 2020-06-02 143845.png (125.36 KB, 下载次数: 2)
    下载附件
    txt文本内容
    2020-6-2 15:48 上传

    所以知道我们为什么搜不到关键字了么?人家用txt文本获取的...做了这么多年程序猿,我也属实是又增加了一些奇奇怪怪的知识...


    Screenshot_2020-06-02-14-34-27-459_player.normal.np.jpg (359.18 KB, 下载次数: 4)
    下载附件
    反编译2
    2020-6-2 15:48 上传



    Screenshot_2020-06-02-14-34-57-999_player.normal.np.jpg (300.62 KB, 下载次数: 2)
    下载附件
    反编译3
    2020-6-2 15:48 上传

    通过反编译的源码,我们大致看出了整个逻辑是怎样的。首先是请求这个txt文件,然后将文件内容填充到当前Activity的组件中,当我们点击相应按钮后,根据填充内容进行判断后进入相应响应。而我们的重点在:
    if(this.mShareCount > this.Info.getShareCount()){
            startActivity(new Intent(this, this.main));
            finish();
    }
    这个判断很显然告诉我们,只有当本地变量mShareCount大于txt文本变量getShareCount后,才可以正常进入软件。
    所以我们的思路逐渐就清晰起来了:
    [ol]
  • 找到这个判断
  • 修改这个判断
  • 编译和签名软件
  • 愉快的享用
    [/ol]
    返回我们的smali代码界面的onClick方法处,完了,一堆看不懂的代码怎么办,没事,还记得Java代码中有个finish方法么,我们在onClick方法中找到这个调用,你可以通过Ctrl + F搜索或者凭借你多年的消消乐眼力硬找,不过我推荐用第一种方法...


    批注 2020-06-02 145838.png (250.69 KB, 下载次数: 3)
    下载附件
    finish
    2020-6-2 15:49 上传

    到了这里还是没头绪,别着急,在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;->(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让等式不成立不跳转,继续执行下面的成功代码即可...


    批注 2020-06-02 153419.png (308.69 KB, 下载次数: 4)
    下载附件
    编译
    2020-6-2 15:49 上传

    本次分享到此结束,我这个人比较懒,一般都是要用什么就研究什么,有没有下期就看大家的意见了...

    下载次数, 方法

  • 颠覆1   

    我都是到了qq界面选个群,然后不点击发送,返回就增加次数了
    brujah
    OP
      


    颠覆1 发表于 2020-6-2 15:56
    我都是到了qq界面选个群,然后不点击发送,返回就增加次数了

    我看了下qq的接口,这样确实算分享了,qq分享页在选群后就有成功返回值了,但是有程序里还有时间校验。其实还有个简单的办法就是利用HttpCanary去静态注入这个txt文件,文件中的“open”就是控制是否需要分享的开关,为“Ture”时所有软件都需要分享,为“False”时所有软件不需要分享。
    std186   

    程序猿确实厉害
    mali00000000   

    没这么麻烦,我直接发送给文件小助手就可以零。啦啦啦
    brujah
    OP
      


    std186 发表于 2020-6-2 15:57
    程序猿确实厉害

    程序猿的“屁股”更厉害
    brujah
    OP
      


    mali00000000 发表于 2020-6-2 16:02
    没这么麻烦,我直接发送给文件小助手就可以零。啦啦啦

    以前确实可以,现在的app已经开始判断是否是我的电脑或文件小助手了,比如我案例的这个app分享至非群目标会提示必须分享200人的群并且不计数。
    brujah
    OP
      

    @Gentlewang
    确实可以通过AndroidManifest.xml文件,找到com.Share.MainActivity,并将节点下的intent-filter移动到com.project.videoplay.MainActivity节点下。但因为这个app不好截图,所以没有在此讲解这个点...


    批注 2020-06-02 161601.png (460.78 KB, 下载次数: 2)
    下载附件
    2020-6-2 16:16 上传

    Antony丶   


    brujah 发表于 2020-6-2 16:05
    以前确实可以,现在的app已经开始判断是否是我的电脑或文件小助手了,比如我案例的这个app分享至非群目标 ...

    分享到自己的群也可以IDE
    brujah
    OP
      


    brujah 发表于 2020-6-2 16:12
    @Gentlewang
    确实可以通过AndroidManifest.xml文件,找到com.Share.MainActivity,并将节点下的intent-fi ...

    正好近期在写关于去除弹窗类的帖子,届时引用你们这些专业分析的帖子进去做索引,发给坛友们。
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部