实战:去除未加固 Android App强制升级提醒

article/2025/9/27 15:08:41

去除一个未加固APP的升级提示弹窗,我们先看看app 是否进行加壳,发现使用的是邦邦免费加壳

我们在测试机上安装这个APP,安装命令如下:

adb  installl C:\Users\Avenue\Desktop\AndroidFridaBeginnersBook-main\Chap05\com.hello.qqc.apk

我们可以发现在APP 手动跳过欢迎界面后会弹出升级提示弹窗, 无论点击任何位置都无法消除弹窗:

在Android 中常使用的实现弹窗有三种:Android.App.Dialog、Android.App.AlertDialog 和Android.widget.PopupWindows。
#Objection快速自动化定位

我们使用objection 注入app, 搜索对应的弹窗的类,这个APP好像是多进程,需要是用 -d 参数, 同时关闭magisk 的 roothide 隐藏功能,不然会失败。

需要把app关闭之后,在注入它

注入命令如下:

objection -d  -g com.hello.qqc explore


在弹窗出现后,加载对应的插件,在内存中搜索对应的实例

plugin load  ./.objection/plugins/Wallbreakerplugin wallbreaker objectsearch  android.app.AlertDialogplugin wallbreaker objectsearch  android.app.Dialogplugin wallbreaker objectsearch  android.widget.PopupWindow

可以发现出现的弹窗类是android.app.Dialog

我们对这类来进行 hook,查看是否有对应的函数调用记录来判定是否使用了相应类。
发现这上面这个类比较可疑

我们使用如下命令对android.app.Dialog.setCancelable 函数进行Hook

android  hooking watch class_method android.app.Dialog.setCancelable --dump-args --dump-backtrace --dump-return

经过调用栈,发现APP中发起弹窗的函数如下图:

使用objection加载Wallbreaker搜索值得怀疑的地方

plugin wallbreaker objectsearch cn.net.tokyo.ccg.ui.fragment.dialog.UpdateDialogFragment


找到之后,打印该对象的属性

plugin wallbreaker objectdump --fullname 0x2702


看到[0x2aca]: cn. net. tokyo.ccg.bean.VersionBean$Version@2e81a62
然后将其打印出来

plugin wallbreaker objectdump --fullname 0x2aca

可以看到打印出的内容,与界面所展示的一致,验证了所见即所得原理。

我们使用脱壳工具Dexdunp 进行脱壳

脱壳出来的文件如下:

使用 jadx-gui 打开目标dex 并找到对应的UpdateDialogFragment类, 我们发现UpdateDialogFragment 继承了DialogFragment类

为了进一步确定这个类被哪个外部函数进行调用, 使用下面的命令进行Hook

android hooking watch class   cn.net.tokyo.ccg.ui.fragment.dialog.UpdateDialogFragment


打印调用栈

android hooking watch class_method xxx.ui.fragment.d
ialog.UpdateDialogFragment.b --dump-args --dump-backtrace --dump-return


xxx.ui.fragment.dialog.UpdateDialogFragment.b是从xxx.ui.activity.MainActivity.a该类过来

使用jadx-gui 定位这个函数,代码如下:

public void a(VersionBean.Version version, boolean z) {this.f1696a = version.url;if (version != null) {UpdateDialogFragment.b(version, z).show(getSupportFragmentManager(), UpdateDialogFragment.class.getSimpleName());}}

#修改源码重打包去强制升级
我们重新打包时,由于这个app 是加固的,需要注意一些地方:
第一,重新打包时,应该使用脱壳后原始APP的dex替换原来的dex
第二,App在加固后的入口函数变成了壳的入口点,因此在重新打包之后需要修改AndroidMainifest.xml的入口类。
我们使用 apktool 反编译APK 时选择不反编译dex文件并删除壳的dex, 而 apktool 的 -s 参数提供了不编译APK中的dex文件的功能。

apktool -s d xxx.apk


删除apk原有的classes.dex文件,并将脱壳后的classes.dex放入, 按照文件的大小依次命名为classes.dex 、classes2.dex、classes3.dex

rm classes.dex


第二个问题,修改app 的入口类,使用jadx-gui打开包含关键类的dex文件,搜索extends Application

然后回编译、首次使用需先生成keytool、签名

apktool b xxx  生成的目录在 dist 目录下

然后进行签名: # 生成keytool

keytool -genkey -alias android.key -keyalg RSA -validity 20000 -keystore /<MY_PATH>/android.key


将dist目录下的apk拷贝到d:\apktool目录,执行下面命令

需要把apk 和签名文件放在jdk的bin 目录下

注意生成签名apk必须要 指定目录, 在当前目录没有权限生成签名的apk

 jarsigner -verbose -keystore abc.keystore -signedjar 目录/xxxsigned.apk xxx.apk abc.keystore

