iOS 11.3.1上使用bfinject注入dylib后的问题


#1

unc0ver越狱,iOS 11.3.1(这个问题应该跟使用哪种越狱工具无关)

使用bfinject往一个root daemon注入了一个dylib,该dylib会使用MSHookFunction来hook一些c函数,比如time。
hook是成功的,没闪退,但程序本体调用到time的时候,就挂了

我redirect了stdout和stderr到文件,也没看到崩溃信息,也调用NSSetUncaughtExceptionHandler注册了异常处理并打log,结果也没打出来……不知道怎么诊断了。

hook的实现也试过使用frida-gum,也是一样的效果。hook本身是成功的,我特意在hook后调用了一遍,正常,就是在程序自己调用到被hook函数时就崩了。


#2

看到异常了,是EXC_BAD_ACCESS (SIGKILL - CODESIGNING),看来被内核杀了?
是不是因为现在11上的jb都是KPPless的原因,导致没法hook root权限的进程?

bfinject的readme中有这么一段话,看上去能解释我这个现象,然而作为一个菜鸟,还是希望大神能来确认下,到底是不是这个原因,还是我自己哪里没弄对:

However, Electra and LiberiOS are KPPless, which means they don’t patch anything in the kernel; not a single byte. This is because of Kernel Patch Protection (“KPP”), an Apple security technology that does sophisticated kernel introspection to detect and thwart kernel patches. As a result, kernel codesigning checks are still intact.


#3

又尝试了一下,SIGKILL - CODESIGNING跟root还是mobile貌似没关系。
我搞了个最简单的命令行程序,名叫hello,以及一个最简单的tweak,名叫hello.dylib,其plist这样写的:

{
	Filter = {
		Executables = (
			hello
		);
	};
}

做的尝试如下:

  1. 直接运行:./hello,log显示hello.dylib并未加载,以mobile身份运行su mobile -c ./hello,依然未加载
  2. 显式指定DYLD_INSERT_LIBRARIES方式运行DYLD_INSERT_LIBRARIES=/Library/MobileSubstrate/DynamicLibraries/hello.dylib su mobile -c ./hello,依然未加载
  3. 换成DYLD_INSERT_LIBRARIES=/usr/lib/tweakloader.dylib su mobile -c ./hello,模拟tweak的正常加载流程,依然未能被加载
  4. 用狗神提到的颅内炸弹insert_dylib方式强行插入hello.dylib,log显示加载成功。但是一旦hello.dylib中使用了MSHookFunction,就被killed 9,无论root身份还是mobile身份运行

疑问:

  1. DYLD_INSERT_LIBRARIES为何不起作用呢?已经是mobile身份,且自己写的命令行程序,根本没有__RESTRICT这玩意的
  2. 为何一旦hello.dylib中使用MSHookFunction,就被killed 9,难道MSHook只对AppStore程序有用,对命令行工具无效?应该不至于吧,iOS系统自带的各种daemon不也被照样hook的嘛,一定是我漏掉了什么东西吧。

求ios11安装插件非常慢的解决方案
#4

签名下试试。


#5

不是这个原因,我当然签名了的,不签名首先连最基本的程序都跑不起来的,我现在的现象是:
不调用MSHookFunction,跑得好好的,一旦加上调用MSHookFunction的代码,运行到该行,就被killed 9,我逐行打log测试的