Archive | Februar, 2010

25 Februar 2010 ~ 3 Comments | ÄHNLICHE ARTIKEL

Der wahre Hacker…

Hacker sind auch heute noch ein Mythos. Das liegt wahrscheinlich daran, dass außenstehende nicht verstehen, was diese Leute machen und wie sie es anstellen. Leider gibt es auch solche Exemplare, die zwar keine Ahnung haben, aber trotzdem unbedingt als Hacker angesehen werden wollen. Dabei kommen dann solche Perlen der Unterhaltung heraus:

Get the Flash Player to see the wordTube Media Player.

Ja, in der Tat war dieses Video des “NextGenHacker101″ Anlass für diesen Blogeintrag: Leute, die Ahnung von der Materie haben, finden das Video einfach nur saukomisch – weil nichts davon korrekt ist. Schlimmerweise könnte sich dieses Nichtwissen bei technikfernen Leuten wirklich festsetzen :-( .
Aber es ist kein Einzelfall: Viele Leute verstehen unter “Hacken” das stupide Einbrechen in einem (Windows-) Computer. Jeder Taschenspielertrick scheint recht zu sein, um die Bezeichnung “Hacker” zu erlangen. Z.B. hier:

Get the Flash Player to see the wordTube Media Player.

Dass dieser “Hack” nur dann funktioniert, wenn kein Administrator-Passwort gesetzt ist, wird dabei einfach mal verschwiegen. Stattdessen hätte man lieber zeigen sollen, wie man über Linux das Admin-Passwort zurücksetzen kann. Aber das wäre wohl zu viel Arbeit gewesen ;-) .
In der gleichen Liga wie die “Ich kann mich in einen ungeschützten Account einloggen”-Hacker spielen die “Ich kann das Passwort ändern, wenn ich bereits eingeloggt bin”-Hacker:

Get the Flash Player to see the wordTube Media Player.

Darüber gibt es dann eigentlich nur noch die Leute, die sich irgendein Programm besorgen und denken, damit jetzt endlich ein Hacker zu sein. Egal, ob es sich dabei dann um normale Remote-Desktop-Tools handelt oder aber um echte, coole “Hacker-Tools” – mit richtig vielen fiesen Knöpfen wie “Vertausche die Maustasten”, “Gib eine Nachricht aus” aus oder anderes Zeug. Ja, in der Tat! Solche Tools könnten auch richtige Hacker benutzen. Nur mit dem Unterschied, dass die auch den schwierigen Part meistern: Nämlich das Client-Programm auf dem Zielrechner zu installieren!

Get the Flash Player to see the wordTube Media Player.

Wie jetzt? Im Video wurde das ganze nur lokal verwendet? Und sogar noch mit Warnhinweis der Firewall? Na das ist ja mal echt gefährlich ;-) .

Aber jetzt mal im Ernst: Wenn das keine Hacker sind, wer ist dann ein Hacker? Dazu gibt es mehrere Antworten – je nachdem, welche Seite man betrachtet. Im Grunde haben jedoch alle Hackerdefinitionen eines gemein: Sie haben ein tiefes Wissen in dem Fachgebiet, auf das sie sich spezialisiert haben.

Grundvoraussetzung um ein richtiger Hacker zu sein ist meiner Meinung nach vor allem das Interesse daran, sich neue Dinge anzueignen, um vorhandene Lösungen verstehen, erforschen und verbessern zu können. Es ist eigentlich völlig egal, ob man sich jetzt nun die Computersicherheit auf die Fahnen geschrieben hat und guckt, wie man Sicherheitsmechanismen umgehen kann – oder, ob man eher technikaffin ist und sich gerne anguckt, wie irgendwelche Geräte intern verdrahtet sind und man solche Hardware gerne mal für den eigenen Gebrauch umbaut.

Es geht dabei garnicht um Ruhm oder Prestige, sondern primär um den eigenen Spieltrieb – herauszufinden, was möglich ist, obwohl es nicht möglich sein sollte; gucken, welche Komponenten man gegen einander ausspielen kann oder um es anders auszudrücken: Gucken, wie weit sich ein System dehnen lässt, bevor es kaputt geht.

