NSLog 及 pirntf 的屏蔽及hook(内含fishhook)

为何需要hook日志:

1.控制台输出的日志太多太杂了,导致看不见关键信息.
2.或者有些输出的日志search不到源码,但是需要知道从哪儿调用的?(比如想知道哪个第三方库调用的)

哪些方式:

1.控制台右下角文本过滤,这个就不说了....


image.png

2.设置xcode环境变量 OS_ACTIVITY_MODE 为 Disable,将会所有log不可见,不论系统log还是自行输出log


image.png

3.自定义宏代替NSLog宏


#ifdef _DEBUG
    #define DLog(fmt, ...) NSLog((@"[Line %d] " fmt), __LINE__, ##__VA_ARGS__); 
#else
    #define DLog(...)
#endif

4.还有一些Log可能是在第三方的库里面打印的,所以我们无法采用第三种方式.我们可以采用method_swizzle来进行方法替换,但是NSLog和printf是函数,这时候就需要用到fishhook来进行函数实现替换

原理:
简单说就是修改系统函数地址(自定义函数不可hook),达到函数实现交换的目的.详见https://github.com/facebook/fishhook

用法

A.替换nslog

static void (*orig_nslog)(NSString *format, ...);

void my_nslog(NSString *format, ...) {
    va_list vl;
    va_start(vl, format);
    NSString *str = [[NSString alloc] initWithFormat:format arguments:vl];
    va_end(vl);
    //此处类似method_swizzle
    orig_nslog([NSString stringWithFormat:@"test - %@",str]);
}

//启动后执行下面这句话即可实现NSLog() hook
struct rebinding nslog_rebinding = {"NSLog",my_nslog,(void*)&orig_nslog};
//1代表后面有一个函数实现需要重新绑定
rebind_symbols((struct rebinding[1]){nslog_rebinding}, 1);

以下为hook之后的log


image.png

B.替换NSLogv,有些极少的情况,可能还需要hook NSLogv()

static void (*orig_nslogv)(NSString *format,va_list args);

void my_nslogv(NSString *format,va_list args) {
    orig_nslogv(format,args);
}
struct rebinding nslogv_rebinding = {"NSLogv",my_nslogv,(void*)&orig_nslogv};
rebind_symbols((struct rebinding[1]){nslogv_rebinding}, 1);

C.替换printf

static void (*orig_printf)(const char *path, ...);

void my_printf(const char *path,...) {
    orig_printf(path);
}

struct rebinding printf_rebinding = {"printf",my_printf,(void*)&orig_printf};
rebind_symbols((struct rebinding[1]){printf_rebinding}, 1);

hook效果如下


image.png
image.png

通过以上方式可以在hook住的时候看见左边的调用堆栈信息,也许有一些帮助

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容