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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
BTLE — 표준 및 비표준(원시 비트) 방식을 모두 지원하는 블루투스 저에너지(BLE) 패킷 스니퍼 및 송신기로, 소프트웨어 정의 라디오(SDR) 기반입니다. | Kitploit
도구/GitHubGitHub/jiaoxianjun/btle
Packet Sniffing & AnalysisBluetooth SecurityIoT SecurityWireless Security
GitHubjiaoxianjun/btle

BTLE

표준 및 비표준(원시 비트) 방식을 모두 지원하는 블루투스 저에너지(BLE) 패킷 스니퍼 및 송신기로, 소프트웨어 정의 라디오(SDR) 기반입니다.

저장소 보기웹사이트
9271712개월 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

BTLE

BTLE는 무료 오픈소스 블루투스 저전력(BLE) 소프트웨어 정의 라디오(SDR) 소프트웨어 제품군이자 오픈 BTLE 칩 설계입니다.

다음이 포함됩니다:

  • BTLE 베이스밴드 알고리즘 설명, Python 및 Verilog 구현, FPGA 및 SkyWater 130 PDK(OpenLane2 워크플로우) 결과.
  • Analog Devices AD9361 + Xilinx Zynq FPGA 구현: FPGA Bluetooth
  • btle_rx - BLE 스니퍼. 브로드캐스트/고정 채널 스니핑 외에도 통신 링크의 채널 호핑을 추적할 수 있습니다.
  • btle_tx - 범용 BLE 패킷 송신기. BLE 표준 외에도 임의의 GFSK 패킷을 생성하는 원시 비트 모드를 지원합니다. 이렇게 하면 칩이 시장에 출시되기 전에 비표준 프로토콜이나 논의 중인 표준을 테스트할 수 있습니다.

기능

  • PHY 및 상위 계층은 소프트웨어(C 언어)로 구현됩니다. 완전한 소프트웨어 정의 라디오 유연성을 제공합니다.
  • BLE 표준 1Mbps GFSK PHY.
  • Core_V4.0(제2장 및 제3장, PartB, Volume 6)의 모든 ADV 및 DATA 채널 링크 계층 패킷 형식을 지원합니다.
  • 스니퍼는 브로드캐스트 채널이나 고정 채널에 국한되지 않고 채널 호핑 패턴을 자동으로 파싱하고 추적할 수 있습니다.

하드웨어

  • HackRF
  • bladeRF
  • 호환 가능한 HackRF 및 bladeRF 라이브러리 버전

빌드 및 빠른 테스트

이 프로젝트를 실행하기 전에 SDR 하드웨어 환경(드라이버/라이브러리)이 올바르게 설정되어 있는지 확인하십시오.

root@kitploit:~
git clone https://github.com/JiaoXianjun/BTLE.git
cd BTLE/host
mkdir build
cd build
cmake ../                   (default. for HackRF)
cmake ../ -DUSE_BLADERF=1   (only for bladeRF)

make
./btle-tools/src/btle_rx

위 명령은 채널 37에서 스니핑합니다. 주변에 BLE 기기(휴대폰/태블릿/노트북)가 있다면 화면에 많은 패킷이 표시될 것입니다.

root@kitploit:~
./btle-tools/src/btle_tx 37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040506-LOCAL_NAME09-SDR/Bluetooth/Low/Energy r500 

위 명령은 ADV 채널에서 디스커버리 패킷을 전송합니다. 다른 BLE 스니퍼 앱(예: LightBlue)에서 "SDR/Bluetooth/Low/Energy"라는 이름의 기기를 볼 수 있을 것입니다.

HACKRF에서 더 빠른 동작 시퀀스를 원한다면 다음을 사용하십시오:

root@kitploit:~
#define TRANSFER_COUNT 4
#define TRANSFER_BUFFER_SIZE 4096

hackrf/host/libhackrf/src/hackrf.c 파일에서 설정합니다. 그런 다음 HACKRF 라이브러리를 다시 컴파일하고 다시 설치하십시오. HACKRF 라이브러리 변경 사항을 적용하려면 BTLE도 다시 컴파일하는 것을 잊지 마십시오.

도구 외에도 matlab 디렉터리에는 알고리즘 평가 및 기타 유용한 스크립트가 포함되어 있습니다

btle_rx 사용법

root@kitploit:~
-h --help

모든 인수/사용법을 출력합니다.

root@kitploit:~
-c --chan

채널 번호. 기본값은 37(ADV 채널 중 하나)입니다. 유효한 값은 0~39(모든 ADV 및 DATA 채널)입니다.

root@kitploit:~
-g --gain

