静态分析、动态调试与重打包:去除Android APK烦人广告

最近,一直使用的某款APP,广告越来越多,更令人发指的是,广告弹框最后都变成无法关闭的形式,不使用会员压根没法正常使用。应用市场广大用户的评论说出了我们的心声。

虽说充会员可以免广告,这点小钱,那都不是事,但是不吃馒头争口气,对于吃香难看的APP,作为消费者,我们要敢于维权。说不定通过维权手段,还能看些免费小视频。不开玩笑了,本次,就以这个APP为例,简要说明一下如何对Android APK进行逆向和重打包,实现免广告操作。免责声明:本文不针对任何特定APP,请各位看官遵纪守法,只做学习交流使用。

方案一

工作时,曾遇到一个视频APP。对于某个收费视频,会调用一个函数,用来判断用户是否是会员。基于此,我们只要找到判断会员的函数,修改返回值,即可实现付费绕过。

对于此APP,我一开始的想法也是如此。我们搜索vip,果然找到一个疑似函数isVipUser,大喜过望,显然这个函数就是用来判断用户是否是会员。

紧接着,将APK反编译,即拖到APK Easy Tool,修改对应的smali代码。将190改为0x1,那么isVipUser返回值永远为True。

再将修改后的文件,拖到APK Easy Tool的Compile上,即可实现回编译,并且会自动签名,实现一个透明的重打包。当我们把重打包后的APK,放到模拟器上安装以后,广告居然还在?这就有点尴尬了,显然这个APP的逻辑可能远比之前的判断要复杂,可能使用了其他判断方法。

方案二

退而求其次,只能找到每个广告组件弹窗的逻辑了。还没说完,广告就来了。单从如下卡片中,我们很难直接定位到相应代码。因为该卡片的内容是实时生成的,没有明显关键字。

点击x,喜出望外,"享免广告特权",这就是我们想要的关键词。

在Jadx中,通过搜索关键字,直接可以定位到字符串,根据字符串,查找相应的代码逻辑,这是一种最常见的逆向方法,可以帮助我们快速定位复杂逻辑。这里需要注意的是,字符串搜索时,一定要选择资源

紧接着通过层层引用,定位到相应的代码。因为原APK广告组件实在太多,通过逐个patch,再回编译(回编译很耗时),效率过于低下。因此要使用frida,进行调试。

最方便的就是,hook相应函数,不反回任何值,看看广告还在不在。这样就能知道这个函数到底是不是某个特定的广告组件。利用此方法,我们最终找到了6处不同的广告组件的代码,通过patch,还原一个干净整洁的APP,感谢以下工具!

在动态调试的过程中,可能一个函数会被多处调用,这时打印调用栈就显得十分重要。还好个人有个记笔记的习惯,虽然很久没有逆向Android代码,但是通过以前的文章,Frida-Android 进阶,我们实现了对此APP的快速动态调试。

js 复制代码
Java.perform(function(){
    send("print stack...");
    var Animal = Java.use("com.example.testfrida.Animal");

    Animal.getAge.implementation = function (){
    	//打印调用栈
        console.log(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Exception").$new()));
        //throw Java.use("java.lang.Exception").$new();
        return this.getAge();
    };
});

其实还有方案三,一些工具可能集成了通用屏蔽广告的功能,例如"MT管理器",号称能够自动去除一些APK的广告,大家感兴趣可以试一下。

杂谈

很久没有写博客了,其实逆向这个APP还是花了些时间,只是写得比较简单,是因为非虫大大的经典Android安全入门书籍《Android软件安全与逆向分析》早就提到相关内容。如果你觉得出版于2013年的此书比较老,那么后来的《Android软件安全权威指南》也是一个不错的阅读选择。

其实对于安全从业者来说,更多的是在各种博客、论坛学到的安全知识,在有一定安全背景之后,再阅读相关经典书籍,可能会有更好的结果。就拿我写的这篇博客为例,可能相关书籍上会告诉你,用apktool等工具进行反汇编,jd-gui反编译smali代码。这确实是常见的Android静态分析思路。

但是实际上,至少对于我而言,很多过程都省略了,我们要把最少的时间花在通用逆向上,而把更多精力放在代码逻辑上。例如,Jadx可以直接反编译APK,而且具有强大的交叉引用功能;如果你想对APK进行Patch,APK Easy Tool可以实现一键反编译,得到一个文件夹,直接修改文件夹里面的文件,比如smali、资源文件。然后将这个文件拖回APK Easy Tool就可以实现一键回编译和签名。

如果你是一个初出茅庐的小白,则需要多多实践和总结。光看理论是远远不够的,实际操作中会遇到各种问题和挑战,这些都是纸上谈兵无法涉及的。只有通过实际测试,才能真正理解和掌握安全测试的各种技术细节。安全这条路虽然不易,但只要脚踏实地,勤于动手实践,相信一定能够通过自己的努力,在这个领域有所突破和进步。

相关推荐
企业架构师老王6 分钟前
2026制造业安全生产隐患识别AI方案:从主流产品对比看企业级AI Agent的非侵入式落地路径
人工智能·安全·ai
国冶机电安装14 分钟前
化工厂生产线设备安装:从工艺安全到系统联动的完整解析
安全
可观测性用观测云2 小时前
通过观测云敏感数据扫描能力保障数据安全合规
安全
2401_873479403 小时前
企业安全团队如何配合公安协查?IP查询在电子取证中的技术实践
tcp/ip·安全·网络安全·php
饭小猿人4 小时前
Android 腾讯X5WebView如何禁止系统自带剪切板和自定义剪切板视图
android·java
weixin_514253184 小时前
4-26联合训练 tmux
安全
byoass4 小时前
智巢AI知识库深度解析:企业文档管理从大海捞针到精准狙击的进化之路
开发语言·网络·人工智能·安全·c#·云计算
_李小白4 小时前
【android opencv学习笔记】Day 8: remap(像素位置重映射)
android·opencv·学习
美狐美颜SDK开放平台4 小时前
多场景美颜SDK解决方案:直播APP(iOS/安卓)开发接入详解
android·人工智能·ios·音视频·美颜sdk·第三方美颜sdk·短视频美颜sdk
@insist1234 小时前
信息安全工程师核心考点:物理与环境安全(下篇)
网络·安全·软考·信息安全工程师·软件水平考试