433Mhz Funkkerzen mit dem Arduino schalten

Viele kennen rc-switch die Arduino Library um Funksteckdosen via 433 Mhz zu schalten.
Nun habe ich kürzlich Kerzen gesehen, die auch mit einem Handsender der auf 433 Mhz sendet an- und ausgeschalten werden können.  Leider habe ich nirgendwo eine Dokumentation gefunden, wo die Übertragung nachzulesen ist. Auf dem Handsender steht lediglich Typ QL3957 mit dem ich allerdings auch nicht viel anfangen konnte.

Also entschloss ich mich die Codes vom Handsender selber mit einem billigen 433Mhz Receiver und einem digitalen Speicheroszilloskop auszulesen und einen Arduino Sketch zu schreiben.
Für die an- und ausschalt Funktionen habe ich folgende Codesequenzen aufgezeichnet:

Kerzen 433Mhz aus
Ausschalt Sequenz
Kerzen 433Mhz ein
Einschalt Sequenz

Es lässt sich eine Manchester Codierung vermuten und daraus ergibt sich folgende Bit Folge:
Ausschalt Sequenz: 010101010101010100110000 (24 Bit)
Einschalt Sequenz: 010101010101010100000011 (24 Bit)
Die Pulslängen betragen:
Langer Puls: 500 µS
Kurzer Puls: 200 µS
Am Anfang muss ein Low Signal, dass 4080 µS lang ist gesendet werden und am Schluss nochmals das Bit 0.
Mit folgendem Code lassen sich die Kerzen ein und ausschalten (der Code gewinnt sicher keinen Schönheitswettbewerb 🙂 )

#define longPulse 500
#define shortPulse 200
int senderPin = 10;
char* CandleOn  = "010101010101010100000011";
char* CandleOff = "010101010101010100110000";
void send0()
{
  // Sends a 0 Bit
  //            _
  // Waveform: | |__
  digitalWrite(senderPin, HIGH);
  delayMicroseconds(shortPulse);
  digitalWrite(senderPin, LOW);
  delayMicroseconds(longPulse);
}
void send1()
{
  // Sends a 1 Bit
  //            __
  // Waveform: |  |_
  digitalWrite(senderPin, HIGH);
  delayMicroseconds(longPulse);
  digitalWrite(senderPin, LOW);
  delayMicroseconds(shortPulse);
}
void sendCandleCode(char* code)
{
  for(int i=0;i<3;i++) // send the code 3 times
  {
    delayMicroseconds(4080); //wait a minimum of 4080 uS
    for(int i=0; i< 24;i++)
    {
      if(code[i] == '0') send0();
      if(code[i] == '1') send1();
    }
    send0();
  }
}
void setup()
{
  pinMode(senderPin, OUTPUT);
}
void loop()
{
  sendCandleCode(CandleOn);
  delay(5000);
  sendCandleCode(CandleOff);
  delay(5000);
}

Raspberry Pi, Hifiberry und Pi Musicbox

Als neuer Audioplayer habe ich mir kürzlich ein Raspberry Pi B+ mit Hifiberry Digi+ und als Software Pi Musicbox gebastelt. Angeschlossen habe ich das ganze via SPDIF.
Am Anfang war ich frustriert, weil kein Sound zu hören war. Nach einiger Zeit Basteln und Recherchen habe ich einen Workaround gefunden: https://www.hifiberry.com/forums/topic/digi-and-pimusicbox-sync-error/
Im Script /opt/musicbox/setsound.sh muss die Identifikation für die Hifiberry Digi+ angepasst werden:

elif [[ ${dev[1]} == "snd-rpi-hifiberry-digi" ]]; then

ändern in

elif [[ ${dev[1]} == "snd-hifiberry-digi" ]]; then

danach rebooten und prüfen ob der richtige Ausgang gewählt wird:

aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
  Subdevices: 8/8
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2
  Subdevice #3: subdevice #3
  Subdevice #4: subdevice #4
  Subdevice #5: subdevice #5
  Subdevice #6: subdevice #6
  Subdevice #7: subdevice #7
