蓝天资源网
当前位置:蓝天资源网 / 汇编逆向 / 正文

去掉雷电模拟器多余的桌面广告

作者:忆笙发布时间:2021-10-09 01:07浏览数量:1019次评论数量:0次

今天晚上看到干百度大佬发了领取QQ飞车下载奖励的工具,刚好我这两天才把QQ飞车下下来玩,用的是雷电模拟器,看大佬那么努力我也不能闲着,于是乎我把目光瞄向了雷电模拟器的桌面。

雷电模拟器桌面广告不多,但挺烦人,我怕一误触就给我下下来几个G的游戏,安装第三方桌面确实可以避开广告,但第三方桌面UI适配不好,边缘图标可能无法点击,同时这样也会失去了官方桌面提供的特色功能,导出apk,而这一功能我时而会用到。

去掉雷电模拟器多余的桌面广告  第1张

于是乎,直接去掉桌面广告成了最佳选择,正好雷电模拟器附带root权限,配合ES文件浏览器可以很方便地将修改后的安装包塞回系统,上图是去掉广告后的效果,请各位欣赏

特别提示:为了防止修改失败导致无法进入桌面启动应用,请在开始前先安装一个第三方桌面,例如冷桌面、Nova Launcher

环境准备

Apk Tool 2.5.0

jadx-1.2.0

jdk-11

言归正传,我们开始了

首先,我们看看雷电模拟器的桌面到底对应哪个apk,我们知道,安卓喜欢管桌面叫启动器,加上系统应用里也就这位长得和安卓原生桌面的图标一模一样,因此,这个带有Launcher3字样的就是我们要找的家伙

去掉雷电模拟器多余的桌面广告  第3张

好吧,这里面没看见加载广告的网络请求,那就换下一个,LdHotSeatAdImp明显是一个“实现类”,实现了啥接口我没看着,但毫无疑问干活的肯定是它,那就进去看看吧:

去掉雷电模拟器多余的桌面广告  第4张

这不就一下子找到广告了吗,我们用浏览器打开这个链接,会发现一大串Json字符,就是这些所谓的“热门游戏”,链接放此处,有兴趣的同学自己观摩一下:http://res.ldmnq.com/ldmnq_file/mnq_ad_json

大家注意showLauncherIcon方法需要同时满足三个条件才会执行,只要其中一个不满足就会直接返回,那自然就不会加载到广告了:

iconViews != null && !iconViews.isEmpty() && toastView2 != null

所以我们设法让这个函数在任何情况下都直接反回就可以了

分析完毕,接下来进入smail

java -jar Apktool_2.5.0.jar d Launcher3_7.1.2.apk

解包apk,找到com.ldmnq.LdHotSeatAdImp对应的smail,搜索showLauncherIcon,定位到方法开头:

.method public showLauncherIcon(Landroid/content/Context;Ljava/util/List;Lcom/ldmnq/LdHotSeatAdImp$ToastView;I)V
    .locals 3
    .param p1, "context"    # Landroid/content/Context;
    .param p3, "toastView"    # Lcom/ldmnq/LdHotSeatAdImp$ToastView;
    .param p4, "iconHW"    # I
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "(",
            "Landroid/content/Context;",
            "Ljava/util/List",
            "<",
            "Landroid/widget/TextView;",
            ">;",
            "Lcom/ldmnq/LdHotSeatAdImp$ToastView;",
            "I)V"
        }
    .end annotation

    .prologue
    .line 156
    .local p2, "iconViews":Ljava/util/List;, "Ljava/util/List<Landroid/widget/TextView;>;"
    if-eqz p2, :cond_0

    invoke-interface {p2}, Ljava/util/List;->isEmpty()Z

    move-result v0

    if-nez v0, :cond_0

    if-nez p3, :cond_1

    .line 157
    :cond_0
    return-void

这里代码明显比上篇分析复杂多了,我们只看前面一小部分,注意if-eqz p2, :cond_0就是说如果 p2为0(或false或null),进入cond_0,而cond_0就是return-void,也就是函数直接返回,可见这里就是对第一个条件的判断,而if-nez v0, :cond_0表示如果v0非零,函数直接返回,参考这条,我们只要在if-eqz p2, :cond_0后面加上一句if-nez p2, :cond_0,就能保证无论p2是不是0,函数都会立刻返回,上面的if条件相当于变成了

if(iconViews != null && iconViews == null && !iconViews.isEmpty() && toastView2 != null)

显然是个永假式

修改好后,我们用

java -jar Apktool_2.5.0.jar b Launcher3_7.1.2

重新打包,再用

jarsigner -keystore debug.keystore -storepass android -signedjar signed.apk Launcher3_7.1.2.apk keyalias

重新给apk签名(记住这个免费的命令,可以省掉开mt会员的钱),去广告版的雷电桌面就做好了

安装

我觉得有必要单独交代一下安装步骤,简单写写:

首先,立刻安装一个第三方桌面作为过渡(除非你有信心一次成功或者特别熟悉启动应用的adb命令),并将我们破解的apk导入模拟器(此时还无法安装)

然后,授予ES文件浏览器Root权限,并借此卸载掉系统桌面

接下来,把我们导入的apk移动到 /app/Launcher3/ ,并重启模拟器

重启后,选择系统桌面进入,会发现底下的广告已经不见了,此后可以删除第三方桌面

最后再欣赏一下去掉广告的模拟器桌面吧,嗯,这才是去广告版后该有的样子

去掉雷电模拟器多余的桌面广告  第5张

忆笙

忆笙 主页 联系他吧

人间山河远阔,只想与你同行。

欢迎 发表评论: