我试图了解在 iOS 应用程序中调用 CC_MD5 的用法。
从 Apple 的手册页我可以看到,当它被调用时,它需要 3 个参数:
extern unsigned char *
CC_MD5(const void *data, CC_LONG len, unsigned char *md);
where*md是指向结果将存储在哪里的指针,也是将返回的内容。
当CC_MD5被调用时,我希望能够记录输入数据和结果哈希,并尝试在 Frida 中使用以下脚本,包括在返回指针处打印数据的不同方法:
Interceptor.attach(Module.findExportByName("/usr/lib/libSystem.B.dylib", "CC_MD5"), {
onEnter: function(args) {
console.log("[+] CC_MD5 called with *data: " + Memory.readCString(args[0], parseInt(args[1], 16)));
console.log("[+] *len: " + parseInt(args[1], 16));
console.log("[+] *md: " + args[2]);
},
onLeave: function(retval) {
console.log("[+] Resulting hash: " + Memory.readCString(ptr(retval),16));
console.log("[+] Resulting hash: " + retval.readByteArray(16));
console.log("[+] Resulting hash: " + retval.readCString(16));
}
});
我知道它并不总是作为输入数据传递给函数的可打印文本,但是在实际读取结果散列时遇到问题。下面是我得到的输出示例:
[+] CC_MD5 called with *data: MGCopyAnswerProductVersion
[+] *len: 26
[+] *md: 0x16f6d61f0
[+] Returning *md: 0x16f6d61f0
[+] Resulting hash: ��]vU
�)��
[+] Resulting hash: [object ArrayBuffer]
[+] Resulting hash: ��]vU
�)��
我不知道我是否误解了如何CC_MD5调用或我应该可以用 Frida 做什么?