用xposed实现x乎去广告
2019-09-20 21:50:10 Author: bbs.pediy.com(查看原文) 阅读量:329 收藏

[原创] 用xposed实现x乎去广告

3小时前 355

最近因刷逼乎的时候广告满天飞,一般广告就忍了,可是什么贷款啊!脱发  啊!看的烦,于是就萌生了去广告的想法

先看看广告


叔可忍婶不可忍,我大程序员为啥就一定要脱发?

首先祭出神器 Inspeckage,因为Inspeckage在android P上无法使用,本人做了下适配以及增加了一些功能,方便写xposed扩展动态分析APP功能


大概瞄了一眼,APP权限注册的一大坨,行为分析发现这东东有很多东西,这里只想着去广告,就直接把APP down下来了,该应用版本为play版 

拖入jadx先静态分析

该APP dex层没加密,其中关键参数用libDexHelper.so来进行加密,不影响去广告分析,加密模块儿可以用 Inspeckage hook关键函数实现动态侦测功能

首先用Layout Inspector分析下界面,发现推荐页是他们自己封装的RecyclerView来实现的

广告布局对应的正是ItemWrapReasonView,该布局最终继承FrameLayout

   

分析该布局创建的时候是一个空值

通过以下两个函数来添加广告页布局

 

这就很简单了,通过xposed直接拦截这两个函数,remove掉该view或者直接把该view设置成GONE,下面代码是直接把这两个view设置成GONE直接去广告

Class<?> ItemWrapReasonView = findClass("com.zhihu.android.app.ui.widget.ItemWrapReasonView", loadPackageParam.classLoader);
/**
* 首页推荐去广告
*/
findAndHookMethod(ItemWrapReasonView, "a", View.class, new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
View f = (View) getObjectField(param.thisObject, "f");
if (f != null) {
f.setVisibility(View.GONE);
}
super.afterHookedMethod(param);
}
});

findAndHookMethod(ItemWrapReasonView, "b", View.class, new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
View a = (View) getObjectField(param.thisObject, "a");
if (a != null) {
a.setVisibility(View.GONE);
}
super.afterHookedMethod(param);
}
});

至此烦人的推荐页广告已经去除了

下面来去除splash页广告,并定制个性化splash

首先定制化splash页面

Class<?> LauncherActivity = findClass("com.zhihu.android.app.ui.activity.LauncherActivity", loadPackageParam.classLoader);
findAndHookMethod(LauncherActivity, "onStart", new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
super.beforeHookedMethod(param);
Activity activity = (Activity) param.thisObject;
activity.getWindow().setBackgroundDrawableResource(splashId);
}
});

把它背景修改为我们自己的图片


因为APP启动白屏页直接在style中配置的图片,这边暂时没想到用xposed怎么来修改,只能通过反编译APP,但那样来又得重打包不方便,所以暂时效果不太好,先显示它启动的图片,后续激活后切换到我们的图片

去广告部分因为在LauncherActivity中暂时没有找到好的method来hook所以改在广告页的fragment来拦截

com.zhihu.android.app.ui.fragment.ad.b


直接把入参改为0,跳过广告展示

final Class<?> AdFragment = findClass("com.zhihu.android.app.ui.fragment.ad.b", loadPackageParam.classLoader);
        findAndHookMethod(AdFragment, "a", int.class, new XC_MethodHook() {
            @Override
            protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                super.beforeHookedMethod(param);
                XposedBridge.log("启动广告拦截");
                param.args[0] = 0;

            }
        });

插件编写到此结束了,后续可以优化的地方还很多,可以慢慢写,先看下效果吧

视频不知道怎么链接上来,传到附件了

xposed编译好的模块传到附件了

[公告]安全服务和外包项目请将项目需求发到看雪企服平台:https://qifu.kanxue.com

上传的附件:
  • Screenrecorder-2019-09-20-17-14-27-263.mp4 (7.38MB,2次下载)
  • app-release.apk (1.43MB,3次下载)

文章来源: https://bbs.pediy.com/thread-254577.htm
如有侵权请联系:admin#unsafe.sh