무선 온습도계

STM8S003F3 / NRF24L01 / AM2303 / ESP8266를  이용하여 무선 온습도계를 만들었다.

전원 정보
STM8S003F3  –  2.95 V to 5.5 V operating voltage / Running 5mA, halt 70µA
NRF24L01 – 1.9 to 3.6V  / Transmit 11.3mA (max), Receive 12.3mA(max), power down 900nA
AM2303 – 3.3V to 5.5V / Dormancy 15µA, Measuring 500µA
ESP8266 – 접속프로토콜에 따라 상이, 아래의 테이블 참조

ESP8266모듈은 값을 송신받아 WiFi망을 통해 웹서버로 올리는 게이트웨이 역할을 한다.

아래는 완성품

송신기 ( STM8S003F3, NRF24L01, AM2303)
송신기는 두개를 만들어서 각각 실내, 실외를 측정할 수 있게 하였다. 5분마다 1회 측정하여 전송하며 이외의 시간은 HALT 명령어 수행.
5vto3.3v 구간을 없애기 위해 레귤레이터 제거하고 다이오드 연결, 배터리 완충시 NRF24에 걸리는 전압이 데이터시트의 MAX보다 0.3v정도 높은데 다행히 정상작동.
600mAh 배터리 사용했는데 배터리 소모가 자연방전되는 수준(2달간 0.2v 하락)
처음에 DHT11을 사용했는데 이건 오차, 편차가 심해도 너무심한수준… 그냥AM2303오는동안 연습용으로 사용함…
로직아날라이저로 값읽어오는거 만드느라 고생좀 했음….

수신기, 게이트웨이 (ESP-12e, NRF24L01, 전원보드)
송신기로부터 데이터를 수신하여 WiFi를 통해 웹서버로 전달.
얘는 전력소모가 상당한수준, 900mAh 배터리 사용하였으나 반나절 조금 더 버팀. WiFi 연결유지에 많은 전력이 소모되는듯..

디스플레이
mysql과 php로 highcharts.js 사용하여 출력

결론
뭔가 잘못했는지 몰라도 송수신거리가 5M도 안됨…(원래그런건가.. 벽하나 못뚫음, LNA는 비활성 )
STM8말고 아두이노 쓰자…. 저전력이긴한데 코드작성하기 너무힘들다.
좀 오래 두고두고 쓸려고 심혈을 기울여 작업했는데 게이트웨이쪽 배터리가 너무 빨리닳아서 ㅈㅈ…

비밀번호를 생년월일로 사용한 보안메일

몇일전 나의 메일주소로 X통신사의 이메일 청구서가 날라왔다.
내용은 보안메일이라고 사용자의 생년월일을 입력하라고 요구하였다.
수신한 메일은 나의 청구서가 아니며 비밀번호에 해당하는 생년월일도 모르는 상황이다.
잠깐 생각해보니 사람이 100년 산다고 생각하고 1년은 365일이라는걸 가정했을때 간단하게 36500의 경우의 수를 얻을 수 있었다.
또한 미성년의 경우는 제외하고 가장 가까운 날짜부터 차례로 계산한다고 하면 3만이 되지않는 경우의 수가 나온다.
직접 손으로 입력하기에는 많은데 JavaScript를 이용하여 패스워드에 해당하는 문자열을 생성하고 이를 Decrypt에 직접 대입하며 성공할때까지 수행하도록 만들 수 있다.

function toYMD(date) {
    var d = date.getDate();
    var m = date.getMonth() + 1;
    var y = date.getFullYear();
    return y.toString().substr(2,2) + (m<=9 ? '0' + m : m) + (d <= 9 ? '0' + d : d);
}

d= new Date();
d.setFullYear(d.getFullYear()-20);

while (1)
{
	d.setDate(d.getDate()-1);
	sd = toYMD(d);
	console.log("Current %s",sd);
	if(SecureEngine.decryptFunc(sd) != null) // 함수이름은 ^^;
	{
		console.log("Found : %s",sd);
		break;
	}
}

생각보다 빠르진 않았지만 결과는 스크립트를 실행한지 30분이 되지않아 출력되었다.

획득한 비밀번호를 이용하여 보안(?) 메일을 열어볼 수 있었다.

VVIP고객님께서 갤럭시 J5로 바꾸면서 이메일 주소를 잘못입력한것으로 확인된다.
(수신거부가 없다..)

생년월일은 절대로 비밀번호로 사용하지 않도록 해야 한다.
(근데 내가 받아보는 카드 청구서도 비밀번호는 생년월일이었다…..)

Hantek DSO5202P 구매

몇년전부터 사고싶어하던 오실로스코프를 드디어 구매하였다.
구매를 진행하다보니 해외에서 구매하게되면 생각보다 저렴하게 구매할 수 있다는점과 스펙에 대해 고려해야될 부분이 굉장히 많다는것에 대해 놀랐다.

