Category Archives: AVR / Embedded

KT_WLAN WiFi default password

부제 : 공개되고 고정된 정보로부터 유도되는 패스워드

최근 수많은 Wireless Router 들이 기본적으로 WPA2 패스워드가 설정되어 출시되고 있다.
하지만 사용된 패스워드를 보면 고정적인 패스워드(1234567890 라던가…)를 사용한다.
몇몇 제품은 제품마다 다른패스워드를 부여하고 이를 본체나 매뉴얼에 표시해두는 방법을 사용하는데 살짝만 봐도 패턴이 보이는 아쉬움이 존재한다.
하나의 타겟(KM04-112H)을 잡아 기본 패스워드 유도과정을 살펴보았다.

이글(지워졌다ㅠ)에서 이미 대략적인 부분을 분석? 유추? 가 되어있다.
디바이스의 MAC 주소를 기반으로 SSID와 passphrase를 생성하는것을 알 수있다.
타겟모델인 머큐리 KM04-112H 부분을 보면 MAC이 00:27:1C:2D:85:7F인 경우 뒤의 3개 옥텟만 사용되는것을 확인할 수 있다.
좀더 확실히 하기위해서 타겟의 펌웨어를 확인해보면 cfghandler에서 기본 SSID 와 passphrase를 생성한다.


SSID는 “KT_WLAN_%1X%1X%1X%1X” 또는 “KT_WLAN_%1X%1X%1X%1X_5GHz” 포맷과$t4[0x10],$t4[0x11]$t4[0x12]를 이용하여 4자리의 ASCII를 만들어 넣는다. (t4는 1번째 인자값이다.)
t4레지스터를 구성하는 부분은 생략하고 마지막 MAC의 3옥텟이 들어있다고 가정하면
$t4[0x10] = 2D
$t4[0x11] = 85
$t4[0x12] = 7F 가 된다. 따라서 포맷의 결과는 “KT_WLAN_2D57_5GHz” 이 된다.

바로 아랫부분에 패스워드 생성하는 부분이 존재한다.
패스워드 생성부분도 SSID생성부분과 비슷하다.
“000000%02x%02x”의 포맷을 가지고 $v1[0x11], $v1[0x12]와 값을 생성한다.( v1은 1번째 인자값이다.)
$v1[0x11] = 85
$v1[0x11] = 7F 라고 보면 “000000857f” 가 패스워드가 되는것이다.
패스워드를 유추하기위한 MAC 주소는 공유기 뒷부분의 라벨에 친절하게 패스워드와 함께 쓰여있다. 따라서 물리적으로 접근이 안되면 안전하다.

passphrase의 바뀌는 부분이 2바이트이고, SSID를 통해서 1바이트를 알아낼 수 있으니 255번이내에 성공하므로 패스워드로써의 가치는 없다.
또한 타겟의 MAC 주소를 얻을 수 있는방법은 너무나도 많다.
(확인가능한 MAC은 무선랜인터페이스에 대한 MAC이다, SSID, passphrase 생성시에는 WAN 인터페이스의 MAC이 사용된다)

제조사가 달라도 패턴이 일치하는것을 봤을때 KT가 잘못했네.
나중에 심심하면 다른것은 어떻게 만드는지 확인해 보는것도 재밌을것같다.

ESP-12 NodeMcu ESP8266

저렴한(2~3$)가격에 구매할 수 있는 2.4G wifi 모듈
저렴한 가격, UART만으로 프로그래밍이 가능한 덕에 커뮤니티 활성도도 매우 높은편
GPIO도 적당히 많고, 지원하는 외부장치도 많아서 센싱네트웍 게이트웨이로 적합하다.

NodeMCU 롬은 lua 스크립트를 지원한다.
esp8266 arduino는 arduino를 이용하여 프로그래밍, 플래싱을 지원한다.
그외 수많은 서드파티들이 존재

리셋할때 아래와 같이 핀설정을 해주면 부트모드를 바꿀 수 있다.

                                  | GPIO 0 | GPIO 2 | GPIO 15
----------------------------------|--------|--------|---------
Flash Startup (Normal)            |   1    |   1    |   0
UART Download Mode (Programming)  |   0    |   1    |   0
SD-Card Boot                      |   0    |   0    |   1

https://espressif.com/sites/default/files/documentation/0a-esp8266ex_datasheet_en.pdf
http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family#esp-12

ESP-12 bootloader modes and GPIO state at startup

 

DHT11 / DHT22

온습도 센서로 DHT11을 구매하여 사용중이었으나 제품별 편차, 성능상의 오차가 데이터시트 이상 뿐만 아니라 상상을 초월하여 조금더 정밀한 DHT22를 구매하였다.

여기 에서 좀더 자세한 설명을 하고있다.
차이점은 위 그림과 같은데 실온사용 목적이면 오차가 줄어드는거 외에는 신경쓸 부분이 없다.
실제 느낀 DHT11의 온도 오차는 최대 5℃ 정도이며 값을 읽어올때마다 1~2℃단위로 편차가 발생하였다. 습도 오차는 15%에 달하며 그냥 의미없는 값처럼 느껴졌다. (실내 습도가 40%인데 25%를 기록한다던지..)
DHT22는 샘플링레이트는 반토막이 났지만 제품 편차도 적고 온도오차 1℃ 내외, 습도 5% 내외로 그나마 신뢰할만한 데이터를 가져올 수 있었다.
다만 가격차이는 DHT11이 1천원내외 DHT22가 3천원내외로 3배 차이 …(국내 판매가격은 저기서 2배를하면..)

물론 더 좋고 더 정밀하고 더 비싼 센서들도 많겠지만 값을 읽어오는 연습용이면 DHT11, 그 값에 의미를 두기 위한 용도면 DHT22이상의 센서를 사용하는것이 좋을것 같다.

PL-2303 Code 10 error

알리에서 싸다고 UART2USB 이런거 사면 PL2303칩 들어간걸 받게된다
문제는 리눅스는 별이상 없이 인식하는데 윈도우에서는 CODE 10 에러를 띄운다
제조사에서는 저렴한 FAKE 칩 쓰면 그렇다고 한다

리눅스에서 인식되는 정보 “067b:2303 Prolific Technology, Inc. PL2303 Serial Port”

뭐 이미 샀으니까 버리긴 아깝고 드라이버를 Fake detect 하기 이전의 버전으로 내리면 문제는 해결된다.
http://www.totalcardiagnostics.com/support/Knowledgebase/Article/View/92/20/prolific-usb-to-serial-fix-official-solution-to-code-10-error
여기서 받은 64bit 32bit를 설치하면 된다

다음에 살때는 PL2303은 피해서 사야겠다..