以下代码取自 http://www.alonemonkey.com/2018/02/03/unity-reverse-ios/
请问一下各位大大, 在非越狱的环境下, 这种基于地址的C函数hook, 可以实现吗? 如何实现?
#import <substrate.h>
#import <dlfcn.h>
#import <mach-o/dyld.h>
int (*old_clover_point_stock)(void);
int new_clover_point_stock(void)
{
return 9999;
}
%ctor
{
@autoreleasepool
{
unsigned long clover_point_stock = _dyld_get_image_vmaddr_slide(0) + 0x100093A2C;
MSHookFunction((void *)clover_point_stock, (void *)&new_clover_point_stock, (void **)&old_clover_point_stock);
}
}
Zhang
2
3 个赞
大大的神作, 拜读了, 可惜英文太烂, 没看明白.
非越狱环境不能hook, 是不是因为IOS底层不允许动态修改可执行代码段的内存?
既然是这样那有什么办法没想明白…
是不是修改二进制文件, 给准备hook的C函数增加一个符号, 再去hook这个符号?
1 个赞
ccnyou
(ccnyou)
4
可以的,你找下 fishhook,facebook 开源的框架。
Zhang
6
给macho静态添加一个rx的段或者把现有的__TEXT __text调大,然后静态在新的这块地方写入asm,最后把对原来的地址的调用patch到自己的asm上
参见 HookZz 的ReadMe: Dobby/README_zh-cn.md at master · jmpews/Dobby · GitHub
里面写了非越狱状态下不允许分配可以执行的内存, 但我硬是没看明白, 到底是这个坑HookZz 填好了, 还是没填好?
非越狱状态下不允许设置 rw- 为 r-x, 或者 设置 r-x 为 rx-. 具体解释请参考下方坑 [坑-rwx 与 codesigning].
rwx 与 codesigning
对于非越狱, 不能分配可执行内存, 不能进行 code patch.
两篇原理讲解 codesign 的原理
https://papers.put.as/papers/ios/2011/syscan11_breaking_ios_code_signing.pdf
http://www.newosxbook.com/articles/CodeSigning.pdf
以及源码分析如下:
crash 异常如下, 其中 0x0000000100714000 是 mmap 分配的页.
Exception Type: EXC_BAD_ACCESS (SIGKILL - CODESIGNING)
Exception Subtype: unknown at 0x0000000100714000
Termination Reason: Namespace CODESIGNING, Code 0x2
Triggered by Thread: 0
寻找对应的错误码
jmpews
12
你是群里的嘛? 如果是群里的我已经回复了. 如果不是请加一下 HookZz Feedback WechatGroup
sniperyj
(HookerBoy)
16
这个问题还是没有fix嘛,发现debug的时候没问题,但是真机就挂了
a6217829
(a6217829)
20
前辈 请问如何给sub_xxx 函数 增加一个符号