# 삼성 WB850F 펌웨어 리버스 엔지니어링

> Clean Markdown view of GeekNews topic #15006. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=15006](https://news.hada.io/topic?id=15006)
- GeekNews Markdown: [https://news.hada.io/topic/15006.md](https://news.hada.io/topic/15006.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-05-26T09:57:06+09:00
- Updated: 2024-05-26T09:57:06+09:00
- Original source: [op-co.de](https://op-co.de/blog/posts/samsung_wb850f_firmware/)
- Points: 2
- Comments: 1

## Topic Body

### 삼성 WB850F 펌웨어 리버스 엔지니어링

#### WB850F_FW_210086.zip - 외부 컨테이너

- WB850F는 삼성에서 iLauncher 애플리케이션을 중단한 후에도 펌웨어와 지원 파일을 계속 제공하는 몇 안 되는 모델 중 하나임.
- WB850F_FW_210086.zip 아카이브에는 여러 파일이 포함되어 있음:
  - `GPS_FW/BASEBAND_FW_Flash.mbin`: 데이터
  - `GPS_FW/BASEBAND_FW_Ram.mbin`: 데이터
  - `GPS_FW/Config.BIN`: 데이터
  - `GPS_FW/flashBurner.mbin`: 데이터
  - `FWUP`: ASCII 텍스트, CRLF 라인 종결자 포함
  - `partialImage.o.map`: ASCII 텍스트
  - `WB850-FW-SR-210086.bin`: 데이터
  - `wb850f_adj.txt`: ASCII 텍스트, CRLF 라인 종결자 포함
- `FWUP` 파일은 펌웨어 테스트/자동화 모듈을 위한 스크립트인 "upgrade all" 문자열을 포함하고 있음.
- `wb850f_adj.txt` 파일은 GPS 펌웨어를 업그레이드하고 해당 파일을 삭제하는 복잡한 스크립트임.

#### partialImage.o.map - 링커 덤프

- `partialImage.o.map`은 30만 줄 이상의 텍스트 파일로, `partialImage.o`의 링커 출력과 전체 메모리 맵을 포함하고 있음:
  - 예시:
    - `output input virtual section section address size file`
    - `.text 00000000 01301444 .text 00000000 000001a4 sysALib.o`
    - `DevHTTPResponseStart 00321a84 000002a4`
    - `DevHTTPResponseData 00321d28 00000100`
    - `DevHTTPResponseEnd 00321e28 00000170`
- 이 파일은 펌웨어 분석에 매우 유용한 정보들을 제공함.

#### WB850-FW-SR-210086.bin - 헤더 분석

- `WB850-FW-SR-210086.bin` 파일을 binwalk로 분석한 결과, 파일 헤더(HTML, PNG, JPEG 등), VxWorks 헤더, 여러 Unix 경로 등이 발견되었으나 파티션이나 파일 시스템은 발견되지 않음.
- 첫 번째 1KB를 헥스 덤프한 결과:
  - `00000000: 3231 3030 3836 0006 4657 5f55 502f 4f4e 210086..FW_UP/ON`
  - `00000010: 424c 312e 6269 6e00 0000 0000 0000 0000 BL1.bin.........`
  - `00000020: 0000 0000 0000 0000 c400 0000 0008 0000 ................`
  - `00000030: 4f4e 424c 3100 0000 0000 0000 0000 0000 ONBL1...........`
  - `00000040: 0000 0000 4657 5f55 502f 4f4e 424c 322e ....FW_UP/ONBL2.`
  - `00000050: 6269 6e00 0000 0000 0000 0000 0000 0000 bin.............`
- 이를 통해 파일 이름과 파티션 이름을 포함한 파티션 테이블을 재구성할 수 있음:
  - `File name size offset partition name`
  - `FW_UP/ONBL1.bin 196 (0xc4) 0x0000800 ONBL1`
  - `FW_UP/ONBL2.bin 46 KB (0xb630) 0x00008c4 ONBL2`
  - `[WB850]DSC_5KEY_WB850 30 MB (0x1d1f438) 0x000bef4 Main_Image`
  - `RomFS/SPID.Rom 48 MB (0x2f4ac00) 0x1d2b32c Resource`
  - `FW_UP/WB850.HEX 19 KB (0x4d86) 0x4c75f2c OIS`
  - `FW_UP/skin.bin 36 MB (0x22fd048) 0x4c7acb2 SKIN`

#### WB850-FW-SR-210086.bin - 코드 및 데이터 파티션

- 파티션 추출 도구를 사용하여 파티션을 추출한 결과:
  - `ONBL1.bin`: 데이터
  - `ONBL2.bin`: 데이터
  - `Main_Image.bin`: OpenPGP 비밀 키 (오탐)
  - `Resource.bin`: MIPSEB-LE MIPS-III ECOFF 실행 파일
  - `OIS.bin`: 데이터
  - `SKIN.bin`: 데이터
- `ONBL1`과 `ONBL2`는 부트로더의 1단계와 2단계로 추정됨.
- `Main_Image`는 실제 펌웨어로, ARM 함수 프롤로그가 다수 포함됨.
- `Resource`와 `SKIN`은 SoC 제조업체가 제공한 UI 스킨일 가능성이 있음.
- `OIS`는 광학 이미지 안정화 장치의 펌웨어일 가능성이 있음.

#### Ghidra에 코드 로드하기

- `ONBL1`, `ONBL2`, `Main_Image` 파티션은 실제 ARM 코드가 포함되어 있음.
- `Main_Image`를 올바른 메모리 주소에 매핑하기 위해 Ghidra에서 분석을 시작함.
- `partialImage.o.map`에서 함수 이름을 로드하여 Ghidra에 매핑함.

#### DevHTTPResponseStart 리버스 엔지니어링

- `DevHTTPResponseStart` 함수는 핫스팟 감지를 수행함.
- 요약:
  - HTTP 200 OK 응답 시, 서버는 "yahoo.something" 또는 "kr.yahoo.something" 도메인에 쿠키를 설정해야 함.
  - HTTP 301/302/307 리다이렉트 시, URL에 "yahoo." 문자열이 포함되어야 함.
- 핫스팟 감지를 우회하기 위해, DNS 레코드를 다른 서버로 포인팅하거나 HTTP 리다이렉트를 사용하여 쿠키를 설정해야 함.

#### 요약: 진정한 보물

- 이 분석을 통해 삼성 WB850F WiFi 카메라의 핫스팟 감지를 이해하고 우회할 수 있었음.
- 결과적으로 작은 패치를 통해 카메라가 실제로 연결되고 사진을 업로드할 수 있게 되었음.
- `Main_Image`에는 77,000개 이상의 함수가 포함되어 있어, 디지털 카메라의 작동 방식을 더 잘 이해하기 위해 탐험할 가치가 있음.

### GN⁺의 의견

1. **기술적 도전과 학습 기회**: 이 기사는 펌웨어 리버스 엔지니어링의 실제 사례를 제공하여 기술적 도전과 학습 기회를 제공함. 초급 소프트웨어 엔지니어에게 매우 유익함.
2. **보안 및 프라이버시 고려**: 핫스팟 감지 우회는 보안 및 프라이버시 측면에서 중요한 고려 사항임. 이러한 기술을 사용할 때는 윤리적 측면을 항상 고려해야 함.
3. **Ghidra 사용법**: Ghidra와 같은 도구를 사용하여 복잡한 펌웨어를 분석하는 방법을 배울 수 있음. 이는 리버스 엔지니어링 및 보안 분석에 매우 유용함.
4. **펌웨어 업데이트의 중요성**: 펌웨어 업데이트는 장치의 기능과 보안을 유지하는 데 중요함. 이 기사는 펌웨어 업데이트의 복잡성을 잘 보여줌.
5. **다른 카메라 모델 적용 가능성**: 이 기법은 다른 삼성 카메라 모델에도 적용 가능하며, 이는 다양한 장치에서 유사한 문제를 해결하는 데 도움이 될 수 있음.

## Comments



### Comment 25600

- Author: neo
- Created: 2024-05-26T09:57:06+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=40467232) 
##### 해커뉴스 댓글 모음

* **I liked [this link](https://op-co.de/blog/posts/samsung_nx_cryptofail/#index3h3) more. Absolute astonishing firmware "crypto" fail**
  - 삼성 NX 카메라의 펌웨어 암호화 실패 사례를 다룬 링크를 좋아함. 

* **Amazing work! Have you thought about doing a tutorial on how to do reverse engineering?**
  - 놀라운 작업임. 리버스 엔지니어링 튜토리얼을 만들어볼 생각이 있는지 궁금함.

* **All I want is a dSLR that, when I take a picture on the camera with its button, moments later, the image is in Apple Photos.**
  - 사진을 찍으면 바로 Apple Photos에 이미지가 저장되는 DSLR 카메라를 원함.

* **[dead]**
  - 댓글이 삭제되었음.
