아마존 데쉬 버튼 해킹해서 iot 용도로 만들기


다양한 아마존 데쉬 버튼 해킹 자료들.

How I Hacked Amazon’s $5 WiFi Button to track Baby Data

Inside the 802.11b/g/n Amazon Dash Button

INSIDE THE AMAZON DASH BUTTON

HACKING THE AMAZON DASH BUTTON TO RECORD WHATEVER YOU WANT


아마존 데쉬 버튼을 해킹해서 다른 용도로 사용할 수 있다는 블로깅을 보고 구입후 삽을 들어보기로 했습니다. 


일단 아마존 데쉬 버튼을 설정을 해야합니다. 설정을 하기 위해서 아마존 쇼핑앱을 실행을 합니다. 그리고 Your Account로 선택을 해서 이동합니다. 그리고 중간에 Dash Devices 메뉴에서 Set up a new device를 선택합니다. 아래 노란색 Get Started 버튼을 눌러서 다음으로 넘어갑니다.



 이후 뜬금 없는 사운드 볼륨 조절을 합니다. 이 이유는 아마존 데쉬 버튼에 직접적으로 WiFi 정보를 넘길 방법이 없기 때문에 아이폰의 스피커를 통해서 정보가 사운드 출력으로 아마존 데쉬 버튼의 마이크로 전달되어서 그 정보를 파싱해서 사용을 합니다. 




WiFi정보를 기입하고 Continue 버튼을 눌러서 다음으로 넘어갑니다. 아마존 데쉬 버튼을 파란색 LED가 깜빡일 때까지 누르고 있습니다. 그리고 Continue 버튼을 눌러서 다음으로 넘어갑니다.


조용한 곳에서 아이폰의 스피커 부분에 아마존 데쉬 버튼의 마이크 부분을 가까이 대고 준비를 하고 Continue 버튼을 눌러서 다음으로 넘어갑니다. 이 과정에서 자세히 들어보면 마치 모스부호처럼 삐..삐- 삐 이런식으로 소리가 들립니다. 전달이 완벽하게 되면 완료되었다는 페이지가 잠시 뜨고 최종 제품을 선택할 수 있는 페이지가 나타납니다. 이때 제품을 선택을 하면 안됩니다. 상단에 X버튼을 눌러서 셋업을 종료합니다. 


이러면 기본적인 하드웨어 셋팅은 끝났습니다. 


이제 부터는 간단한 python 코드를 통해서 각각의 아마존 데쉬 버튼의 맥 어드레스를 얻습니다. 


아래 코드를 복사 붙여 넣기 해서 새로운 파일을 만들고 실행을 합니다. 

from scapy.all import *

def arp_display(pkt):
  if pkt[ARP].op == 1: #who-has (request)
    if pkt[ARP].psrc == '0.0.0.0': # ARP Probe
      print "ARP Probe from: " + pkt[ARP].hwsrc

print sniff(prn=arp_display, filter="arp", store=0, count=10)


그러면 아래 그림 처럼 맥어드래스가 출력이 됩니다. 이 과정에서 주의해야할 것이 작업하는 맥북과 아마존 대쉬 버튼이 동일한 와이파이 환경에 있어야 합니다. 

  • 맥이 5GHz에 붙어 있어서 한참을 해맸습니다. 

  • ImportError: No module named pcapy 이런 에러가 뜨면 Installing Scapy for Mac OS X 블로그 포스트를 참조해서 몇몇 모듈을 설치하면 됩니다. 

그리고 찾아낸 맥 어드레스를 아래 파이선 코드에 if 구문에 붙여넣고 여러대의 아마존 데쉬 버튼을 구별하면 됩니다. 

from scapy.all import *
def arp_display(pkt):
  if pkt[ARP].op == 1: #who-has (request)
    if pkt[ARP].psrc == '0.0.0.0': # ARP Probe
      if pkt[ARP].hwsrc == '74:75:48:5f:99:30': # Huggies
        print "Pushed Huggies"
      elif pkt[ARP].hwsrc == '10:ae:60:00:4d:f3': # Elements
        print "Pushed Elements"
      else:
        print "ARP Probe from unknown device: " + pkt[ARP].hwsrc

print sniff(prn=arp_display, filter="arp", store=0, count=10)


실행을 하고, 맥 어드레스가 일치하는 아마존 데쉬 버튼이 클릭을 하면 특정 버튼이 클릭이 되었다고 출력됩니다. 

그리고 간단한 코딩을 해서 버튼이 눌리면 http 리퀘스트를 해서 특정 url을 호출하면 됩니다. 

from scapy.all import *
import requests
import time
MAGIC_FORM_URL = 'http://put-your-url-here'

def record_poop():
  data = {
    "Timestamp": time.strftime("%Y-%m-%d %H:%M"), 
    "Measurement": 'Poopy Diaper'
  }
  requests.post(MAGIC_FORM_URL, data)

def record_wake():
  data = {
    "Timestamp": time.strftime("%Y-%m-%d %H:%M"), 
    "Measurement": 'Woke from Sleep'
  }
  requests.post(MAGIC_FORM_URL, data)

