使用如下方法可以实现注入任意进程
https://github.com/comex/inject_and_interpose/blob/master/inject.c
不过碰到如下问题:
1. 使用xcode建空工程,然后编译生成应用程序,再使用如下签名可以正常运行:
codesign -fs - --entitlements ent.xmlTSTester
其中ent.xml内容如下:
com.apple.springboard.debugapplications
get-task-allow
proc_info-allow
task_for_pid-allow
run-unsigned-code
2. 使用theos环境编译,运行报错,执行完也试过如下的签名:
codesign -fs - --entitlements ent.xmlTSTester
或是手机端ldid –S TSTester
报错信息请见附件:
为什么theos 编译就是不行,请帮忙分析一下?
这个entitlement你用ldid签一下试试?
另外你Theos编译时报的什么错?错误信息贴上来看看
按群主你说的方法还是不行?在theos 的环境编译都是没有问题的。就是运行感觉签名出问题了!
现在主要的问题是xcode环境编译后再签名就可以,而theos环境编译再签名就是不行?这两个环境的签名机制有不一样?
运行报错请见附件!
你的tester是用ldid签名的?你参考这个帖子用ldid重新签一下entitlements看看,然后用ldid把签名过后的entitlements打印出来看看是什么
1.使用xcode编译的应用程序tester
使用签名:codesign -s - --entitlements ent.xml -f tester
测试状态:正常
2.使用theos环境编译的应用程序tester
使用签名:codesign -s - --entitlements ent.xml -f tester
测试状态:运行报错
使用签名:ldid -Sent.xml tester
测试状态:运行报错
群主这是什么情况?
不管是xcode还是theos,编译用的都是clang,理论上来讲编译的过程是没有区别的。你用xcode和theos分别编译出tester后,再分别运行
/path/to/ldid -e tester
,看看输出什么
xcode编译出来的再签名的可用:
通过ldid -e TSTest1
输出感觉签名了两次就可以
theos编译出来的不可用:
通过ldid -e TSTest2
输出感觉签名了只有一次就不可以
为什么会这样?
task_for_pid失败的话,要么就是这个函数本身的问题,要么就是entitlements的问题。但是你拿Xcode编译又没问题,说明不是函数使用的问题,那就可能是entitlements的问题,但从你的截图上又看不出来什么。
但是,我注意到你task_for_pid的返回值一次是4,一次是5,参考Apple源码的话,5的这次不好判断,但4的这次貌似是函数的参数有问题。你把task_for_pid的这一段代码贴上来看看
代码请见附件
另外疑问是:为什么xcode编译的再重新签名就可以了,并且通过ldid -e 查看他的签名是两个(如果没有重新签名也是不行),而theos编译的签名重新签名过通过ldid -e查看也只有一个。
为什么签名是2个可以1个不行的问题我也不知道,而且我估计碰到这种问题的人可能不多,要么你去stackoverflow上发个帖问问吧