Ich persönlich gehe dabei eigentlich immer wie folgt vor: Wenn mir ein neues System (z.B. neue Software) begegnet, gucke ich mir zuerst an, wie sie im Regelfall funktionieren sollte. Wenn ich das verstanden habe, gucke ich mir an, welche Schwachstellen das Gesamtsystem haben könnte (Benutzereingaben, Übergangspunkte zwischen verschiedenen Softwaremodulen, etc.). Anschließend probiere ich aus, wie diese Schwachstellen mit Fehlersituationen umgehen (simple Falscheingaben, gezielte Falscheingaben, usw.). Sollte man nun über ein ungewöhnliches Verhalten stolpern, muss man analysieren, wie es zustande gekommen ist – und man muss überprüfen, ob das Verhalten reproduzierbar und steuerbar ist. Und aus diesen Erkenntnissen baut man dann seine Angriffstragien auf, die dann unter Umständen auch weitere Eingriffe nach sich ziehen können.

Das Vorgehen ist natürlich nur rein exemplarisch – ich bin mir sicher, dass andere Personen auch anders bei ihren Analysen vorgehen.

Wie empfindet ihr gegenüber Hackern? Seid ihr selbst welche? Seht ihr Hacker das absolute Böse? Oder seid ihr solche Fanboys, wie sie in den Videos zu sehen waren? :D

Hackende Grüße, Kenny




Natürlich wollen auch Schwangere im Winter warm verpackt und gegen Schnee und Kälte geschützt sein. Winterjacken, speziell hergestellt für Schwangere sind etwas ganz Besonderes und nicht leicht zu erwerben, da man auf die Frage, ob es Winterjacken für Schwangere gibt, häufig nur ein genervtes "Nein, haben wir nicht bekommt. Jetzt ist es wieder so weit Die neue Schwangerschaftsmode ist da! Wunderbar lang geschnitten, um den Bereich um Hüften und Po, sowie den Bauch vor Kälte zu schützen. Alle Modelle sind mit zahlreichen Taschen versehen, sodass Sie auch einige Accessoires für Sie und Ihr Baby einpacken können. Jedes Modell gibt es in mehreren Farben und auch in großen Größen.
Einige Winterjacken haben Kapuzen, die Sie vor jedem Wind schützen und durch ihren raffinierten Schnitt können einige Jacken sogar nach der Schwangerschaft getragen werden, ohne dass etwas auffällt. So kann die Jacke auch später noch verwendet werden und man muss für den nächsten Winter keine neue Jacke kaufen.



21 Februar 2010 ~ 3 Comments | ÄHNLICHE ARTIKEL

SSH + VNC = sichere + Fernwartung

Wie man merkt, steht dieses Wochenende ganz im Zeichen der Informatik-Blogartikel :D . Keine Sorge, es wird auch wieder andere Zeiten geben, aber zur Zeit steht der Homeserver halt hoch im Kurs ;-) . Auch wenn jetzt alle Linux-Fanboys wieder anfangen zu meckern: Der Server läuft unter Windows (XP Pro SP3).

Linuxer werden damit wahrscheinlich kein Problem haben, aber unter Windows ist die Wartung eines Servers ohne grafische Oberfläche ziemlich schwierig, da sich einige Serveranwendungen garnicht über die Kommandozeile administrieren lassen. Eine Lösung musste her!

