阅读 2501

Android破取某漫画app获得VIP权限

0.前言

昨天去公司加班,写业务代码写的我是心烦意乱,今天本打算再继续写的,但是就像肉吃多了也腻一样,想搞点新花样试试,最近对写外挂和破解app很有兴趣,想到最近某漫画app里的某部漫画需要用vip权限才能看,那今天我就想破解这个app,免费获取vip权限。

注意:只是用来学习交流,尊重正版尊重创作者,不要用于非法用途

1.准备工具

1.1 apktool

现在好像比较流行用android killer,但是没有mac版,就用这个了,用来解压apk和重新打包apk。

1.2 dex2jar

用来将dex文件转换成jar包

1.3 jdgui

反编译jar包,得到java代码

1.4sublime

用来查看代码 本文不涉及这些工具的使用方法,只是描写一下思路,具体使用方法请google。

2.过程

2.1解压apk

apk就是zip打包的,将apk后缀修改为zip,所以直接用zip解压就行,如果apk用v2签名的话,解压的时候会报错,这个时候不要担心,硬解,用命令行unzip **.apk。

2.2用dex2jar得到jar包

2.3用jdgui反编译jar包

2.4分析

用jdgui查看java代码,你会发现代码是经过混淆的,这很正常,压根也没期望它不会混淆,混淆不要紧,无非就是变量方法换换名字嘛,耐心分析就好。咱们先正向的想一下,咱们来做一个app,vip权限一般都是在你登录的时候服务器返回给你的一个字段,用来标注你是vip,然后你存储在本地,写一个方法可以判断你是不是vip,打开需要vip的章节的时候先判断你是不是vip,如果是的话就可以打开该锁定章节了。咱们要做的就是修改这个方法,判断vip的时候始终返回true。 既然大致思路有了,那么最主要的问题就是如何确定这是哪个方法在哪个类里。我们先看一下apk的账户页面

可以看到这个蓝色的item就是显示vip信息的。一般app都会把这些文字放在string.xml这种资源文件里,资源文件又会生成R文件标记它的位置,一个int类型,我的思路是通过找到这个R文件中该string的int值,看哪个类的TextView用到了这个string,这个TextView肯定会根据是否是vip而显示不同的东西,然后基本上就可以找到咱们前面说的那个判断vip的方法了

2.5操作

apktool解压apk 得到的文件如下图所示

得到资源文件和smail文件,用sublime打开,打开string.xml文件,搜索**漫画VIP,可以看到

然后全局搜索vip_state_1

这就是这个string的id,然后全局搜索id

可以看到VipInfoView.smail里使用了string,VipInfoView,名字也很清晰了,肯定就是它了,

可以看到在VipInfoView的a()方法里调用textView的setText设置了这个string。 这里先不着急看smail文件,打开jdgui,查看VipInfoView.class,搜索a方法,看看在哪里引用,虽然VipInfoView里没有直接引用,但是我会发现一个方法,名字很直白

 public void setLoginState(com.netease.cartoonreader.i.b paramb)
  {
    boolean bool1 = q.a().c();
    ...
      bool2 = q.a().c();
      if (!bool1) {
        break label452;
      }
  ....
      label452:
      this.g.setText(2131625239);
    ...
  }
  
复制代码

我省略了大部分代码,你会发现如果bool1为false就会跳到label452,调用textview设置text,2131625239有没有很熟悉?这就是那个string的id的十进制表示。所以我推断这个q.a().c()方法就是用来判断vip的,打开com/netease/cartoonreader/e/q这个smail文件 找到这个c方法,修改如下

.method public c()Z
    .locals 5

    .prologue
    const/4 v4, 0x1
    
    return v4

.end method
复制代码

关于smail其实我也不是很精通,只是知道一些基本的语法,大家自己去看看就好,不难 使用apktool重新打包,签名安装。最终效果

3总结

整体看难度不大,大家学习参考就好。

关注我的公众号

关注下面的标签,发现更多相似文章
评论