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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
firmware-workshop — 이 워크숍 세션에서는 EV 충전기에서 펌웨어를 추출하고, 펌웨어를 깊이 파고든 다음, 최종적으로 이를 에뮬레이션하여 실시간으로 서비스와 상호작용할 수 있게 됩니다. | Kitploit
도구/GitHubGitHub/onekey-sec/firmware-workshop
Embedded Systems SecurityDynamic Analysis (Sandboxing)IoT SecurityReverse EngineeringBinary AnalysisLearning & EducationFirmware AnalysisLabs & Practice
GitHubonekey-sec/firmware-workshop

firmware-workshop

이 워크숍 세션에서는 EV 충전기에서 펌웨어를 추출하고, 펌웨어를 깊이 파고든 다음, 최종적으로 이를 에뮬레이션하여 실시간으로 서비스와 상호작용할 수 있게 됩니다.

저장소 보기
5913223개월 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

펌웨어 추출, 탐색 및 에뮬레이션 실습

유연한 펌웨어 추출기인 Unblob의 실습 데모에 참여하세요. 이 워크숍 세션에서는 EV 충전기에서 펌웨어를 추출하고, 펌웨어를 자세히 살펴본 후, 최종적으로 에뮬레이션하여 실시간으로 서비스와 상호작용할 수 있게 됩니다. Unblob은 하드웨어 및 다운로드 가능한 펌웨어 버전 모두에서 작동하므로 풍부한 대상 환경을 제공합니다. 사전 경험은 필요하지 않으며, 이 세션은 모든 수준의 기술에 적합합니다. 여러분을 그 자리에서 만나 뵙기를 기대합니다.

우리의 대상

우리의 대상은 Phoenix Contact의 전기차 충전소 컨트롤러입니다. 자세한 내용은 여기에서 확인할 수 있습니다.

CHARX control modular, AC 충전 컨트롤러, 임베디드 Linux 시스템 탑재, IEC 61851-1, 운영 모드: Stand-Alone, Client, Server,

인터페이스:

  • 이더넷 (2x)
  • 셀룰러 통신 (4G/2G)
  • CHARX control modular 시스템 버스
  • MICRO-USB type C

통신 프로토콜:

  • OCPP 1.6J
  • Modbus/TCP
  • MQTT

연결 가능한 주변 기기:

  • 에너지 미터
  • RFID
  • DC 잔류 전류 감지
  • DIN 레일 장착

사전 요구사항

이 워크숍에 필요한 몇 가지 도구가 있습니다. 다음과 같이 install-prerequisites 스크립트를 실행하여 설치할 수 있습니다:```sh ./install-prerequisites

## 펌웨어 얻기

펌웨어는 공급업체 웹사이트에서 얻을 수 있습니다. 이 저장소에는 `download-firmware`라는 스크립트가 있어서 브라우저를 열지 않고도 펌웨어를 내려받을 수 있습니다.

오늘 우리의 초점은 공급업체가 제공한 펌웨어에 맞춰져 있는데, 여기에는 필요한 모든 것이 포함되어 있기 때문입니다. 그러나 유사한 워크플로우는 실제 장치에서 추출한 메모리 덤프에도 적용할 수 있습니다. 흥미로운 점은 실제 장치가 없어도 추출하고, 탐색하고, 에뮬레이션할 수 있다는 것입니다.

## Unblob으로 추출하기

모든 의존성이 준비되어 있는지 확인하는 것부터 시작하겠습니다:```
unblob --show-external-dependencies
The following executables found installed, which are needed by unblob:
    7z                          ✓
    debugfs                     ✓
    jefferson                   ✓
    lz4                         ✓
    lziprecover                 ✓
    lzop                        ✓
    sasquatch                   ✓
    sasquatch-v4be              ✓
    simg2img                    ✓
    ubireader_extract_files     ✓
    ubireader_extract_images    ✓
    unar                        ✓
    zstd                        ✓

