WO麦克风软件破解收费功能以及去广告
没有录音插孔的烦恼
还是先废话说说怎么会想到做这个软件的破解。跟大家扯一下背景,交代一下下防止大家有疑问。因为我的Lenovo小新只有一个耳机输出口,没办法用到我耳机上面的麦克风,只能用本子自带的那个麦克风。这就导致了平时录音质量不好(其实是因为开黑的时候语音被吐槽说话太小声了)。
找找有没便宜简单的解决方案
所以问了问谷歌、度娘什么的,就晓得了“WO麦克风”这个软件。然后便安装好PC的客户端以及Android的客户端。在局域网内使用WIFI连接,测试了一下,收音效果比笔记本自带的mic好些,延迟也在可接受范围。
但是,在Android客户端有一些小瑕疵,比如:有广告、音量无法调整。尝试调整音量时,就提示我这个音量调整是收费功能,订阅即可~
Android客户端大概长这样子
穷屌丝没钱订阅,试试破解
先取回apk文件
这里因为本人不想拿根数据线连着手机,太麻烦了。所以选择用adb 无线连接过去进行操作。
使用默认端口连接
将我们需要修改的这个wo麦克风取回电脑本地
有同学可能不知道我是怎么找到这个软件的路径取回来的
怎么做找到这几个软件的路径?进到adb shell里面再使用一个 pm path 命令很简单啦
蛤包名不知道咋个找到?请回顾前面发过的文章“ADB操作手机的那些骚操作”,不赘述啦~
逆向分析
取回来之后,右键apk文件,用压缩软件打开瞅一眼,如下所示
进入res目录没看到什么奇奇怪怪so文件,咱们就先假设他没壳没加固过
进行反编译
将apk文件丢进APKIDE(APK改之理)中,自动反编译便会安排上了~
当然,有可能有些同学会反编译失败。出现类似这样的东西~
明显就是告诉你,反编译错误了
更换apktool
这个情况,给他换一下apktool就好了
下载一个新的apktool回来,将原来那个换掉就好。你看原来自带的apktool时间戳都2015年的,安卓发展这么快,反编译后面新做的软件难免会出问题的嘛。
OK,反编译好,打开清单文件就可以看到这样的界面了。
找找广告
咱们开头说了,不喜欢广告,我们在AndroidManifest里面看看能不能找到一些关于广告的东西
其实都不用怎么看,扫视了一眼,就发现了关于广告的内容。因为看到了ads,咱们平时有同学用过屏蔽网页广告的软件吧,是不是也带有ad
谷歌提供的广告服务,com.google.android.gms.ads.APPLICATION_ID
ads是谷歌公司的主要广告服务产品~
咱们前面说了,Android软件就是由一个个activity做成的。所以,咱们在这里把有关ads的activity都删掉试试看,能不能编译出来,能否去掉广告~
在这里,搜索一下关于ads的所有内容,并把所在行标记好
修完完毕重新编译
OK,这三行,咱们都给删了,然后保存。编译一下~
报错失败了,咱就知道不会这么简单~
找到报错点
看一下报错,是资源错误,这就很好办了~去报错所在xml,找到这个属性,删掉保存就好~
编译,安装,保存按钮灰色说明已保存~
OK,删掉之后,确认保存更改之后,咱们再编译一次。
编译通过了
编译通过,准备重新安装
点击安装按钮~
如果安装失败~,把手机原来的软件卸载掉再试一次,想知道为啥要这样的同学,麻烦回顾以前发过的文章~
看看去广告后的效果
OK,装好之后,打开软件,可以看到,已经是没有广告了~
但是,录音的音量还是调整不了。。。
重新分析,尝试破解音量调节
看看Java代码
是这里没错了,结合函数名推测一下~
不妨在这里看看,看一下这段函数,写了啥
1 | if (this.mSettings.isSubscriptionValid()) |
这段是设置音量的,咋一看没啥问题。在if语句判断一下是不是通过订阅,如果通过的话,进入循环体使用setVolume来设置音量
1 | do |
这个do循环,进去就给return 了~有点迷。。。不过,似乎是为了锁住音量条的
OK,咱们就从this.mSettings.isSubscriptionValid() 入手,看看这个方法是啥东西
点击这个函数,自动跳转过去
再跟一下mIsSubscriptionValid
可以看到在 Settings 这个类里面声明了这个变量
双击它,看看这个类里面还有什么地方用到了这个变量
这个地方,看起来像给他赋值一个false啊
好,不如就先给他把false改成true试试
当然在这里Java伪代码里面改是木得用的,要去smali里面去改
找到这个settings.class文件的smali代码
这些smali代码对照着Java,是不是很容易就定位出这个文件没错了。
找到咱们要改的subscriptionValid
伪代码里面有这个getBoolean出现吧~,咱们看看这行写的啥
invoke-interface {v2, v3, v5}, Landroid/content/SharedPreferences;->getBoolean(Ljava/lang/String;Z)Z
invoke-interface 是个调用指令,调用了android/content/SharedPreferences类里面的getBoolean,传了V2,V3,V5 这三个参数。根据Java伪代码以及经验,咱们v5存的就是false了
往上面找~看看v5赋了啥进去
给了个0x0,就是0的意思咯,众所周知0就是false噻
咱们把他整成0x1,就是true了吧
重新回编译安装
OK,改完,保存好。编译,安装一下。测试
可以看到已经被我们随意调节音乐大小了
鉴于实在不方便在文章里面展示出调节收录音量大小的变化,就不作演示了。但是,亲测是可以去掉广告,正常使用并可以正常调节音量的哟。
附录:测试平台
测试平台:Redmi Note 3
逆向平台:Windows 10 专业版、APKIDE 3.2.0.0、akptool 241
总结一下
1、Android的逆向分析,先判断有没加壳(有的话就先不做了,不在咱们现在这篇文章的讨论范围内)
2、然后丢进反编译工具处理,尽量把Java的代码也反编译出来,方便自己对代码的理解。毕竟人肉解析smali代码还是有点儿难受的~
3、根据自己要修改的内容去找到对应的smali文件,看一下他的处理流程,结合Java代码看会好些
4、确定修改点之后,就修改文件。修改好一点就编译测试一下,别贪多,一步一步排查,心急吃不了热豆腐嘛~
5、编译安装之后,检查App以及功能是否还能正常使用
结尾叨叨
又到结尾叨叨的时候了,这次这个文章也是2400字左右(基本是三篇高中作文的量?),读到这里的同学们仍旧是真爱~
Android逆向是比较有意思的一个东西,有一点儿门槛。随着Android软件的安全攻防推进,现在的App大部分都做的比以前安全多了。所以,逆向破解难度也在逐步提高,这是好事。