美文网首页iOS 开发每天分享优质文章ios 知识点
iOS逆向之网易云音乐去除开屏广告

iOS逆向之网易云音乐去除开屏广告

作者: iOS_小久 | 来源:发表于2019-05-21 18:34 被阅读90次

    最近更换了自己的Apple账号,然后发现网易云音乐在该区没有上架。由于不想在一台手机上搞两个账号互相切换,于是便想到将App重签名一下安装到手机中。同时,自己蛮讨厌开屏广告的,就顺手写了个Tweak来屏蔽开屏广告。期间有一些小坑,写篇博客来记录一下。

    离合器砸壳失败

    第一步就是砸壳了,结果发现使用离合器砸壳出错,没有成功生成脱壳的IPA文件。具体原因没有深研,但是看错误提示,猜测应该是离合器不支撑StickerPack的扩展导致的。

    尝试使用dumpdecrypted来砸壳,测试成功。砸壳的方法参考了这篇博客。得到砸壳后的可执行文件之后,从越狱机中将App拷贝贝出来,替换掉可执行文件即可。

    Theos默认不支持ARC

    Theos工程的Makefile中添加下面一句:

    ADDITIONAL_OBJCFLAGS = -fobjc-arc
    

    Tweak实现原理

    由于开屏广告的显示时间非常靠前,不可能等到App启动后,从网络获取到数据后再显示,一般的做法就是提前加载好之后要显示开屏广告数据缓存到本地,App每次刚启动后,直接从本地取出数据,然后显示需要的开屏广告给用户。

    将二进制拖到Hopper中,搜索关键字advertisement浏览一下搜索结果,很快便发现了一个NMAdvertisementManager名叫类。一番分析后,实现逻辑的Tweak的代码如下:

    %hook NMAdvertisementManager
    
    - (void)fetchStartupAdvertisement {
        [[%c(NMAdvertisementManager) defaultManager] performSelector:@selector(clearCachedResources)];
        [[%c(NMAdvertisementManager) defaultManager] performSelector:@selector(removeOldAdItems)];
    }
    %end
    

    逻辑是:hook了获取数据的函数,每次这个函数被调用的时候,就清除本地缓存的广告数据。这样本地没有了广告数据,也就不会再显示开屏广告了。

    最后

    虽然我理解App加开屏广告的初衷,但是作为一个用户,真的非常讨厌这个行为。有些App甚至是在程序从后台切到前台的情况都会显示广告,非常烦人。好了,用逆向来把生活变得美好一些吧。

    参考资料

    小编这里推荐一个群:691040931 里面有大量的书籍和面试资料,很多的iOS开发者都在里面交流技术

    资料截图.png

    相关文章

      网友评论

        本文标题:iOS逆向之网易云音乐去除开屏广告

        本文链接:https://www.haomeiwen.com/subject/hihtzqtx.html