내가 구매한 오실로스코프는 중국 Hantek사의 DSO5202P이다. (생긴게 학부시절 실습할때 사용한 텍트로닉스사의 제품과 매우 흡사하다, 심지어 컬러 아이덴티티까지…)
스펙은 200MHz 대역폭을 가지고있고 1Ch에 1Gsa/s샘플링이 가능하다. (2채널은 반으로…)
40K개의 샘플을 USB를 통해 저장할 수 있다.
알리익스프레스를 이용하여 배송비포함 250$의 가격에 e-EMS를 통하여(일요일 주문 금요일 도착) 5일만에 받아볼 수 있었다.
구매전  DSO52xxP시리즈는 동일한 부품을 사용해서 펌웨어 해킹을 통해 스펙을 업그레이드 시킬수 있다는 글을 보았지만 하위제품과 가격차이가 20$도 나지않아 그냥 상위버전을 주문하였다.
처음엔 RIGOL  DS1102E이나 OWON의 SDS7102V를 사고싶었으나 비슷한 가격에 대역폭도 좋고 영문지원도 되는 Hantek을 결정하게 되었다.
SDS7102V는 해외판이고 EDS102CV가 같은모델 내수버전인데 영문을 지원하지 않는다고 한다. 현재 해외판은 구매가 안되는것으로 확인된다.
AS는 조금 걱정되긴 하나 고장안나도록 조심조심 쓰는게 좋을것 같고 혹시라도 고장나면 EMS로 AS처리하면 될것같다.
구매할때 도움이 되었던 블로그 : http://blog.naver.com/just4u78/220880895694

주문하고 아쉬웠던점은 전면에 SAVE TO USB라는 버튼이 있는데 이 버튼은 화면 캡쳐 버튼이었다는거 … (샘플을 저장하는게 아니라 현재 스크린샷만 저장해준다)
이렇게 말이지…
샘플을 UTILITY메뉴를 통해 저장할 수 있는데 버튼을 좀 많이 눌러야된다는것…
이유는 모르겠지만 가끔 재부팅이 된다는점… (PC소프트웨어를 사용하다가 보니 재부팅이 되더라…)

USB를 이용하여 윈도우에서 사용가능한 소프트웨어를 제공한다.
OpenHantek프로젝트가 있어서 리눅스에서도 USB를 이용하여 기기를 조작하고 샘플을 수집할 수 있다고 한다. 하지만 내껀 기기 인식이 잘 안된다(PID와 VID가 조금 다른듯..)
http://cafe.naver.com/openiot/203

누군가가 프로토콜을 리버싱해서 공개를 한것으로 보인다.
PC로 바로 샘플을 땡겨올 수 있을거같은데…
http://elinux.org/Das_Oszi_Protocol
https://www.mikrocontroller.net/articles/Hantek_Protokoll#cite_note-2

https://github.com/procule/hantek-dso

내가 받은건 소프트웨어 버전이 170505이다.(홈페이지는 170318이 최신)

SAVE/RECALL 메뉴를 통해서 CSV형태로 저장할 수 있다. 저장된 데이터는 다음과같이 WaveDataXXX.csv로 저장된다.

#timebase=1345294336(ps)
,#voltbase=1000(uV)
#size=40064
5.00000E-05,-0.280
1.00000E-04,-0.280
1.50000E-04,0.040
2.00000E-04,0.280
2.50000E-04,0.160
3.00000E-04,0.360
3.50000E-04,0.360
4.00000E-04,0.280

아래는 백업용 자료들
DSO5000P_Datasheet
DSO5000P_Driver (버전은 모르겠고 윈도드라이버 서명된거)
DSO5000P_Manual (ver 1.1)
DSO5000P_Software (V2.0.0.7_20141216)
DSO5202P_Firmware (dso5kp_func_dso5202p20170318.up)

 

luks crypt partition resize

윈도우랑 리눅스랑 듀얼부팅하다가 윈도우를 전혀 안써서 지워버리기로했다. (사실 ssd 용량이 딸려서…)
백업은 필수라지만 귀찮고 귀찮고 귀찮아서 백업을 하지않고 진행(다행히도 날리진 않았다)
다음은 resize 절차이다 ( 확장할때 사용한 명령어들, 축소는 음… 글쎄…)

본인의 경우는 root directory는 luks가 적용이 되어있지 않아 그냥 부팅한 후 /home 을 umount 하여 진행하였다.

sudo gparted 로 윈도우 파티션 정리 밑 swap 축소
sudo cryptsetup luksClose crypt-vol 로 luks close 해줌
sudo parted 의 resizepart 명령어로 crypt-vol의 크기를 재지정해줌 gparted에선 아직 지원을 안하는듯..
sudo cryptsetup luksOpen crypt-vol
sudo cryptsetup resize crypt-vol
sudo e2fsck -f /dev/mapper/crypt-vol
sudo resize2fs /dev/mapper/crypt-vol

하고 mount 해주면 됨
나야뭐 다 날리면 인생 새출발할 각오로 백업을 안했는데 모든 파티션 작업에는 백업은 필수

생각보다 어렵진 않았다. live usb 이딴거 필요없었다.

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가 잘못했네.
나중에 심심하면 다른것은 어떻게 만드는지 확인해 보는것도 재밌을것같다.