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。
image2.2用dex2jar得到jar包
image2.3用jdgui反编译jar包
image2.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
得到的文件如下图所示
image
得到资源文件和smail文件,用sublime打开,打开string.xml文件,搜索**漫画VIP,可以看到
image然后全局搜索vip_state_1
image这就是这个string的id,然后全局搜索id
image可以看到VipInfoView.smail里使用了string,VipInfoView,名字也很清晰了,肯定就是它了,
image可以看到在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总结
整体看难度不大,大家学习参考就好。
image关注我的公众号
网友评论