Hook InputStream 和 OutputStream备忘

  • __NSCFInputStream
// hook
Class inputClzss = NSClassFromString(@"__NSCFInputStream");
[inputClzss aspect_hookSelector:@selector(read:maxLength:) withOptions:(AspectPositionAfter) usingBlock:^(id<AspectInfo> aspectInfo, uint8_t *buffer, NSUInteger maxLength) {

    NSInputStream *instance = (NSInputStream *)[aspectInfo instance];
            NSString *hostName = [instance propertyForKey:(NSString *)kCFStreamPropertySocketRemoteHostName];
    NSString *portNum = [instance propertyForKey:(NSString *)kCFStreamPropertySocketRemotePortNumber];
    
    NSLog(@"===== ip: %@:%@ input: %s maxLength: %lu", hostName, portNum, buffer, (unsigned long)maxLength);
    ;
} error:NULL];
  • __NSCFOutputStream
Class outputClzss = NSClassFromString(@"__NSCFOutputStream");
[outputClzss aspect_hookSelector:@selector(write:maxLength:) withOptions:(AspectPositionAfter) usingBlock:^(id<AspectInfo> aspectInfo, const uint8_t *buffer, NSUInteger maxLength) {

    NSOutputStream *instance = (NSOutputStream *)[aspectInfo instance];
    NSString *hostName = [instance propertyForKey:(NSString *)kCFStreamPropertySocketRemoteHostName];
    NSString *portNum = [instance propertyForKey:(NSString *)kCFStreamPropertySocketRemotePortNumber];
    
    NSLog(@"===== ip: %@:%@ output: %s maxLength %lu", hostName, portNum, buffer, (unsigned long)maxLength);
    ;
} error:NULL];
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容