이제 unblob으로 펌웨어를 추출할 수 있습니다:``` unblob CHARXSEC3XXXSoftwareBundleV190.raucb

성능이 괜찮은 노트북에서 추출에는 약 3분이 걸립니다. 진행률 표시줄이 올라가는 것을 볼 수 있습니다:

![unblob_progress](https://assets.kitploit.com/production/public/readmes/48963/9bdd3fefdf4e600ee070a461172a3ef07e482cde75b8e8a5d881021c7fa341e6.png)


추출이 완료되면,
`CHARXSEC3XXXSoftwareBundleV190.raucb_extract`라는 디렉터리가 표시됩니다. 해당 디렉터리로 이동하여
내용을 나열할 수 있습니다.

### 청크, 알 수 없는 청크

Unblob은 파일 내의 데이터 청크를 식별하여 작동합니다. 청크가
압축 스트림이면 압축이 해제됩니다. 파일 시스템이나 아카이브이면
추출됩니다. 추출 또는 압축 해제가 성공하면, 디스크로 추출된 청크는
공간을 확보하기 위해 삭제됩니다.

여기서는 SquashFS 버전 4 리틀엔디언 청크가 디스크로 분리된 후, 추출되고,
삭제되었습니다. 파일(그리고 추출 디렉터리)은
`{start_offset}-{end_offset}.{type}` 명명 규칙으로 이름이 지정됩니다.

squashfs 파일 시스템 뒤에 11KB의 "unknown" 청크가 나타나는 것을 볼 수 있습니다.```
./0-132173824.squashfs_v4_le_extract
./132173824-132184833.unknown

binwalk를 실행하면 그 안에 무엇이 포함되어 있는지 확인할 수 있습니다:``` binwalk 132173824-132184833.unknown

DECIMAL HEXADECIMAL DESCRIPTION

0 0x0 Object signature in DER format (PKCS header length: 4, sequence length: 10997 58 0x3A Certificate in DER format (x509 v3), header length: 4, sequence length: 4372 4434 0x1152 Certificate in DER format (x509 v3), header length: 4, sequence length: 4387

openssl로 인증서를 확인할 수 있습니다:```
dd if=132173824-132184833.unknown bs=1 skip=58 | openssl x509 -in /dev/stdin -inform der -noout -text
dd if=132173824-132184833.unknown bs=1 skip=4434 | openssl x509 -in /dev/stdin -inform der -noout -text

이는 펌웨어가 공급업체의 개인 키로 서명되었을 가능성이 높으며, 기기는 펌웨어의 진위 여부를 확인할 수 있습니다.

이것이 unblob의 장점 중 하나입니다. 알 수 없는 미지(unknown unknowns)를 조사할 수 있는 알려진 미지(known unknowns)로 바꿔줍니다.

파일시스템

squashfs 파일시스템의 내용을 살펴보겠습니다:``` ls -al 0-132173824.squashfs_v4_le_extract total 460532 drwxrwxr-x 4 kali kali 4096 dec 5 09:51 . drwxrwxr-x 3 kali kali 4096 dec 5 09:51 .. -rw-rw-r-- 1 kali kali 20971520 sep 8 09:59 bootimg.vfat drwxrwxr-x 3 kali kali 4096 dec 5 09:51 bootimg.vfat_extract -rwxrwxr-x 1 kali kali 2654 sep 19 2022 hook -rw-rw-r-- 1 kali kali 442 sep 8 09:59 manifest.raucm -rw-rw-r-- 1 kali kali 450584576 sep 8 09:59 root.ext4 drwxrwxr-x 22 kali kali 4096 sep 8 09:57 root.ext4_extract

우리는 평문 매니페스트, 셸 스크립트, 하나의 MBR 및 EXT4 파일시스템을 볼 수 있습니다:```
find -maxdepth 1 -type f -exec file {} \;
./manifest.raucm: ASCII text
./hook: a /usr/bin/env sh script, ASCII text executable
./bootimg.vfat: DOS/MBR boot sector, code offset 0x3c+2, OEM-ID "mkfs.fat", sectors/cluster 4, reserved sectors 4, root entries 512, sectors 40960 (volumes <=32 MB), Media descriptor 0xf8, sectors/FAT 40, sectors/track 63, heads 255, hidden sectors 163158016, reserved 0x1, serial number 0xd09aad9c, label: "KERNEL     ", FAT (16 bit)
./root.ext4: Linux rev 1.0 ext4 filesystem data, UUID=8ed19606-02c4-42e7-9cfb-1a2839f93ec4 (extents) (large files) (huge files)

