APK 去广告(修改代码级)

时间:2022-10-10 09:32:50


APK去广告(修改代码级)

作者:PeerLessSoul

时间:2016-07-24

转载请注明版权

准备工具

  1. Java SE Development Kit (JDK)下载地址

  2. 安装完成后设置全局路径变量 (参考文章)

  3. apktool.jar 下载地址

  4. dex2jar     (下载地址)

  5. JavaDecompiler(JD-GUI) (下载地址)

  6. Notepad++ (下载地址)

操作流程

解包

  1. 命令提示行执行:java -jarapktool.jar d "XYZ.apk"

  2. 找到解包后文件夹中的classes.dex,并使用dex2jar中的d2j-dex2jar.bat进行dex文件转换成jar文件;

  3. 命令如下:d2j-dex2jar.bat “classes.dex”

  4. 最终生成classes-dex2jar.jar文件;

 

 

 

破解准备

      使用jd-gui(上述装备工具5),打开并加载classes-dex2jar.jar文件;

如下图所示;

APK 去广告(修改代码级)

(此环节只是作为后面直接修改smali代码作为参考)

这里可以看到是google的广告,googleSDK可以看到主要在APP里面调用是采用

com.google.android.gms.ads.AdView类 及InterstitialAd类,这点可以查阅Google 广告SDKAPI文档;

去除其他广告,建议先看广告SDKAPI,这样就知道APK里面的写法;

 

 

开始破解

使用Notepad++查询刚才解包后的路径中AdView作为关键字,如下图所示;(这里也就是刚才提到的Google广告SDK的主要类的关键字)

APK 去广告(修改代码级)

下面查询到的结果可以看到很多地方有调用或者引用的地方;基本可以对查询中的结果进行区分,如何区分的办法,我是正向的会写APP所以定位很清楚,如果不清楚可以找一些APP编程的书籍看一些,这些代码就很清晰和简单;

APK 去广告(修改代码级)

     破解的思路:有些破解是直接隐藏现实广告的窗体,基本上不用动流程代码;成功率比较高,因为核心业务代码没有去改动,只是改动布局页面中的窗体高度、宽度等等显示级别的属性,从而达到去广告的效果;广告代码还是在调用和执行,效率是肯定会有一些影响。我们这次要干的是直接修改业务代码,直接从代码级别去掉广告;

     我们点击一个Notepad++所找到的文件代码段;如下图所示:

APK 去广告(修改代码级)

Notepad++上面所显示的就是对应文件的代码段;这个时候打开刚才打开的JD-GUI -并找到对应的类文件;

APK 去广告(修改代码级)

     我截取的对照代码段;这里找很需要耐心和方法;

  1. jd-gui中要看关键代码段的上下行,不仅仅看调用行;

  2. Notepad++中,按照.line进行比较核对;

  3. 并删除相对应的调用代码;

     

重新封包

     APP解包后的文件需要重新打包并且签名才能复制到设备上进行安装和应用,当完成了修改工作,就可以进行重封包的工作;

  1. 重新把文件夹打包执行命令:

     java -jar apktool.jar b "XXXX" “XXXX.apk";

  2. 重新签名APK包,执行命令:

     jarsigner -verbose-keystore android.keystore -signedjar XXXX_signed.apk "XXX.apk"android.keystore    

    (android.keystore为自己创建的签名文件)

    最终生成的XXXX_signed.apk就可以复制到设备安装了.

附:自己生成签名文件命令

keytool -genkey -alias android.keystore -keyalg RSA -validity 20000-keystore android.keystore

其中:signedjarkeytool命令 均来自JDK文件夹下面bin,如果配置好操作系统全局变量,直接在命令提示行下是可以直接调用;

注意事项

      在不熟悉的情况下修改代码,,切忌一次修改很多地方,刚开始时候修改少部分代码,重新打个包安装上去试试,验证一下自己修改的效果。因为很有可能删了不该删除的代码段,造成APP无法启动;