Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
toothpicker — 커버리지 가이드 인-프로세스 퍼저 for iOS Bluetooth daemon (bluetoothd) using FRIDA, MagicPairing 프로토콜에 대한 무선(Over-the-Air) 퍼징 및 크래시 재생(Replay) 기능 포함. | Kitploit
도구/GitHubGitHub/seemoo-lab/toothpicker
Bluetooth SecurityDynamic Analysis (Sandboxing)iOS SecurityFuzzingWireless SecurityMobile Security
GitHubseemoo-lab/toothpicker

toothpicker

커버리지 가이드 인-프로세스 퍼저 for iOS Bluetooth daemon (bluetoothd) using FRIDA, MagicPairing 프로토콜에 대한 무선(Over-the-Air) 퍼징 및 크래시 재생(Replay) 기능 포함.

저장소 보기
245364년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

ToothPicker 로고

ToothPicker

ToothPicker는 iOS를 위한 인-프로세스, 커버리지 가이드 퍼저입니다. iOS의 블루투스 데몬 bluetoothd를 특별히 타겟팅하고 iOS의 다양한 블루투스 프로토콜을 분석하기 위해 개발되었습니다. FRIDA를 기반으로 구축되어 FRIDA가 실행되는 모든 플랫폼을 대상으로 적용할 수 있습니다.

이 저장소에는 InternalBlue를 사용하여 Apple의 MagicPairing 프로토콜을 퍼징하는 예제 구현이 포함된 over-the-air 퍼저도 포함되어 있습니다. 또한 인-프로세스 퍼저가 발견한 크래시를 검증하는 데 사용할 수 있는 ReplayCrashFile.py 스크립트도 포함되어 있습니다.

새로운: 인플레이스 퍼저 (ToothFlipper)

이것은 활성 연결에서 비트와 바이트만 뒤집는 매우 간단한 퍼저입니다. 커버리지 가이드도 없고 인젝션도 없지만 데모 및 상태 유지에 유용합니다. Python+Frida만으로 실행되며 모듈이나 설치가 필요 없습니다. iOS 13.5-14.3에서 테스트되었습니다. inplace-fuzzer를 참조하세요.

인-프로세스 퍼저

인-프로세스 퍼저는 다양한 iOS 버전(13.3-13.7 테스트 완료)에서 바로 사용할 수 있지만 심볼을 지정해야 합니다. 다른 iOS 버전은 함수 주소에 대한 조정이 필요합니다. 또한 FRIDA의 스토커가 iPhone 8에서 몇 가지 문제가 있는 것으로 보입니다. PAC를 지원하는 최신 iPhone에서는 포인터 서명으로 인해 성능이 크게 저하됩니다. 따라서 iPhone 7에서 실행하는 것이 좋습니다.

ToothPicker는 frizzer의 코드베이스를 기반으로 구축되었습니다. 그러나 이 특정 애플리케이션에 맞게 조정되어 더 이상 원본 버전과 호환되지 않습니다. 향후 더 전용 구성 요소로 교체할 계획이 있습니다.

사전 요구사항:

아이폰에서:

  • https://frida.re/docs/ios/

리눅스에서:

  • usbmuxd
  • libimobiledevice
  • 선택 사항이지만 권장: virtualenv
  • radamsa (frizzer에 필요)

아치 기반 리눅스의 경우:

root@kitploit:~
# usbmuxd typically comes with libimobiledevice
# but just to be sure, we manually install it as well
sudo pacman -S usbmuxd libimobiledevice python-virtualenv radamsa

# Connect the iPhone to the computer
# Unlock it.
# If a pairing message pops up, click "Trust"
# If no pairing message pops up:
idevicepair pair
# Now there should be the pop up, accept and then again:
idevicepair pair

# In case of connection errors:
sudo systemctl restart usbmuxd
# or pair phone and computer again


# Other useful commands