Mein erster Gedanke war, von außen über VPN einen Tunnels lokale Netzwerk herzustellen und dann im Netzwerk über die Windows-eigene Remotedesktopverbindung auf die grafische Oberfläche zuzugreifen. Das Einrichten von Windows als VPN-Server war überhaupt kein Problem – sowohl die Serverfunktion, als auch die Clientfunktion sind direkt im Betriebssystem enthalten. Allerdings… über den Router wollte das ganze dann nicht mehr funktionieren… trotz etlicher freigegebener Ports :-( .

Zum Glück eilte mir mein Freund @Baschdii (aka. @SBejga) vom rosa Riesen zur Hilfe und erklärte mir, dass man auch über SSH-Verbindung einen Tunnel herstellen kann. Das ist ganz praktisch, denn SSH lief bei mir ja bereits – ich musste in der Konfiguration des Servers (freeSSHd) nur noch die richtige Einstellung finden:

freeSSHd Tunneling

Danach habe ich überlegt, welches Remote-Desktop-Programm ich am besten verwende. Als Protokoll stand VNC relativ schnell fest – doch welche Implementation davon? Es gibt so viele… Nach einigen herben Enttäuschungen (ultraVNC stach dabei als besonders schreckliches Beispiel heraus) habe ich mich dann für realVNC entschieden. Selbst die äußerst eingeschränkte kostenlose Version reicht für meine Zwecke vollkommen aus :D ! Im Vergleich zu einigen Kontrahenten sind sowohl der Server, als auch der Client, ziemlich einfach zu konfigurieren. Um den Server nach außen hin abzusichern, bedarf es einer besonderen Einstellung:

Only accept connections from the local machine


Mit dieser Installation sind die Änderungen am Server bereits abgeschlossen. Nun ist noch der Client an der Reihe. Dieser muss mit 2 Programmen ausgerüstet werden, die man dank der Größe (ca. 6MB) eigentlich immer bei sich haben kann. :-)

Zuerst einmal benötigen wir ein Programm, mit dem wir den SSH-Tunnel zum Server aufbauen können. Für viele dürfte Putty als SSH-Client ein Begriff sein. Baschdii hat mich dagegen auf das Programm Tunnelier aufmerksam gemacht: Und in der Tat! Das Einrichten des Tunnels war ein Klacks :D ! Zuerst einmal trägt man im Login-Tab die SSH-Daten (Host, Port, Benutzername) ein:

Tunnelier: Login-Tab


Danach geht man auf den C2S-Tab und stellt dort den eigentlichen Tunnel ein. Die Konfiguration könnt ihr dem Screenshot entnehmen (Listen Interface = 127.0.0.1, List. Port = 5900, Destination Host = 127.0.0.1, Dest Port = 5900):

Tunnelier: C2S-Tab


Jetzt muss man über Tunnelier nur noch die SSH-Verbindung zum Server herstellen lassen und den realVNC-Client starten. Diesen kann man bereits normal benutzen – mit einer Ausnahme: Als Host muss die Adresse 127.0.0.1 angegeben werden!

realVNC-Client


Nach dem Klick auf “OK” passiert nun folgendes: Der “Viewer” verbindet sich mit dem lokalen Rechner und der Portnummer 5900. Dieser Port wurde von Tunnelier geöffnet und alle Daten, die der Viewer schickt, landen beim SSH-Client. Dieser schickt sie weiter an den SSH-Server, der wiederum bei sich lokal eine Verbindung zum Port 5900 aufgebaut hat – der Port, auf dem der echte realVNC-Server lauscht.
Auf diese Weise werden alle Daten, die die beiden VNC-Anwendungen austauschen über die SSH-Verbindung geleitet. Damit sollte ein Mitlesen oder gar Manipulieren der Daten durch Dritte effektiv verhindert werden :D !

Fernwartende Grüße, Kenny

21 Februar 2010 ~ 0 Comments | ÄHNLICHE ARTIKEL

[Update] Benutzerpasswort des hMailServer ändern…

Eigentlich wollte ich ja Mercury/32 auf meinem Heimserver einsetzen, jedoch hat das Programm mich maßlos enttäuscht. Als Ersatz habe ich für den hMailServer entschieden, der stabil läuft und obendrein auch noch wesentlich einfacher zu konfigurieren ist.

