是否可以通过Theos Tweak拦截系统调用? Jailed Version

时间:2017-02-21 10:46:19

标签: ios theos tweak

我是否可以使用Theos(jailed versione)Tweak拦截sqlite3_preparesqlite3_open CC_MD5 libcommonCrypto等通用系统调用?

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

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

#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);
}

1 个答案:

答案 0 :(得分:0)

我发现了这个问题。我使用的Theos version用于监禁设备。使用此版本,MSHookFunction将替换为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);

}