card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: sndrpihifiberry [snd_rpi_hifiberry_digi], device 0: HifiBerry Digi HiFi wm8804-spdif-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0

bei mir ist die hifiberry die card 1, dies muss mit der Einstellung in /etc/asound.conf übereinstimmen

cat /etc/asound.conf
pcm.!default {
    type hw
    card 1
}
ctl.!default {
    type hw
    card 1
}

 
 

tt-rss Full Feed News

Um alle News an einem zentralen Ort zu sammeln benutze ich Tiny Tiny RSS (tt-rss).
Dieser kann als eine selber gehostete Google Reader Alternative angesehen werden. Leider wird bei einigen Seiten (z.B Golem.de, Heise.de, inside-it.ch etc.) nur eine kleine Beschreibung auf den Artikel geladen und nicht der ganze.
Mit dem Plugin af_feedmod ist es möglich den ganzen Artikel in den RSS Reader zu laden, vorausgesetzt man kennt die Parameter. Für heise.de und Golem.de sind diese auf der Github Seite des Plugin Entwicklers aufgeführt.
Anbei einige weitere:
Inside-IT.ch

"inside-it.ch": {
   "type": "xpath",
   "xpath": "div[@class='article']",
   "cleanup":"div[@class='microsite']"
}

Computerworld.ch

"computerworld.ch": {
   "type": "xpath",
   "xpath": "div[@class='main-article']",
   "cleanup":["div[@class='article-box']","div[@class='article-col']","div[@class='line-news line-news2']"]
}

 

XOR Logik mit 3 Inputs

Kürzlich musste ich ein Powershell Script schreiben, das zu Anfang die Argumente prüfen sollte. Das Script kann mit 3 Parameter aufgerufen werden: -Install, -Uninstall und -Action
Von diesen 3 Parameter darf jeweils nur einer gleichzeitig verwendet werden, also habe ich ein paar logische Operatoren zusammen verknüpft und voilà dies ist das Ergebnis:

if(($Install -and $Uninstall -and $Action) -or -not ($Install -xor $Action -xor $Uninstall))
{
	Write-Host -ForegroundColor Red "Invalid Parameters please read script header for usage"
	exit(1)
}

Die Wahrheitstabelle für ein XOR Gatter mit 3 Inputs:

$a = $true,$false,$false
$a[0] -xor $a[1] -xor $a[2] #true
$a = $true,$true,$false
$a[0] -xor $a[1] -xor $a[2] #false
$a = $true,$true,$true
$a[0] -xor $a[1] -xor $a[2] #true
$a = $true,$false,$true
$a[0] -xor $a[1] -xor $a[2] #false
$a = $false,$true,$true
$a[0] -xor $a[1] -xor $a[2] #false
$a = $false,$false,$true
$a[0] -xor $a[1] -xor $a[2] #true
$a = $false,$false,$false
$a[0] -xor $a[1] -xor $a[2] #false
$a = $false,$true,$false
$a[0] -xor $a[1] -xor $a[2] #true

3InputXOR

Dateien mit OpenSSL ver/entschlüsseln

Verschlüsseln

openssl aes-256-cbc -salt -in archive.tar.gz -out archive.tar.gz.enc

Es folgt eine Aufforderung zur Eingabe des Passwortes
enter aes-256-cbc encryption password:

Entschlüsseln

openssl aes-256-cbc -d -in archive.tar.gz.enc -out archive.tar.gz

Es folgt eine Aufforderung zur Eingabe des Passwortes
enter aes-256-cbc decryption password:

Raspberry Pi Edimax Wifi Adapter einrichten

