笔者是掌阅的老用户了,之前好象叫iReader,但近几年越做越垃圾了,看书收费也就算了,还加入各种广告。笔者做为一个穷丝,只看自己下载的txt,但现在连阅读界面都塞满了广告,如下图

对于一个只能利用碎片时间看书的屌丝来说实在是忍无可忍,决定把广告全给他关了。

去广告测试

首先分析开屏广告。打开应用,显示开屏广告后运行adb shell dumpsys activity | grep Focused查看开屏广告的activity为com.chaozh.iReader.ui.activity.WelcomeActivity。查看该类的onCreate方法,找到如下代码

其中标红的判断应该是显示广告的触发条件。
AdProxy adProxy = (AdProxy) ProxyFactory.createProxy(AdProxy.class);
这行代码就是创建广告的逻辑,试着用frida注入如下代码

1
2
3
4
5
6
7
8
9
const ProxyFactory = Java.use('com.zhangyue.iReader.module.proxy.ProxyFactory');
const AdProxy = Java.use('com.zhangyue.iReader.module.proxy.AdProxy');
ProxyFactory.createProxy.overload('java.lang.Class').implementation = function (clz) {
if(clz.getName() == 'com.zhangyue.iReader.module.proxy.AdProxy'){
console.log("尝试创建adProxy");
return null;
}
return ProxyFactory.createProxy(clz);
}

简单说下在程序启动前执行注入的过程

  1. 运行frida -U -f com.chaozh.iReaderFree spawn掌阅的进程
  2. 运行frida脚本,注入
  3. 注入成功后输入%resume恢复进程

成功关闭开屏广告。而且阅读界面的广告也没有了!!!整个世界都清静了。

重打包

开始打算直接修改smali后重打包。

  1. 解包
    使用java -jar /Opt/tools/apktool_2.4.0.jar d -r v7.23.1.apk解包,其中r参数不处理资源文件
  2. 修改smali,插入如下代码
  3. 打包
    使用java -jar /Opt/tools/apktool_2.4.0.jar b v7.23.1重打包

破解证书检测

将重打包后的apk签名,安装后无法联网,只能看本地小说。猜测对apk的签名有检测。但懒得折腾了,写了个xposed插件,先凑合着用吧。