适用于已越狱 64 位 iOS 11.0 - 11.1.2 的简易 dylib 注入工具。兼容 Electra 和 LiberiOS 越狱。
bfinject 可将任意 dylib 注入正在运行的 App Store 应用。它内置了解密 App Store 应用的支持,并捆绑了 iSpy 和 Cycript。
bfinject 是一个封装工具,负责在使用 bfinject4realz 注入之前正确地对你的 dylib 进行代码签名。它完全独立运行,不依赖 jailbreakd、QiLin 或任何类似的东西。开箱即用。
注意:如果在 Electra 上启用了 "Tweaks",bfinject 将无法工作。请重启并重新运行不带 tweaks 的 Electra 以使用 bfinject。如果你看到与 "thread_create" 相关的错误,那就是这个问题。
注意:bfdecrypt 可在此处作为独立 dylib 获取:https://github.com/BishopFox/bfdecrypt/
wget 不支持 SSL。ssh root@your-device-ip # (密码是 'alpine')
mkdir bfinject
cd bfinject
wget http://<your_server>/bfinject.tar
tar xvf bfinject.tar
wget 不支持 SSL。ssh root@your-device-ip # (密码是 'alpine')
export PATH=$PATH:/jb/usr/bin:/jb/bin:/jb/sbin:/jb/usr/sbin:/jb/usr/local/bin:
cd /jb
mkdir bfinject
cd bfinject
wget http://<your_server>/bfinject.tar
tar xvf bfinject.tar
bash bfinject 查看帮助bash 前缀很重要,否则无法工作。沙盒等等原因。-bash-3.2# bash bfinject
Syntax: bfinject [-p PID | -P appname] [-l /path/to/yourdylib | -L feature]
For example:
bfinject -P Reddit.app -l /path/to/evil.dylib # Injects evil.dylib into the Reddit app
or
bfinject -p 1234 -L cycript # Inject Cycript into PID
or
bfinject -p 4566 -l /path/to/evil.dylib # Injects the .dylib of your choice into PID
Instead of specifying the PID with -p, bfinject can search for the correct PID based on the app name.
Just enter "-P identifier" where "identifier" is a string unique to your app, e.g. "fing.app".
Available features:
cycript - Inject and run Cycript
decrypt - Create a decrypted copy of the target app
test - Inject a simple .dylib to make an entry in the console log
ispy - Inject iSpy. Browse to http://<DEVICE_IP>:31337/
在进行更复杂的操作之前,先测试一下它是否能正常工作。bfinject 内置了自测功能。以下是以 Reddit 应用为目标的示例:
Cs-iPhone:~ root# bash bfinject -P Reddit -L test
[+] Electra detected.
[+] Injecting into '/var/containers/Bundle/Application/55C94FAA-A282-4FDC-967D-6A012D01087E/Reddit.app/Reddit'
[+] Getting Team ID from target application...
[+] Thinning dylib into non-fat arm64 image
[+] Signing injectable .dylib with Team ID 2TDUX39LX8 and platform entitlements...
[bfinject4realz] Calling task_for_pid() for PID 486.
[bfinject4realz] Calling thread_create() on PID 486
[bfinject4realz] Looking for ROP gadget... found at 0x1019a2ba0
[bfinject4realz] Fake stack frame at 0x12ac5c000
[bfinject4realz] Calling _pthread_set_self() at 0x182bfb814...
[bfinject4realz] Returned from '_pthread_set_self'
[bfinject4realz] Calling dlopen() at 0x1829bb460...
[bfinject4realz] Returned from 'dlopen'
[bfinject4realz] Success! Library was loaded at 0x1c016e1c0
[+] So long and thanks for all the fish.
在设备屏幕上你应该会看到:
如果没有,说明出了问题 ;)
以下是在 Electra 越狱的 iPhone 上解密 Reddit 应用的示例:
Cs-iPhone:~ root# bash bfinject -P Reddit -L decrypt
[+] Electra detected.
[+] Injecting into '/var/containers/Bundle/Application/BCEBDD64-6738-45CE-9B3C-C6F933EA0793/Reddit.app/Reddit'
[+] Getting Team ID from target application...
[+] Thinning dylib into non-fat arm64 image
[+] Signing injectable .dylib with Team ID 2TDUX39LX8 and platform entitlements...
[bfinject4realz] Calling task_for_pid() for PID 3218.
[bfinject4realz] Calling thread_create() on PID 3218
[bfinject4realz] Looking for ROP gadget... found at 0x1016a5110
[bfinject4realz] Fake stack frame at 0x10a06c000
[bfinject4realz] Calling _pthread_set_self() at 0x181303814...
[bfinject4realz] Returned from '_pthread_set_self'
[bfinject4realz] Calling dlopen() at 0x1810c3460...
[bfinject4realz] Returned from 'dlopen'
[bfinject4realz] Success! Library was loaded at 0x1c03e1100
[+] So long and thanks for all the fish.
你会在设备上看到这个画面:
完成后,系统会弹出一个 UI 提示框,询问你是否要启动一个服务,以便从该服务下载解密后的 IPA:
如果你点击 Yes,将在设备的 31336 端口上启动一个服务。连接到该服务后,你将会收到一份原始的 IPA 副本,可以使用 netcat 下载,如下所示:
carl@calisto-3 /tmp $ nc 192.168.1.33 31336 > decrypted.ipa
carl@calisto-3 /tmp $ ls -l decrypted.ipa
-rw-r--r-- 1 carl wheel 14649063 Jan 25 16:57 decrypted.ipa
carl@calisto-3 /tmp $ file decrypted.ipa
decrypted.ipa: iOS App Zip archive data, at least v2.0 to extract
或者,查看设备的控制台日志,它会告诉你解密后的 IPA 存储在哪里。例如:
[dumpdecrypted] Wrote /var/mobile/Containers/Data/Application/6E6A5887-8B58-4FC5-A2F3-7870EDB5E8D1/Documents/decrypted-app.ipa
你也可以像这样在文件系统中搜索 IPA:
find /var/mobile/Containers/Data/Application/ -name decrypted-app.ipa
可以使用 netcat 将 .ipa 从设备中取出。在你的笔记本电脑上设置一个监听服务:
ncat -l 0.0.0.0 12345 > decrypted.ipa
然后在越狱设备上:
cat /path/to/decrypted.ipa > /dev/tcp/<IP_OF_YOUR_COMPUTER>/12345
这个 .ipa 将是 App Store 原始 .ipa 的克隆,区别在于主二进制文件及其所有附带的框架和共享库都将被解密。在每个之前加密的文件中,CRYPTID 标志将为 0。你可以获取该 .ipa,解压应用,按需修改,使用你自己的开发者证书重新签名,然后根据需要将其部署到非越狱设备上。
bfinject 的功能之一是整合常见的渗透测试工具,例如 Cycript。随着时间推移,将加入更多工具。要使用 Cycript,你需要在你的 MacBook 上安装 Cycript 命令行客户端 (http://www.cycript.org/)。然后,一旦 bfinject 安装到你的测试设备上,可以像下面这个示例一样操作,我们将 Cycript 注入 Reddit 应用: