ios c 代码hook方式
来源:互联网 发布:windows 系统编程面试 编辑:程序博客网 时间:2024/06/12 22:35
我个人感觉,搞逆向虽然动态是很总要,但不能一味的在动态过程中寻找。
1.动态调试不够灵活,很多时候即使断点有效监控过程很可能会比较漫长,最好通过挂钩或曝出栈信息来了解程序大致的调用方式,逻辑方式。
2.动态调试涉及到全局变量和多线程赋值,加锁等因素时,被混淆的代码可读性不高的情况下会增加代码调试难度,往往一个不小心就会走到逻辑混乱的地方,或则干脆走到错误的地方。
3.以上两条尤其适用于密码分析等在视图上难以直观观察到变化的过程中。
#include <CommonCrypto/CommonDigest.h>#include <substrate.h>unsigned char *(*old_CC_MD5)(const void *data, CC_LONG len, unsigned char *md);unsigned char *new_CC_MD5(const void *data, CC_LONG len, unsigned char *md){ NSData* sd = [NSData dataWithBytes:data length:len]; unsigned char *r = old_CC_MD5(data, len, md); NSString* ss = [[NSString alloc] initWithData:sd encoding:NSUTF8StringEncoding]; NSData* rd = [NSData dataWithBytes:md length:16]; NSLog(@"CC_MD5: %@ | %@ = %@", sd, ss, rd); return r;}unsigned char *(*old_CC_SHA1)(const void *data, CC_LONG len, unsigned char *md);unsigned char *new_CC_SHA1(const void *data, CC_LONG len, unsigned char *md){ NSData* sd = [NSData dataWithBytes:data length:len]; unsigned char *r = old_CC_SHA1(data, len, md); NSString* ss = [[NSString alloc] initWithData:sd encoding:NSUTF8StringEncoding]; NSData* rd = [NSData dataWithBytes:md length:20]; NSLog(@"CC_SHA1: %@ | %@ = %@", sd, ss, rd); return r;}%ctor{ MSHookFunction(&CC_MD5, &new_CC_MD5, &old_CC_MD5); MSHookFunction(&CC_SHA1, &new_CC_SHA1, &old_CC_SHA1);}
阅读全文