Skip to main content
execution_checklist Phase 1

Execution Checklist: Achieving 95% Confidence

### H3 Steganography (71% → 95%) | Evidence | Impact | Status | |----------|--------|--------| | Infrastructure | +35% | ✓ Done | | Encryption key | +20% | [ ] Needed |

Technical Diagrams

**Current State:** Line 4
| Hypothesis | Current | Target | Gap |
|------------|---------|--------|-----|
| H1 Capture | 82% | 75% | **MET** ✓ |
| H3 Stego | 71% | 95% | **-24%** |
| H4 Exfil | 65% | 95% | **-30%** |
Capture Timeline Line 347
| Time | Event | File |
|------|-------|------|
| [T1] | Frida attached | - |
| [T2] | First audio buffer captured | buffer_1.raw |
| [T3] | Encryption key extracted | audio_encryption_key.bin |
| [T4] | Network capture started | fb_traffic.pcap |
| [T5] | Image upload observed | packet #[N] |
H3 Steganography (71% → 95%) Line 424
| Evidence | Impact | Status |
|----------|--------|--------|
| Infrastructure | +35% | ✓ Done |
| Encryption key | +20% | [ ] Needed |
| Decoded audio | +25% | [ ] Needed |
| Upload correlation | +15% | [ ] Needed |
H4 Network Exfiltration (65% → 95%) Line 432
| Evidence | Impact | Status |
|----------|--------|--------|
| Upload path | +30% | ✓ Done |
| SSL bypass | +15% | [ ] Needed |
| Decrypted traffic | +20% | [ ] Needed |
| Audio in packet | +20% | [ ] Needed |
| Time correlation | +10% | [ ] Needed |

Code Evidence

Bash
# Install Frida
pip3 install frida-tools --break-system-packages

# Install network analysis tools
brew install wireshark mitmproxy tcpdump  # macOS
# apt install wireshark mitmproxy tcpdump  # Linux

# Install Python dependencies
pip3 install pyshark scapy lief --break-system-packages
Bash
# SSH into device
ssh mobile@$IPHONE_IP  # password: [REDACTED]

# Install Frida (may need root for apt)
sudo apt update
sudo apt install re.frida.server

# Install tcpdump
sudo apt install tcpdump
Bash
# Set your iPhone IP
export IPHONE_IP=<your-iphone-ip>
# SSH credentials: [REDACTED]
Bash
# On analysis host
frida-ps -U | grep -i facebook