Der Edimax war einer der ersten verfügbaren Wifi Adapter für die Raspberry Pi. Das Einrichten ist relativ einfach für einigermassen versierte Linux User. Bei Distributionen wie z.B OpenElec 4.0 kann der Wifi Adapter auch direkt in XBMC konfiguriert werden.
Beim konfigurieren unter Raspbian habe ich bemerkt, dass wenn länger keine Aktivität auf dem Adapter stattfindet, dieser in einen Sleep Mode ähnlichen Zuständ fällt und ich ihn nicht mehr wecken konnte. Weiter unten wird beschrieben wie dieser Zustand verhindert werden kann.
raspberry_pi_edimax

Installation Edimax USB Wifi Adapter

Der USB Adapter muss eingesteckt sein. Wird er im laufenden Betrieb eingesteckt startet die Raspberry Pi neu.

OS Update

sudo apt-get update
sudo apt-get upgrade

Dies kann unter Umständen eine Weile dauern

Das Interface konfigurieren

sudo nano /etc/network/interfaces

Die Grundkonfiguration sollte folgendermassen aussehen:

auto lo
auto wlan0
iface lo inet loopback
iface eth0 inet dhcp
allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

Diese Konfiguration setzt die IP Adresse via DHCP Server.
Möchte man eine fixe IP setzten muss die Konfiguration wie folgt abgeändert werden:
Address, Netmask und Gateway den eigenen Ansprüchen entsprechend anpassen

auto lo
iface lo inet loopback
iface eth0 inet dhcp
allow-hotplug wlan0
iface wlan0 inet manual
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf

WPA Konfiguration 1

In der Datei /etc/network/interfaces folgende Ergänzungen machen

iface wlan0 inet dhcp
        wpa-ssid "ssid"
        wpa-psk "password"

WPA Konfiguration 2

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

SSID und PSK mit den eigenen Angaben ersetzten

network={
ssid="SSID-HIER-EINSETZEN"
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP TKIP
group=CCMP TKIP
psk="WIFI-PASSWORT-HIER-EINSETZTEN"
}

“Sleep” Mode verhindern

sudo nano /etc/modprobe.d/8192cu.conf

Folgende Zeilen hinzufügen

# Disable power management
options 8192cu rtw_power_mgnt=0 rtw_enusbss=0

Neustart

Die Konfiguration ist abgeschlossen, nun die Raspberry Pi neustarten.
 

Windows Passwort des lokalen Administrators ändern ohne Rechte

Das nachfolgende Szenario ist schon länger bekannt, jedoch möchte ich damit wieder einmal darauf hinweisen, wie wichtig es ist eine Festplatten Verschlüsselung einzusetzen.
Wenn eine Windows Installation unverschlüsselt ist, kann relativ einfach eine Shell mit den höchsten Rechten (NT AUTHORITY\System) gestartet werden. Damit lässt sich absolut alles mit einem System machen, wie z.B das Passwort des lokalen Adminstrators ändern um sich damit anzumelden.
Um diese Shell zu starten bedienen wir uns dem Windows Feature Eingabehilfen auf dem Login Bildschirm, welches immer als NT AUTHORITY\System Benutzer gestartet wird.
Es gibt verschiedene Varianten an diese Shell zu gelangen:

Variante 1: Programm kopieren (einfachere)

  1. Zielsystem mit WinPE oder Linux (mit NTFS Lese/Schreibberechtigungen) starten
  2. C:\Windows\System32\Utilman.exe nach Utilman.exe.bak umbenennen
  3. C:\Windows\System32\cmd.exe kopieren nach C:\Windows\System32\Utilman.exe
  4. Neustarten und die Eingabehilfen starten
  5. net user administrator <neuesPasswort>

winpe_utilman
windows_login_utilman

Variante 2: Image File Exection Options (komplexere)

  1. Zielsystem mit WinPE oder Linux (mit NTFS Lese/Schreibberechtigungen) starten
  2. Registry Hive C:\Windows\System32\config\SOFTWARE laden
  3. Zum Schlüssel (vom Zielsystem) wechseln KEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
  4. Neuen Schlüssel erstellen mit Namen utilman.exe
  5. In diesem Schlüssel einen String Value erstellen Name = debugger Value = cmd.exe
  6. Neustarten und die Eingabehilfen starten
  7. net user administrator <neuesPasswort>

