IOS逆向(三)-去除某app谷歌广告
在应用商店随便找的一个免费piano应用,通过逆向分析去除应用中的谷歌广告。
难度
★★☆☆☆
工具环境
- 越狱IOS 14.4
- frida-ios-dump
- frida
- frida-trace
- IDA 7.7
- reveal
思路分析
移除app内部的广告有很多种方法。
- IDA分析maco文件,定位广告代码直接移除。
- frida hook网络请求,拦截广告请求。
- reveal分析应用的UI,隐藏广告的view。
- 拦截域名解析请求并重定向。
IDA分析应用广告代码
砸壳后扔进IDA分析,在函数列表搜索广告的关键词adver。
从方法名可以判断createAdvertisementBannerView应该是创建广告视图的方法。
查看交叉引用,分析上层的调用函数。
上层函数中代码中有许多操作包括初始化类、调用方法、存取对象属性和一些内存管理操作(比如objc_retain和objc_release)。
- 创建一个AdvertisementIdentifiers对象,并使用多个参数来初始化。
- 创建一个AdvertisementBannerViewConfiguration对象。
- 获取应用的代理,可能是为了取得根视图控制器。
- 通过AdvertisementManager类创建一个广告横幅视图(BannerView)。
- 根据某些条件判断,会获取应用的主屏幕尺寸并设置到广告横幅视图(BannerView)上。
frida替换广告加载函数
var baseAddr = Module.findBaseAddress('ThePiano'); console.log("The Piano base address: " + baseAddr); var targetFunctionAddr = baseAddr.add(0x6E854); console.log("Target function address: " + targetFunctionAddr); const targetFunction = new NativeFunction(targetFunctionAddr, 'void', []); Interceptor.replace(targetFunctionAddr, new NativeCallback(function () { console.log("跳过广告加载的偏移地址 0x6E854"); }, 'void', [])); const targetFunctionAddrRootVC = baseAddr.add(0x864A8); Interceptor.attach(targetFunctionAddrRootVC, { onEnter: function (args) { console.log('进入广告加载函数的调用函数'); }, onLeave: function (retval) { console.log('退出广告加载函数的调用函数'); } });
效果如下:
frida -U -f com.impalastudios.pianofree -l piano.js
reveal分析广告UI
在设置的reveal中开应用的调试。
然后在mac上连接越狱ipad。
在reveal中隐藏广告的视图。
frida-trace拦截域名解析请求
frida-trace -U -f com.impalastudios.pianofree -i "getaddrinfo"
通过拦截app内的域名解析,将其重定向到127.0.0.1。修改frida-trace的脚本如下:
{ onEnter(log, args, state) { var hostname = Memory.readUtf8String(args[0]); // log('Intercepted call to getaddrinfo for ' + hostname); // 如果域名中包含google就进行重定向 if (hostname.includes('google')) { log('Redirecting request for ' + hostname + 'to 127.0.0.1'); args[0] = Memory.allocUtf8String('127.0.0.1'); } }, onLeave(log, retval, state) { } }赞赏
微信赞赏支付宝赞赏
目前为止有一条评论