수신 이득(dB). HACKRF rxvga 기본값은 6, 유효 범위 0 - 62입니다. bladeRF 기본값은 최대 수신 이득 66dB(유효 범위 0 - 66)입니다. 이득은 환경에서 최상의 성능을 보장하도록 매우 신중하게 조정해야 합니다. 높은 이득은 항상 심각한 왜곡을 일으켜 아무것도 얻지 못하므로 낮은 이득부터 테스트할 것을 권장합니다.

root@kitploit:~
-l --lnaGain

LNA 이득(dB)(HackRF 전용). 기본값 32, 유효 범위 0 - 40. 이득은 환경에서 최상의 성능을 보장하도록 매우 신중하게 조정해야 합니다.

root@kitploit:~
-b --amp

앰프 활성화(HackRF 전용). 기본값은 꺼짐입니다.

root@kitploit:~
-a --access

액세스 주소. ADV 채널 37 38 39의 기본값은 8e89bed6입니다. 캡처된 연결 설정 절차에 따라 데이터 채널에 대한 올바른 값을 지정해야 합니다.

root@kitploit:~
-k --crcinit

ADV 채널의 기본값은 555555입니다. 캡처된 연결 설정 절차에 따라 데이터 채널에 대한 올바른 값을 지정해야 합니다.

root@kitploit:~
-v --verbose

자세한 출력 모드. 오류가 있을 때 더 많은 정보를 출력합니다.

root@kitploit:~
-r --raw

원시 모드. 액세스 주소가 감지된 후 이어지는 원시 42바이트를 출력합니다(디스크램블링, 파싱 없이).

root@kitploit:~
-f --freq_hz (need argument)

이 주파수(Hz)는 채널 설정을 대체합니다(BTLE 이외의 주파수에서 작업하려는 경우. 보다 일반적인 용도).

root@kitploit:~
-m --access_mask (need argument)

이 마스크의 비트가 1이면 액세스 주소의 해당 비트가 패킷 존재 판단에 반영됩니다(더 짧거나 더 성긴 고유 워드로 패킷 감지를 수행하려는 경우. 보다 일반적인 용도).

root@kitploit:~
-o --hop

이 옵션은 ADV 채널의 ADV_CONNECT_REQ 패킷에서 링크 설정 정보가 캡처된 후 데이터 채널 추적(주파수 호핑)을 켭니다.

root@kitploit:~
-s --filename

패킷을 pcap 파일로 저장합니다.

btle_tx 사용법

root@kitploit:~
btle_tx packet1 packet2 ... packetX ...  rN

또는

root@kitploit:~
btle_tx packets.txt

packets.txt는 명령줄 매개변수(packet1 packet2 ... rN) 텍스트가 포함된 텍스트 파일입니다. 매개변수 하나가 한 줄을 차지합니다. "#"으로 시작하는 줄은 주석으로 간주됩니다. packets.txt 예제를 참조하십시오.

root@kitploit:~
packetX 

하나의 패킷을 설명하는 문자열입니다. 모든 패킷이 패킷 시퀀스를 구성합니다.

root@kitploit:~
rN

시퀀스가 N번 반복됨을 의미합니다. 지정하지 않으면 시퀀스는 한 번만 전송됩니다.

packetX 문자열 형식

root@kitploit:~
channel_number-packet_type-field-value-field-value-...-Space-value

각 설명자 문자열은 BTLE 채널 번호(0~39)로 시작하고, 그 다음에 packet_type(RAW/iBeacon/ADV_IND/ADV_DIRECT_IND 등. 모든 형식 예제는 마지막: 부록 참조)이 오며, 그 다음에 packet_type별 필드-값 쌍이 이어집니다. 마지막에는 Space-값 쌍(선택 사항)이 오며, 값은 이 패킷 전송 후 대기할 밀리초 수를 지정합니다.

절대 명령줄 패킷 설명자에 공백 문자 " "를 사용하지 마십시오. txt 파일 패킷 설명자에서는 공백을 사용할 수 있습니다.

절대 각 필드 안에 "-"를 사용하지 마십시오. "-"는 패킷 설명자에서 서로 다른 필드를 구분하는 데 사용되는 특수 문자입니다.

  • btle_tx 예제: 디스커버리 패킷

이 명령을 실행하기 전에 iPhone/기기에서 LightBlue 앱(또는 다른 BLE 스니퍼)을 여십시오:

root@kitploit:~
./btle-tools/src/btle_tx ../btle-tools/src/packets_discovery.txt

LightBlue 앱에서 "SDR Bluetooth Low Energy"라는 이름의 기기를 볼 수 있을 것입니다.

해당 명령줄:

root@kitploit:~
./btle-tools/src/btle_tx 37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040506-LOCAL_NAME09-SDR/Bluetooth/Low/Energy r40