Die Sache funktioniert sogar so gut, dass ich überlege, ob ich nicht weitere Domains auf meinen Heimserver umziehen soll. Bei diesen anderen Domains würden allerdings auch externe Benutzer mit dabei sein: Und genau die würden Probleme machen! :-(

Nein, nicht was ihr denkt :D ! Wer sich die E-Mail-Protokolle (IMAP, POP3, SMTP) schonmal angegeguckt hat, der wird eins feststellen können: Ein Benutzer kann nicht einfach sein Passwort ändern!
Bei den großen Webmail-Anbietern kann man das über deren Webseite machen – das ist ein Zusatzfeature und von Betreiber zu Betreiber unterschiedlich. Doch wie wird das bei mir möglich sein? Eine Lösung musste her! Und die sieht derzeit so aus:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
  ' Wscript.Arguments(0) => domain name
 ' Wscript.Arguments(1) => username
 ' Wscript.Arguments(2) => old password
 ' Wscript.Arguments(3) => new password

  On Error Resume Next
  Err.Clear
 
  If Wscript.Arguments.Count = 4 Then
    Dim obApp
    Set obApp = CreateObject("hMailServer.Application")

    If Err.Number = 0 Then
      Call obApp.Authenticate(Wscript.Arguments(1) & "@" & Wscript.Arguments(0), Wscript.Arguments(2))
   
      If Err.Number = 0 Then
        Dim obDomain
        Set obDomain = obApp.Domains.ItemByName(Wscript.Arguments(0))
   
        If Err.Number = 0 Then
          Dim obAccount
          Set obAccount = obDomain.Accounts.ItemByAddress(Wscript.Arguments(1) & "@" & Wscript.Arguments(0))
   
          If Err.Number = 0 Then
            If obAccount.ValidatePassword(Wscript.Arguments(2)) Then
              obAccount.Password = Wscript.Arguments(3)  
              obAccount.Save

              WScript.StdOut.WriteLine "0" ' password set
           Else
              WScript.StdOut.WriteLine "1" ' old password is not correct
           End If
          Else
            WScript.StdOut.WriteLine "2" ' account does not exist
         End If
        Else
          WScript.StdOut.WriteLine "3" ' domain does not exist
       End If
      Else
        WScript.StdOut.WriteLine "4" ' old password is not correct
      End If
    Else
      WScript.StdOut.WriteLine "5" ' hMailServer.Application not available
   End If
  Else
    WScript.StdOut.WriteLine "6" ' wrong number of arguments
 End If

Hierbei handelt es sich um ein VBScript, das die COM-API benutzt, die der hMailServer bereitstellt. Dieses Script wird die Basis eines kleinen Servers werden, an dem man sich mit seiner E-Mail-Adresse und seinem Passwort anmelden und sein Passwort ändern können wird. Wie man das ganze mit SSL absichern kann, habe ich euch ja schon gezeigt. ;-)

Ja, für unerfahrene Benutzer könnte das Passwort ändern wirklich eine kleine Herausforderung werden – die geplante grafische Clientanwendung sollte die Hemmschwelle allerdings auf lange Sicht gesehen senken können. :-)

Update:
Mir ist gerade aufgefallen, dass ich eine wichtige Information vergessen habe! Und zwar muss das Script mit dem Windows Script Host cscript.exe aufgerufen werden. Ansonsten funktioniert die Ausgabe des Ergebniscodes nicht korrekt!

E-Mail-Grüße, Kenny

20 Februar 2010 ~ 0 Comments | ÄHNLICHE ARTIKEL

Stunnel: SSL für alles und jeden

Ich setze schon seit ein paar Tagen meinen Server komplett neu auf. Da der Server dieses Mal länger im Einsatz sein wird, habe ich mir natürlich auch überlegt, wie ich die Kiste ordentlich absichern kann. So biete ich zu allen Protokollen (z.B. IMAP, POP3, SMTP) auch die Varianten mit vorgeschaltetem SSL an (z.B. IMAPS, POP3S, SMTPS).

Wenn der Server direkt SSL unterstützt, ist das ganze garkein Problem. Dummerweise gibt es auch welche, bei denen das nicht der Fall ist. Das Projekt Stunnel kann dabei Abhilfe schaffen :D ! Das Programm fungiert als Reverse-Proxy, nimmt SSL-Verbindungen entgegen und leitet die Daten unverschlüsselt an den nichts ahnenden, lokalen Server weiter. :-)

