吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6891|回复: 51
上一主题 下一主题
收起左侧

[Android 原创] 【小白】去除飞鸽传输安卓端的广告

[复制链接]
跳转到指定楼层
楼主
侃遍天下无二人 发表于 2021-10-1 18:26 回帖奖励
个人情况:有一定的Java基础,不懂安卓逆向,对照反编译的Java代码能大概看明白smail表达的内容

这次想找个安卓版的飞鸽传书,配合飞秋可以往手机中传剪切板内容或者文件,从谷歌市场上搜索到目前评分较高的软件为

https://play.google.com/store/apps/details?id=com.tj.feige.app



下载运行发现它能在安卓11上使用,同时支持单文件传输,基本满足需求,但是,它里面的谷歌广告着实烦人,鉴于作者已经N年没更新过了,我们就替他更新一下去掉广告功能吧


从apk pure搜索并下载这个apk,将下载好的软件拖入jadx分析,鉴于这个apk的功能和界面都非常简单,我们不妨直接搜索“广告”


哦,原来赚够积分升级为正式版就不用看广告了呢,那么我怎么知道我的积分够不够呢?自然是搜索积分看看了,经搜索发现积分不够会弹出提示,若积分充足会执行另一段代码:

当然,我这里并不打算直接此处的改跳转实现去广告,因为我在我的手机上根本看不到积分相关的UI,这部分功能可能由于api版本过低已经没法运作了,所以我们不妨看看
[Java] 纯文本查看 复制代码
a("正在升级正式版请稍候...", new e(this), new f(this));

中的传入的另外两个对象都是咋定义的。
观察发现第一个只是让线程暂停了2秒,估计是为了避免读写冲突,第二个就有点意思了,内容如下:
[Java] 纯文本查看 复制代码
class f implements l {
    final /* synthetic */ FeiGeAdManagerUI a;

    f(FeiGeAdManagerUI feiGeAdManagerUI) {
        this.a = feiGeAdManagerUI;
    }

    @Override // com.tj.feige.app.a.l
    public void a(Object obj) {
        int n = this.a.d.n();
        int m = this.a.d.m();
        a.e = true;
        this.a.d.a("del_ad_flag", 1);
        this.a.d.a("del_ad_day", Integer.valueOf(n));
        this.a.d.a("del_ad_time", Long.valueOf(System.currentTimeMillis()));
        FeiGeAdManagerUI.a(this.a, m);
        e.a(this.a, "恭喜您已经升级成为正式版.");
        this.a.finish();
    }
}


注意到
this.a.d.a("del_ad_flag", 1);
this.a.d.a("del_ad_day", Integer.valueOf(n));
this.a.d.a("del_ad_time", Long.valueOf(System.currentTimeMillis()));
非常像判断是否删除广告的标记,另外这种设置方式看上去也挺像key-value的,不妨先把this.a.d当成Map<String,Number>类型,那么我们只要找到del_ad_flag出现的位置,并阻止程序将它设置为0就可以了。
将del_ad_flag改为0的代码只有寥寥几行,甚至都是在同一个函数中的:

进入函数,发现如下内容:
[Java] 纯文本查看 复制代码
    public boolean o() {
        int i2 = this.i.getInt("del_ad_flag", 0);
        String f2 = f("showAllAd");
        if (ab.a(f2)) {
            f2 = "0";
        }
        if (i2 != 1) {
            return "1".equals(f2);
        }
        long currentTimeMillis = System.currentTimeMillis();
        long j2 = this.i.getLong("del_ad_time", 0);
        if (currentTimeMillis <= (((long) this.i.getInt("del_ad_day", 0)) * 86400000) + j2) {
            return currentTimeMillis < j2;
        }
        a("del_ad_flag", 0);
        a("del_ad_day", 0);
        a("del_ad_time", 0L);
        return true;
    }

显然这是一个判断要不要展示广告的函数,那自然是不要了,既然函数在将del_ad_flag设为0后才返回true,那就说明true代表展示广告,false代表不展示,因此,我们让函数在一开头就返回false就行了,也不用管del_ad_flag到底是几,这就方便了不少。

分析完毕,下面我们开始改smail:
用命令 java -jar .\Apktool_2.5.0.jar d '.\飞鸽传输 IP Messenger_v2.3.6_apkpure.com.apk' 将apk解包,根据方法o的限定名 com.tj.feige.app.a.o ,找到对应的 a.smail文件,其中,方法o对应的smail代码如下:

