前言

  准备入坑Android逆向,我就选了一直在使用的某云笔记的安卓端作为练手,打算给它去去广告什么的。过程还挺顺利,做个记录。

准备

  因为我才开始了解Android逆向方面的知识,所以就按部就班使用这些比较“原始”的工具,但其实发展至今,已经有很多五花八门封装好的程序了,例如改之理ApkKillerMT管理器jadxdex2jarjd-gui等等。

  • 工具

    • ApkTool
    • JarSigner
    • ZipAlign
    • Visual Studio Code
  • 环境

    • Windows
    • Jdk/Jre
  • Apk版本

    • 6.7.18

反编译

  使用ApkToolApk(安卓应用安装包)反编译,命令如下(aaa.apkApk路径,aaa为反编译的输出目录路径)。

apktool d aaa.apk -o aaa

修改

  使用Visual Studio Code作为编辑器,可安装smali语法高亮插件。用于修改反编译后的文件。

去除启动页广告

  对于启动页广告,我已经见怪不怪了,因为大多数的安卓应用都会有。

  01.png

  一般来说,开发者会把广告放在SplashActivity里,所以大多数情况下在AndroidManifest.xml这个文件中搜索关键词,就能找到切入点。如下图,找到之后只需将com.youdao.note.activity2.SplashActivity修改为com.youdao.note.activity2.MainActivity就能跳过启动页广告直接到程序主视图。

  02.png

去除“我的”广告

  按照国产安卓应用的惯例,除了启动页的广告外,在应用的内部也一定会有广告,而某云笔记则是在我的里面。

  03.png

  在res/values/string.xml里先找一下对应的变量名,如图,在我的里边的所有东西应该都会带有mine这样的字眼,所以在res/layout里很大概率能找到相关的XML文件。

  04.png

  找到res/layout/mine_entry.xml,给每个用不着的选项或者广告选项添加android:visibility="gone",关于visibility这个控件属性,它有三个值可选,分别是visialbe(可见并占据布局空间)、invisiable(不可见并占据布局空间)、gone(不可见不占据布局空间),所以选gone便可以隐藏掉用于显示广告的选项。

  05.png

  值得一提的是,由于广告是动态更新的,所以必定会有相关的代码控制,例如使用setVisibility这个方法控制广告的显示和隐藏。这种情况就可以在广告控件的id所对应的layout中动手脚,例如将layout_widthlayout_height两个属性的值修改为0.0dp

回编译

  同样是使用ApkTool,命令如下(aaa为反编译的输出目录路径,aaa_unsigned.apkApk回编译的输出路径)。

apktool b  aaa -o aaa_unsigned.apk

签名

  使用JarSigner,命令如下(xxx.jks为密钥路径,aaa_signed.apkApk签名后的输出路径,aaa_unsigned.apk为待签名的Apk路径,xxx为密钥别名)。

jarsigner -verbose -keystore xxx.jks -signedjar aaa_signed.apk aaa_unsigned.apk xxx

优化

  使用ZipAlign,命令如下(aaa为待优化的Apk路径,aaa_zip.apk为优化后Apk的输出路径)。

zipalign.exe -f -v 4 aaa_signed.apk aaa_zip.apk

效果

  06.png

后记

  还有一种去广告的方式就是破解安卓应用的收费服务,即——免费使用看广告,收费会员去广告。某云笔记就是通过购买会员服务来“官方”去广告。但由于它推出的会员服务太鸡肋,破解了也基本没啥用,而且破解后也得登录账号来激活,所以我选择了直接手动去除广告。

  不过作为记录,还是有必要简单提一下的。对于某云笔记的会员破解则是通过修改UserMeta.smali里的isSeniorAccount函数返回值达成,这是程序用于判断所登录的用户账户是否属于会员级别的布尔值。

Last modification:May 25th, 2020 at 08:08 pm
如果觉得我的文章对您有用,请我喝一杯咖啡吧,您的鼓励就是我的动力,感谢~
  留言