Android逆向学习(四)app修改smali函数跳过弹窗广告,等待广告,更新提醒

Android逆向学习(四)app修改smali函数跳过弹窗广告,等待广告,更新提醒

一、写在前面

这是吾爱破解课程的第三个练习,我在写这篇博客时遇到了vscode插件bug,已经想办法联系原作者了,希望能够尽快更新修复这个问题,废话少说let’s go

二、任务目标

打开后会出现一个带有时间的广告弹窗和一大堆弹出广告,我们的任务就是去掉这些东西

20230905152102

三、去除等待广告

我们首先打开开发助手的activity查看,看看这个activity是怎么一个调用的

20230905152136

我们可以发现这个调用的逻辑是这样MainActivity -> AdActivity -> AlertDialog

我们就按这个查,先查AdActivity

然后我竟然发现了smali2java的bug,绝了,这个bug的修复放在了番外篇,会进行一个简单介绍和bug修复的方法

20230905152246

然后我们分析这个代码的结构,最神奇的地方来了,这个jadx开源软件也有一个问题

20230905160021

这里有一个代码没有被翻译成java,当然这一段我们光看smali代码也能看出来这个是用lambda表达式调用了jump这个方法,我们可以换个逆向工具来看一下这个的具体代码

20230905160429

这里就很明显可以看出这是等时间到了之后就调用了jump函数然后打开了一个新的activity

我们可以这样,我的想法如下图

