hacktricks/todo/hardware-hacking/radio.md

208 lines
13 KiB
Markdown

# 라디오
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong>를 통해 **제로부터 영웅까지 AWS 해킹 배우기**</summary>
HackTricks를 지원하는 다른 방법:
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
* **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
</details>
## SigDigger
[**SigDigger**](https://github.com/BatchDrake/SigDigger)는 GNU/Linux 및 macOS용 무료 디지털 신호 분석기로, 알려지지 않은 라디오 신호의 정보를 추출하기 위해 설계되었습니다. SoapySDR을 통해 다양한 SDR 장치를 지원하며 FSK, PSK 및 ASK 신호의 조정 가능한 복조, 아날로그 비디오 디코딩, 버스트 신호 분석 및 아날로그 음성 채널 청취(실시간)를 지원합니다.
### 기본 구성
설치 후 고려할 수 있는 몇 가지 구성 사항이 있습니다.\
설정(두 번째 탭 버튼)에서 **SDR 장치**를 선택하거나 **파일을 선택**하여 읽을 주파수 및 샘플 속도(컴퓨터가 지원하는 경우 최대 2.56Msps까지 권장)를 선택할 수 있습니다.
![](<../../.gitbook/assets/image (245).png>)
GUI 동작에서 컴퓨터가 지원하는 경우 몇 가지를 활성화하는 것이 좋습니다:
![](<../../.gitbook/assets/image (472).png>)
{% hint style="info" %}
컴퓨터가 캡처를 하지 못하는 것을 깨달았다면 OpenGL을 비활성화하고 샘플 속도를 낮추는 것을 시도해보세요.
{% endhint %}
### 사용법
* **신호를 캡처하고 분석**하기 위해 "캡처 시작" 버튼을 누른 채로 유지하면 됩니다.
![](<../../.gitbook/assets/image (960).png>)
* SigDigger의 **튜너**는 **신호를 더 잘 캡처**하는 데 도움이 됩니다(하지만 신호를 악화시킬 수도 있습니다). 이상적으로 0부터 시작하여 **노이즈가 신호의 개선보다 큰** 것을 찾을 때까지 **크게 만들어**야 합니다).
![](<../../.gitbook/assets/image (1099).png>)
### 라디오 채널과 동기화
[**SigDigger**](https://github.com/BatchDrake/SigDigger)를 사용하여 듣고 싶은 채널과 동기화하려면 "베이스밴드 오디오 미리보기" 옵션을 구성하고, 전송되는 모든 정보를 얻기 위해 대역폭을 구성한 다음 노이즈가 실제로 증가하기 시작하는 수준으로 튜너를 설정하세요:
![](<../../.gitbook/assets/image (585).png>)
## 흥미로운 트릭
* 장치가 정보의 버스트를 보내는 경우, 일반적으로 **첫 부분은 프리앰블**이 될 것이므로 거기에서 정보를 찾지 못하거나 오류가 있더라도 **걱정할 필요가 없습니다**.
* 정보 프레임에서는 일반적으로 **서로 잘 정렬된 다른 프레임을 찾아야**합니다:
![](<../../.gitbook/assets/image (1076).png>)
![](<../../.gitbook/assets/image (597).png>)
* **비트를 복구한 후에는 어떤 방식으로든 처리해야**할 수 있습니다. 예를 들어, Manchester 부호화에서 up+down은 1 또는 0이 되고, down+up은 다른 하나가 됩니다. 따라서 1과 0의 쌍(위와 아래)은 실제 1 또는 실제 0이 됩니다.
* 심지어 신호가 Manchester 부호화를 사용하더라도(연속으로 두 개 이상의 0 또는 1을 찾을 수 없음), 프리앰블에서 **여러 개의 1 또는 0을 찾을 수 있습니다**!
### IQ를 사용하여 변조 유형 찾기
신호에 정보를 저장하는 방법에는 **진폭**, **주파수** 또는 **위상**을 변조하는 세 가지 방법이 있습니다.\
신호를 확인하는 경우 정보가 저장되는 방법을 파악하기 위해 시도할 수 있는 다양한 방법이 있지만, 좋은 방법 중 하나는 IQ 그래프를 확인하는 것입니다.
![](<../../.gitbook/assets/image (788).png>)
* **AM 감지**: IQ 그래프에서 예를 들어 **2개의 원**이 나타나면(아마도 하나는 0에 있고 다른 하나는 다른 진폭에 있음), 이것은 AM 신호일 수 있습니다. IQ 그래프에서 0과 원 사이의 거리는 신호의 진폭이므로 다른 진폭이 사용되는 것을 시각적으로 확인하기 쉽습니다.
* **PM 감지**: 이전 이미지와 같이 서로 관련이 없는 작은 원을 찾으면, 이는 위상 변조가 사용된 것일 수 있습니다. IQ 그래프에서 점과 0,0 사이의 각도는 신호의 위상이므로 4가지 다른 위상이 사용된다는 것을 의미합니다.
* 정보가 위상 자체가 아닌 위상이 변경된 사실에 숨겨져 있다면, 서로 다른 위상이 명확하게 구분되지 않을 수 있습니다.
* **FM 감지**: IQ에는 주파수를 식별할 수 있는 필드가 없습니다(중심까지의 거리는 진폭이고 각도는 위상입니다).\
따라서 FM을 식별하려면 이 그래프에서 **기본적으로 원만** 보여야 합니다.\
또한, 다른 주파수는 이 그래프에서 **원 주변의 속도 가속도**로 표시됩니다(SysDigger에서 신호를 선택하면 IQ 그래프가 생성되는데, 만들어진 원에서 가속도나 방향 변경을 찾으면 FM일 수 있습니다):
## AM 예제
{% file src="../../.gitbook/assets/sigdigger_20220308_165547Z_2560000_433500000_float32_iq.raw" %}
### AM 해독
#### 엔벨롭 확인
[**SigDigger**](https://github.com/BatchDrake/SigDigger)를 사용하여 AM 정보를 확인하고 **엔벨롭**만 살펴보면 명확한 진폭 수준을 확인할 수 있습니다. 사용된 신호는 AM에서 정보를 보내는 펄스를 보내고 있으며, 이것이 하나의 펄스가 어떻게 보이는지입니다:
![](<../../.gitbook/assets/image (590).png>)
그리고 이것이 심볼의 일부가 웨이브폼과 함께 어떻게 보이는지입니다:
![](<../../.gitbook/assets/image (734).png>)
#### 히스토그램 확인
정보가 있는 신호 전체를 선택하고 **진폭** 모드를 선택한 다음 **선택**을 클릭하고 **히스토그램**을 클릭할 수 있습니다. 2개의 명확한 수준만 찾을 수 있음을 확인할 수 있습니다.
![](<../../.gitbook/assets/image (264).png>)
예를 들어, 이 AM 신호에서 진폭 대신 주파수를 선택하면 하나의 주파수만 찾을 수 있습니다(주파수로 변조된 정보가 하나의 주파수만 사용하는 방식은 아님).
![](<../../.gitbook/assets/image (732).png>)
많은 주파수를 찾는다면 이것은 FM이 아닐 수 있으며, 아마도 신호 주파수가 채널 때문에 변경된 것입니다.
#### IQ를 사용하여
이 예에서는 **큰 원**과 **많은 점들이 중앙에** 있는 것을 볼 수 있습니다.
![](<../../.gitbook/assets/image (222).png>)
### 심볼 속도 얻기
#### 하나의 심볼로
가장 작은 심볼을 선택하십시오 (따라서 그것이 1임을 확신할 수 있음) 그리고 "Selection freq"를 확인하십시오. 이 경우 1.013kHz (즉, 1kHz)가 될 것입니다.
![](<../../.gitbook/assets/image (78).png>)
#### 여러 심볼로
선택할 심볼 수를 지정할 수도 있으며 SigDigger가 1 심볼의 주파수를 계산할 것입니다 (선택된 심볼이 많을수록 더 좋을 것입니다). 이 시나리오에서는 10개의 심볼을 선택하고 "Selection freq"가 1.004 Khz임을 확인할 수 있습니다:
![](<../../.gitbook/assets/image (1008).png>)
### 비트 얻기
이 신호가 **AM 변조** 신호임을 발견했고 **심볼 속도**를 알았다면 (이 경우 무언가가 위를 의미하고 아래를 의미한다는 것을 알고 있다면), 신호에 인코딩된 **비트를 얻는 것**은 매우 쉽습니다. 따라서 정보가 있는 신호를 선택하고 샘플링 및 의사 결정을 구성하고 샘플을 누르십시오 (선택된 **진폭**이 선택되어 있는지, 발견된 **심볼 속도**가 구성되어 있는지, 그리고 **Gadner 클럭 회복**이 선택되어 있는지 확인하십시오):
![](<../../.gitbook/assets/image (965).png>)
* **선택 간격에 동기화**는 이전에 심볼 속도를 찾기 위해 간격을 선택한 경우 해당 심볼 속도가 사용됩니다.
* **수동**은 지정된 심볼 속도가 사용될 것임을 의미합니다.
* **고정 간격 선택**에서는 선택해야 할 간격 수를 지정하고 그로부터 심볼 속도를 계산합니다.
* **Gadner 클럭 회복**이 일반적으로 가장 좋은 옵션입니다만, 여전히 약간의 근사한 심볼 속도를 지정해야 합니다.
샘플을 누르면 다음이 나타납니다:
![](<../../.gitbook/assets/image (644).png>)
이제 SigDigger가 이해할 수 있도록 **정보를 전달하는 수준의 범위**를 이해시키려면 **낮은 수준**을 클릭하고 가장 큰 수준까지 클릭을 유지하십시오:
![](<../../.gitbook/assets/image (439).png>)
예를 들어 **진폭의 4가지 다른 수준**이 있다면 **심볼 당 비트를 2로 구성**하고 가장 작은 것부터 가장 큰 것까지 선택해야 합니다.
마지막으로 **줌을 늘리고** **행 크기를 변경**하여 비트를 볼 수 있습니다 (모두 선택하고 복사하여 모든 비트를 얻을 수 있습니다):
![](<../../.gitbook/assets/image (276).png>)
만약 심볼 당 1보다 많은 비트가 있는 신호인 경우 (예: 2), SigDigger는 00, 01, 10, 11 중 어떤 심볼인지 알 방법이 **없으므로** 각각을 나타내기 위해 **다른 회색조**를 사용할 것입니다 (그리고 비트를 복사하면 **0부터 3까지의 숫자**를 사용할 것이므로 이를 처리해야 합니다).
또한 **Manchester**와 같은 **코딩**을 사용하면 **위+아래**가 **1 또는 0**이 될 수 있고, 아래+위가 1 또는 0이 될 수 있습니다. 이러한 경우에는 얻은 위 (1)와 아래 (0)를 처리하여 01 또는 10의 쌍을 0 또는 1로 대체해야 합니다.
## FM 예제
{% file src="../../.gitbook/assets/sigdigger_20220308_170858Z_2560000_433500000_float32_iq.raw" %}
### FM 해독
#### 주파수 및 파형 확인
FM으로 변조된 정보를 전송하는 신호 예제:
![](<../../.gitbook/assets/image (725).png>)
이전 이미지에서 **2개의 주파수가 사용**되는 것을 잘 볼 수 있지만 **파형을 관찰**하면 **2개의 다른 주파수를 정확히 식별할 수 없을 수도** 있습니다:
![](<../../.gitbook/assets/image (717).png>)
이는 저는 신호를 두 주파수에서 캡처했기 때문에 한 주파수가 다른 주파수에 대략적으로 음수로 나타납니다:
![](<../../.gitbook/assets/image (942).png>)
동기화된 주파수가 **한 주파수에 다른 주파수보다 가까울 경우** 2개의 다른 주파수를 쉽게 볼 수 있습니다:
![](<../../.gitbook/assets/image (422).png>)
![](<../../.gitbook/assets/image (488).png>)
#### 히스토그램 확인
정보가 포함된 신호의 주파수 히스토그램을 확인하면 쉽게 2개의 다른 신호를 볼 수 있습니다:
![](<../../.gitbook/assets/image (871).png>)
이 경우 **진폭 히스토그램**을 확인하면 **하나의 진폭**만 찾을 수 있으므로 **AM이 아닐 수 있습니다** (다양한 진폭을 찾을 경우 신호가 채널을 통해 전력을 잃어버린 것일 수 있습니다):
![](<../../.gitbook/assets/image (817).png>)
그리고 이것이 위상 히스토그램일 것입니다 (신호가 위상으로 변조되지 않았음을 명확히 보여줍니다):
![](<../../.gitbook/assets/image (996).png>)
#### IQ로
IQ는 주파수를 식별할 수 있는 필드가 없습니다 (중심까지의 거리는 진폭이고 각도는 위상입니다).\
따라서 FM을 식별하려면 이 그래프에서 **기본적으로 원만 보여야** 합니다.\
또한 IQ 그래프에서 **다른 주파수는 원을 가로지르는 속도 가속**으로 "표현"됩니다 (따라서 SysDigger에서 신호를 선택하면 IQ 그래프가 생성되며, 만들어진 원에서 가속이나 방향 변경을 찾으면 이것이 FM일 수 있다는 것을 의미할 수 있습니다):
![](<../../.gitbook/assets/image (81).png>)
### 심볼 속도 얻기
주파수를 운반하는 심볼을 찾은 후 심볼 속도를 얻기 위해 AM 예제에서 사용한 **동일한 기술을 사용**할 수 있습니다.
### 비트 얻기
주파수로 변조된 신호를 찾은 후 **심볼 속도**를 알았다면 AM 예제에서 사용한 **동일한 기술을 사용**하여 비트를 얻을 수 있습니다.