逆向世界杯直播App 央视影音-iOS客户端

写在前面的话 罗列下本次逆向要使用的几个工具

  • MonkeyDev 或者IPAPatch
  • HookZz

事情起源

  • 最近我的朋友圈充满了世界杯!几乎每个伪球迷都在刷直播世界杯!还有热心的朋友发出了世界杯直播的App(央视影音 iOS)链接!点进去看了一下,但是看直播之前需要先看长达60秒的广告。作为iOS逆向爱好者,决定为广大球迷做点儿力所能及的事情----那就是去掉广告

  • 带60广告的证据图

下面简单说下逆向过程和思路

思路

  • 因为只是给央视影音App去广告!所以思路很简单(把广告相关的对象置为空即可)

逆向过程

第一步 动态分析

  • 使用HookZZ的objc_msgSend模块 打印函数调用
  • 只关注Ad开头的类
  • 下面是相关代码
void objc_msgSend_pre_call(RegState *rs, ThreadStackPublic *ts, CallStackPublic *cs, const HookEntryInfo *info) {
    char *selector = (char *)rs->ZREG(1);
    id tmpObject = (id)rs->ZREG(0);
    Class tmpClass  = object_getClass(tmpObject);
   
    if (!tmpClass)
        return;
    const char *className               = class_getName(tmpClass);
    
    if (!strstr(className, "Ad") && !strstr(className, "Home")) {
        return;
    }
    
    memset(decollators, '-', 512);
    if (ts->size * 3 >= 512)
        return;
    decollators[ts->size * 3] = '\0';
    
    printf("[OCMethodMonitor|%ld] %s [%s %s]\n", ts->thread_id, decollators, className, selector);
}
  • 简单展示下这个HookZz的objc_msgSend模块打印出来的内容
    • CNAdPlayerView
[OCMethodMonitor|7341845312] --- [CNAdPlayerView beatHandleForTime:]
[OCMethodMonitor|7341845312] ------ [CNAdPlayerView adTime]
[OCMethodMonitor|7341845312] ------ [CNAdPlayerView setSurplusSec:]
[OCMethodMonitor|7341845312] --------- [CNAdPlayerView adPlayerUIKit]
[OCMethodMonitor|7341845312] ------ [CNAdPlayerView queuePlayer]
[OCMethodMonitor|7341845312] ------ [CNAdPlayerView indexForPlayerItem:]
[OCMethodMonitor|7341845312] --------- [CNAdPlayerView playItems]
[OCMethodMonitor|7341845312] --------- [CNAdPlayerView playItems]
[OCMethodMonitor|7341845312] ------ [CNAdPlayerView playerEventType:value:]
[OCMethodMonitor|7341845312] --------- [CNAdPlayerView delegate]
[OCMethodMonitor|7341845312] --------- [CNAdPlayerView delegate]
[OCMethodMonitor|7341845312] --------- [CNAdPlayerView delegate]
[OCMethodMonitor|7341845312] ------ [CNAdPlayerView playDelayTime]
[OCMethodMonitor|7341845312] --------- [CNAdPlayerView adPlaying]
[OCMethodMonitor|7341845312] --------- [CNAdPlayerView adTimeout]
    • AdsameBannerView

[OCMethodMonitor|7341845312] ------------ [AdsameBannerView alloc]
[OCMethodMonitor|7341845312] ------------ [AdsameBannerView initWithFrame:]
[OCMethodMonitor|7341845312] --------------- [AdsameBannerView setClipsToBounds:]
[OCMethodMonitor|7341845312] --------------- [AdsameBannerView setSlotStr:]
[OCMethodMonitor|7341845312] --------------- [AdsameCubeMaxSDK sharedSDK]
[OCMethodMonitor|7341845312] --------------- [AdsameCubeMaxSDK def_volume]
[OCMethodMonitor|7341845312] --------------- [AdsameCubeMaxSDK sharedSDK]
[OCMethodMonitor|7341845312] --------------- [AdsameCubeMaxSDK m_isMute]
[OCMethodMonitor|7341845312] --------------- [AdsameBannerView setIsOrderedBannerPaused:]
[OCMethodMonitor|7341845312] ------------ [AdsameBannerView setIsUsingCache:]
[OCMethodMonitor|7341845312] ------------ [AdsameBannerView setCId:]
[OCMethodMonitor|7341845312] ------------ [AdsameBannerView setSlotStr:]
[OCMethodMonitor|7341845312] ------------ [AdsameBannerView setIsUserExposure:]
[OCMethodMonitor|7341845312] ------------ [AdsameBannerView setParentSDK:]
[OCMethodMonitor|7341845312] ------------ [AdsameBannerView setDelegateBanner:]
[OCMethodMonitor|7341845312] ------------ [AdsameBannerView setIsRetina:]

  • 还有其它一些带Ad的类就不一一列举了

第二步 编写hook代码

  • 按照之前的思路把Ad相关的类的初始化代码返回nil
// See http://iphonedevwiki.net/index.php/Logos

#import <UIKit/UIKit.h>

//AdsameBannerView

%hook AdsameBannerView
- (AdsameBannerView*)initWithFrame:(id)arg1{
	return nil;
}
%end

%hook CNAdPlayerView

-(CNAdPlayerView*)initWithFrame:(id)arg1{
	return nil;
}
%end

%hook CNADPlayerUIKit
-(CNADPlayerUIKit *)initWithFrame:(id)arg1{
	return nil;
}
%end

%hook AdMasterMobileTracking
+(id)sharedInstance{
	return nil;
}
-(AdMasterMobileTracking*)init
{
	%log;
	return nil;
}
%end


第三步 打包重签

  • MonkeyDev 或者 IPAPatch 用的第一个,第二个也是可以的

最后再附上去掉广告的IPA链接()

http://yuzhouheike.0a6j.cn/YSYY.ipa

最后的最后

  • 感谢您在百忙之中看我的文章

发福利:打开支付宝首页搜索“8074157”,即可领红包

1 个赞

同九年 为什么你这么优秀

不优秀.无业游民.求职ing

这个ipa 好像装不上去呢 越狱机和非越狱机子 都装不上

非越狱机器重签下
越狱机直接安装。安装不上说下报错信息?你什么手机!另外Tweak源码在上面。。

我是用ifunbox 直接装你的这个ipa, 报错信息如下


手机: iPhone6s 非越狱
iOS: 10.3.2

我感觉这个错误 是不是app的版本低了 还是我的ios版本高了?

返回nil不会崩溃吗

1 个赞

Objective-C里面可以向Nil发送消息。不会崩溃,且运行起来没有任何效果。

不过兄弟,咨询一个问题,Hookzz,按照github上面的编译,我只能得到静态链接库,怎么得到dylib的sharedLibrary?我刚刚了解hookzz,觉得很不错。

重签下吧.你这个问题没遇到过,

没懂你的意思,建议问问作者 @jmpews

这么说吧,你是怎么使用hookzz嵌入的app?然后debug的时候打印的?

看下 HookZZ-Learn的几个demo @zhangbo https://github.com/yuzhouheike/HookZz-Learn 里面有IPAPatch 和MonkeyDev的集成demo

OK。Let me see

大佬 你为什么会想到这个思路呢 (说实话 如果是我 我想不到)

现在你不就有了.以后看到广告对象直接hook返回nil

大佬 逆向优酷VIP 尝试考虑一波?

已经买了年费了.

可以帮我逆向一下优酷VIP吗 冰天雪地360度跪地求助大佬

坦白的说!不可以