So sehen bei mir z.B. die Definitionen für HTTPS, POP3S, IMAPS und SMTPS aus – alles ganz einfach. Beachtet werden muss nur, dass sich hinter der Portnummer, die unter “connect” angegeben ist, auch wirklich ein Server verbirgt:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[https]
accept  = 443
connect = 80

[pop3s]
accept  = 995
connect = 110

[imaps]
accept  = 993
connect = 143

[smtps]
accept  = 465
connect = 25

Bisher konnte ich noch keine größeren Problem festsstellen. Das Programm scheint auch nicht ganz unbekannt zu sein. ;-)

Verschlüsselte Grüße, Kenny

20 Februar 2010 ~ 0 Comments | ÄHNLICHE ARTIKEL

Hooking mit uallCollection

Ich habe die letzten Tage an einem Projekt gearbeitet, für das ich systemweit API-Aufrufe hooken können musste. Leider ist dieses Unterfangen nicht so einfach, wie das, was ich euch letztes Mal präsentiert habe.

Im Internet finden sich einige Lösungen für dieses Problem: Angefangen beim Schreiben von Systemtreibern, bis hin zum Injizieren von Threads in bereits laufende Prozesse. Besonders gut scheint das Paket madHookCode zu sein, das leider weder günstig noch einfach zu haben ist.
Glücklicherweise gibt es die uallCollection, die die gleiche Methode wie das Paket madHookCode zu benutzen scheint. Auch sonst scheinen die beiden Projekte eng miteinander verknüpft zu sein – für den Programmierer, der sich zwischen den beiden Paketen entscheiden muss, ist das jedenfalls ein Vorteil, da die uallCollection komplett kostenlos ist. ;-)

Lediglich das Injizieren neu gestarteter Prozesse beherrscht die uallCollection nicht. Aber wozu hat man 10 gesunde Finger? Man kan sich relativ leicht eine Möglichkeit schaffen, um selber auf neue Prozesse zu reagieren:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
unit ProcessU;

interface

procedure HookProcess;
procedure UnhookProcess;

implementation

uses
  Windows,
  uallHook,
  MainU;

var
  VProcessLib : HMODULE = 0;

  VNewCreateProcessA : function (lpApplicationName: PChar; lpCommandLine: PChar;
                         lpProcessAttributes, lpThreadAttributes: PSecurityAttributes;
                         bInheritHandles: BOOL; dwCreationFlags: DWORD; lpEnvironment: Pointer;
                         lpCurrentDirectory: PChar; const lpStartupInfo: TStartupInfo;
                         var lpProcessInformation: TProcessInformation): BOOL; stdcall;
  VOldCreateProcessA : function (lpApplicationName: PChar; lpCommandLine: PChar;
                         lpProcessAttributes, lpThreadAttributes: PSecurityAttributes;
                         bInheritHandles: BOOL; dwCreationFlags: DWORD; lpEnvironment: Pointer;
                         lpCurrentDirectory: PChar; const lpStartupInfo: TStartupInfo;
                         var lpProcessInformation: TProcessInformation): BOOL; stdcall;
  VNewCreateProcessW : function (lpApplicationName: PWideChar; lpCommandLine: PWideChar;
                         lpProcessAttributes, lpThreadAttributes: PSecurityAttributes;
                         bInheritHandles: BOOL; dwCreationFlags: DWORD; lpEnvironment: Pointer;
                         lpCurrentDirectory: PWideChar; const lpStartupInfo: TStartupInfo;
                         var lpProcessInformation: TProcessInformation): BOOL; stdcall;
  VOldCreateProcessW : function (lpApplicationName: PWideChar; lpCommandLine: PWideChar;
                         lpProcessAttributes, lpThreadAttributes: PSecurityAttributes;
                         bInheritHandles: BOOL; dwCreationFlags: DWORD; lpEnvironment: Pointer;
                         lpCurrentDirectory: PWideChar; const lpStartupInfo: TStartupInfo;
                         var lpProcessInformation: TProcessInformation): BOOL; stdcall;