def arp_display(pkt):
  timestamp = time.strftime("%Y-%m-%d %H:%M")
  if pkt[ARP].op == 1: #who-has (request)
    if pkt[ARP].psrc == '0.0.0.0': # ARP Probe
      if pkt[ARP].hwsrc == '74:75:48:5f:99:30': # Huggies        
        print "Pushed Huggies"
        record_poop()
      elif pkt[ARP].hwsrc == '10:ae:60:00:4d:f3': # Elements
        print "Pushed Elements"
        record_wake()
      else:
        print "ARP Probe from unknown device: " + pkt[ARP].hwsrc

print sniff(prn=arp_display, filter="arp", store=0, count=10)

예제 코드는 구글 닥스에 버튼을 누를 때마다 시간을 기록을 합니다. 


저는 딱히 어떤 용도로 사용할지는 생각이 나지는 않지만, 집에 몸이 불편하신 분이 있으면 집에서 하나 드리고 어떤 상황에서 누르라고 하면 폰으로 푸쉬가 오면 확인 할 수있으면 좋을 것 같습니다. 


화장실에 화장지가 없을 때 누르면 바로 신고 기능으로 사용해도 좋을 것 같구요. 


iot를 딱히 복잡하게 생각할 필요 없는 것 같습니다. 다음에는 Meteor로 간단하게 서비스를 만들어서 연동해보도록 하겠습니다. 




설정 및 스니핑 확인 영상




관련글:

마음에 드시면 아래 공감 버튼 꾹 눌러주세요!


Posted by KraZYeom

댓글을 달아 주세요

  1. Favicon of https://itpostit.tistory.com BlogIcon IT AMATOR 2015.08.30 18:04 신고  댓글주소  수정/삭제  댓글쓰기

    우와 신기하네요. 기계를 다른 용도로 쓰도록 해킹하다니.. 잘보고갑니다!

  2. 쿠링 2018.12.01 11:20  댓글주소  수정/삭제  댓글쓰기

    좋은정보 감사합니다^^
    이젠 막혀서 안되겠죠..?

아마존 데쉬는 아마존 프라임 사용자가 (미국에서) 세제, 기저귀 등 생필품을 사용하다 떨어져서 필요하다 싶으면 녹음을 하거나 제품의 바코드를 찍으면 바로 아마존으로 주문을 할 수 있는 제품입니다. 손쉽게 물건을 구매하게 도와주는 도구입니다. 

아마존 데쉬 버튼은 데쉬에서 간단하게 버튼 기능만 따로 빼서 저렴하게 $4.99에 만든 제품입니다. 각 버튼은 단 하나의 물건을 주문할 수 있습니다. 데쉬 겉면에 다양한 제품의 로고가 인쇄되어 있습니다. 벽에 붙여 놓고 떨어질것 같다 싶으면 버튼만 누르면 알아서 주문이 됩니다. ㅠㅠb


이놈을 중간에 해킹을 해서 다른 용도로 사용한다는 개발 블로그 원문: How I Hacked Amazon’s $5 WiFi Button to track Baby Data를 보고 바로 아마존에서 주문을 했습니다. 가격은 개당 $4.99 이며, 프라임 맴버만 주문을 할 수 있기에 빠른 배송으로 도착했습니다. 중간에 또 배대지를 통했습니다. 


아마존 구매링크


일단 박스는 작습니다. 길이가 약 8cm 정도 됩니다. 겉면에는 각 제품들 로고가 찍혀있습니다. 2개는 가지고 놀고 2개는 이벤트 또는 간단하게 교육을 할 때 사용할 용도로 추가 구매했습니다.


박스를 열면 기기 본체와 간단한 셋팅 방법이 담김 메뉴얼이 전부입니다. 


그리고 본체를 어디에 걸수 있는 홀더?가 있고 본체 뒷면에는 벽에 붙일수 있게 양면 스티커가 있습니다. ... 


끝입니다. 일단 한국에서는 정상적인 방법으로 사용을 할 수도 없고 할 필요도 없기 때문에, 버튼을 누르면 중간에 그 신호를 가로채서 서버에 전송해서 다른 기능을 하게 만들겁니다.


추후 iot 용도로 사용하는 방법을 알아보도록 하겠습니다. :-)


개봉 동영상



Posted by KraZYeom

댓글을 달아 주세요

App Transport Security Problem on iOS 9

Meteor를 iOS 앱으로 실행하기 위해서 meteor run ios 또는 meteor run ios-device로 실행했더니 제대로 동작이 안된다. 살펴보니 iOS 9부터는 App과 Web간에 통신은 기본적으로 https가 문제다. 많은 앱들이 iOS 9으로 올라가면 제대로 동작 안 할 가능성이 있다.

OTL

App Transport Security support aka apps on iOS 9 don't work

xcode 7.0beta could not connect to development server.

가장 좋은 선택은 https간 통신을 하는 것이고 임시 방편으로는 꼼수가 있다. 

App-Info.plist 파일에서 아래와 같이 NSAppTransportSecurity 부분을 추가해주면 된다. 

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