# To ssh into the iPhone:
# Checkra1n comes with an SSH server listening on Port 44
# Proxy the phone's SSH port to 4444 localport:
iproxy 4444 44
# Connect:
ssh root@localhost -p 4444
# Default password: alpine

# To fetch some device information of the phone:
ideviceinfo

데비안 리눅스의 경우:

위와 거의 동일합니다. 예외:

  • radamsa는 패키지로 제공되지 않기 때문에 git 저장소에서 설치해야 합니다.
  • iproxy 명령어는 추가 패키지 libusbmuxd-tools가 필요합니다.

macOS의 경우:

Arch Linux 설정과 약간 다른 명령어...

root@kitploit:~
brew install libimobiledevice usbmuxd radamsa npm
idevicepair pair
npm install frida-compile
pip3 install frida-tools

macOS에서는 Additional Tools for Xcode의 일부인 PacketLogger가 Bluetooth Debug Profile이 설치되면 다양한 패킷을 디코딩할 수 있습니다. 또한 Xcode로 iOS 크래시 로그를 열면 일부 심볼이 추가됩니다.

설정 및 퍼징

설정:

  • frizzer용 가상 Python 환경을 설정하는 것이 좋습니다.
  • frizzer 디렉터리에서 실행하여 필요한 패키지를 설치합니다.
  • projects 디렉터리에는 MagicPairing 프로토콜을 퍼징하는 예제 프로젝트가 포함되어 있습니다.
  • 하네스를 빌드하려면 일반 하네스와 특수 MagicPairing 하네스를 하나의 파일로 컴파일합니다.
  • harness 디렉터리로 cd하여 frida-compile을 설치합니다. 이 작업은 해당 폴더에서 실행해야 하며 npm install frida-compile을 실행하여 사용자로 직접 설치할 수 있습니다.
  • 이제 frida-compile ../projects/YOUR_PROJECT/YOUR_SPECIALIZED_HARNESS.JS -o ../projects/YOUR_PROJECT/harness.js를 실행합니다. 이것이 npm 컨텍스트에서 설치되었으므로 npx frida-compile을 대신 실행해야 할 수도 있습니다. 하네스가 변경될 때마다 frida-compile을 다시 실행해야 합니다.

퍼징:

  • iOS 기기를 컴퓨터에 연결합니다.
  • 비행기 모드로 설정하고 "방해 금지" 기능을 켜서 기기에서 다른 활동을 제한하는 것이 좋습니다.
  • killall -9 bluetoothd를 실행하여 bluetoothd를 새로 시작합니다.
  • 기기가 다른 블루투스 기기에 연결되지 않도록 합니다.
  • 이제 프로젝트 디렉터리로 cd하여 크래시로그 디렉터리를 만들고(mkdir crashes) ../../frizzer/fuzzer.py fuzz -p .를 실행합니다.
  • 야! 이제 제로데이를 수집하고 Apple로부터 많은 돈을 받으세요! (또는 쓸모없는 NULL 포인터 역참조의 거대한 목록을 수집하세요...)

요약하면, 새 프로젝트를 시작하려면 다음을 실행합니다:

root@kitploit:~
cd harness
npx frida-compile ../projects/YOUR_PROJECT/YOUR_SPECIALIZED_HARNESS.JS -o ../projects/YOUR_PROJECT/harness.js
cd ../projects/YOUR_PROJECT/
mkdir crashes
../../frizzer/fuzzer.py fuzz -p .

frizzer/fuzzer.py fuzz --seed 1234 -p .를 사용하여 다른 시드로 시작할 수 있습니다.

새 iOS 버전 추가:

현재 bluetoothd.js에 다양한 iOS 버전이 정의되어 있습니다. 필요한 모든 심볼이 있는 초기 버전이 주어지면 Ghidra 버전 관리 도구를 사용하여 찾을 수 있습니다. 일부 심볼은 원래 iOS 바이너리에 이름이 지정되어 있지 않으므로 이상적으로는 이전에 주석이 달린 버전으로 시작하십시오. bluetoothd.js가 변경될 때마다 frida-compile을 다시 실행해야 합니다.

