Dylib注入 闪退

遇到一个很奇葩的问题,自己编写了一个dylib库libmineC.dylib 然后我也把文件对应放到了可执行文件同目录下,可执行文件也用yololib做了注入,但就总是报错如下:

Incident Identifier: 01CCC267E-1D12-417D-93A7-1DB5096E21BB
CrashReporter Key: 399669d75bd401ea20ccb936e102712aab65de7d
Hardware Model: iPhone7,2
Process: FiveNightsatFreddys [2079]
Path: /private/var/mobile/Containers/Bundle/Application/0513A2D6-96EA-44FB-946A-15E54C0D4EBB/FiveNightsatFreddys.app/FiveNightsatFreddys
Identifier: com.scottgam7es.fivenights
Version: 1.0 (1.0)
Code Type: ARM (Native)
Parent Process: launchd [1]

Date/Time: 2016-04-23 18:52:38.38 +0800
Launch Time: 2016-04-23 18:52:37.37 +0800
OS Version: iOS 9.2.1 (13D15)
Report Version: 105

Exception Type: EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000001, 0x00000000e7ffdefe
Triggered by Thread: 0

Filtered syslog:
None found

Dyld Error Message:
Dyld Message: Library not loaded: @executable_path/libmineC.dylib
Referenced from: /var/mobile/Containers/Bundle/Application/0513A2D6-96EA-44FB-946A-15E54C0D4EBB/FiveNightsatFreddys.app/FiveNightsatFreddys
Reason: no suitable image found. Did find:
/var/mobile/Containers/Bundle/Application/0513A2D6-96EA-44FB-946A-15E54C0D4EBB/FiveNightsatFreddys.app/libmineC.dylib: mmap() error 22 at address=0x003D6000, size=0x00027000 segment=__DATA in Segment::map() mapping /var/mobile/Containers/Bundle/Application/0513A2D6-96EA-44FB-946A-15E54C0D4EBB/FiveNightsatFreddys.app/libmineC.dylib
/private/var/mobile/Containers/Bundle/Application/0513A2D6-96EA-44FB-946A-15E54C0D4EBB/FiveNightsatFreddys.app/libmineC.dylib: mmap() error 22 at address=0x00566000, size=0x00027000 segment=__DATA in Segment::map() mapping /private/var/mobile/Containers/Bundle/Application/0513A2D6-96EA-44FB-946A-15E54C0D4EBB/FiveNightsatFreddys.app/libmineC.dylib
Dyld Version: 370.6

Binary Images:
0xd8000 - 0x16bfff FiveNightsatFreddys armv7 <5ac584b1295a35469da5e81a8a4376b8> /var/mobile/Containers/Bundle/Application/0513A2D6-96EA-44FB-946A-15E54C0D4EBB/FiveNightsatFreddys.app/FiveNightsatFreddys
0x1fe90000 - 0x1feb7fff dyld armv7s /usr/lib/dyld

我自己分析了一下,发现我这个dylib要是针对的可执行文件是Fat binary类型的就不会报这个错,要是可执行文件是Thin binary类型就总报这个错,是什么原因呢?

可能这个工具本身有问题吧

你是说yololib这个东西?但是可执行文件用MachOView查看是有看到正确插入了libmineC.dylib的哦

用insert_dylib这个工具试试

dylib架构问题? 对齐了吗

什么意思?如何对齐?

楼主,遇到同样的问题,注入成功,使用machoview可以查看到,dylib也放到app目录下,重新签名,打包运行闪退。mmap() error 1 at address

每天上班抽空搞一下,终于解决了这个问题。现在动态注入成功,并且可以运行在非越狱设备上,而且点击触发事件是预期修改后的事件。历尽千难万阻,成功的那一刻难以抑制心中的喜悦。
大概说一下,注入成功,重签打包,安装运行闪退的原因。mmap() 一般是证书签名问题。

个人心得:
1、原包app必须脱壳,不然会报错类似这个“ Unable to obtain a task name port right for XXX”。查看是否加密命令 otool -l AppRe | grep crypt
cryptid 1表示加密。
2、动态库里面自己手动建立一个entitlements.plist文件,证书 必须与重签的证书名一致(developer或者distributer都可以)。签名的详细说明如下:
http://blog.csdn.net/showhilllee/article/details/48494087
3、如果是企业级的证书,必须要有OU组织单位。查看命令 codesign -dv AppRe.app。如果是Teamidentifier 是not set,就需要重新生成新的根证书和签名。
4、dylib必须重签名
5、使用了iOS App Signer这个重签工具,是开源的,可以调测代码。iReSign不知道怎么回事,老是失败。
上面 是主要的一些问题,实际过程还有很多细节。每个人碰到的可能也不一样。这里分享出来希望大家少走一点弯路。

2 个赞

你好,我也遇到了一样的问题,但是我不知道“动态库里面自己手动建立一个entitlements.plist文件”具体应该如何操作,可否联系你帮忙解答一下呢?