测试可以成功运行后,我们接着反编译,搜索之前定位的类名含MainActivity的smali文件,编辑查找UpdateDialogFragment找到之后修改判断语句

apktool d xxxsigned.apk


找到对应的代码文件
smali/cn/net/tokyo/ccg/ui/activity/MainActivity.smali

修改成如下:

改完之后回编译、签名、运行

apktool b xxx  生成的目录在 dist 目录下


在进行签名

jarsigner.exe -verbose -keystore lala.keystore -signedjar D:\APP-test\apktool/com_singn_tets.hello.qqc.apk  com_singn.hello.qqc.apk lala


然后我们进行尝试,看看发现已经没有了强制升级的弹窗。

来自:https://www.yuque.com/avenue-le/ybne4d/gex5gg

最后

如果想要成为架构师或想突破20~30K薪资范畴,那就不要局限在编码,业务,要会选型、扩展,提升编程思维。此外,良好的职业规划也很重要,学习的习惯很重要,但是最重要的还是要能持之以恒,任何不能坚持落实的计划都是空谈。

如果你没有方向,这里给大家分享一套由阿里高级架构师编写的《Android八大模块进阶笔记》,帮大家将杂乱、零散、碎片化的知识进行体系化的整理,让大家系统而高效地掌握Android开发的各个知识点。

相对于我们平时看的碎片化内容,这份笔记的知识点更系统化,更容易理解和记忆,是严格按照知识体系编排的。

全套视频资料:
一、面试合集

二、源码解析合集

三、开源框架合集

欢迎大家一键三连支持,若需要文中资料,直接点击文末CSDN官方认证微信卡片免费领取


http://chatgpt.dhexx.cn/article/8UKCXOZ7.shtml

相关文章

一步强制升级windows11

许多人想升级windows11&#xff0c;可是配置不允许啊 今天教大家一种方法绕过安全启动和TPM强制升级win11 首先&#xff0c;在微软官方网站下载正版win11镜像 https://www.microsoft.com/zh-cn/software-download/windows11/ 建议选择multi-edition版 这个版本是多版本混合…

OBS 实现强制升级功能

一&#xff0c;要实现的效果 版本更新后发布最新的OBS版本 到阿里云用户端打开OBS时&#xff0c;强制让用户从阿里云更新最新版本 二&#xff0c;OBS升级 底层逻辑 三&#xff0c;修改的地方 win-update.cpp //升级 线程 void AutoUpdateThread::run() try {long …

绕过限制,强制升级至Windows11

目录 以前…… 开始升级。 新界面预览 附&#xff1a;文档下载 注意:本教程使用Windows11 insider preview,可能会有系统崩溃等现象。如需安装普通版本,请参考此处。 以前…… 以前的强制升级是这样的&#xff1a; 点击此链接查看详情&#xff1a;http://www.pccppc.com/…

真我GT realme GT root权限 解锁BL 刷ROOT教程 免费 TWRP

realme GT root后变砖了 也可以联系技术远程救砖 http://www.aialbb.com/thread-1443-1-1.html 可以9008 刷机 开机 解决不开机问题 realme GT解锁及ROOT教程 刷机有风险 入门需谨慎 仅限GT 文件下载总链接查看链接 机型:realme真我GT 代号:RMX2202 地区:中国CN A.解锁BL锁 1…

谷歌系列手机刷机和面具ROOT教程

目录 一、环境介绍二、准备工具2.1 下载官方ROM2.2 下载Magisk文件2.3 下载TWRP文件 三、刷机四、安装面具五、总结 一、环境介绍 1.一台真机&#xff1a;本文使用的是pixel 1代 2.adb环境的配置&#xff1a;安装Android Stadio(AS)后&#xff0c;都会配置。 3.需要安装的镜像(…

Ubuntu的root

Ubuntu的root 介绍给root用户设置密码并使用引用 介绍 安装ubuntu成功后&#xff0c;都是普通用户权限&#xff0c;并没有最高root权限&#xff0c;如果需要使用root权限的时候&#xff0c;通常都会在命令前面加上 sudo。有的时候感觉很麻烦。 我们一般使用su命令来直接切换到…

一加6T手机Android10 root教程

一加六T手机Android10 root教程 刷机之前一定要备份&#xff01;备份&#xff01;备份&#xff01; 第一步&#xff1a;准备文件第二步&#xff1a;准备工作第三步&#xff1a;解BL锁第四步&#xff1a;刷入第三方TWRP第五步&#xff1a;刷入Magisk 前言&#xff1a;一加6T手机…

root全攻略(root是什么 怎么root root能干什么)

首先讲什么是root 为了手机安全 我们是无法对手机系统进行修改 为的是防止用户的误操作比如直接把system删了 导致手机废掉 取得root就是取得android手机的最高控制权 很类似塞班的xx&#xff08;破解&#xff09; root好处 有了最高控制权 就可以修改手机所有地方 只要你有能力…