bluetoothd 용량 증가:

iOS 크래시 로그는 설정 -> 개인정보 보호 -> 분석 및 개선 -> 분석 데이터에 저장됩니다. bluetoothd.cpu_resource-*.ips 패턴의 bluetoothd 크래시가 포함되어 있으면 리소스 초과로 인해 크래시가 발생했음을 나타냅니다. 다음과 같이 용량을 늘릴 수 있습니다.

iPhone 7에서 다음을 실행합니다:

root@kitploit:~
cd /System/Library/LaunchDaemons/
plistutil -i com.apple.jetsamproperties.D10.plist -o com.apple.jetsamproperties.D10.plist.txt
plistutil -i com.apple.jetsamproperties.D101.plist -o com.apple.jetsamproperties.D101.plist.txt

iPhone SE2에서는 com.apple.jetsamproperties.D79.plist에 있습니다:

root@kitploit:~
cd /System/Library/LaunchDaemons/
plistutil -i com.apple.jetsamproperties.D79.plist -o com.apple.jetsamproperties.D79.plist.txt

bluetoothd를 검색하고 우선순위를 19(가장 높은 유효 우선순위)로 업데이트하고 메모리 제한을 매우 높게 설정합니다. 두 파일에 동일한 변경 사항을 적용합니다.

root@kitploit:~
<dict>
       <key>ActiveSoftMemoryLimit</key>
       <integer>24000</integer>
       <key>InactiveHardMemoryLimit</key>
       <integer>24000</integer>
       <key>EnablePressuredExit</key>
       <false/>
       <key>JetsamPriority</key>
       <integer>19</integer>
</dict>

변경 사항을 다시 쓰고 bluetoothd를 다시 시작합니다.

root@kitploit:~
plistutil -i com.apple.jetsamproperties.D10.plist.txt -o com.apple.jetsamproperties.D10.plist
plistutil -i com.apple.jetsamproperties.D101.plist.txt -o com.apple.jetsamproperties.D101.plist
killall -9 bluetoothd

iPhone SE2의 경우:

root@kitploit:~
plistutil -i com.apple.jetsamproperties.D79.plist.txt -o com.apple.jetsamproperties.D79.plist
killall -9 bluetoothd

오래된 로그 삭제:

iOS는 한 프로그램에 대해 25개의 제한에 도달하면 크래시 로그 저장을 중단합니다. Xcode(시뮬레이터 및 기기 사용)로 크래시 로그를 로드하면 스택 추적에 일부 심볼이 추가됩니다. 제한에 도달하면 로그는 Xcode를 통해 또는 iOS 기기에서 직접 /var/mobile/Library/Logs/CrashReporter/ 폴더에서 삭제하여 제거할 수 있습니다.

A12+:

iPhone XR/Xs부터 PAC이 도입되었습니다. 이렇게 하려면 FRIDA에서 NativeFunction에 sign()을 호출해야 합니다. 이전 CPU에서는 no-op이지만 새 기기에서는 속도가 엄청나게 느려지지만 작동하려면 필요합니다. iPhone 7 대신 iPhone SE2를 사용할 때 ToothPicker가 절반 속도로 작동하는 것을 관찰했습니다.

Over-the-Air 퍼저 및 크래시 재생

Over-the-air 퍼저의 MagicPairing 구현에는 InternalBlue가 설치되어 있어야 하며 python MagicPairingFuzzer.py TARGET_BD_ADDR를 실행하여 실행할 수 있습니다.

크래시를 재현하려면 ReplayCrashFile.py 스크립트를 사용하십시오. 이 스크립트는 크래시 파일을 가져와 크래시를 기반으로 한 페이로드로 over-the-air 연결을 시작합니다.

도구 다운로드