关于fishhook getenv函数,成功了,但是一个app调用次数几万次的问题


#1

代码:
static char * (*orig_getenv)(const char *name);
char *my_getenv(const char *name) {
NSLog(@“my_getenv invoked:%s”,name);
return orig_getenv(name);
}
%ctor{
struct rebinding binds[1];
struct rebinding binds_1 = {“getenv”, (void *)my_getenv, (void **)&orig_getenv};
binds[0] = binds_1;
rebind_symbols(binds, 1);
}

问题:
我用nslog输出调用的情况,结果只是一个app调用次数,日志输出了上万条日志,造成app卡死的情况,求指教问题出在哪里?还是说是正常情况?

日志(截取一部分):
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:CA_PRINT_TREE
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:TZ
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:ASL_QUOTA_DISABLED
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:TZ
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:CFLOG_FORCE_STDERR
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:TZ
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:ASL_QUOTA_DISABLED
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:ASL_QUOTA_DISABLED
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:CFLOG_FORCE_STDERR
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:CFLOG_FORCE_STDERR
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:TZ
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:ASL_QUOTA_DISABLED
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:CFLOG_FORCE_STDERR
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:CFLOG_FORCE_STDERR
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:TZ
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:ASL_QUOTA_DISABLED
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:TZ
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:CFLOG_FORCE_STDERR
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:TZ
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:ASL_QUOTA_DISABLED
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:ASL_QUOTA_DISABLED
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:CFLOG_FORCE_STDERR
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:TZ
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:TZ
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:ASL_QUOTA_DISABLED
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:CFLOG_FORCE_STDERR
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:CFLOG_FORCE_STDERR
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:TZ
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:ASL_QUOTA_DISABLED
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:TZ
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:CFLOG_FORCE_STDERR
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:TZ
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:ASL_QUOTA_DISABLED
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:ASL_QUOTA_DISABLED
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:CFLOG_FORCE_STDERR
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:ASL_QUOTA_DISABLED
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:TZ
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:ASL_QUOTA_DISABLED
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:CFLOG_FORCE_STDERR
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:CFLOG_FORCE_STDERR
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:CA_PRINT_OBJECTS
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:TZ
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:ASL_QUOTA_DISABLED
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:TZ
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:CFLOG_FORCE_STDERR
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:TZ
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:ASL_QUOTA_DISABLED
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:ASL_QUOTA_DISABLED
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:CFLOG_FORCE_STDERR
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:CFLOG_FORCE_STDERR
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:TZ
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:ASL_QUOTA_DISABLED
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:CFLOG_FORCE_STDERR
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:CFLOG_FORCE_STDERR
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:TZ
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:ASL_QUOTA_DISABLED
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:TZ
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:CFLOG_FORCE_STDERR
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:TZ
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:ASL_QUOTA_DISABLED
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:ASL_QUOTA_DISABLED
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:CFLOG_FORCE_STDERR
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:TZ
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:TZ
Nov 7 14:25:20 iPhone SuperT[29069] : my_getenv invoked:ASL_QUOTA_DISABLED


#2

我用 frida(各种开销性能远低于 fishhook)分析 getenv 都没事
你是不是该弄个 hash table 记录一下已经输出过的项目然后下次忽略掉


#3

那这种疯狂输出是正常情况么 日志太多了 偶尔直接卡死系统


#4

我这里还没有开始进行业务逻辑上的操作,只是单纯看看有没有调用,不过这种疯狂的调用,我不确定是不是我操作的问题,还是说目标app本来就要非常频繁地调用这个方法? 如果我加了业务逻辑,可以预见的是会更卡~


#5

iOS 的系统库本身就有很多 getenv 的调用


#6

但是输出的日志来源都是从hook的app中打印出来的,并不是系统内部调用的。
SuperT [29069] 所有的都是这个app打印出来的 几万条日志


#7

这个标志只能说是这个进程,并不能说是这个进程的App的二进制,一个进程里会有很多二进制,包括系统二进制


#8

好的 谢谢