• APP去广告简单分析:


     

    工具:

    Android killer 1.3

    DDMS  (版本未知)

          夜神模拟器

       

    在游戏登录和注册页面,我们可以看到登录界面中被别人插播了广告,本文的目的就是将其去掉。

     

     

    思路分析:

    1.如果该广告是读取资源中的图片加载到对话框(或者其他控件)的话,我们只需要替换一张新的图片进去,重新打包签名即可。

    2.如果不是加载的本地资源,那么就是从网络传输过来的一个图片,然后加载

     

    过程:

    拖到android killer进行反编译:

     

    在资源文件中一番查找过后,在res/drawable-hdpi-v4 文件夹中查看到跟log一样的图片

      

    尝试第一种方法,新建一个空白的图片在资源管理器里进行替换:

     

    使用android killer重打包:

     

    apk拖到模拟器进行安装,接着运行:(注意:安装apk前需要卸载原有的apk,如不卸载原有的apk,该包名已存在,不能覆盖安装)

     

    Log还存在,说明这个log应该是通过网络传输进行动态替换的,既然是动态替换,那么首先要确定的是该图片是加载在什么控件上面的,这样才能够准确的找到加载的图片的函数;

     

    这个时候,我们就可以借助DDMS中的 Dump View Hierarchy for UI Automator(以下简称Dump UI) 功能去得到布局的属性,如下图: 在虚拟机打开改程序的登录界面,使用ddms点击dumpUI 获取到布局属性(如下图),得到图片是设置在imageView上面的,并且资源idiv_logo ,

     

    接着到android killer 进行搜索,搜索到两处引用了该id的地方:

      

    双击到关键代码处,使用jd-jui查看源码:

     

    查看源码关键代码分析出handleMessage函数大概功能为:

        由外部传消息进来,进行判断并执行:

            消息1:设置本地资源文件中的图片为背景(drawable/ct

            消息0:获取一个网络的图片

            消息(其他):设置paramAnonymousMessage.obj为背景

     

    大概加载的过程就是,先获取网络图片,然后getInternetPicture函数再发送(其他)消息(case没有定义2,所以2为其他消息)到handleMessage函数设置背景

     

    getInternetPicture函数:

    发送网络请求,获取图片资源;

    通过发送消息的方法设置控件背景(广告图片)

     

    查看另一点关键点,其中代码跟与上面基本一致,可判断为注册页面的加载代码,这里不再做重复性的解释。

     

    getInternetPicture函数:

     

     

    分析至此,我们已经大概明白了广告图片的一个加载流程了,接下来把广告去掉

    思路:修改smali代码将getInternetPicture和函数直接RET,获取不到网络图片,这样加载的就是我们本地的“ct”图片为背景了

     

    LoginView处添加smali代码:

          

    RegisterView处添加RET代码

      

    使用android killer重打包:

     

    拖到模拟器中运行确认结果:

    登录界面:

     

    注册界面:

     

    Ok,测试成功,广告成功被干掉了!!

    笔者还有点想说的是:在中间使用Dumu UI工具查看到布局信息的时候,其实我们还可以在布局XML文件中修改该控件的大小,以达到隐藏的作用,不过那样子后面的控件位置就会发生问题,如果没有这个方面的要求,修改XML文件更加神速

     


     

     

     

     

     

  • 相关阅读:
    [Docker] redis 全配置
    Dubbo的负载均衡策略&容错策略
    Dubbo部分知识点总结
    如何win10 上访问虚拟机(linux)上redis方法
    Linux_centOS_5.7_64下如何安装jdk1.8&mysql
    java高级&资深&专家面试题-行走江湖必备-持续更新ing
    springCloud微服务调用失败【CannotGetJdbcConnectionException: Failed to obtain JDBC Connection】
    synchronized、volatile区别、synchronized锁粒度、模拟死锁场景、原子性与可见性
    ThreadLocal什么时候会出现OOM的情况?为什么?
    volatile、ThreadLocal的使用场景和原理
  • 原文地址:https://www.cnblogs.com/ddms/p/9034720.html
Copyright © 2020-2023  润新知