protected void onCreate(Bundle bundle) {super.onCreate(bundle);setContentView(2131427365);loadAd();//之前这里是loadAd();不如我们直接把这个改成jump()}

说干就干

20230905160840

然后我们打包运行一下(注:打开方式见第一篇博客)

20230905161038

四、去除更新通知

这时我们可以看到之前的广告没有了,然后根据我们之前看的jump代码

public final void jump() {startActivity(new Intent((Context) this, ChallengeThird.class));finish();}

他是使用intent跳转到了ChallengeThird.class,intent是android切换activity的一个方法,在这里建议最好学android逆向之前先了解一下android开发,我很久以前学过android开发,有时间的话会开始重新写一下相关博客,可以看一下《android第一行代码》,最好的android开发书,没有之一

所以我们开始查看这个class看看大概是怎么样的一个代码逻辑(下面这个就是逆向出来的代码)

public final class ChallengeThird extends AppCompatActivity {protected void onCreate(Bundle bundle) {super.onCreate(bundle);setContentView(2131427362);Context context = (Context) this;AlertDialog.Builder builder = new AlertDialog.Builder(context);builder.setTitle("这是二号广告标题");builder.setMessage("这是二号广告内容");builder.setCancelable(false);builder.setPositiveButton("前往论坛", new ChallengeThird$.ExternalSyntheticLambda1(this));builder.setNegativeButton("退出软件", ChallengeThird$.ExternalSyntheticLambda2.INSTANCE);builder.show();new CommonDialog.Builder(context).setMessage("一号广告弹窗已就位").setNegativeButton("退出软件", ChallengeThird$.ExternalSyntheticLambda3.INSTANCE).setMessageColor(-16777216).setPositiveButton("前往论坛", new ChallengeThird$.ExternalSyntheticLambda0(this)).setWith(0.8f).create().show();checkUpdate();}/* JADX INFO: Access modifiers changed from: private *//* renamed from: onCreate$lambda-2$lambda-0  reason: not valid java name */public static final void m1onCreate$lambda2$lambda0(ChallengeThird challengeThird, DialogInterface dialogInterface, int i) {Intent intent = new Intent("android.intent.action.VIEW");intent.setData(Uri.parse("https://www.52pojie.cn/forum.php"));challengeThird.startActivity(intent);}/* JADX INFO: Access modifiers changed from: private *//* renamed from: onCreate$lambda-4  reason: not valid java name */public static final void m4onCreate$lambda4(ChallengeThird challengeThird, DialogInterface dialogInterface, int i) {Intent intent = new Intent("android.intent.action.VIEW");intent.setData(Uri.parse("https://www.52pojie.cn/forum.php"));challengeThird.startActivity(intent);}private final void checkUpdate() {((AppService) ServiceCreator.INSTANCE.create(AppService.class)).getAppUpdate().enqueue(new checkUpdate.1(this));}public final int getVersionCode(Context context) {try {return context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionCode;} catch (PackageManager.NameNotFoundException e) {e.printStackTrace();return 0;}}
}

然后我在进行逆向时发现了这么一个好玩的东西,这个checkupdate方法,然后我们可以在另一个文件中找到这个类,然后我们看到这个是个进行版本匹配的一个函数,废话少说直接修改

20230905164117

我们了解代码逻辑后直接锁定在这一块代码

    invoke-virtual {p1}, Lcom/zj/dongbeiwangshi/network/UpdataResponse;->getVersionCode()I //调用函数得到最新版本号move-result p1if-ge p2, p1, :cond_0 //如果p2>=p1就跳转到cond_0处,否则继续向下//我们可以把这个p2和p1的位置换一下改成if-ge p1,p2.line 72iget-object p1, p0, Lcom/zj/dongbeiwangshi/ui/ChallengeThird$checkUpdate$1;->this$0:Lcom/zj/dongbeiwangshi/ui/ChallengeThird;check-cast p1, Landroid/content/Context;invoke-static {p1}, Lcom/zj/dongbeiwangshi/util/DialogUtilsKt;->showUpdatinDialog(Landroid/content/Context;)V:cond_0return-void

我们按上面的修改,然后重新打包运行一下

20230905165734

很好,我们成功的去掉了更新提醒,下一个就是广告弹窗了

五、去除广告弹窗

这里有两个广告弹窗,一般广告弹窗都是.show文件调用的,我们只需要想办法把这两个弹窗的show函数给干掉就行了,根据我们两篇比对着查找,我们很轻松就发现两个show的位置

20230905173410

20230905173510

直接给注释掉,简单粗暴

六、去除横幅广告

本来以为结束了,结果半路又杀出来一个

20230905173654

横幅广告是吧,这一看就是一个图片,先查后干

我们当时分析的时候没有在smali代码中发现这个东西,这就说明他肯定在布局文件里面,然后一查,果不其然,在layout目录下的布局文件中

20230905174000

直接删了,然后顺便还可以更改一下最后的图标

20230905174418

所以终于完成了,希望这个文章对你有帮助

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/70071.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android WIFI工具类 特别兼容Android12

直接上代码: package com.realtop.commonutils.utils;import android.annotation.SuppressLint; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothManager; import android.bluetooth.BluetoothProfile; import android.content.Con…

Jmeter 三种提取方式 —— 关联实例

当请求之间有依赖关系,比如一个请求的入参是另一个请求返回的数据,这时候就需要用到关联处理 Jmeter中常用的关联方法: 正则表达式提取器、XPath提取器、JSON提取器​​​​​​ regex: (.*?)-(.*?)-(.*?)\n.: 匹配除换行符(…

C# 获取Json对象中指定属性的值

在C#中获取JSON对象中指定属性的值,可以使用Newtonsoft.JSON库的JObject类 using Newtonsoft.Json.Linq; using System; public class Program { public static void Main(string[] args) { string json "{ Name: John, age: 30, City: New York }"; …

python实现对excel表中的某列数据进行排序

如下需要对webCms中的B列数据进行升序排序,且不能影响到其他列、工作表中的数据和格式。 import pandas as pd import openpyxl from openpyxl.utils.dataframe import dataframe_to_rows# 读取 Excel 文件 file_path 1.xlsx sheet_name webCms# 读取 Excel 文件并…

pc-签字画板vue-esign的使用

使用的是vue-esign组件 npm install vue-esign 首先下载组件在main.js中引入vue-esign,并且挂载 import { createApp } from vue; import App from ./App.vue; const app createApp(App);import vueEsign from vue-esign app.use(vueEsign ) 页面使用&#xff0…

mysql场景题:最近7天连续3天登陆用户,字段,id,date(已去重)

1.最近7天连续3天登陆用户,字段,id,date(已去重) 思路: lag对时间开窗(注意时间得转换为时间戳(int类型才可以添加后续条件),跳行为2(连续3天&am…

uniapp移动端地图,点击气泡弹窗并实现精准定位

记录移动端地图map组件的使用 需求记录: 移动端地图部分需要展示两个定位点,上报点及人员定位点。通过右上角的两个按钮实现地图定位。点击对应定位气泡,弹出定位点的信息。 效果图如下: map在nvue中的使用。直接用nvue可以直接…

JavaScript闭包漏洞与修补措施

请先看下面一段代码 var obj (function () {var sonObj {a: 1,b: 2}return {get: function (v) {return sonObj[v]}}})()可以看出,这是一段很典型的js闭包代码,可以通过obj调用get方法传一个参数,如果传的是a就可以得到闭包内的对象sonObj.a var obj (function () {var sonO…

edge浏览器无法登录账号!Microsoft 帐户无法登录!

种种原因,将笔记本重置了,重新下载装了系统,但是麻烦也来了,Microsoft 帐户无法登录!edge浏览器无法登录账号,之前的保存的密码,加星的书签页同步不过去,这不完犊子了!干…

Redis7入门概述

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: Java从入门到精通 ✨特色专栏&#xf…

微信小程序引入地图

微信小程序引入地图 <map longitude"{{markers[0].longitude}}" scale"11" latitude"{{markers[0].latitude}}" markers"{{markers}}" style"width: 100%; height:81vh;"></map>1.可以直接在页面设置map标签显…

谈谈你的未来吧(励志成为CV算法工程师的第一天)

谈谈你的未来吧&#xff08;励志成为CV算法工程师的第一天&#xff09; 前言一、不知道该怎么选择的大一&#xff0c;大二二&#xff0c;好像知道未来路的大三三&#xff0c;谈谈博主我吧四&#xff0c;朝着一个方向前进吧 前言 仅以此篇记录我的学习经过&#xff0c;大家有什…

解决WebSocket通信:前端拿不到最后一条数据的问题

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

服务器上装conda

服务器从0搭建-【anaconda3cudacudnnconda环境创建修改conda源】_bashrc中的conda initialize和cuda_冲上云霄&#xff01;的博客-CSDN博客

C# 子类如何访问子类的方法(同一父类)

在继承关系中&#xff0c;子类可以通过创建另一个子类的对象来访问其方法。下面是一个示例&#xff0c;展示了子类如何访问另一个子类的方法&#xff1a; public class Animal {public virtual void Speak(){Console.WriteLine("我是动物。");} }public class Cat :…

CentOS7设置虚拟内存

1、 查看服务器内存 > free -mhtotal used free shared buff/cache available Mem: 3.7G 1.4G 128M 64M 2.1G 1.9G Swap: 0 0 02、创建虚拟内存 合理规划和设计 Linux…

python学习之【深拷贝】

#我的编程语言学习笔记# 前言 上一篇文章python学习之【浅拷贝】 学习了python中的浅拷贝相关内容&#xff0c;这篇文章接着学习深拷贝。 简单回顾 浅拷贝只拷贝浅层元素&#xff0c;深层元素的内存地址不改变 &#xff1b;当对拷贝产生的新的对象的浅层元素进行更改时&…

vue2踩坑之项目:生成二维码使用vue-print-nb打印二维码

1. vue2安装 npm install vue-print-nb --save vue3安装 npm install vue3-print-nb --save 2. //vue2 引入方式 全局 main.js import Print from vue-print-nb Vue.use(Print) ------------------------------------------------------------------------------------ //vue2 …

【亲测】mwget安装成功

微信公众号&#xff1a;leetcode_algos_life&#xff0c;代码随想随记 小红书&#xff1a;412408155 CSDN&#xff1a;https://blog.csdn.net/woai8339?typeblog 抖音【暂未开始&#xff0c;计划开始】&#xff1a;tian72530 知乎【暂未开始&#xff0c;计划开始】&#xff1a…

FLUX查询InfluxDB -- InfluxDB笔记三

1. 入门 from(bucket: "example_query") // 没有筛选条件直接查询会报错|> range(start: -1h) // |>是管道符&#xff0c;后跟筛选条件 2. 序列、表和表流 序列是InfluxDB的概念&#xff0c;一个序列是由measurement、标签集、一个字段名称 表流是FLUX为了…