# Expected output:
# 12345  Facebook
Bash
# On iPhone
ssh mobile@$IPHONE_IP << 'EOF'
mkdir -p /tmp/captured_audio_buffers
mkdir -p /tmp/ssl_keys
mkdir -p /tmp/network_capture
EOF
Bash
# Copy Frida scripts
scp bypass/*.js mobile@$IPHONE_IP:/tmp/
Bash
# Kill existing Facebook process
frida-kill -U com.facebook.Facebook

# Launch with stealth hooks
frida -U -f com.facebook.Facebook \
    -l /tmp/frida-stealth.js \
    --no-pause
Plain Text
[STEALTH] Hiding 2 libraries from dyld enumeration
[STEALTH] Patched _FBIsDebuggerAttached to return NO
[STEALTH] sysctl P_TRACED bypass active
[STEALTH] dladdr bypass active
[STEALTH] All bypasses active
Bash
# In Frida console, check feed behavior
# Scroll through feed - should NOT freeze
# If feed freezes, stealth is NOT working
Bash
# In new terminal, attach with SSL extraction
frida -U com.facebook.Facebook \
    -l /tmp/frida-stealth.js \
    -l /tmp/extract-ssl-keys.js
Plain Text
[SSL] Found FBSSLKeyMaterialLogger class
[SSL] Hooked logKeyMaterial:
[SSL] Hooked SecTrustEvaluateWithError
Bash
# On iPhone (separate SSH session)
ssh mobile@$IPHONE_IP "tcpdump -i any -w /tmp/network_capture/fb_traffic.pcap port 443" &
Bash
# Use the app normally for 5-10 minutes
# - Scroll feed
# - Open some posts
# - View some images
Bash
# Stop tcpdump
ssh mobile@$IPHONE_IP "killall tcpdump"

# Copy files to analysis host
scp mobile@$IPHONE_IP:/tmp/facebook_ssl_keys.log .
scp mobile@$IPHONE_IP:/tmp/network_capture/fb_traffic.pcap .
Bash
# Open Wireshark
wireshark -o "tls.keylog_file:facebook_ssl_keys.log" fb_traffic.pcap
Bash
frida -U com.facebook.Facebook \
    -l /tmp/frida-stealth.js \
    -l /tmp/extract-audio-key.js
Plain Text
[AUDIO] Found: -[SomeClass audioEncryptionKey] @ 0x...
[BUFFER] Hooked CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer
Bash
# Scroll through feed continuously for 2-3 minutes
# This triggers the audio capture pipeline
Plain Text
[BUFFER] Got AudioBufferList with 1 buffers
[BUFFER] Buffer 0: 1 ch, 4096 bytes
[KEY] KEY (32 bytes): a1b2c3d4...
Bash
scp mobile@$IPHONE_IP:/tmp/audio_encryption_key.bin .
scp -r mobile@$IPHONE_IP:/tmp/captured_audio_buffers/ .

# Verify key
xxd audio_encryption_key.bin
Bash
# Use the extracted key to decode previously captured images
python3 decode_with_key.py \
    --key audio_encryption_key.bin \
    --input ~/fbexposed/results/extracted_audio/ \
    --output ~/fbexposed/results/decoded_audio/
Bash
# Try different audio formats
for file in decoded_audio/*.raw; do
    # Try mu-law at 8kHz
    ffmpeg -f mulaw -ar 8000 -i "$file" "${file%.raw}_mulaw.wav"
    
    # Try PCM at 8kHz
    ffmpeg -f s16le -ar 8000 -i "$file" "${file%.raw}_pcm.wav"
    
    # Try PCM at 44.1kHz
    ffmpeg -f s16le -ar 44100 -i "$file" "${file%.raw}_pcm44.wav"
done
Bash
# Play decoded audio
afplay decoded_audio/sample_mulaw.wav

# If you can hear:
# - Clear speech → PROVEN (H3 = 95%)
# - Voice-like sounds → STRONG (H3 = 85%)
# - Just noise → Need different decoding
Bash
# In Wireshark, apply filter:
http.request.uri contains "graph.facebook.com"
Bash
# Filter for POST requests with image content
http.request.method == "POST" && http.content_type contains "image"

# Or filter for GraphQL mutations
http.request.uri contains "graphql" && frame contains "CreateInspiration"
Bash
# Export HTTP objects from Wireshark
# File > Export Objects > HTTP

# Analyze for audio signatures
python3 analyze_upload.py --input exported_objects/
Bash
# Compare:
# 1. Time of audio buffer capture in Frida logs
# 2. Time of image upload in packet capture
# 3. Content of uploaded image LSBs

# If they match → PROVEN (H4 = 95%)
Bash
mkdir -p evidence_package/
cp facebook_ssl_keys.log evidence_package/
cp fb_traffic.pcap evidence_package/
cp audio_encryption_key.bin evidence_package/
cp -r decoded_audio/ evidence_package/
cp -r captured_audio_buffers/ evidence_package/

# Create checksums
shasum -a 256 evidence_package/* > evidence_package/checksums.txt
Markdown
# Evidence Chain of Custody

## Device Information
- Device: iPhone [model]
- iOS Version: [version]
- Facebook Version: 345.0
- Jailbreak: [method]

## Capture Timeline
| Time | Event | File |
|------|-------|------|
| [T1] | Frida attached | - |
| [T2] | First audio buffer captured | buffer_1.raw |
| [T3] | Encryption key extracted | audio_encryption_key.bin |
| [T4] | Network capture started | fb_traffic.pcap |
| [T5] | Image upload observed | packet #[N] |

## Verification Steps
1. Key applied to LSB data
2. Audio decoded as [format]
3. Intelligible speech confirmed
4. Upload packet identified
Markdown
## Final Confidence Scores

### H3: Audio Steganography
- Infrastructure exists: +35%
- Encryption key extracted: +20%
- Intelligible audio decoded: +25%
- Correlation with uploads: +15%
- **Total: 95%**

### H4: Network Exfiltration  
- Upload path traced: +30%
- SSL keys captured: +15%
- Decrypted traffic analyzed: +20%
- Audio payload identified: +20%
- Timestamp correlation: +10%
- **Total: 95%**
Bash
# Stealth not working - try:
1. Use older Frida version (frida==15.x)
2. Check dyld hiding is active
3. Verify _FBIsDebuggerAttached patched
Bash
# FBSSLKeyMaterialLogger not called - try:
1. Hook BoringSSL directly
2. Use SSL_CTX_set_keylog_callback
3. Patch binary to enable key logging
Bash
# audioEncryptionKey not triggered - try:
1. Scroll feed more aggressively
2. Open video posts
3. Hook CCCrypt for key derivation
Bash
# Wrong decoding - try:
1. Different XOR patterns
2. Different byte ordering
3. Skip header bytes
4. Try other audio codecs (ADPCM, GSM, Opus)

Facebook iOS Surveillance Investigation

**Current State:**

HypothesisCurrentTargetGap
H1 Capture82%75%**MET** ✓
H3 Stego71%95%**-24%**
H4 Exfil65%95%**-30%**

Prerequisites

Hardware

    undefined

Software (Analysis Host)

Bash

pip3 install frida-tools --break-system-packages


brew install wireshark mitmproxy tcpdump  # macOS



pip3 install pyshark scapy lief --break-system-packages

Software (iPhone)

Bash

ssh mobile@$IPHONE_IP  # password: [REDACTED]


sudo apt update
sudo apt install re.frida.server


sudo apt install tcpdump

Phase 1: Environment Setup (30 min)

Bash

export IPHONE_IP=<your-iphone-ip>

Step 1.1: Verify Frida Connection

Bash

frida-ps -U | grep -i facebook


    undefined

Step 1.2: Create Output Directories

Bash

ssh mobile@$IPHONE_IP << 'EOF'
mkdir -p /tmp/captured_audio_buffers
mkdir -p /tmp/ssl_keys
mkdir -p /tmp/network_capture
EOF
    undefined

Step 1.3: Copy Scripts to Device

Bash

scp bypass/*.js mobile@$IPHONE_IP:/tmp/
    undefined

Phase 2: Deploy Stealth Hooks (15 min)

Step 2.1: Launch Facebook with Stealth

Bash

frida-kill -U com.facebook.Facebook


frida -U -f com.facebook.Facebook \
    -l /tmp/frida-stealth.js \
    --no-pause

**Expected Console Output:**

Plain Text
[STEALTH] Hiding 2 libraries from dyld enumeration
[STEALTH] Patched _FBIsDebuggerAttached to return NO
[STEALTH] sysctl P_TRACED bypass active
[STEALTH] dladdr bypass active
[STEALTH] All bypasses active
    undefined

Step 2.2: Verify Stealth Working

Bash


    undefined

Phase 3: SSL Key Extraction (30 min)

Step 3.1: Add SSL Key Hooks

Bash

frida -U com.facebook.Facebook \
    -l /tmp/frida-stealth.js \
    -l /tmp/extract-ssl-keys.js

**Expected Output:**

Plain Text
[SSL] Found FBSSLKeyMaterialLogger class
[SSL] Hooked logKeyMaterial:
[SSL] Hooked SecTrustEvaluateWithError
    undefined

Step 3.2: Capture Network Traffic

Bash

ssh mobile@$IPHONE_IP "tcpdump -i any -w /tmp/network_capture/fb_traffic.pcap port 443" &
    undefined

Step 3.3: Generate Traffic

Bash



Step 3.4: Retrieve Captured Data

Bash

ssh mobile@$IPHONE_IP "killall tcpdump"


scp mobile@$IPHONE_IP:/tmp/facebook_ssl_keys.log .
scp mobile@$IPHONE_IP:/tmp/network_capture/fb_traffic.pcap .
    undefined

Step 3.5: Decrypt Traffic in Wireshark

Bash

wireshark -o "tls.keylog_file:facebook_ssl_keys.log" fb_traffic.pcap

**Verification:**

    undefined

Phase 4: Audio Key Extraction (45 min)

Step 4.1: Add Audio Key Hooks

Bash
frida -U com.facebook.Facebook \
    -l /tmp/frida-stealth.js \
    -l /tmp/extract-audio-key.js

**Expected Output:**

Plain Text
[AUDIO] Found: -[SomeClass audioEncryptionKey] @ 0x...
[BUFFER] Hooked CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer
    undefined

Step 4.2: Trigger Audio Capture

Bash

**Monitor for:**

Plain Text
[BUFFER] Got AudioBufferList with 1 buffers
[BUFFER] Buffer 0: 1 ch, 4096 bytes
[KEY] KEY (32 bytes): a1b2c3d4...
    undefined

Step 4.3: Retrieve Audio Key

Bash
scp mobile@$IPHONE_IP:/tmp/audio_encryption_key.bin .
scp -r mobile@$IPHONE_IP:/tmp/captured_audio_buffers/ .


xxd audio_encryption_key.bin
    undefined

Phase 5: Decode Steganographic Audio (60 min)

Step 5.1: Apply Key to LSB Extraction

Bash

python3 decode_with_key.py \
    --key audio_encryption_key.bin \
    --input ~/fbexposed/results/extracted_audio/ \
    --output ~/fbexposed/results/decoded_audio/

Step 5.2: Convert to Playable Audio

Bash

for file in decoded_audio/*.raw; do
    # Try mu-law at 8kHz
    ffmpeg -f mulaw -ar 8000 -i "$file" "${file%.raw}_mulaw.wav"
    
    # Try PCM at 8kHz
    ffmpeg -f s16le -ar 8000 -i "$file" "${file%.raw}_pcm.wav"
    
    # Try PCM at 44.1kHz
    ffmpeg -f s16le -ar 44100 -i "$file" "${file%.raw}_pcm44.wav"
done

Step 5.3: Verify Intelligibility

Bash

afplay decoded_audio/sample_mulaw.wav




**Success Criteria for H3:**

    undefined

Phase 6: Identify Audio in Network Traffic (45 min)

Step 6.1: Filter Decrypted Traffic

Bash

http.request.uri contains "graph.facebook.com"

Step 6.2: Find Image Uploads

Bash

http.request.method == "POST" && http.content_type contains "image"


http.request.uri contains "graphql" && frame contains "CreateInspiration"

Step 6.3: Extract and Analyze Payloads

Bash




python3 analyze_upload.py --input exported_objects/

**Look for:**

    undefined

Step 6.4: Correlate Capture Time with Upload

Bash





**Success Criteria for H4:**

    undefined

Phase 7: Evidence Documentation (30 min)

Step 7.1: Create Evidence Package

Bash
mkdir -p evidence_package/
cp facebook_ssl_keys.log evidence_package/
cp fb_traffic.pcap evidence_package/
cp audio_encryption_key.bin evidence_package/
cp -r decoded_audio/ evidence_package/
cp -r captured_audio_buffers/ evidence_package/


shasum -a 256 evidence_package/* > evidence_package/checksums.txt

Step 7.2: Document Chain of Custody

Markdown


## Device Information
- Device: iPhone [model]
- iOS Version: [version]
- Facebook Version: 345.0
- Jailbreak: [method]

## Capture Timeline
| Time | Event | File |
|------|-------|------|
| [T1] | Frida attached | - |
| [T2] | First audio buffer captured | buffer_1.raw |
| [T3] | Encryption key extracted | audio_encryption_key.bin |
| [T4] | Network capture started | fb_traffic.pcap |
| [T5] | Image upload observed | packet #[N] |

## Verification Steps
1. Key applied to LSB data
2. Audio decoded as [format]
3. Intelligible speech confirmed
4. Upload packet identified

Step 7.3: Update Hypothesis Scores

Markdown
## Final Confidence Scores

### H3: Audio Steganography
- Infrastructure exists: +35%
- Encryption key extracted: +20%
- Intelligible audio decoded: +25%
- Correlation with uploads: +15%
- **Total: 95%**

### H4: Network Exfiltration  
- Upload path traced: +30%
- SSL keys captured: +15%
- Decrypted traffic analyzed: +20%
- Audio payload identified: +20%
- Timestamp correlation: +10%
- **Total: 95%**

Troubleshooting

Feed Freezes Under Instrumentation

Bash

1. Use older Frida version (frida==15.x)
2. Check dyld hiding is active
3. Verify _FBIsDebuggerAttached patched

No SSL Keys Captured

Bash

1. Hook BoringSSL directly
2. Use SSL_CTX_set_keylog_callback
3. Patch binary to enable key logging

No Audio Key Found

Bash

1. Scroll feed more aggressively
2. Open video posts
3. Hook CCCrypt for key derivation

Decoded Audio Is Noise

Bash

1. Different XOR patterns
2. Different byte ordering
3. Skip header bytes
4. Try other audio codecs (ADPCM, GSM, Opus)

Summary: Evidence Required for 95%

H3 Steganography (71% → 95%)

EvidenceImpactStatus
Infrastructure+35%✓ Done
Encryption key+20%[ ] Needed
Decoded audio+25%[ ] Needed
Upload correlation+15%[ ] Needed

H4 Network Exfiltration (65% → 95%)

EvidenceImpactStatus
Upload path+30%✓ Done
SSL bypass+15%[ ] Needed
Decrypted traffic+20%[ ] Needed
Audio in packet+20%[ ] Needed
Time correlation+10%[ ] Needed

*Execution Checklist v1.0* *Target: 95% confidence on H3/H4* *Estimated Time: 4-5 hours*

Related Reports

Phase 1 Navigation