SSH Socks Proxy

  1. Machmal muss ich auf die Schnelle auf einen Service in meinem Heim Netzwerk zugreifen ohne grossen Aufwand, wie z.B Port Forwarding zu konfigurieren. Dafür eignet sich am besten ein Socks Proxy via SSH Tunnel.

Voraussetzungen

  • SSH Server im internen Netzwerk
  • ssh Client

Vorteile

  • schnelle unkomplizierte Konfiguration
  • verschlüsselte Verbindung auch für unsichere Protokolle (http, ftp etc.)
  • Port Forwarding kann “umgangen” werden

Vorgehensweise

Ich zeige die Vorgehensweise auf OSX 10.9. Der SSH Server ist OpenSSH auf einer Synology Diskstation.
SSH Tunnel vom Client zum Server öffnen

ssh -D 8000 root@irbe.ch

Dies öffnet eine SSH Session zu irbe.ch und erstellt einen SOCKS Proxy auf Port 8000.
OSX Konfigurieren

  1. Unter den Netzwerkeinstellungen links die aktive Verbindung auswählen und Weitere Optionen … wählen
  2. Unter Proxies SOCKS Proxy anwählen, als IP 127.0.0.1 eintragen und Port 8000

SOCKSProxy

OSX automatische statische Routen für L2TP/IPSec VPN Tunnel

Um nach dem Aufbau eines L2TP/IPSec Tunnels mittels OSX eingebauter VPN Software automatisch eine statische Route hinzuzufügen bietet Apple folgendes Szenario:
File /etc/ppp/ip-up erstellen mit folgendem Inhalt:

#!/bin/sh
/sbin/route add SUBNET $5

SUBNET ersetzen mit dem Subnet, welches durch den VPN Tunnel geroutet werden soll (z.B 192.168.0.0/16)
Nun die Rechte des Scripts anpassen (als Root):

chmod 0755 /etc/ppp/ip-up

Dieses File wird nun jedes Mal ausgeführt, wenn ein VPN Tunnel aufgebaut wird.
Die Route wird automatisch wieder gelöscht, sobald der VPN Tunnel getrennt wird.

Kali Linux USB Stick auf dem Mac

Zu Testzwecken möchte ich einen USB Stick erstellen, von dem ich Kali Linux booten kann, wenn möglich ohne grosse Änderungen an OS X vornehmen zu müssen.
Anforderungen
– USB Stick (minimum 8GB)
– Macbook, iMac etc.
– Virtualisierungs Software (VirtualBox, VMware Fusion etc.)
Kali Linux 64bit ISO
refit
Guide
Als erstes erstellen wir auf dem USB Stick 3 Partitionen mittels Apple’s “Disk Utility”.

1. Partition: 100 MB HFS+
2. Partition: 100 MB FAT32
3. Partition: Rest FAT32

diskutility_partitioning
Danach laden wir rEFIt herunter und kopieren den Ordner “efi” auf die 1. Partition des USB Sticks.
Als nächstes öffnen wir eine Konsole und führen folgenden Befehl aus (USBSTICKPART1 durch 1. Partition des USB Sticks ersetzten!)

cd /Volumes/USBSTICKPART1/efi/refit; sudo sh enable.sh

Nun starten wir die Virtualisierungs Software erstellen eine neue VM und hängen das Kali ISO an.
Der USB Stick muss in der VM ersichtlich sein.
Da diese Schritte je nach Virtualisierungs Software unterschiedlich sind gehe ich nicht im Detail darauf ein.
Nun folgt die Installation von Kali auf den USB Stick. Ich werde nur die relevanten Schritte aufzeigen:

Das wars! Um Kali Linux nun zu starten während dem einschalten des Mac die Option Taste gedrückt halten, rEFIt auswählen und dann Linux auswählen.
refit_bootscreen
Diese Prozedur kann mit allen Linux Derivaten durchgeführt werden.