ios下某浏览器小说去广告分析与Hook
字数 927 2025-08-20 18:17:07
iOS浏览器小说去广告分析与Hook技术文档
1. 背景与目标
本文档基于某iOS浏览器的小说阅读功能广告去除需求,分析其广告展示机制并实现Hook拦截。仅供学习研究使用,请支持正版内容。
2. 环境准备
2.1 必要工具
- iOS逆向工具链:
- Frida (动态分析)
- Theos (Hook开发)
- IDA Pro/Ghidra (静态分析)
- class-dump (类信息导出)
- Cycript (运行时分析)
2.2 目标应用
- 某iOS浏览器应用(版本需具体分析)
- 需获取脱壳后的可执行文件
3. 静态分析
3.1 二进制分析
-
使用otool检查二进制架构:
otool -hv target_binary -
使用class-dump导出头文件:
class-dump -H target_binary -o headers/
3.2 关键类识别
通过分析导出的头文件,寻找与广告相关的类,常见命名模式:
AD*(如ADManager, ADViewController)*Ad*(如BannerAd, NativeAd)*Advertisement**Splash*(开屏广告)
4. 动态分析
4.1 Frida动态跟踪
-
枚举所有类:
ObjC.enumerateLoadedClasses({ onMatch: function(className) { console.log(className); }, onComplete: function() {} }); -
跟踪广告相关方法调用:
Interceptor.attach(ObjC.classes.ADManager["- loadAd"].implementation, { onEnter: function(args) { console.log("ADManager loadAd called"); } });
4.2 Cycript交互分析
-
获取当前视图控制器:
UIApp.keyWindow.rootViewController -
遍历视图层次查找广告视图:
[[[UIApp keyWindow] rootViewController] _printDescription]
5. Hook实现
5.1 Theos Hook方案
创建Tweak项目,编写Hook代码:
%hook ADManager
- (void)loadAd {
NSLog(@"广告加载被拦截");
// return %orig; // 可选是否调用原始实现
}
%end
5.2 关键Hook点
-
广告加载拦截:
%hook ADService - (void)requestAdWithCompletion:(id)completion { NSLog(@"广告请求被拦截"); // 直接返回空数据或模拟成功回调 } %end -
广告视图显示拦截:
%hook ADBannerView - (void)displayAd { NSLog(@"广告显示被拦截"); [self removeFromSuperview]; } %end -
开屏广告跳过:
%hook SplashViewController - (void)viewDidAppear:(BOOL)animated { [self dismissViewControllerAnimated:NO completion:nil]; } %end
6. 进阶技巧
6.1 广告数据源替换
%hook NovelReaderDataSource
- (NSArray *)chapterContents {
NSArray *orig = %orig;
return [orig filteredArrayUsingPredicate:
[NSPredicate predicateWithBlock:^BOOL(id item, NSDictionary *bindings) {
return ];
}]];
}
%end
6.2 网络请求拦截
%hook NSURLSession
- (void)dataTaskWithRequest:(NSURLRequest *)request
completionHandler:(void (^)(NSData *, NSURLResponse *, NSError *))completion {
if ([request.URL.host containsString:@"adserver"]) {
completion(nil, nil, [NSError errorWithDomain:@"ADBlock" code:500 userInfo:nil]);
return;
}
%orig;
}
%end
7. 测试与验证
-
安装测试Tweak:
make package install -
验证方法:
- 检查控制台日志
- 使用Reveal检查视图层次
- 网络抓包验证广告请求
8. 对抗与反检测
-
随机化Hook点:
static __attribute__((constructor)) void _logosLocalInit() { @autoreleasepool { // 动态检测类是否存在再Hook if (objc_getClass("ADManager")) { %init(ADManagerHook); } } } -
反反Hook检测:
%hook ADSDK - (BOOL)isDebugging { return NO; } %end
9. 注意事项
- 法律风险:仅用于学习研究,不得用于商业用途
- 稳定性:Hook可能影响应用稳定性,需充分测试
- 更新维护:应用更新后需重新分析Hook点
10. 参考资料
- iOS逆向工程书籍与文档
- Frida官方文档
- Theos开发指南
- ARM64汇编手册
本技术文档提供了从分析到实现的完整流程,实际应用中需根据具体目标应用调整Hook点和实现方式。建议在越狱设备或模拟器中进行测试,避免影响主设备使用。