참고: 공백 " "은 명령줄에서 지원되지 않으므로 "/"로 대체됩니다.

  • btle_tx 예제: 연결 설정
root@kitploit:~
btle_tx 37-ADV_IND-TxAdd-0-RxAdd-0-AdvA-90D7EBB19299-AdvData-0201050702031802180418-Space-1      37-CONNECT_REQ-TxAdd-0-RxAdd-0-InitA-001830EA965F-AdvA-90D7EBB19299-AA-60850A1B-CRCInit-A77B22-WinSize-02-WinOffset-000F-Interval-0050-Latency-0000-Timeout-07D0-ChM-1FFFFFFFFF-Hop-9-SCA-5-Space-1     9-LL_DATA-AA-60850A1B-LLID-1-NESN-0-SN-0-MD-0-DATA-XX-CRCInit-A77B22-Space-1

위는 기기 1과 기기 2 사이의 연결 설정 절차를 시뮬레이션합니다. 해당 설명자 파일은 BTLE/host/btle-tools/src/packets.txt입니다.

1번째 패킷 -- 기기 1이 채널 37에서 ADV_IND 패킷을 전송합니다.

2번째 패킷 -- 스캔 상태의 기기 2가 기기 1로부터 ADV 패킷을 수신한 후, 기기 2는 기기 1과의 연결 설정을 요청하는 CONNECT_REQ 패킷을 전송합니다. 이 요청 패킷에는 기기 2의 MAC 주소(InitA), 대상 MAC 주소(기기 1의 MAC 주소 AdvA), 기기 1이 이후 데이터 채널에서 패킷 전송에 사용할 액세스 주소(AA), 이후 기기 1이 전송하는 패킷의 CRC 초기화 값, 기기 1이 사용하는 데이터 채널의 호핑 채널 정보(ChM 및 Hop) 등이 포함됩니다.

3번째 패킷 -- 기기 1이 기기 2로부터 받은 연결 요청 정보에 따라 채널 9에서 빈 링크 계층 데이터 PDU를 전송합니다(호핑 방식에 따라 결정됨). ("DATA" 필드 뒤의 "XX"는 이 필드에 데이터가 없음을 의미합니다.)

패킷 사이의 시간 간격은 1초(1000ms)입니다. TI의 패킷 스니퍼를 채널 37에 맞추면 위의 설정 절차가 캡처될 것입니다.

  • btle_tx 예제: iBeacon
root@kitploit:~
./btle-tools/src/btle_tx 37-iBeacon-AdvA-010203040506-UUID-B9407F30F5F8466EAFF925556B57FE6D-Major-0008-Minor-0009-TxPower-C5-Space-100     r100

위 명령은 iBeacon 패킷을 전송하고 100ms 시간 간격으로 100회 반복합니다. 해당 설명자 파일은 BTLE/host/btle-tools/src/packets_ibeacon.txt입니다. BLE 스니퍼 동글을 사용하여 패킷을 확인할 수 있습니다.

패킷 설명자 문자열:

root@kitploit:~
37-iBeacon-AdvA-010203040506-UUID-B9407F30F5F8466EAFF925556B57FE6D-Major-0008-Minor-0009-TxPower-C5-Space-100
root@kitploit:~
37

채널 37(BTLE 광고 채널 37 38 39 중 하나)

root@kitploit:~
iBeacon

iBeacon 형식을 의미하는 패킷 형식 키워드입니다. (실제로는 Core_V4.0.pdf의 ADV_IND 형식입니다.)

root@kitploit:~
AdvA

010203040506으로 설정된 광고 주소(MAC 주소)입니다 (Core_V4.0.pdf 참조)

root@kitploit:~
UUID

여기서는 Estimote의 고정 UUID: B9407F30F5F8466EAFF925556B57FE6D로 지정합니다.

root@kitploit:~
Major

iBeacon 형식의 major 번호입니다. (여기서는 0008)

root@kitploit:~
Minor

iBeacon 형식의 minor 번호입니다. (여기서는 0009)

root@kitploit:~
Txpower

iBeacon 형식의 송신 전력 매개변수입니다 (여기서는 C5)

root@kitploit:~
Space

이 패킷 전송 후 대기할 밀리초 수입니다. (여기서는 100ms)

데모

TI의 패킷 스니퍼와의 비교는 여기에서 확인하십시오: http://sdr-x.github.io/BTLE-SNIFFER/

btle_rx 동영상 데모 또는 btle_rx 동영상 데모(중국 내) 및 btle_tx 동영상 데모 1 또는 btle_tx 동영상 데모 2(중국 내)를 확인하십시오.

부록: btle_tx의 모든 형식에 대한 패킷 설명자 예제


