iOS 开发每天分享优质文章ios 知识点

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

2019-05-21  本文已影响90人  iOS_小久

最近更换了自己的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
上一篇下一篇

猜你喜欢

热点阅读