function CatchCreateProcessA(lpApplicationName: PChar; lpCommandLine: PChar;
  lpProcessAttributes, lpThreadAttributes: PSecurityAttributes;
  bInheritHandles: BOOL; dwCreationFlags: DWORD; lpEnvironment: Pointer;
  lpCurrentDirectory: PChar; const lpStartupInfo: TStartupInfo;
  var lpProcessInformation: TProcessInformation): BOOL; stdcall; forward;
function CatchCreateProcessW(lpApplicationName: PWideChar; lpCommandLine: PWideChar;
  lpProcessAttributes, lpThreadAttributes: PSecurityAttributes;
  bInheritHandles: BOOL; dwCreationFlags: DWORD; lpEnvironment: Pointer;
  lpCurrentDirectory: PWideChar; const lpStartupInfo: TStartupInfo;
  var lpProcessInformation: TProcessInformation): BOOL; stdcall; forward;

function CatchCreateProcessA(lpApplicationName: PChar; lpCommandLine: PChar;
  lpProcessAttributes, lpThreadAttributes: PSecurityAttributes;
  bInheritHandles: BOOL; dwCreationFlags: DWORD; lpEnvironment: Pointer;
  lpCurrentDirectory: PChar; const lpStartupInfo: TStartupInfo;
  var lpProcessInformation: TProcessInformation): BOOL; stdcall;
begin
  Result := VNewCreateProcessA(lpApplicationName, lpCommandLine, lpProcessAttributes,
                               lpThreadAttributes, bInheritHandles, dwCreationFlags,
                               lpEnvironment, lpCurrentDirectory, lpStartupInfo,
                               lpProcessInformation);

  if Result then
    InjectLibrary(lpProcessInformation.dwProcessId, PAnsiChar(GetDLLFileName));
end;
function CatchCreateProcessW(lpApplicationName: PWideChar; lpCommandLine: PWideChar;
  lpProcessAttributes, lpThreadAttributes: PSecurityAttributes;
  bInheritHandles: BOOL; dwCreationFlags: DWORD; lpEnvironment: Pointer;
  lpCurrentDirectory: PWideChar; const lpStartupInfo: TStartupInfo;
  var lpProcessInformation: TProcessInformation): BOOL; stdcall;
begin
  Result := VNewCreateProcessW(lpApplicationName, lpCommandLine, lpProcessAttributes,
                               lpThreadAttributes, bInheritHandles, dwCreationFlags,
                               lpEnvironment, lpCurrentDirectory, lpStartupInfo,
                               lpProcessInformation);

  if Result then
    InjectLibrary(lpProcessInformation.dwProcessId, PAnsiChar(GetDLLFileName));
end;

procedure HookProcess;
begin
  VProcessLib := GetModuleHandle(KERNEL32);
  if (VProcessLib <> 0) then
  begin
    @VOldCreateProcessA := GetProcAddress(VProcessLib, 'CreateProcessA');
    @VOldCreateProcessW := GetProcAddress(VProcessLib, 'CreateProcessW');

    HookCode(@VOldCreateProcessA, @CatchCreateProcessA, @VNewCreateProcessA);
    HookCode(@VOldCreateProcessW, @CatchCreateProcessW, @VNewCreateProcessW);
  end;
end;

procedure UnhookProcess;
begin
  if (VProcessLib <> 0) then
  begin
    VProcessLib := 0;

    UnhookCode(@VNewCreateProcessA);
    UnhookCode(@VNewCreateProcessW);
  end;
end;

end.

Für alle, die gerne mal sehen wollen, wie man dieses API-Hooking betreibt, habe ich ein einfaches Programm geschrieben. Mit RegRewrite ist es möglich, Einträge in der Registry durch andere Werte zu ersetzen. Sowohl die neuen Werte, als auch die Konfiguration des Programms werden in der Registry abgelegt ;-) . Guckt am besten in den Quelltext, wenn ihr wissen wollt, wie ihr das Programm richtig konfiguriert – es ist, wie gesagt, nur ein kleiner Test gewesen :) .

  RegRewrite (294.5 KiB, 37 hits)

