版本:掌阅8.7.7
ps:文章参考了b站刷到的一个博主,复现了一下这个过程,但是我在去除开屏广告的时候使用直接替换xml界面的方法失败了,去广告是自己分析出来的
0x01 去除开屏广告
删除一些与广告相关的文件,删除:okhttp3,grs_sdk_Server_config.json,zlsioh.dat,supplierconfig.json,ksad_idc.json,gdt_plugin,bdxadsdk.jar
使用MT管理器自带的Activity记录功能,启动app记录
定位到com.chaozh.iReader.ui.activity.WelcomeActivity,然后使用JADX-GUI分析关键代码onCreate函数,如图为关键代码,所以当满足this.f31376v == true或者 z12 == false时,走无广告分支;z12的值与this.f31377w 和zD有关,当二者都为true时z12才为true,所以直接修改smali代码让zD为false即可。
定位smali代码,如图可知v0存储的值就是zD的值,所以只需要把move-result v0改成const/4 v0,0x0就能实现去开屏广告
0x02 布局优化
点击resources.arsc,搜索书城,找到如图所示,长按复制ID,然后在dex文件里面进行搜索
定位到package pf里面的p方法,这里优化掉底部tab栏的书城和会员,注释掉二者对应add的smali代码。
还需要替换对应的界面,分析q方法,i10==1时返回bookstore,i10==0时返回bookshelf,i10==2时返回VIP,i10!=2时返回mine。smali代码里面的p0对应伪代码的i10,bookstore对应的代码在:cond_72处,把原来:cond_72的地方随便命名,这里命名成:cond_ff,效果如图所示
:cond_72 //添加的代码
.line 1
new-instance p0, Lcom/zhangyue/iReader/ui/fragment/MineFragmen
0x03去除顶部签到按钮
当联网时书架顶部才会出现签到按钮
搜索sign,定位到图片,长按属性。复制资源ID,反编译dex文件然后搜索
n.w(this.o.n).b("签到");
i = 0x7f0806c3;
资源ID被赋值给了i,在actionProvider被调用,所以只需要把这一行注释掉即可
if (actionProvider instanceof CustomActionProvider) {
actionProvider.h(i, ImageView.ScaleType.FIT_CENTER, Util.dipToPixel2(48),Util.dipToPixel2(24));
}
.line 15
invoke-virtual {v2, v0, v3, v4, v5}, Lcom/zhangyue/iReader/bookshelf/ui/view/CustomActionProvider;->h(ILandroid/widget/ImageView$ScaleType;II)V //注释这一行
0x04去除本地会员
点击resources搜索“您还未登录”并复制资源ID搜索,跳转到v方法
invoke-virtual {v0}, Lcom/zhangyue/iReader/account/Account;->v()Z
强行返回为真
const/4 v0,0x1
return v0
然后搜索“试听中”,搜索“VIP”,定位到这里,并跳转到isBigVip()Z,强制修改返回为真
invoke-virtual {v8}, Lcom/zhangyue/iReader/free/FreeControl;->isBigVip()Z
然后就可以使用vip字体和听书。