是否可以通过 Theos Tweak 拦截系统调用?越狱版

Is it possible to intercept System Calls via Theos Tweak? Jailed Version

我能否使用 Theos (jailed versione) Tweak 拦截通用系统调用,如 sqlite3_preparesqlite3_open 以及 CC_MD5 of libcommonCrypto

我会拦截所有这些调用并在控制台或日志文件中打印。 我读过一些关于 MSHookFunction 的内容,但我不确定。

编辑:我添加了一些我最近写的代码。这是我的 Tweak.xm,我会拦截 CC_MD5 调用,在简单的消息日志之后,我会 return 到正常流程。调整已注入,但我看不到任何消息。

#include <substrate.h>
#include <CommonCrypto/CommonDigest.h>

static unsigned char * (*original_CC_MD5)(const void *data, CC_LONG len, unsigned char *md);

static unsigned char * replaced_CC_MD5(const void *data, CC_LONG len, unsigned char *md) {

        NSLog(@"Calling MD5");
        return original_CC_MD5(data, len, md);
}

MSInitialize {
        MSHookFunction(CC_MD5, replaced_CC_MD5, &original_CC_MD5);
}

我找到问题了。 Theos version that i'm using is for jailed device. With this version MSHookFunction is substituted by fishhook.

使用fishhook就可以了:明显是代码变了

#include <substrate.h>
#include <CommonCrypto/CommonDigest.h>
#import <fishhook.h>

static unsigned char * (*original_CC_MD5)(const void *data, CC_LONG len, unsigned char *md);

static unsigned char * replaced_CC_MD5(const void *data, CC_LONG len, unsigned char *md) {

        NSLog(@"Calling MD5");
        return original_CC_MD5(data, len, md);
}

%ctor {

rebind_symbols((struct rebinding[1]){{"CC_MD5", replaced_CC_MD5, (void *)&original_CC_MD5}},1);

}