root手机教程

以前的root基本是su root&#xff0c;但是su不再维护更新之后&#xff0c;就有了现在的比su更好玩的root手机的工具→magisk。Magisk具备很强大的模块扩展&#xff0c;可以不修改system区的文件&#xff0c;达到修改system文件一样的效果&#xff0c;例如换字体&#xff0c;换主…

用安卓手机三步获取root权限教程

因为我有时候装一些软件需要手机的Root权限&#xff0c;而现在一些手机获取有非常的的麻烦&#xff0c;网上查怎样获取的时候各种广告各种坑&#xff0c;下载什么什么一件获得root权限的APP一般都是打广告的流氓软件&#xff0c;安装装后还给你装其它一大堆软件&#xff0c;也根…

Android 系统root教程-magisk最新版

Android 系统root教程-magisk最新版 前言 Magisk之前的root方式都需要通过twrp去刷入文件&#xff0c;而且还有Magisk&#xff08;核心组件&#xff09;和Magisk Manager&#xff08;配套应用程序&#xff09;分开安装&#xff0c;非常麻烦&#xff0c;在Magisk v22.0之后&am…

android手机Root全过程

写在前面 现在的android手机想要获取root的最高权限都是非常麻烦的&#xff0c;当然这样也能让手机相对更安全&#xff0c;但是最近公司一个项目其中的部分功能需要获取手机的root权限&#xff0c;所以这里就做一个root过程的记录。 以红米6为例&#xff0c;说一下root的过程…

华为手机root的最简单方法教程!附专用root工具!详细

华为手机root的最简单方法&#xff1a; 18年那会我做过手机维修师&#xff0c;对于这领域的技术掌握的还是比较多。 如果你也想root你的华为手机&#xff0c;那么建议把这篇文章看完 下面教程需要几个必须的工具&#xff0c;我们已经打包上传好了&#xff0c;去我的公众号“…

android怎样开启root权限管理,手机怎样开启root权限(最新安卓手机一键root教程)...

对于安卓手机用户来说&#xff0c;root权限这个词应该不陌生。在使用手机的过程中&#xff0c;用户难免需要增删一些内容&#xff0c;但是有时候手机就会跳出“需要root权限”这样的字眼&#xff0c;这是怎么回事呢&#xff1f;其实是因为有些手机厂商为了方便推广某些软件&…

android一键root权限获取,怎样获得root权限(一键root手机的教程)

root这个词相信大家都听过&#xff0c;它是安卓系统的超级用户。而获取了root权限&#xff0c;就可访问和修改手机里几乎所有的文件&#xff0c;比如删除无用的预装APP、优化系统运行等。今天我就为大家介绍一款root软件——《KingRoot》&#xff0c;无需专业知识&#xff0c;无…

安卓ROOT全教程(测试机 红米Note7Pro)

0x1.准备工作,申请解锁BL下载工具 小米解BL锁需要在手机上绑定并申请&#xff0c;具体教程如下&#xff0c;自己看&#xff0c;很简单。中途如出现问题&#xff0c;官方都已经汇总贴出解决方案了。 http://www.miui.com/unlock/index.html 解BL锁成功后&#xff0c;下载所需…

安卓设备如何ROOT?玩转ROOT,让你的安卓手机更强更好用

曾经&#xff0c;在我们刚拿到一部新的安卓手机时&#xff0c;都会第一时间选择进行ROOT&#xff0c;在前几年&#xff0c;ROOT可谓是引发了热潮&#xff1b;因为很多手机制造商&#xff0c;会对用户修改操作系统进行限制&#xff0c;ROOT也是因此应运而生。 但是&#xff0c;…

【ROOT from CERN】——ROOT的安装

ROOT 是CERN&#xff08;欧洲核子中心&#xff09;开发的&#xff0c;基于C的数据分析框架&#xff08;语言&#xff09;&#xff0c;在大量数据的情况下表现十分良好。本篇文章将描述有关于ROOT在Linux&#xff08;以Ubuntu为例&#xff09;和Windows&#xff08;以Win10为例&…

root教程_方法

的root教程在这里整理了一下&#xff0c;之前有机友说自己的手机想删除系统自带的一些无用软件&#xff0c;可是怎么也删除不了&#xff0c;所以需要先进行root才可以删除&#xff0c;不然的话是 删除不了的&#xff0c;这个方法也是大家在root过程中总结出来了&#xff0c;因为…

ADSAD合辑(一)

我同门用了大概4h就从下载ads到照着书画图完成了了一个ads仿真电路。真的大开眼界。太欣赏她了。劈开乱麻就是路&#xff0c;脸皮厚了无所不能哈哈哈&#xff08;这是褒义只是我想不到褒义词了&#xff09;。然后又请一位同学画PCB&#xff0c;我在旁边看了2h&#xff0c;自己实…