
KeySweeper is a stealthy Arduino-based device, camouflaged as a functioning USB wall charger, that wirelessly and passively sniffs, decrypts, logs and reports back (over GSM) all keystrokes from any Microsoft wireless keyboard in the vicinity.
KEYSWEEPER // SIGINT // SAMY.PL // 전체 공개 // 응용 해킹
**KeySweeper**는 정상적으로 작동하는 USB 벽면 충전기로 위장한 은밀한 Arduino 기반 장치로, 주변에 있는 모든 Microsoft 무선 키보드의 키 입력을 무선으로 수동 스니핑하고, 복호화하고, 기록한 다음 (GSM을 통해) 보고합니다.
모든 키 입력은 온라인과 로컬에 기록됩니다. 트리거 단어, 사용자 이름 또는 URL이 입력되면 SMS 알림이 전송되어 비밀번호가 노출됩니다. 전원에서 분리해도 KeySweeper는 내부 배터리로 계속 작동하며, 다시 전원이 공급되면 자동으로 충전됩니다. 웹 기반 도구를 통해 키 입력을 실시간으로 모니터링할 수 있습니다.
라이브 데모 및 전체 세부 정보는 영상에서 확인할 수 있습니다: KeySweeper
연락처: @SamyKamkar // [email protected] // http://samy.pl
출시일: 2015년 1월 12일
소스 코드 / 회로도: https://github.com/samyk/keysweeper
단가: 작동 방식에 따라 $10 - 80
상태: 작동 가능, 오픈 소스, 오픈 하드웨어, 기밀 해제됨.
**KeySweeper**는 정상적으로 작동하는 USB 벽면 충전기로 위장한 은밀한 Arduino 기반 장치로, 영역 내에 있는 모든 Microsoft 무선 키보드(독점 2.4GHz RF 프로토콜 사용)의 모든 키 입력을 무선으로 수동 스니핑하고, 복호화하고, 기록하고, 보고합니다.
키 입력은 선택 사항인 GSM 칩을 통해 인터넷으로 KeySweeper 운영자에게 전송되거나, 플래시 칩에 저장되어 보조 KeySweeper 장치가 대상 KeySweeper의 무선 범위 내에 들어오면 무선으로 전달될 수 있습니다. 웹 기반 도구를 통해 키 입력을 실시간으로 모니터링할 수 있습니다.
KeySweeper는 "www.bank.com"과 같은 특정 키 입력이 입력되면 SMS 알림을 보낼 수 있습니다. KeySweeper를 AC 전원에서 분리하면 꺼지는 것처럼 보이지만, 내부 배터리를 사용해 은밀하게 계속 작동하며 AC 전원에 다시 연결하면 자동으로 충전됩니다.
KeySweeper는 goodfet.nrf 프로젝트에 대한 Travis Goodspeed의 작업과 KeyKeriki v2.0 프로젝트의 Thorsten Schröder와 Max Moser의 작업을 확장합니다.
$3 - 30: Arduino 또는 Teensy 마이크로컨트롤러를 사용할 수 있습니다. 제 구성에서는 매우 얇은 프로필 덕분에 3.3v Arduino Pro Mini를 사용합니다.
$1: 저는 2.4GHz에서 GFSK를 사용해 통신하는 $1 nRF24L01+ RF 칩을 사용합니다. 자세한 내용은 아래에서 확인할 수 있으며, 이 칩은 eBay에서 최저 $1에 구매할 수 있습니다. 이 칩은 독점 프로토콜로만 통신할 수 있으며 스니핑용이 아니지만, 아래에서 이 칩을 영리한 방식으로 사용해 무차별 스니핑을 할 수 있음을 알게 될 것입니다.
$6: 저는 AC 전력을 5v DC로 변환하는 저렴한 AC USB 충전기(정류기)를 사용합니다. 제가 링크한 제품은 우연히도 나사가 있어 열기 쉽습니다(열어보는 과정에서 다른 몇 개는 망가뜨렸습니다). GSM 버전의 KeySweeper를 사용하는 경우 실제로는 USB 충전기 두 개를 사용합니다. 작은 충전기(iPhone 충전기와 유사)의 내부 부품과 더 큰 USB 충전기의 외부 케이스를 사용합니다.
선택 ($2): 키 입력을 저장하는 데 선택 사항인 SPI Serial Flash 칩을 사용할 수 있습니다. 아래의 FONA GSM 보드를 사용하는 경우 키 입력을 인터넷을 통해 실시간으로 저장할 수 있으므로 필요하지 않지만, 더 저렴한 옵션을 원한다면 KeySweeper 내부의 이 칩에 키 입력을 저장한 후, 보조 장치를 사용해 장치의 2.4GHz 무선 범위 내에 들어가 키 입력을 빼낼 수 있습니다.
대부분의 마이크로컨트롤러는 데이터를 저장할 메모리나 EEPROM이 매우 제한적이므로, 이러한 키 입력을 저장할 플래시 칩을 갖는 것이 유리합니다.
선택 ($45): Adafruit는 FONA라는 보드를 만들었습니다. 이 보드를 사용하면 2G SIM 카드로 SMS를 주고받고, 전화를 걸고, 장치에서 직접 인터넷을 사용할 수 있습니다.
이를 사용하면 키 입력이 즉시 백엔드 서버로 전송되어 적절한 데이터 수집이 이루어지므로 플래시 칩이 필요 없습니다. 또한 대상 키보드에서 특정 키워드가 입력되면 지정된 번호로 SMS 메시지를 보내 작전 요원에게 이를 알릴 수 있습니다.
선택 ($3, FONA 사용 시에만): FONA는 mini-SIM 카드(micro-SIM 아님)를 요구합니다. 저는 T-Mobile 선불 SIM 카드를 사용합니다. T-Mobile은 2G를 지원하므로 사용을 권장합니다. 대부분의 다른 통신사는 2G 네트워크를 이미 폐지했거나 폐지하는 중이며, FONA는 인터넷에서 2G만 지원합니다. 올바른 크기의 SIM 카드를 구매하세요. 자세한 내용은 FONA SIM 요구 사항은 여기를 참조하세요.
선택 ($5 이상, FONA 사용 시에만): FONA는 온보드 LiPo/LiOn 배터리 충전을 제공하며, KeySweeper가 AC 전원에 연결되어 있는 동안 배터리는 충전된 상태로 유지되지만 어쨌든 필요합니다. 또한 KeySweeper는 AC 전원에서 분리되면 배터리 전원으로 은밀하게 계속 작동하고, AC 전원에 다시 연결하면 충전을 시작합니다.
KeySweeper의 소스 코드 전체는 제 github에서 얻을 수 있습니다: https://github.com/samyk/keysweeper
KeySweeper는 여러 부분으로 구성됩니다. 기본 코드는 마이크로컨트롤러에 설치되고, jQuery와 PHP를 사용하는 웹 기반 백엔드는 모든 키 입력을 기록하고 대상 키보드를 실시간 모니터링할 수 있는 웹 인터페이스를 제공합니다.
KeySweeper는 또한 maniacbug의 RF24 라이브러리에서 다음 파일이 필요합니다:
RF24.hnRF24L01.hRF24_config.h파일을 keysweeper_mcu_src 디렉터리에 복사하기만 하면 됩니다. 또한 RF24.h 파일의 #include 문을 #include <RF24_config.h>에서 #include "RF24_config.h"로 변경해야 합니다.
제가 만든 Adafruit FONA 라이브러리 버전을 사용해야 합니다. FONA에 새 문자 메시지가 있을 때 알려주는 추가 옵션을 포함했기 때문입니다. 원래 라이브러리에서는 예상보다 더 많은 문자 메시지가 있는지 지속적으로 폴링해야 하지만, 제 버전에서는 fona.setSMSInterrupt(1) 옵션을 활성화할 수 있습니다. 이 옵션은 새 SMS 메시지가 도착하면 RI(링 인터럽트) 핀이 잠시 LOW로 당겨지게 합니다.
웹 페이지를 통해 키보드를 실시간으로 모니터링할 수 있는 백엔드 도구를 만들었습니다. jQuery Terminal 플러그인이 더 멋지게 보이게 해줍니다.
jQuery UI Virtual Keyboard는 사용자가 실제로 키를 누를 때 가상 키보드의 키가 눌리는 것을 보여주며 KeySweeper 실시간 스파이 인터페이스 도구를 계속 멋지게 만듭니다.
Microsoft 무선 키보드를 입수하여 소유하게 되면, 뒷면을 확인하여 FCC ID를 조사할 수 있습니다. 제 키보드의 FCC ID(미국에서 무선 주파수를 사용하는 모든 장치에 필요한)는 C3K1455이며, FCC 웹사이트에서 쉽게 검색할 수 있습니다.
즉시 우리는 FCC 보고서에 따라 키보드가 2403 - 2480MHz에서 통신한다는 것을 발견합니다.
이제 이것이 2.4GHz 장치라는 것을 알았으므로, wi-fi, bluetooth, zigbee 등과 같은 일반적인 2.4GHz 프로토콜을 사용하거나 독점 프로토콜을 사용한다고 가정합니다. 장치에 자체 USB 동글(자체 FCC ID, C3K1461)이 포함되어 있었기 때문에 독점 2.4GHz 신호일 가능성이 매우 높습니다.
독점 2.4GHz일 가능성이 높으므로 이제 어떤 2.4GHz 스니핑 방법을 사용해야 합니다. 이것은 802.11이 아니므로(SkyJack에서 사용한 것과 같은) WiFi 스니퍼는 도움이 되지 않으며, RTL-SDR 자체는 RF 다운 컨버터를 추가로 사용하지 않는 한 약 2.2GHz에서 한계가 있으므로 도움이 되지 않습니다(Digital Ding Dong Ditch에서 RTL-SDR을 사용했습니다). 그래서 저는 강력하고 저렴한 소프트웨어 정의 라디오인 HackRF를 즉시 사용하고 싶지만, 가격 대비 매우 강력하지만 더 저렴한 하드웨어로 해결할 수 있을 수도 있습니다.
이전 경험을 바탕으로, 이 키보드가 Nordic nRF24L01+, TI CC2500 또는 Cypress CYRF6936과 같은 것을 사용한다고 추측하지만, 더 조사하지 않고는 확신할 수 없습니다.
키보드에서 나사를 제거하고 열어보면 모든 것을 담당하는 단일 칩이 보입니다. NRF 24LE1H로 표시되어 있는데, 이는 nRF24L01(n=Nordic Semiconductor, RF=Radio Frequency, 24=2.4GHz)과 매우 유사해 보입니다! 검색을 통해 nRF24LE1 칩을 빠르게 찾을 수 있으며, 실제로 CPU가 통합된 nRF24L01+ RF 칩(시스템온칩/SoC)을 갖고 있음을 알 수 있습니다. eBay에서 빠른 검색으로 nRF24L01+를 1달러 미만에 배송받을 수 있음을 보여줍니다.
The nRF24LE1 integrates an nRF24L01+ 2.4GHz RF transceiver core, enhanced 16MHz 8-bit 8051 compatible CPU, 1kB + 256B RAM, 16kB embedded Flash, and a wide range of system peripherals
nRF24L01+ 데이터시트를 보면, 이 칩은 250kbps/1Mbps/2Mbps로 작동하고 GFSK(가우시안 주파수 편이 변조는 디지털 주파수 변조/FM)를 사용하는 2.4GHz RF 칩이며, 불행히도 스니핑을 위한 합법적인 무차별 모드나 직접 모드가 부족하다는 것을 알 수 있습니다... 정말 그럴까요?
평소라면 HackRF나 디지털 다운 컨버터가 있는 RTL-SDR(2.4GHz를 RTL-SDR 범위로 끌어오기 위해)을 꺼내겠지만, 더 저렴한 하드웨어로 스니핑할 수 있다면 정말 좋을 것입니다. 궁극적으로 모든 것을 현장에 남겨둘 수 있는 장치에 패키징하고 싶기 때문입니다.
기본 검색 후 Travis Goodspeed의 놀라운 페이지가 나왔습니다. 그는 유사한 키보드(Microsoft Comfort Desktop 5000)를 스니핑할 뿐만 아니라, 그의 GoodFET 장치와 goodfet.nrf 파이썬 애플리케이션이 있는 호스트 컴퓨터를 사용하여 nRF24L01+를 2.4GHz 스니퍼로 바꾸는 방법도 보여줍니다.
Travis는 이 장치로 스니핑하는 것이 전통적으로 어렵다는 것을 발견했습니다. 수신할 채널(주파수)을 지정해야 할 뿐만 아니라 수신할 MAC 주소도 지정해야 하기 때문입니다. nRF 칩은 해당 특정 MAC 주소로 전송된 패킷만 전달합니다. 또한 nRF 칩은 이미 지정했기 때문에 MAC 주소를 알려주지 않습니다(데이터시트에 있는 RX_ADDR_P[0-5] 파이프 중 하나에 있다고 가정합니다).
그러나 MAC 길이를 지정할 때 Travis는 데이터시트에서 "불법"으로 간주되는 옵션 하나가 있다는 것을 발견했습니다(SETUP_AW, 0x03 set to 00). 실제로는 MAC을 2바이트로 설정합니다! 또한 일반적으로 프리앰블에서 발견되는 데이터(0x00AA 또는 0x0055, 이진수 0000000010101010 또는 0000000001010101)로 MAC을 설정하면 장치를 속여 패킷을 일찍 받게 할 수 있으며, 데이터 부분에서 전체 MAC 주소를 얻을 수 있습니다! 자세한 내용은 그의 훌륭한 글을 읽어보세요.
테스트 중에는 GoodFET, 컴퓨터, nRF24L01+를 사용해 스니핑할 수 있지만, 궁극적으로는 이 기능을 저렴하고 내장형 장치에 넣고 싶습니다. Travis의 Python 작업 중 일부를 가져와 임베디드 C로 포팅하여 컴퓨터+GoodFET 대신 마이크로컨트롤러에 로드할 수 있습니다.
또한 몇 가지 개선 사항을 구현합니다. goodfet.nrf는 다음을 수행하여 장치를 스캔하는 방법을 제공합니다:
즉, 전체 주파수 범위를 스캔하려면 약 85분이 걸리고, 올바른 10초 동안 스니핑하는 동안 최소한 여러 번의 키 입력이 눌려야 합니다. Travis의 연구와 키보드, KeyKeriki의 연구와 키보드, 그리고 제 키보드를 검토한 후 몇 가지 개선 사항을 구현할 수 있습니다:
0xCD는 11001101). 비트가 계속 교대되도록 하기 위해서입니다. 따라서 검색 시간이 절반으로 줄어듭니다Thorsten Schröder와 Max Moser는 Microsoft 키보드를 스니핑할 수 있는 훌륭한 장치인 KeyKeriki를 발표했고, 복호화 과정을 완전히 리버스 엔지니어링하여 이를 수행하는 장치를 제작했습니다. 그러나 Travis는 그들의 장치가 키보드가 통신하는 2Mbps 속도로 패킷을 캡처하고 파싱하려면 두 개의 라디오와 고급 마이크로컨트롤러가 필요하다고 지적합니다. Travis의 프로젝트도 훌륭하지만 호스트 컴퓨터가 필요하고 우리의 은밀한 구현에는 너무 큽니다. 이 시나리오에서는 저렴한 라디오와 마이크로컨트롤러만 필요하도록 설계를 개선합니다. 둘 다 저전력이고 매우 작으며 컴퓨터나 고급 라디오가 필요 없습니다.
Thorsten과 Max는 키 입력이 ECB 모드에서 MAC 주소와 단순히 XOR되어 암호화된다는 것을 발견했습니다. 이는 Travis의 nRF24L01+ 남용 방법을 사용해 스니핑과 MAC 주소 노출을 모두 수행한 후에 스니핑할 수 있는 것입니다. 이 "암호화"는 카드 덱을 가져다가 한 번 컷한 다음 셔플이라고 부르는 것과 같습니다.
추가 조사 결과, 이제 모든 Microsoft 키보드의 MAC 주소가 0xCD로 시작한다는 것을 알게 되었으므로, 실제 키 입력(아래 주황색)은 MAC 주소의 첫 바이트(0xCD)와 정렬됩니다. 즉, MAC 주소를 모르더라도 키 입력을 복호화할 수 있습니다. 정렬은 절대 바뀌지 않으며 0xCD는 항상 MAC의 첫 바이트이기 때문입니다.
또 다른 발견은 패킷의 암호화 부분 길이가 11바이트이고, MAC은 5바이트이며, CRC는 각 바이트가 다른 바이트와 XOR되므로(암호화 전에), 흥미로운 일이 발생합니다. MAC이 두 번 XOR되므로 MAC 주소를 몰라도 체크섬을 계산할 수 있습니다. MAC 주소가 전체적으로 두 번 포함되어 있고, 어떤 숫자를 그 자신과 XOR하면(MAC를 MAC와 XOR하면) 서로 상쇄되기 때문입니다. 11번째 바이트는 다시 MAC의 첫 바이트이며, 항상 0xCD라는 것을 알고 있습니다. 이를 통해 MAC 주소를 모르는 상태에서도 키 입력과 CRC를 변경하는 등의 다른 공격을 수행할 수 있습니다. 이 내용과 다른 재미있는 데모는 향후 프로젝트에서 발표하겠습니다.
KeyKeriki 프레젠테이션의 한 페이지는 복호화 과정을 보여줍니다:
KeySweeper 소스 코드에 구현된 우리의 복호화 방법:``` // decrypt those keyboard packets! void decrypt(uint8_t* pkt) { // our encryption key is the 5-byte MAC address and // starts 4 bytes in (4-byte header is unencrypted) for (int i = 4; i < 15; i++) pkt[i] ^= mac >> (((i - 4) % 5) * 8) & 0xFF; }
# (U) USB 충전기 구축 / 탈취
**경고: AC 주전원에 연결되는 장치는 고전압 전원을 사용하며, 우리가 만들고 있는 AC에 연결되는 장치는 안전하지 않으며 일반적인 전기 안전 기준을 충족하지 않습니다. 이 장치는 위험하며, 부적절하게 사용하거나 제작할 경우 사망, 화재 또는 기타 심각한 손상을 초래할 수 있습니다. 자신이 무엇을 하고 있는지 모른다면 AC 전원 장치를 만들지 마십시오. AC 전원 없이 이 장치를 계속 만들고 싶다면 배터리를 사용하거나 USB로 직접 전원을 공급하여 안전하게 따라 하십시오.**
KeySweeper는 가능한 한 은밀하게 유지하기 위해 초저전력 및 초소형 하드웨어를 사용합니다. KeySweeper는 배터리 또는 약 3~20V DC 전원으로 작동할 수 있습니다. KeySweeper가 항상 전원이 공급된 상태를 유지하기를 원하기 때문에, 항상 콘센트에 꽂혀 있을 것으로 예상되는 평범한 벽면 USB 충전기 내부에 은밀히 설치합니다.
USB 충전기가 콘센트에서 분리되면 KeySweeper는 (선택 사항인) 내부 배터리를 사용하여 은밀하게 작동을 계속합니다. KeySweeper가 다시 꽂히는 순간 AC 전원 사용으로 전환하고 동시에 배터리를 재충전합니다.
GSM 보드 **없이** KeySweeper를 간단히 구축한다면 일반적인 AC USB 벽면 충전기에 모든 것을 넣을 수 있습니다. 대부분의 다른 충전기는 밀봉되어 있어 열기 위해 장치의 일부를 파괴해야 하므로, 나사로 고정된 충전기를 찾는 것이 좋습니다.
[](http://samy.pl/keysweeper/usbopen.jpg)
GSM 보드를 사용하기로 결정했다면, 이 유형의 USB 충전기에는 나머지 전자 장치와 함께 들어가지 않는다는 것을 발견했습니다. 하지만 iPhone USB 충전기와 유사한 더 작은 USB 충전기를 열어보면 훨씬 더 작은 정류기(AC->DC)와 강압 변환기(고전압->5V)를 찾을 수 있으며, 이를 통해 **모든** 전자 장치를 더 큰 USB 충전기에 넣을 수 있습니다.
[](http://samy.pl/keysweeper/usbcharger1.jpg)
[](http://samy.pl/keysweeper/usbcharger2.jpg)
제 친구 Dana가 자신의 인형용 납땜 인두를 빌려주었습니다. 그녀가 그것을 무엇에 사용하는지 잘 이해하지 못하지만, 면도날을 부착할 수 있는 납땜 인두입니다. 플라스틱을 자르는 데 아주 좋으며, 아마 인형도 자르는 데 좋을 것입니다. 제가 이 장치가 무엇을 하는지 설명하자마자 그녀는 인두를 돌려받았습니다. 그녀가 이것을 지지하지 않는 것 같지만, 그 이유는 잘 모르겠습니다. 그녀의 키보드에서 더 많은 키 입력을 스니핑한 후에 알게 될 것입니다.
[](http://samy.pl/keysweeper/usbcharger3.jpg)
[](http://samy.pl/keysweeper/usbchargeropen.jpg)
**경고: 다시 말하지만, AC 전원을 다루기 때문에 이것은 매우 위험합니다. 자신이 무엇을 하고 있는지 모른다면 AC 전원 장치를 열거나 재배선하지 마십시오.** AC 기반 장치를 수정하지 않고 USB 충전기, 포트 또는 배터리로 모든 것에 전원을 공급하는 방식으로 KeySweeper를 구축할 수 있습니다.
또한 Arduino를 RAW 포트를 통해 5V USB 전원에 올바른 극성으로 연결하는 것이 중요합니다(음극은 GND에, 양극은 RAW에). 이 경우 3.3V Arduino Pro Mini를 사용하고 있습니다. RAW 포트는 3.35~12V 사이의 비조정 전압을 받아들여 온보드 전압 조정기를 사용해 3.3V로 낮춥니다. nRF24L01+ 칩은 1.9~3.6V를 요구하므로 5V를 공급하는 것은 **너무 과합니다!** 또한 [SST25VF016B](http://ww1.microchip.com/downloads/en/DeviceDoc/S71271_04.pdf)와 같은 SPI 칩을 사용하는 경우 2.7~3.6V가 필요하므로 역시 5V는 **너무 과합니다!** Arduino에서 조정된 3.3V를 사용하십시오(3.3V Arduino의 VCC 핀 또는 5V Arduino의 3V3 핀).
[](http://samy.pl/keysweeper/multimeter.jpg)
*참고: 멀티미터 옆에 보이는 USB 보드는 GSM 보드도 넣기 위해 더 작은 보드로 교체하기로 결정하기 전의 원래 보드입니다*
모든 하드웨어를 확보한 후, 충전기 안에 여유 공간까지 모두 들어맞는 것을 볼 수 있습니다(배선 전):
[](http://samy.pl/keysweeper/testingsize.jpg)
재미로 충전기의 LED를 Arduino의 6번 핀에 연결했습니다. LED는 평소와 같이 동작하는 것처럼 보이지만, 실제로는 키 입력을 스니핑할 때 깜빡이도록 했습니다. 이는 정체를 드러낼 가능성이 높지만, 보기에는 정말 재미있습니다. 또한 나머지 장치가 내부 배터리로 계속 작동하더라도 AC 전원이 끊기면 LED가 꺼지도록 했습니다.
다른 장치들이 USB 충전기에서 계속 전원을 공급받을 수 있도록 USB 충전기의 나머지 기능도 정상 작동하도록 유지해야 합니다.

-----
# (U) 선택적 보조 KeySweeper
비용을 절감하기 위해 GSM 보드를 생략하려면 Arduino와 nRF24L01+만 포함하는 보조 KeySweeper 장치를 만들 수 있습니다. 보조 장치를 컴파일할 때 `#define BACKTRACER 1`의 주석을 해제하십시오.
작동 방식은 보조 KeySweeper(BACKTRACER)가 첫 번째 KeySweeper의 무선 범위(2.4GHz nRF24L01+ 사용) 내에 들어오면 첫 번째 장치의 존재를 자동으로 감지하고, 원래 KeySweeper 장치가 로그를 BACKTRACER로 덤프하는 것입니다. 자동 감지 기능은 두 KeySweeper 모두에 내장되어 있어 nRF24L01+가 여러 RX 파이프를 가질 수 있는 덕분에 서로를 빠르게 찾을 수 있습니다.
BACKTRACER를 컴퓨터에 연결하면 키 로그가 시리얼로 덤프되며, 내용을 확보했으므로 시리얼로 'E' 명령을 보내 원래 KeySweeper의 SPI Flash 칩 내용을 지울 수 있습니다. 원래 KeySweeper가 계속 키 입력을 기록하도록 두고 자리를 떠날 수 있습니다.
-----
# (U) 회로도
더 큰 버전(FONA 기반 회로도)을 보려면 클릭하거나, Fritzing 파일을 보려면 [여기를 클릭](http://samy.pl/keysweeper/keysweeper.fzz)하십시오.
[](http://samy.pl/keysweeper/keysweeper2_schem.png)
-----
# (U) 연락처
**연락 담당:** [@SamyKamkar](https://twitter.com/samykamkar)
제 프로젝트는 <http://samy.pl>에서 더 볼 수 있으며, <[email protected]>로 연락할 수 있습니다.