bootimg.vfat 및 root.ext4는 모두 unblob에 의해 처리되어 추출되었습니다. VFAT 파티션은 부팅 및 OS와 관련된 모든 것(Linux 커널, DTB, TEE)을 포함합니다:``` oftree: Device Tree Blob version 17, size=27469, boot CPU=0, string block size=1657, DT structure block size=25756 tee.bin: data zImage: Linux kernel ARM boot executable zImage (little-endian) zImage-imx6ul-ksp0632.dtb: Device Tree Blob version 17, size=27469, boot CPU=0, string block size=1657, DT structure block size=25756

unblob이 조금 욕심이 많아서 Linux 커널(`zImage`)에서 ELF 파일과 CPIO
아카이브를 추출하는 것을 볼 수 있습니다. 이것들은 최소한의 커널과
램디스크에 해당합니다.

EXT4 파일시스템에는 부팅 시 Linux 커널이 마운트하는 루트
파일시스템이 포함되어 있습니다:```
ls -alh root.ext4_extract 
total 88K
drwxrwxr-x 22 kali kali 4,0K sep  8 09:57 .
drwxrwxr-x  4 kali kali 4,0K dec  5 09:51 ..
drwxrwxr-x  2 kali kali 4,0K dec  5 09:51 bin
drwxrwxr-x  3 kali kali 4,0K dec  5 09:51 boot
drwxrwxr-x 16 kali kali 4,0K sep  8 09:56 data
drwxrwxr-x  2 kali kali 4,0K jul 18 00:09 dev
drwxrwxr-x 53 kali kali 4,0K dec  5 09:51 etc
drwxrwxr-x 18 kali kali 4,0K sep  8 09:56 home
drwxrwxr-x  2 kali kali 4,0K jul 18 03:13 identity
drwxrwxr-x  9 kali kali 4,0K dec  5 09:51 lib
drwxrwxr-x  2 kali kali 4,0K jul 18 03:14 log
drwxrwxr-x  2 kali kali 4,0K sep  8 09:57 lost+found
drwxrwxr-x  2 kali kali 4,0K jul 18 00:09 media
drwxrwxr-x  2 kali kali 4,0K jul 18 00:09 mnt
drwxrwxr-x  2 kali kali 4,0K jul 18 00:09 proc
drwxrwxr-x  2 kali kali 4,0K sep  8 09:57 run
drwxrwxr-x  2 kali kali 4,0K dec  5 09:51 sbin
drwxrwxr-x  2 kali kali 4,0K jul 18 03:14 sdcard
drwxrwxr-x  2 kali kali 4,0K jul 18 00:09 sys
drwxrwxrwx  2 kali kali 4,0K jul 18 00:09 tmp
drwxrwxr-x 11 kali kali 4,0K sep  8 09:56 usr
drwxrwxr-x 11 kali kali 4,0K dec  5 09:51 var

탐색

펌웨어 시각화

unblob의 다른 옵션 세트를 사용하여 약간의 탐색을 해보겠습니다:``` unblob -e /tmp/out -f -k -d 3 --report /tmp/report.json
--log /tmp/unblob.log CHARXSEC3XXXSoftwareBundleV190.raucb

여기서는 추출(`-e`)을 계속 `/tmp/out`으로 하지만, 덮어쓰기를 강제(`-f`)하면서 잘라낸(carved out) 청크를 유지(`-k`)하고 재귀 깊이(`-d`)를 3으로 제한합니다. 상세 보고서(`--report`)를 `/tmp/report.json`에 쓰고 로그 파일(`--log`)을 `/tmp/unblob.log`에 기록합니다.

로그 파일을 살펴보면 unblob의 내부 동작을 볼 수 있습니다.

보고서 파일에는 분석된 파일(크기, 파일 형식, 경로, magic, MIME 타입, MD5/SHA1/SHA256 해시), 청크(크기, 오프셋, 엔트로피 분포) 및 작업(추출, 압축 해제, 조각 추출)에 대한 자세한 정보가 포함되어 있습니다. 약간의 Python만 있으면 이 보고서 파일들로 멋진 시각화 자료를 생성할 수 있습니다.

이 저장소에 포함된 `diagram.py` 파이썬 스크립트로 직접 만들 수 있습니다:```
python3 diagram.py /tmp/report.json sunburst
python3 diagram.py /tmp/report.json treemap

이 명령들은 브라우저에서 아래와 같은 plotly 기반 시각화가 포함된 페이지를 엽니다.

선버스트

트리맵

정보 수집

이제 내부에 무엇이 있는지 더 잘 파악했으니, 장치를 제대로 에뮬레이션하기 위해 필요한 것들을 나열할 차례입니다.

이상적으로는 다음 정보를 수집해야 합니다.

도구 다운로드