@wstclzy2010 wrote:
- 引用一下AloneMonkey大佬的去广告思路
- 找到对应的Controller或者View使用
logify.pl
打印方法调用日志。- class-dump头文件从类名或方法名中根据一些关键字比如Ad,找找线索。
- 使用frida或者其它的动态函数调用跟踪工具看看调用流程。
- 还原符号,使用LLDB对类的所有方法断点看调用。
- 直接从Malloc stack看View对象是在哪里生成的。
- 由于我非常的菜,C没学过OC没学过,所以一般就是第二种靠蒙的方式,麻烦、费时但是效果还是有一点点点的。
- 那么有没有一种不用脑子、简单、我这种菜鸟也会的通用版本呢?
WHY and HOW:
- 根据百度,请求网络有get和post两种方式,例如请求网络的方法一般为:
NSURL *url = [NSURL URLWithString:@"xxxxxx"]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 。。。。。。不复制了
- 又根据百度,不管get还是post,不论同步还是异步,暂时没见过哪个能省掉或者不用这种写法的。
NSURL *url = [NSURL URLWithString:@"xxxxxx"]
- 那么思路就有了,我们直接对URLWithString这个类方法动手,不就很简单粗暴了?看下它的声明方式:
- 怎么写已经很明显了,就是hook NSURL这个类的类方法:+(instancetype)URLWithString:(NSString *)URLString,当url为广告的url或者其他你不想看见的东西的url时,返回一个新的地址给它。
举个栗子:
- 今日头条文章下方有个相关搜索,它和文章内容都在在WKCompositingView里面,并没有一个单独的容器。
- 然后我通过抓包找到了它的GET请求(看它的响应消息里面能找到包含相关搜索内容的关键字)
![]()
- 观察发现所有的相关搜索的GET地址都是包含如下字段的:
https://is.snssdk.com/2/article/information/v23/?XXXXXXXXXXXXXXXXXXXXXXXXXX
- 那就简单了,尝试一下:
%hook NSURL + (id)URLWithString:(NSString *)URLString { if([URLString containsString:@"https://is.snssdk.com/2/article/information/"]) { NSLog(@"小老弟,让我改掉这个请求"); URLString = @"https://is.snssdk.com/2/article/fu*ku/"; } return %orig; } %end
- 看看效果
- 已经成功去掉了,也就是说这种方式可行,成功通过hook URLWithString的方式,改变了它原本想要请求的的地址
- 同理对于广告也可以这么做。
参考:
Posts: 2
Participants: 2