破解 Android 上 airpods 连接软件的pro版
0x00 起因
起因是在Android上用了一段时间的AndPods觉得不太好用之后,换到了另一个Play商店推荐的App。动画、连接和电量提示都用的很满意,就是每次连接的弹窗和APP里面都有广告,就想着改成Pro版把广告去掉。
0x01 解包分析
首先把apk拿出来解包,开始看代码。
代码没有加固,用了混淆,搜索关键字之后发现,只做了一个签名校验,pro版本通过一个常量来判断并通过SP明文存储。
root过的话直接通过adb修改SP的内容就好,由于手机没有root,只好通过改代码的方式来实现破解。
0x02 修改Pro版
通过搜索代码确定,pro版的判定只通过MenuItem::isPro,直接把值写死,setter方法return就好。
- 修改MenuItem.smali的constructor,在return-void前为isPro初始化
# direct methods
.method public constructor <init>()V
.locals 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
new-instance v0, Ljava/util/ArrayList;
invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V
iput-object v0, p0, Lcom/pryshedko/materialpods/model/MenuItem;->possibleVariants:Ljava/util/ArrayList;
sget-object v0, Lcom/pryshedko/materialpods/model/MenuItem$PROPERTY_TYPE;->TEXT:Lcom/pryshedko/materialpods/model/MenuItem$PROPERTY_TYPE;
iput-object v0, p0, Lcom/pryshedko/materialpods/model/MenuItem;->type:Lcom/pryshedko/materialpods/model/MenuItem$PROPERTY_TYPE;
const/4 v0, 0x1
iput-boolean v0, p0, Lcom/pryshedko/materialpods/model/MenuItem;->isVisible:Z
const/high16 v0, 0x43110000 # 145.0f
iput v0, p0, Lcom/pryshedko/materialpods/model/MenuItem;->maxValue:F
sget-object v0, Lb/a/a/a/a/b/a$b;->d:Lb/a/a/a/a/b/a$b;
iput-object v0, p0, Lcom/pryshedko/materialpods/model/MenuItem;->unit:Lb/a/a/a/a/b/a$b;
const/high16 v0, 0x40800000 # 4.0f
iput v0, p0, Lcom/pryshedko/materialpods/model/MenuItem;->defaultFloatValue:F
+ const/4 v0, 0x1
+ iput-boolean v0, p0, Lcom/pryshedko/materialpods/model/MenuItem;->isPro:Z
return-void
.end method
- 修改MenuItem.smali的setPro方法,直接删除iput-boolean
.method public final setPro(Z)V
.locals 0
- iput-boolean p1, p0, Lcom/pryshedko/materialpods/model/MenuItem;->isPro:Z
return-void
.end method
0x03 绕过签名校验
通过搜索代码确定,签名校验的接口为b.g.b.b.b.g.b()
,直接修改方法的返回值
.method public static b(Landroid/content/pm/PackageInfo;Z)Z
.locals 3
- const/4 v0, 0x0
- if-eqz p0, :cond_1
- iget-object v1, p0, Landroid/content/pm/PackageInfo;->signatures:[Landroid/content/pm/Signature;
- if-eqz v1, :cond_1
- const/4 v1, 0x1
- if-eqz p1, :cond_0
- sget-object p1, Lb/g/b/b/b/t;->a:[Lb/g/b/b/b/q;
- invoke-static {p0, p1}, Lb/g/b/b/b/g;->a(Landroid/content/pm/PackageInfo;[Lb/g/b/b/b/q;)Lb/g/b/b/b/q;
- move-result-object p0
- goto :goto_0
- :cond_0
- new-array p1, v1, [Lb/g/b/b/b/q;
- sget-object v2, Lb/g/b/b/b/t;->a:[Lb/g/b/b/b/q;
- aget-object v2, v2, v0
- aput-object v2, p1, v0
- invoke-static {p0, p1}, Lb/g/b/b/b/g;->a(Landroid/content/pm/PackageInfo;[Lb/g/b/b/b/q;)Lb/g/b/b/b/q;
- move-result-object p0
- :goto_0
- if-eqz p0, :cond_1
- return v1
- :cond_1
- return v0
+ const/4 v0, 0x1
+ return v0
.end method
0x04 重打包&签名
由于我是用apktool2.4.0和旧的framework-res进行解包的,AndroidManifest中的foregroundServiceType="location"
没有被正确解析,导致重打包时报了foregroundServiceType的错误,升级到apktool2.5.0并安装最新的framework-res.apk即可解决。
0x05 总结
这个App没有做过多的防护,重打包的过程也只是因为工具版本太低出现了一点小问题,修改起来没有什么难度,分析签名校验和Pro鉴权也算顺利,没遇到什么坑。
破解 Android 上 airpods 连接软件的pro版的更多相关文章
- Charles在Mac、iPhone、Android上抓http/https协议的包
1.我使用的版本是4.0.2,下载和破解网上方法很多,不做说明 2.Charles在Mac上抓http/https协议的包 2.1先把这三个都给装上,装完后会自动跳转到钥匙串中 2.2如果装完后提示证 ...
- 用Kotlin破解Android版微信小游戏-跳一跳
前言 微信又更新了,从更新日志上来看,似乎只是一次不痛不痒的小更新.不过,很快就有人发现,原来微信这次搞了个大动作——在小程序里加入了小游戏.今天也是朋友圈被刷爆的缘故. 看到网上 有人弄了一个破解版 ...
- 通杀所有系统的硬件漏洞?聊一聊Drammer,Android上的RowHammer攻击
通杀所有系统的硬件漏洞?聊一聊Drammer,Android上的RowHammer攻击 大家肯定知道前几天刚爆出来一个linux内核(Android也用的linux内核)的dirtycow漏洞.此洞可 ...
- TensorFlow 在android上的Demo(1)
转载时请注明出处: 修雨轩陈 系统环境说明: ------------------------------------ 操作系统 : ubunt 14.03 _ x86_64 操作系统 内存: 8GB ...
- 71.Android之长连接实现
转载:http://blog.csdn.net/qq_23547831/article/details/51690047 本文中我们将讲解一下App的长连接实现.一般而言长连接已经是App的标配了,推 ...
- android上传文件到服务器
package com.spring.sky.image.upload.network; import java.io.DataOutputStream; import java.io.File; i ...
- PhoneGap 在 Android 上的插件开发方法介绍
移动应用开发已经成为软件开发的一个重要方向,但是移动开发面临的一个重要问题就是跨平台的问题.PhoneGap 作为一个多平台的软件开发框架,提供了一次编写多个平台的运行.目前已经支持多达 6 个移动平 ...
- Android平台上长连接的实现
Android 平台上长连接的实现 为了不让 NAT 表失效,我们需要定时的发心跳,以刷新 NAT 表项,避免被淘汰. Android 上定时运行任务常用的方法有2种,一种方法用 Timer,另一种是 ...
- [转]Mac OS X 下部分Android手机无法连接adb问题之解决方案
时至当今,Android山寨手机厂商已如此之多,能修改和个性化定制Android OS的能人已是多如牛毛,有的牛人修改Android系统只会影响所修改的点,不会影响其它,然后还有的就不多说了,总之做的 ...
随机推荐
- 【noi 2.5_1789】算24(dfs)
最开始我想的是全排列+枚举符号和括号的方法,但是我自己倒腾了很久还是打不对,只好向他人请教.正解很机智--直接随意将几个数"捆绑"在一起,值存在其中一个数上,其他数标记不可再选,直 ...
- poj 1696 极角排序(解题报告)
#include<iostream> #include<cmath> #include<algorithm> using namespace std; double ...
- Caocao's Bridges HDU - 4738 找桥
题意: 曹操在赤壁之战中被诸葛亮和周瑜打败.但他不会放弃.曹操的军队还是不擅长打水仗,所以他想出了另一个主意.他在长江上建造了许多岛屿,在这些岛屿的基础上,曹操的军队可以轻易地攻击周瑜的军队.曹操还修 ...
- python-零基础入门-自学笔记
目录 第一章:计算机基础 1.1 硬件组成 1.2 操作系统分类 1.3 解释型和编译型介绍 第二章:Python入门 2.1 介绍 2.2 python涉及领域 2.2.1 哪些公司有使用Pytho ...
- 2.Url重定向和重写
虚拟地址===>真实地址映射(搜索引擎优化,抽象能力,防盗链) 之前:IIS重写模块规则,Apache mod_Rewrite.Nginx上的URL重写. 现在:通过中间件来实现. 重定向与重写 ...
- zookeeper 的监控指标(一)
一 应用场景描述 在目前公司的业务中,没有太多使用ZooKeeper作为协同服务的场景.但是我们将使用Codis作为Redis的集群部署方案,Codis依赖ZooKeeper来存储配置信息.所以做好Z ...
- kubernetes跑jenkins动态slave
使用jenkins动态slave的优势: 服务高可用,当 Jenkins Master 出现故障时,Kubernetes 会自动创建一个新的 Jenkins Master 容器,并且将 Volume ...
- SQL优化汇总
今天面某家公司,然后问我SQL优化,感觉有点忘了,今天特此总结一下: 总结得是分两方面:索引优化和查询优化: 一. 索引优化: 1. 独立的列 在进行查询时,索引列不能是表达式的一部分,也不能是函数的 ...
- Win10 Nodejs搭建http-server注意点
下载安装,并用命令行查看版本:如果提示输入命令找不到等,可能是没有安装成功,或者是环境变量引起的: 如果在提示安装不成功可能是win10权限问题,最好使用管理员模式运行cmd,再用cmd命令打开安装文 ...
- Linux 驱动框架---设备文件devfs
设备文件系统 Linux引入了虚拟文件系统,从而使设备的访问可以像访问普通文件系统一样.因此在内核中描述打开文件的数据inode中的rdev成员用来记录设备文件对应到的设备号.设备文件也由一个对应的f ...