추가하고 나서는 Meteor의 iOS이 잘 동작한다.

Posted by KraZYeom
TAG ats, iOS 9

댓글을 달아 주세요

Meteor + Material Design Light

2014년 구글에서 모바일에 적용 가능한 Material Design 가이드를 내놓고, 1년이 지난 오늘 웹에서 사용할 수 있는 Material Deisign Lite(MDL)를 공식적으로 릴리즈 했습니다. 

MDL은 웹 개발자들이 많이 사용하는 부트스트랩과 동일한 놈입니다. 브라우저 지원은 IE 10부터 제대로 지원하고, 9는 몇가지 기능이 빠지고 지원합니다. IE 8은 지원 예외 대상입니다. 

자세한 설명은 놔두고 Meteor에 MDL를 적용하는 방법을 알려드리겠습니다. 참조

Today, Google release Material Design Lite(MDL) for the Web page. I wrote the simple tutorial to add MDL to Meteor. you should read the detail of Material Deisign Lite(MDL).

Add MDL to Meteor

  • 템플릿 프로젝트를 생성합니다. 그리고 생성된 디렉토리로 이동합니다.
  • Create template Meteor project. and move to the directory.
meteor create HelloMaterialDesignLite
cd HelloMaterialDesignLite
  • .bowerrc 파일을 생성합니다. 그리고 아래 내용을 추가합니다. 
  • Make .bowerrc file. and add below code to the file.
{
  "directory": "public/components/"
}
  • bower로 material-design-lite를 로컬에 다운로드 받습니다.
  • download material-design-lite package files to local by below command.
bower install material-design-lite --save

/public/components 에 material-design-lite 가 다운로드 된 것을 확인할 수 있습니다. 

you can check that is downloaded to /public/components directory.

  • HelloMaterialDesignLite.html 파일에 헤더 부분에 아래내용을 추가를 합니다.
  • Add below code in HelloMaterialDesignLite.html
<head>
  <title>HelloMaterialDesignLite</title>
  <link href="https://fonts.googleapis.com/icon?family=Material+Icons"
        rel="stylesheet">
  <script src="/components/material-design-lite/material.js"></script>
  <link  href="/components/material-design-lite/material.css" rel="stylesheet" type="text/css">
</head>

그리고 아래와 같이 button에 MDL class를 적용하면 아래 그림 처럼 버튼에 매터리얼 디자인이 적용되고, 버튼을 클릭하면 물결효과 (Ripple)가 애니메이션이 동작하는 것을 확인할 수 있습니다. 

Add below code in HelloMaterialDesignLite.html, if you click the button, you check the ripple effect on the button.

<template name="hello">
  <!-- Accent-colored raised button with ripple -->
  <button class="mdl-button mdl-js-button mdl-button--raised mdl-button--accent mdl-js-ripple-effect">Click Me</button>
  <p>You've pressed the button {{counter}} times.</p>
</template>



매터리얼 디자인 라이트 공식 페이지에 가면 시작 하는 방법, 템플릿과 다양한 콤포넌트 사용방법이 있습니다. :]

There are Getting Started, Template and Components in Material Deisign Lite(MDL).

  • 조만간 능력자 개발자가 package로 등록할 것 같습니다. 그때는 더 쉽게 설치할 수 있습니다.


Posted by KraZYeom

댓글을 달아 주세요

  1. Favicon of http://www.meteorjs.kr/posts/hhCyjhCjsrgnDvikk BlogIcon acidsound 2015.07.07 22:29  댓글주소  수정/삭제  댓글쓰기

    패키지 만들어서 atmosphere에 등록했습니다.
    bower 하지마세요~~~ package에게 양보하세요~~~~~

  2. Favicon of https://atmospherejs.com/spectrum/material-design-lite BlogIcon acidsound 2015.07.07 22:30  댓글주소  수정/삭제  댓글쓰기

    http://www.meteorjs.kr/posts/hhCyjhCjsrgnDvikk

    글 참조하세요.

    저장소는 https://atmospherejs.com/spectrum/material-design-lite 이쪽 입니다.

터미널에서 현재 디렉토리를 클립보드로 복사하기

터미널에서 작업을 하다 보면 여러개의 창이 필요한 경우가 있고 새로운 창에서 현재 디렉토리를 열고 싶을 때가 있다. ( * 다른 방법이 있을지도 모르겠다는 생각이)

이때 현재 디렉토리를 클립보드에 복사하는 alias를 만들어서 창을 열고 Cmd + V를 해서 붙여 넣으면 된다.

우선 에디터로 프로파일을 연다.

vim ~/.bash_profile

그리고 아래 alias 코드를 붙여 넣는다. 

alias ppc="pwd | xargs echo 'cd' | pbcopy"

수정한 프로파일을 다시 불러온다.

sourch ~/.bash_profile

이후에는 터미널에서 아래와 같이 ppc를 입력하면 클립보드로 현재 위치가 복사된다.

ppc 

이후 새로운 탭을 열고 Cmd + V를 해서 붙여 넣으면 바로 이동한다.


Posted by KraZYeom

댓글을 달아 주세요