Theos 如何hook class category的方法

情景: 我用class-dump-z 解析出一个NSString的加密算法, 如:

@interface  NSString (HMAC)
-(id)hexEncodedString;
@end

我们知道一般如果一个要hook一个类的方法,通常是在xxx.xm文件里

%hook AppDelegate

-(BOOL)application:(id)application didFinishLaunchingWithOptions:(id)options
{
    %orig;
    UIAlertView *alert = [UIAlertView alloc] initWithTitle:@"application" message:@"start" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
    [alert show];
    [alert release];
    return YES;
}

%end

但是这里我这样写:

%hook NSString

-(id)hexEncodedString
{
    id result = %orig;
    UIAlertView *alert = [UIAlertView alloc] initWithTitle:@"hexEncodedString" message:result delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
    [alert show];
    [alert release];
    return result;
}

%end

就log不出result来。google上搜了一下,好像都没有提到这种情况下该如何hook,希望在这里能得到解答。

看代码是没问题的,你确定这个函数得到调用了吗?

不确定啊,但是我用dump-z解出来的原文是

@interface XXUnknownSuperclass (HMAC)
-(id)hexEncodedString;
@end

NSString 是我估计的。就是因为不知道该如何处理XXUnknownSuperclass这东西。

你估计的……:sweat:
换class-dump试试,应该可以显示正确的类名,或者丢到IDA里分析也行

用Class-dump已经解决了这问题,感觉Class-Dump要比class-Dump-z靠谱一点。

弱弱的再问一句,IDA里面有把汇编转成可读性代码的插件或者什么方法吗

有插件 arm decompiler 和x86 decompiler 能直接换成C的代码

不过 据说arm decopiler插件收钱要两千多美金

最后,搜到淘宝有人买了插件以后卖服务,反编译一次要200起

有hexray decompiler插件,但非常非常贵。hopper好像也提供decompiler功能,而且价格可以接收。不过我个人还是建议你学ARM汇编,对以后进一步研究是有好处的