Quantcast
Channel: 睿论坛 - 最新话题
Viewing all articles
Browse latest Browse all 5702

简单的去广告方式

$
0
0

@wstclzy2010 wrote:

  • 引用一下AloneMonkey大佬的去广告思路
  1. 找到对应的Controller或者View使用 logify.pl 打印方法调用日志。
  2. class-dump头文件从类名或方法名中根据一些关键字比如Ad,找找线索。
  3. 使用frida或者其它的动态函数调用跟踪工具看看调用流程。
  4. 还原符号,使用LLDB对类的所有方法断点看调用。
  5. 直接从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请求(看它的响应消息里面能找到包含相关搜索内容的关键字)QQ20200331-182656
  • 观察发现所有的相关搜索的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

Read full topic


Viewing all articles
Browse latest Browse all 5702

Trending Articles