[Java] 纯文本查看 复制代码
.method public o()Z
    .locals 12

    .prologue
    const-wide/16 v10, 0x0

    const/4 v0, 0x1

    const/4 v1, 0x0

    .line 627
    iget-object v2, p0, Lcom/tj/feige/app/a;->i:Landroid/content/SharedPreferences;

    const-string v3, "del_ad_flag"

    invoke-interface {v2, v3, v1}, Landroid/content/SharedPreferences;->getInt(Ljava/lang/String;I)I

    move-result v3

    .line 630
    const-string v2, "showAllAd"

    invoke-direct {p0, v2}, Lcom/tj/feige/app/a;->f(Ljava/lang/String;)Ljava/lang/String;

    move-result-object v2

    .line 631
    invoke-static {v2}, Lcom/tj/feige/app/a/ab;->a(Ljava/lang/String;)Z

    move-result v4

    if-eqz v4, :cond_0

    .line 632
    const-string v2, "0"

    .line 660
    :cond_0
    if-ne v3, v0, :cond_3

    .line 661
    invoke-static {}, Ljava/lang/System;->currentTimeMillis()J

    move-result-wide v2

    .line 665
    iget-object v4, p0, Lcom/tj/feige/app/a;->i:Landroid/content/SharedPreferences;

    const-string v5, "del_ad_time"

    invoke-interface {v4, v5, v10, v11}, Landroid/content/SharedPreferences;->getLong(Ljava/lang/String;J)J

    move-result-wide v4

    .line 666
    iget-object v6, p0, Lcom/tj/feige/app/a;->i:Landroid/content/SharedPreferences;

    const-string v7, "del_ad_day"

    invoke-interface {v6, v7, v1}, Landroid/content/SharedPreferences;->getInt(Ljava/lang/String;I)I

    move-result v6

    .line 667
    int-to-long v6, v6

    const-wide/32 v8, 0x5265c00

    mul-long/2addr v6, v8

    add-long/2addr v6, v4

    .line 669
    cmp-long v6, v2, v6

    if-lez v6, :cond_2

    .line 670
    const-string v2, "del_ad_flag"

    invoke-static {v1}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;

    move-result-object v3

    invoke-virtual {p0, v2, v3}, Lcom/tj/feige/app/a;->a(Ljava/lang/String;Ljava/lang/Object;)V

    .line 671
    const-string v2, "del_ad_day"

    invoke-static {v1}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;

    move-result-object v1

    invoke-virtual {p0, v2, v1}, Lcom/tj/feige/app/a;->a(Ljava/lang/String;Ljava/lang/Object;)V

    .line 672
    const-string v1, "del_ad_time"

    invoke-static {v10, v11}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long;

    move-result-object v2

    invoke-virtual {p0, v1, v2}, Lcom/tj/feige/app/a;->a(Ljava/lang/String;Ljava/lang/Object;)V

    .line 683
    :cond_1
    :goto_0
    return v0

    .line 674
    :cond_2
    cmp-long v2, v2, v4

    if-ltz v2, :cond_1

    move v0, v1

    .line 677
    goto :goto_0

    .line 680
    :cond_3
    const-string v3, "1"

    invoke-virtual {v3, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v2

    if-nez v2, :cond_1

    move v0, v1

    .line 683
    goto :goto_0
.end method


我不怎么懂smail的语法,但由于要修改的内容非常简单,还是可以做出猜测的:
整个方法里面只有一个 return v0,表示返回,v0中自然要存放具体的返回值,并且这个值在函数返回前是可以被多次修改的,里面的若干句 move v0, v1 就证明了这点
我们再往上看,
    const/4 v0, 0x1
    const/4 v1, 0x0
明显声明了两个变量并赋值为整数,也就是说我们的返回值也是在v0或v1中间选一个就可以了,具体要选哪个呢?
前面的分析表明我们应当让函数返回false,因此要选择0x0,为了证明这一点,不妨找到return true;对应的smail代码:

大概看一下smail的流程,可以发现v0的值并没被修改,可见return true就是返回了0x1

因此,为去掉广告,我们只要在函数的开头return false,也就是将return v1放在合适的位置即可,不妨就放在这两个变量刚声明完的地方:


保存文件,用  java -jar .\Apktool_2.5.0.jar b "飞鸽传输 IP Messenger_v2.3.6_apkpure.com" 命令重新打包,然后再用
jarsigner -keystore debug.keystore -storepass pass -signedjar signed.apk '.\飞鸽传输 IP Messenger_v2.3.6_apkpure.com.apk' keyalias
命令为apk签名,卸载掉原版飞哥传输,安装我们的版本,可以发现广告已经全部没有了

附件:
飞哥传输原版+修改版
https://wwa.lanzoui.com/b00oyfaze
密码:bt7h

免费评分

参与人数 17吾爱币 +20 热心值 +17 收起 理由
shu20xx + 1 + 1 谢谢@Thanks!
qtfreet00 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
lczh + 1 我很赞同!
13699513436 + 1 热心回复!
xkwdm + 1 + 1 我很赞同!
无意之过 + 1 + 1 谢谢@Thanks!
shiyucj + 1 + 1 热心回复!
独行风云 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
笙若 + 1 + 1 谢谢@Thanks!
maomaolang199 + 1 + 1 谢谢@Thanks!
Phantaminuam. + 1 热心回复!
抱薪风雪雾 + 1 + 1 谢谢@Thanks!
TiAmo丶jj + 1 + 1 谢谢@Thanks!
lingyun011 + 1 + 1 热心回复!
lca18214474709 + 1 + 1 我很赞同!
vicky526356 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
wanfon + 1 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

头像被屏蔽
推荐
yyspawn 发表于 2021-10-4 06:07
提示: 作者被禁止或删除 内容自动屏蔽
推荐
 楼主| 侃遍天下无二人 发表于 2021-10-1 21:40 |楼主
zgzaaa 发表于 2021-10-1 20:32
ip messager支持开热点传输文件不

应该是支持的,不过两边都要装客户端
3#
asd9988 发表于 2021-10-1 18:44
4#
xuka 发表于 2021-10-1 18:55
牛牛牛牛
5#
zgzaaa 发表于 2021-10-1 20:32
ip messager支持开热点传输文件不
6#
skyadmin 发表于 2021-10-1 21:15
学习一下积分去除教程
7#
jiangx23 发表于 2021-10-1 22:39
办公现在都用钉钉啦!飞秋加油哦以前都是飞秋
8#
wqs0987 发表于 2021-10-1 22:45
感谢大佬的无私分享
9#
T疒毒 发表于 2021-10-1 23:07
谢谢,学习了,感谢大佬分享经验
10#
tek2y 发表于 2021-10-2 02:14
学习了,感谢分享经验
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-23 16:19

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表