RAW 패킷: (모든 비트가 GFSK 변조기로 직접 전송됩니다)

root@kitploit:~
37-RAW-aad6be898e8dc3ce338c4cb1207730144f9474e0e15eedb378c3bc

광고 채널 패킷(예: 채널 37):

root@kitploit:~
37-IBEACON-AdvA-010203040506-UUID-B9407F30F5F8466EAFF925556B57FE6D-Major-0008-Minor-0009-TxPower-C5
37-ADV_IND-TxAdd-1-RxAdd-0-AdvA-010203040506-AdvData-00112233445566778899AABBCCDDEEFF
37-ADV_DIRECT_IND-TxAdd-1-RxAdd-0-AdvA-010203040506-InitA-0708090A0B0C
37-ADV_NONCONN_IND-TxAdd-1-RxAdd-0-AdvA-010203040506-AdvData-00112233445566778899AABBCCDDEEFF
37-ADV_SCAN_IND-TxAdd-1-RxAdd-0-AdvA-010203040506-AdvData-00112233445566778899AABBCCDDEEFF
37-SCAN_REQ-TxAdd-1-RxAdd-0-ScanA-010203040506-AdvA-0708090A0B0C
37-SCAN_RSP-TxAdd-1-RxAdd-0-AdvA-010203040506-ScanRspData-00112233445566778899AABBCCDDEEFF
37-CONNECT_REQ-TxAdd-1-RxAdd-0-InitA-010203040506-AdvA-0708090A0B0C-AA-01020304-CRCInit-050607-WinSize-08-WinOffset-090A-Interval-0B0C-Latency-0D0E-Timeout-0F00-ChM-0102030405-Hop-3-SCA-4

데이터 채널 패킷(예: 채널 9):

root@kitploit:~
9-LL_DATA-AA-60850A1B-LLID-1-NESN-0-SN-0-MD-0-DATA-XX-CRCInit-A77B22
9-LL_CONNECTION_UPDATE_REQ-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-WinSize-02-WinOffset-0e0F-Interval-0450-Latency-0607-Timeout-07D0-Instant-eeff-CRCInit-A77B22
9-LL_CHANNEL_MAP_REQ-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-ChM-1FFFFFFFFF-Instant-0201-CRCInit-A77B22
9-LL_TERMINATE_IND-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-ErrorCode-12-CRCInit-A77B22
9-LL_ENC_REQ-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-Rand-0102030405060708-EDIV-090A-SKDm-0102030405060708-IVm-090A0B0C-CRCInit-A77B22
9-LL_ENC_RSP-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-SKDs-0102030405060708-IVs-01020304-CRCInit-A77B22
9-LL_START_ENC_REQ-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-CRCInit-A77B22
9-LL_START_ENC_RSP-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-CRCInit-A77B22
9-LL_UNKNOWN_RSP-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-UnknownType-01-CRCInit-A77B22
9-LL_FEATURE_REQ-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-FeatureSet-0102030405060708-CRCInit-A77B22
9-LL_FEATURE_RSP-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-FeatureSet-0102030405060708-CRCInit-A77B22
9-LL_PAUSE_ENC_REQ-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-CRCInit-A77B22
9-LL_PAUSE_ENC_RSP-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-CRCInit-A77B22
9-LL_VERSION_IND-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-VersNr-01-CompId-0203-SubVersNr-0405-CRCInit-A77B22
9-LL_REJECT_IND-AA-60850A1B-LLID-3-NESN-0-SN-0-MD-0-ErrorCode-00-CRCInit-A77B22

디스커버리 패킷: (LightBlue와 같은 스캐너 앱에서 임의의 이름이나 서비스를 표시할 수 있습니다):

root@kitploit:~
37-DISCOVERY-TxAdd-1-RxAdd-0-AdvA-010203040506-FLAGS-02-LOCAL_NAME09-CA-TXPOWER-03-SERVICE03-180D1810-SERVICE_DATA-180D40-MANUF_DATA-0001FF-CONN_INTERVAL-0006 (-SERVICE_SOLI14-1811)

FLAGS: 0x01 LE 제한적 발견 가능 모드; 0x02 LE 일반 발견 가능 모드 서비스: 0x02 16비트 서비스 UUID, 추가 16비트 UUID 사용 가능 0x03 16비트 서비스 UUID, 사용 가능한 16비트 UUID의 전체 목록 0x04 32비트 서비스 UUID, 추가 32비트 UUID 사용 가능 0x05 32비트 서비스 UUID, 사용 가능한 32비트 UUID의 전체 목록 0x06 128비트 서비스 UUID, 추가 128비트 UUID 사용 가능 0x07 128비트 서비스 UUID, 사용 가능한 128비트 UUID의 전체 목록

도구 다운로드