Zum Schluss noch etwas Rechtliches:
Der Autor dieses Programms haftet nicht für Schäden an Soft- oder Hardware oder Vermögensschäden, die durch das Benutzen des Programms entstehen, es sei denn, diese beruhen auf einem grob fahrlässigen oder vorsätzlichen Handeln des Autors, seiner Erfüllungsgehilfen oder seiner gesetzlichen Vertreter.
Für Schäden an der Gesundheit, dem Körper oder dem Leben des Nutzers haftet der Autor uneingeschränkt.


Hookende Grüße, Kenny

20 Februar 2010 ~ 2 Comments | ÄHNLICHE ARTIKEL

Fuck the Colorblind

Einigen Nerds dürfte das “Fuck the Colorblind”-T-Shirt ein Begriff sein. Dass die Farbsehfähigkeit jedoch etwas mit dem “Intelligenzgrad” zu tun haben soll, das war selbst mir neu…

Fuck the Colorblind



Farbige Grüße, Kenny

18 Februar 2010 ~ 0 Comments | ÄHNLICHE ARTIKEL

Mercury/32 deinstallieren

Ich habe gestern Abend meinen Server neu eingerichtet. Neben freeFTPd und freeSSHd habe ich mich auch dazu entschieden gehabt, Mercury/32 zu installieren. Leider ist das Programm nicht so praktisch, wie ich es mir erhofft hatte.

Deshalb wollte ich es gerade deinstallieren und stand vor einem größeren Problem: Das Programm liefert keine Deinstallationsmöglichkeit mit – auch über Systemsteuerung/Software ist nichts zu machen. Glücklicherweise habe ich im PMail-Wiki eine Deinstallationsanleitung gefunden.

Das einzige, was mich wirklich massiv ärgert: In der Beschreibung heißt es: “There is nothing in the Windows Registry to remove.”Diese Aussage ist nicht korrekt!

In Wirklichkeit legt das Programm beim Starten automatisch die Schlüssel “HKEY_CLASSES_ROOT\Software\Mercury32″, “HKEY_CURRENT_USER\Software\Mercury32″ und “HKEY_USERS\.DEFAULT\Software\Mercury32″ an. Wer keine Lust hat, dass irgendwelcher Datenmüll nach der Deinstallation zurück bleibt, sollte diese Schlüssel problemlos löschen können.

Aber nicht vergessen: Ich hafte nicht für Schäden an Software, Hardware oder für Vermögensschäden, die durch Anwendung dieser Änderungen entstanden sind oder entstehen könnten. ;-)

Mercury-freie Grüße, Kenny

17 Februar 2010 ~ 5 Comments | ÄHNLICHE ARTIKEL

[Update] Köhler unterschreibt Internetzensurgesetz

Nachdem eigentlich alle aufgeatmet und der Ankündigung vertraut hatten, dass das Internsperrgesetz gestoppt werden würde, müssen nun wohl alle wieder in die Realität zurückgeholt werden: Horst Köhler hat das Netzsperrengesetz unterzeichnet.

Laut einer Erklärung hieß es

“Es bestanden keine durchgreifenden verfassungsrechtlichen Bedenken”

Ich salutiere ehrfürchtig vor der Inkompetenz der deutschen Politik!

Wer hat uns verraten?
Die Sozialdemokraten!
Wer hat uns verraten?
Die Freien Demokraten!
Wer hat uns verraten?
Die Christlich’ Demokraten!


Update:
Auch auf Heise wurde darüber berichtet. Wie nicht anders zu erwarten ist im dazugehörigen Forum eine rote Welle losgetreten worden.

Fassungslose Grüße, Kenny

12 Februar 2010 ~ 2 Comments | ÄHNLICHE ARTIKEL

[Update] MeaTLight: Nerven schonen an der Ampel

Autofahrer kennen es bestimmt – die Ampel schaltet nie so, wie es eigentlich sinnvoll wäre. Oft scheint es, als ob die Vorfahrtstraße länger grün hat, als die Seitenstraße – und das, obwohl die meisten Autos doch aus der Seitenstraße kommen. Vor allem im Berufsverkehr ist dieses unnötige Warten eine richtige Plage. Doch was kann man dagegen tun?

Genau über die Frage habe ich die letzten Tage nachgedacht und bin zu einer theoretischen Lösung gekommen: die MeaTLight (gesprochen “Meat Light”). Die Abkürzung steht für “Measuring Traffic Light” und macht auch genau das: Sie misst, wieviele Autos an der Ampel warten.

Sie misst? Sollte sie nicht lieber zählen?
Eigentlich schon, aber messen ist theoretisch einfacher als zählen. Um zählen zu können, muss man einzelne Fahrzeuge unterscheiden können – man muss die vorhandenen Gegebenheiten berücksichtigen, was einen Mehraufwand in der Entwicklung bedeutet. Zum messen kann man sich seinen eigenen Maßstab wählen. Man könnte z.B. eine Markierung auf der Fahrbahn anbringen, die Licht einer bestimmten Wellenlänge reflektiert. Wenn ein Auto auf der Fahrbahn steht, würde dieses die Markierung verdecken und ein etwaiger Sensor würde das erkennen können, da die das Licht nicht mehr kontrolliert reflektiert wird. Je nachdem, wie lang die Markierung ist, kann man messen, wie lang die wartende Autoschlange ist.

Der Rest ist dann relativ einfach: Während dem Umschalten misst die Ampel, wie viele Autos warten und berechnet daraus die Länge der Grünphase. Das kann problemlos im Wechsel geschehen, sodass die Fahrtrichtung, die im Moment wenig Verkehr verzeichnet auch weniger Zeit in Anspruch nimmt.

Jetzt mag der Einspruch kommen, dass doch längere Fahrzeuge (z.B. Busse und LKWs) eine längere Strecke verdecken und als mehrere Autos gewertet werden würden. Das mag in der Tat sein. Aber aus Erfahrung wissen wir alle, dass große Fahrzeuge auch entsprechend länger für das Anfahren benötigen, als kleine Fahrzeuge (es sei denn in dem kleinen Fahrzeug sitzt ein schlechter Autofahrer).

Nunja, die Idee ist natürlich nicht so ausgereift, wie zum Beispiel beim Projekt Light Traffic, aber ich wollte meine Idee einfach mal in die Welt hinaus posaunen. ;-)

Update:
Hihi! Kleine Notiz am Rande: Mein Artikel hier hat die Domain Meatlight.nl vom ersten Platz der Google-Suchergebnisse für “meatlight” verdrängt. Schon irgendwie lustig! :D

'meatlight' Suchergebnisse



Autofahrende Grüße, Kenny

12 Februar 2010 ~ 3 Comments | ÄHNLICHE ARTIKEL

Das Getränk der Verlierer

Letztens war ich mit Sascha und ein paar Freunden unterwegs. Bevor wir den Irish Pub am Hackeschen Markt besucht haben, waren wir noch in einem Restaurant und haben uns einen Cocktail gegönnt. Auf dem Weg durch die Speisekarte hat folgende Überschrift meine Aufmerksamkeit erregt:

Säfte und Nektare von Looza

Ja, ich weiß! Man soll eigentlich nicht über das Marketing anderer Leute meckern, aber hier ist die Namenswahl doch massiv fehlgeschlagen. Anders kann ich mir nicht erklären, dass jemand die Marke Looza entwickelt! Die phonetischen Implikationen sind mir da doch allzu offensichtlich! :D

Ich persönlich kann mir jedenfalls nicht vorstellen, dass jemand freiwillig mit einem Verlierergetränk gesehen werden will… ;-)

Gewinnergrüße, Kenny

145
no-www.org extra-www.org

Datenbank: 48 Abfragen in 0.6420.642 Sekunden