Gehe zu deutscher Webseite

News

Download description:

The nightly build of the GWhoIs fork by ViaThinkSoft !
Daniel Marschall
ViaThinkSoft Co-Founder
Project description:



VNag (ViaThinkSoft Nagios) ist ein Framework für PHP, das es erlaubt, Plugins für Nagios-kompatible Systeme (z.B. auch Icinga2) gemäß den Richtlinien zu erstellen.

Das Download-Paket enthält Dokumentation und Beispiele und eine Vielzahl an neuen Plugins, z.B. um eine WordPress-Installation auf Updates zu überprüfen.

VNag ermöglicht es nicht nur, normale Nagios/Icinga-Plugins zu entwickeln (PHP wird über CLI aufgerufen), sondern erlaubt auch, ein Plugin über das Web zur Verfügung zu stellen:

  • Das ist PHP geschriebene Plugin kann über einen HTTP-Daemon (z.B. Apache) im Browser angezeigt werden. Neben der Anzeige der Nagios-Ausgabe (Summary, Verbose information, Performance data) können beliebige HTML-Ausgaben hinzugefügt werden, um z.B. noch Diagramme zu präsentieren.

  • Die Web-Ausgabe enthält einen maschinenlesbaren (unsichtbaren) Teil, der mit Hilfe des "web reader"-Plugins von VNag ausgelesen und in das Standardformat für die Überwachung mit einer lokalen Nagios Instanz umgewandelt werden kann. Somit ist es z.B. möglich, mittels Nagios bestimmte Dinge (z.B. eine WordPress-Version) auf einem entfernten System, bei dem kein Shell-Zugriff möglich ist, zu überwachen.

  • Es ist auch möglich, Webseiten zu erzeugen, die nur einen unsichtbaren maschinenlesbaren Teil besitzen, jedoch ohne visuellen Teil. Dieser maschinenlesbare Teil kann optional signiert und/oder verschlüsselt werden.
Daniel Marschall
ViaThinkSoft Co-Founder
Download description:

Dieser inoffizielle Patch behebt einige Fehler in der deutschen Fassung des Spieleklassikers "Blown Away" aus dem Jahr 1994.

Der Patch ist für alle deutschen Fassungen (ALDI Spielebox und Einzelhandel) geeignet.
Daniel Marschall
ViaThinkSoft Co-Founder
Microsoft hat die Fotoanzeige, so wie sie in den vergangenen Windows Versionen zur Verfügung stand, in der neusten Version von Windows 10 versteckt.
Die Programmdateien (C:\Program Data (x86)\Windows Photo Viewer) sind derzeit noch vorhanden, jedoch fehlen die notwendigen Registry-Einträge. Sollten die Dateien fehlen, können Sie von einer alten Windows Installation kopiert werden.

Zum Verwenden der Fotoanzeige erstellen Sie eine Datei mit dem Namen PhotoViewer.reg mit folgendem Inhalt:
(Dieser Inhalt ist von einem Windows 7 System entnommen worden)

Windows Registry Editor Version 5.00

[hkey_classes_root\applications\photoviewer.dll]

[hkey_classes_root\applications\photoviewer.dll\shell]

[hkey_classes_root\applications\photoviewer.dll\shell\open]
"MuiVerb"="@photoviewer.dll,-3043"

[hkey_classes_root\applications\photoviewer.dll\shell\open\command]
@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
  00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,72,00,75,00,\
  6e,00,64,00,6c,00,6c,00,33,00,32,00,2e,00,65,00,78,00,65,00,20,00,22,00,25,\
  00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,46,00,69,00,6c,00,65,00,73,00,\
  25,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,77,00,73,00,20,00,50,00,68,00,6f,\
  00,74,00,6f,00,20,00,56,00,69,00,65,00,77,00,65,00,72,00,5c,00,50,00,68,00,\
  6f,00,74,00,6f,00,56,00,69,00,65,00,77,00,65,00,72,00,2e,00,64,00,6c,00,6c,\
  00,22,00,2c,00,20,00,49,00,6d,00,61,00,67,00,65,00,56,00,69,00,65,00,77,00,\
  5f,00,46,00,75,00,6c,00,6c,00,73,00,63,00,72,00,65,00,65,00,6e,00,20,00,25,\
  00,31,00,00,00

[hkey_classes_root\applications\photoviewer.dll\shell\open\droptarget]
"Clsid"="{FFE2A43C-56B9-4bf5-9A79-CC6D4285608A}"

[hkey_classes_root\applications\photoviewer.dll\shell\print]

[hkey_classes_root\applications\photoviewer.dll\shell\print\command]
@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
  00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,72,00,75,00,\
  6e,00,64,00,6c,00,6c,00,33,00,32,00,2e,00,65,00,78,00,65,00,20,00,22,00,25,\
  00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,46,00,69,00,6c,00,65,00,73,00,\
  25,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,77,00,73,00,20,00,50,00,68,00,6f,\
  00,74,00,6f,00,20,00,56,00,69,00,65,00,77,00,65,00,72,00,5c,00,50,00,68,00,\
  6f,00,74,00,6f,00,56,00,69,00,65,00,77,00,65,00,72,00,2e,00,64,00,6c,00,6c,\
  00,22,00,2c,00,20,00,49,00,6d,00,61,00,67,00,65,00,56,00,69,00,65,00,77,00,\
  5f,00,46,00,75,00,6c,00,6c,00,73,00,63,00,72,00,65,00,65,00,6e,00,20,00,25,\
  00,31,00,00,00

[hkey_classes_root\applications\photoviewer.dll\shell\print\droptarget]
"Clsid"="{60fd46de-f830-4894-a628-6fa81bc0190d}"

Doppelklicken Sie auf die Datei und bestätigen Sie die Sicherheitsabfragen.

Rechtsklicken Sie auf eine JPEG Datei, dann wählen Sie "Öffnen mit", dann "Andere App auswählen". Dort runterscrollen und auf "Weitere Apps" klicken. Anschließend weiter runterscrollen, bis der Eintrag "Windows Fotoanzeige" erscheint. Diesen Menüpunkt wählen und ggf. die Checkbox unten anhaken, wenn dies die Standard-Anwendung werden soll.

Anmerkung: Die Originaldaten von Windows 10 sind wie folgt:

Windows Registry Editor Version 5.00

[hkey_classes_root\applications\photoviewer.dll]

[hkey_classes_root\applications\photoviewer.dll\shell]

[hkey_classes_root\applications\photoviewer.dll\shell\print]
"NeverDefault"=""

[hkey_classes_root\applications\photoviewer.dll\shell\print\command]
@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
  00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,72,00,75,00,\
  6e,00,64,00,6c,00,6c,00,33,00,32,00,2e,00,65,00,78,00,65,00,20,00,22,00,25,\
  00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,46,00,69,00,6c,00,65,00,73,00,\
  25,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,77,00,73,00,20,00,50,00,68,00,6f,\
  00,74,00,6f,00,20,00,56,00,69,00,65,00,77,00,65,00,72,00,5c,00,50,00,68,00,\
  6f,00,74,00,6f,00,56,00,69,00,65,00,77,00,65,00,72,00,2e,00,64,00,6c,00,6c,\
  00,22,00,2c,00,20,00,49,00,6d,00,61,00,67,00,65,00,56,00,69,00,65,00,77,00,\
  5f,00,46,00,75,00,6c,00,6c,00,73,00,63,00,72,00,65,00,65,00,6e,00,20,00,25,\
  00,31,00,00,00

[hkey_classes_root\applications\photoviewer.dll\shell\print\droptarget]
"Clsid"="{60fd46de-f830-4894-a628-6fa81bc0190d}"
Daniel Marschall
ViaThinkSoft Co-Founder
Project description:

Ein Bugtracker für Windows, entwickelt in Delphi.
Er kann MySQL und Microsoft SQL-Datenbanken ansteuern.

Derzeit noch im frühen Entwicklungs-Stadium.
Daniel Marschall
ViaThinkSoft Co-Founder
In den letzten Tagen hat der Webauftritt ViaThinkSoft zahlreiche Erweiterungen und Verbesserungen erhalten.

Neben codetechnischen Verbesserungen und kleinen Design-Anpassungen gibt es folgende große Neuerungen:
  • Allgemeines zur Seite:
    • Einbau einer Suchfunktion, um Informationen auf ViaThinkSoft schneller finden zu können (rechts oben)
    • URLs sind nun SEO-Optimiert und dadurch besser lesbar. Projekte können nun z.B. aufgerufen werden über https://www.viathinksoft.de/projects/colormanager
    • Die Webseite ist nun für Mobilgeräte optimiert.
  • In Bezug auf Projekte und Downloads:
    • Screenshotverwaltung wurde implementiert. Screenshots zu Projekten können nun im Mitgliederbereich hinzugefügt werden und werden auf der Projektseite für die Öffentlichkeit angezeigt. Mit Hilfe dieser neuen Funktionalität konnten die "ViaThinkSoft InfoPages" nun vollständig in die Projektseiten migriert werden. (Beispiel einer vollwertigen Projektseite)
    • Es kann nun für jeden Download eine Lizenz festgelegt werden, die auch öffentlich einsehbar ist. Der Endanwender erhält per Link auf eine externe Webseite nähere Informationen zu der Lizenz.
    • Sprache und Betriebssystem werden nun bei den Downloads angezeigt
  • Erweiterung der Benutzerprofile: Im Mitgliederbereich finden Community-Mitglieder nun die Möglichkeit, weitere Messenger und Dienste wie z.B. QQ, Teamspeak oder Discord hinzuzufügen.
  • Die Benutzersuche im Mitgliederbereich funktioniert nun wieder.
  • Die Parsing-Routinen für die ViaThinkSoft Textformatierung wurde komplett erneuert. Dabei sind nun einige neue Tags hinzugekommen, wie z.B. anklickbare, vor Spambots geschützte, E-Mail-Adressen oder das Einbinden von YouTube-Videos. Auch gibt es nun eine Möglichkeit, Smileys für gewisse Abschnitte per BB-Code zu deaktivieren. PHP-Code wird farbig angezeigt.
  • Diverse Bugfixes im Mitgliederbeich in Bezug auf Uploads von Downloads. Die Preload-Funktionalität ist nun wieder funktionell.

Die Multilingualität der Seite und der Projekte/Downloads wird sukzessive in den nächsten Monaten erfolgen.
Daniel Marschall
ViaThinkSoft Co-Founder
Download description:

This package contains php functions for backwards compatibility, which can be included as "prepend" script - this means, that all PHP scripts (called via Apache, CLI etc.) include these scripts and therefore offer the backwards compatibility functions.

Currently, the pack contains following units:
- Replacement of mysql-functions with PHP 7
- Replacement of register_globals
- Replacement for ereg-functions

If you need htmlentities(), htmlspecialchars() or html_entity_decode() with old semantics, you can download compatibility functions here
Daniel Marschall
ViaThinkSoft Co-Founder
Download description:

For the latest source code, please check the SVN repository.
Daniel Marschall
ViaThinkSoft Co-Founder
functions.inc.php

<?php

define
('SIGNED_FORMDATA_SECRET''(place secret here)');

function 
get_signed_fieldname($fieldname) {
        return 
'signed_'.bin2hex($fieldname).'_'.sha1(SIGNED_FORMDATA_SECRET.$fieldname);
}

function 
get_signed_formdata() {
        
$out = array();
        foreach (
$_REQUEST as $name => $value) {
                list(
$head$enc_fieldname$hash) = array_pad(explode('_'$name3), 3null);
                if (
$head != 'signed') continue;
                
$fieldname hex2bin($enc_fieldname);
                
$expect_hash sha1(SIGNED_FORMDATA_SECRET.$fieldname);
                if (
$expect_hash == $hash) {
                        
$out[$fieldname] = $value;
                }
        }
        return 
$out;
}

page1.php

<?php

include 'functions.inc.php';

echo 
'<form method="POST" action="target.php">';
echo 
'Signed Field1: <input type="text" name="'.get_signed_fieldname('field1').'" value="abc"><br>';
echo 
'Signed Field2: <input type="text" name="'.get_signed_fieldname('field2').'" value="def"><br>';
echo 
'Unsigned Field: <input type="text" name="field3" value="xyz"><br>';
echo 
'<input type="submit">';
echo 
'</form>';

target.php

<?php

include 'functions.inc.php';

print_r(get_signed_formdata());

// Example usage:

foreach (get_signed_formdata() as $name => $value) {
        
mysql_query("UPDATE users SET `$name` = '".mysql_real_escape_string($value)."' where id = ".$_SESSION['user_id']);
}
Daniel Marschall
ViaThinkSoft Co-Founder
Szenario: Eine Anwendung oder App baut eine verschlüsselte Verbindung zu einem Webserver auf. Aufgrund der Verschlüsselung können Sie nicht mittels herkömmlichen Tools wie z.B. Wireshark die Daten mitlesen. Diese Anleitung zeigt, wie Sie mittels eines Linux-Systems (z.B. einem Raspberry Pi) die verschlüsselten Daten aufzeichnen können.

Dies funktioniert jedoch NUR unter folgenden Bedingungen:

1. Die Zielanwendung muss im selben Netzwerk wie die Linux-Maschine laufen. Eine Überwachung über das Internet ist nicht möglich.

2. Die Zielanwendung muss über eine bestimmte Schwachstelle verfügen. Sie muss SSL-Zertifikate akzeptieren, die von einer nicht-vertrauenswürdigen Zertifizierungsstelle (CA) ausgestellt wurden, bzw. es muss eine Möglichkeit geben, eine Zertifikatswarnung zu ignorieren und mit dem Programmablauf fortzufahren, oder dem Zertifikat durch das Hinzufügen in den Stammzertifikatsspeicher explizit zu vertrauen.

3. Die Zielanwendung darf keine zusätzlichen Sicherheitsmaßnahmen wie z.B. Public Key Pinning oder feste IP-Adressen verwenden.

Diese Anleitung ist gerichtet an technisch versierte Personen, die z.B. eine Schadware oder ein auffälliges Programm analysieren möchten. Die Analyse von verschlüsselten Verbindungen ermöglicht es z.B. Sicherheitsforschern, das Verhalten von Schadware zu analysieren. Es ist auch sinnvoll, Programme, die ungewöhnlich häufig Verbindungen zum Internet aufbauen, zu analysieren, um zu prüfen, welche Daten gesendet werden und ob z.B. ein Verstoß gegen den Datenschutz vorliegt.

Achtung: Diese Anleitung darf nicht dazu verwendet werden, um Daten von fremden Personen ohne deren Erlaubnis auszuspähen, oder Dinge wie z.B. einen Kopierschutz auszuhebeln. Die Verwendung erfolgt auf eigene Gefahr; ViaThinkSoft haftet nicht für entstandene Schäden.


Schritt 1: Bestimmung der Ziel-Domain

Im ersten Schritt müssen Sie bestimmen, welche Domain Sie überwachen möchten.

Es gibt verschiedene Möglichkeiten, z.B. können Sie Wireshark verwenden, um die DNS-Anfragen auszulesen.

Eine andere Möglichkeit ist es, in Windows den DNS-Cache zu leeren (ipconfig /flushdns), danach die Zielanwendung zu starten, und gleich danach den DNS Cache abzufragen (ipconfig /displaydns).

In unserem Beispiel möchten wir die Domain www.example.com analysieren.


Schritt 2: Erstellen eines Sicherheits-Zertifikats

Auf der Linux-Maschine erstellen Sie ein Verzeichnis, z.B. /daten/example

Dort geben Sie ein:

openssl req -x509 -newkey rsa:4096 -keyout private.key -out cert.crt -days 365 -nodes -subj '/CN=www.example.com'


Schritt 3: Apache auf der Linux-Maschine einrichten

Erstellen Sie /etc/apache2/sites-available/001-example.conf mit folgendem Inhalt:

<VirtualHost *:443>
        SSLEngine on
        SSLCertificateFile "/daten/example/cert.crt"
        SSLCertificateKeyFile "/daten/example/private.key"
        SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
        ServerName www.example.com
        DocumentRoot /daten/example
</VirtualHost>

<VirtualHost *:80>
        ServerName www.example.com
        DocumentRoot /daten/example
</VirtualHost>

Erstellen Sie einen Symlink

/etc/apache2/sites-available/001-example.conf -&gt; /etc/apache2/sites-enabled/001-example.conf

Starten Sie Apache dann neu:

service apache2 restart


Schritt 4: Überwachungs-Script einrichten

Erstellen Sie das Script /daten/example/proxy.php mit folgendem Inhalt:

<?php

$site 
'https://'.$_SERVER['http_host'];
$remoteDomain $_SERVER['http_host'];
$proxyDomain $_SERVER['http_host'];

# ----------------------------------------------------------------

error_reporting(E_ALL);
ini_set('display_errors'1);

$request $_SERVER['request_uri'];

$ch curl_init();

/* If there was a POST request, then forward that as well.*/
if ($_SERVER['request_method'] == 'POST')
{
    
curl_setopt($chCURLOPT_POSTTRUE);

    
$postvars = array();
    foreach (
$_POST as $key => $val) {
        
$postvars[] = urlencode($key).'='.urlencode($val);
    }
    
$postvars implode('&'$postvars);
    
curl_setopt ($chCURLOPT_POSTFIELDS$postvars);
}


//$url = 'http://whois.viathinksoft.de/req';
$url $site $request;

curl_setopt($chCURLOPT_URL$url);

curl_setopt($chCURLOPT_HEADERTRUE);

$headers getallheaders();

/* Translate some headers to make the remote party think we actually browsing that site. */
$extraHeaders = array();
if (isset(
$headers['referer'])) {
    
$extraHeaders[] = 'Referer: 'str_replace($proxyDomain$remoteDomain$headers['referer']);
}
if (isset(
$headers['origin'])) {
    
$extraHeaders[] = 'Origin: 'str_replace($proxyDomain$remoteDomain$headers['origin']);
}

/* Forward cookie as it came.  */
curl_setopt($chCURLOPT_HTTPHEADER$extraHeaders);
if (isset(
$headers['cookie']))
{
    
curl_setopt($chCURLOPT_COOKIE$headers['cookie']);
}
curl_setopt($chCURLOPT_RETURNTRANSFERTRUE);

curl_setopt($chCURLOPT_FOLLOWLOCATIONfalse);
$response curl_exec($ch);

$header_size curl_getinfo($chCURLINFO_HEADER_SIZE);
$headers substr($response0$header_size);
$body substr($response$header_size);

$headerArray explode(PHP_EOL$headers);

/* Process response headers. */
$xx '';
foreach(
$headerArray as $header) {
    
$colonPos strpos($header':');
    if (
$colonPos !== FALSE) {
        
$headerName substr($header0$colonPos);

        
/* Ignore content headers, let the webserver decide how to deal with the content. */
        
if (trim($headerName) == 'Content-Encoding') continue;
        if (
trim($headerName) == 'Content-Length') continue;
        if (
trim($headerName) == 'Transfer-Encoding') continue;
        
/* -- */
        /* Change cookie domain for the proxy */
        
if (trim($headerName) == 'Set-Cookie') {
            
$header str_replace('domain='.$remoteDomain'domain='.$proxyDomain$header);
        }
        
/* -- */
    
}
    
header($headerFALSE);
}

echo 
$body;

curl_close($ch);

// ----------------- Logging

if (substr($body,0,1) == '{') {
    
$body json_encode(json_decode($body), JSON_PRETTY_PRINT);
}

if (
isBinary($body)) {
    
$body "(Binary data)";
}

$logcontent $_SERVER['request_method']." ".$_SERVER['request_scheme'].'://'.$_SERVER['server_name'].':'.$_SERVER['server_port'].$_SERVER['request_uri']."\n";
$logcontent .= "\n";
$logcontent .= "REQUEST HEADERS:\n".print_r(getRequestHeaders(),true);
if (
$_SERVER['request_method'] == 'GET'$logcontent .= "GET FIELDS:\n" print_r($_GET,true);
if (
$_SERVER['request_method'] == 'POST'$logcontent .= "POST FIELDS:\n" print_r($_POST,true);
$logcontent .= "\n";
$logcontent .= "RESPONSE HEADERS:\n".print_r($headerArray,true);
$logcontent .= "RESPONSE BODY:\n$body\n";
$logcontent .= "\n\n\n---------\n\n";

$logcontent str_replace("\n""\r\n"$logcontent);
file_put_contents("log.txt"$logcontentFILE_APPEND);

// ----------------- Functions

function isBinary($str) {
    return 
preg_match('~[^\x20-\x7e\t\r\n]~'$str) > 0;
}

function 
getRequestHeaders() {
    
// https://stackoverflow.com/questions/541430/how-do-i-read-any-request-header-in-php
    
$headers = array();
    foreach(
$_SERVER as $key => $value) {
        if (
substr($key05) <> 'HTTP_') {
            continue;
        }
        
$header str_replace(' ''-'ucwords(str_replace('_'' 'strtolower(substr($key5)))));
        
$headers[$header] = $value;
    }
    return 
$headers;
}

Erstellen Sie /daten/example/.htaccess mit folgendem Inhalt:

RewriteEngine on
RewriteRule ^(.*)$ proxy.php [qsa,l]

Stellen Sie sicher, dass mod_rewrite aktiviert ist:

a2enmod rewrite

Erstellen Sie /daten/example/log.txt mit allen Berechtigungen:

touch /daten/example/log.txt

chmod 777 /daten/example/log.txt



Schritt 5: DNS-Eintrag umlenken

Auf dem Windows PC öffnen Sie die Eingabeaufforderung mit Administrator-Rechten. Dort eingeben:

notepad.exe drivers\etc\hosts

In dieser Datei fügen Sie folgende Zeile hinzu:

1.2.3.4    www.example.com

wobei Sie 1.2.3.4 mit der IP-Adresse Ihres Linux-Systems austauschen.

Alternativ können Sie den DNS-Eintrag auch für andere Geräte im Netzwerk umleiten, wenn Sie einen eigenen DNS-Server (z.B. mittels pihole/dnsmasq) besitzen. In diesem Falle können Sie dann auch Verbindungen von Apps aus Mobilgeräten im Netzwerk überwachen.

Starten Sie nun die Anwendung. Es sollte nun auf der Linux-Maschine die Datei log.txt mit den übertragenen Daten gefüllt werden. Die Anwendung müsste normal funktionieren, da die Daten durch das Proxy-Script ganz normal weitergericht werden ("Man in the middle").


Schritt 6: Hinzufügen des Zertifikats in den Stammzertifikatsspeicher

Sollte die Anwendung nicht funktionieren, kann es daran liegen, dass diese prüft, ob das Zertifikat von einer vertrauenswürdigen Stelle signiert wurde.

Sofern die Anwendung kein Public Key Pinning verwendet, können Sie versuchen, das selbst ausgestellte Zertifikat in dem Stammzertifikats-Speicher Ihres Betriebssystems oder Browsers hinzuzfügen.

Achtung: Dieses Vorgehen ist riskant. Da diese Anleitung keine besonderen Maßnahmen zur Sicherung des privaten Schlüssels (private.key) beschreibt, besteht die Gefahr, dass dieser private Schlüssel dazu verwendet wird, SIE auszuspionieren oder Verbindungen Ihres Computers zu kompomittieren. Sie sollten daher nachdem Sie Ihre Analyse abgeschlossen haben, das Zertifikat wieder aus Ihrem Stammzertifikatsspeicher entfernen.

Unter Windows fügen Sie das Zertifikat wie folgt hinzu:
- Öffnen Sie inetcpl.cpl
- Gehen Sie auf den Reiter Inhalte und dann auf Zertifikate.
- Klicken Sie auf "Importieren", dann auf Weiter.
- Wählen Sie die Datei cert.crt aus und klicken Sie auf Weiter.
- Wählen Sie den Speicher "Vertrauenswürdige Stammzertifizierungsstellen". Klicken Sie dann auf Weiter und Fertig stellen.
Daniel Marschall
ViaThinkSoft Co-Founder
def hms_string(sec_elapsed):
        h = int(sec_elapsed / (60 * 60))
        m = int((sec_elapsed % (60 * 60)) / 60)
        s = sec_elapsed % 60
        return "{}:{:>02}:{:>05.2f}".format(h, m, s)
Daniel Marschall
ViaThinkSoft Co-Founder
import sys
import traceback

try:
        # insert code here
except (KeyboardInterrupt, SystemExit):
        sys.stderr.write("Keyboard interrupt\n")
except Exception as e:
        sys.stderr.write("\n")
        sys.stderr.write("\n")
        sys.stderr.write("** ERROR **\n")
        #sys.stderr.write("Message: {}\n".format(e))
        traceback.print_exc()
        sys.stderr.write("\n")
Daniel Marschall
ViaThinkSoft Co-Founder
1. Bei t-online.de anmelden und ins E-Mail-Center gehen

2. Oben Zahnrad klicken

3. Registerkarte "Zusatzdienste": Prüfen ob der Dienst "SMS, MMS und Fax" aktiviert ist.

4. Registerkarte "Konto-Details": Prüfen, ob eine Fax-Nummer angelegt ist. Wenn nicht, dann eine Faxnummer erzeugen lassen.
Daniel Marschall
ViaThinkSoft Co-Founder
Download description:

This tool can pack and unpack images in the container file BLOWNAWY.ART of the game "Blown Away" by Imagination Pilots.

Following games are supported:
- "Blown Away" (1994)
- "Panic in the Park" (1995)
- "Where's Waldo? At the Circus" (1995)
- "Where's Waldo? Exploring Geography" (1996)
- "Eraser Turnabout" (1997)
- "Virtual K'Nex" (1998)

Included in this download:
- Linux binary files
- 32-Bit Windows binary files
- C source code
Daniel Marschall
ViaThinkSoft Co-Founder
#!/bin/bash
wget https://www.virtualhere.com/sites/default/files/usbserver/vhusbdarm
sudo chmod +x ./vhusbdarm
sudo mv vhusbdarm /usr/sbin
wget http://www.virtualhere.com/sites/default/files/usbserver/scripts/vhusbdpin
sudo chmod +x ./vhusbdpin
sudo mv vhusbdpin /etc/init.d
sudo update-rc.d vhusbdpin defaults

echo "AutoAttachToKernel=1" > /root/config.ini

#sudo reboot
Daniel Marschall
ViaThinkSoft Co-Founder
aptitude install aview imagemagick

convert beispiel.jpg beispiel.pgm

asciiview beispiel.pgm
Daniel Marschall
ViaThinkSoft Co-Founder
1. Damit man am Bildschirm arbeiten kann:

dpkg-reconfigure keyboard-configuration
service keyboard-setup restart

2. Damit man einen normalen Bildschirm an HDMI anschließen kann:

# Muss in jeder tty gestartet werden:
fbset -g 800 600 800 1200 32
fbset -t 25000 88 40 23 1 128 4
# Das geht nur auf tty0...:
#V:800x600p-60 > /sys/class/graphics/fb0/mode

3. Charset auf ISO-8859-1 umstellen
dpkg-reconfigure console-setup

4. kernel meldungen nicht auf tty ausgeben!

- In /etc/sysctl.conf auskommentieren: "Uncomment the following to stop low-level messages on console"
- Danach aufrufen: sysctl -p /etc/sysctl.conf

5. Auto-Start-Script schreiben:

#!/bin/bash

# Dieses Script wird im "Autostart" (~/.profile) gestartet

if tty | fgrep tty > /dev/null ; then
        # Angemeldet am Bildschirm (also nicht über SSH)

        fbset -g 800 600 800 1200 32
        fbset -t 25000 88 40 23 1 128 4

        echo Screen resolution set to 800x600
fi
Daniel Marschall
ViaThinkSoft Co-Founder
Download description:

YouTube Downloader is a tool for Linux. It is a wrapper for youtube-dl and offers several additional functionalities like the downloading and searching inside channels, or downloading of playlists. You can either download videos or audio files. YouTube-IDs can be automatically written in the ID tag of downloaded mp3 files. An automatic managed list of already downloaded videos allows you to move away the downloaded files without the risk of downloading the already downloaded files again. The tool is fully CLI and is optimized for cronjobs.

Requirements:
- PHP CLI
- Package "youtube-dl"
- If you want to extract MP3 files: "avconv" or "ffmpeg". Optional: "id3v2"
- Ein Youtube API-Key (obtain here)
Daniel Marschall
ViaThinkSoft Co-Founder
void read_mangled_files() {
        glob_t paths;
        int globresult;
        char **p;

        globresult = glob("test/*.txt", 0, NULL, &paths);
        if (globresult == 0) {
                for (p=paths.gl_pathv; *p != NULL; ++p) {
                        printf("Reading file %s ...\n", *p);
                        // Do something
                }
                globfree(&paths);
        }
}
Daniel Marschall
ViaThinkSoft Co-Founder
<?php

$key 
'ABCD';

function 
allSwapCombinations($key$praefix='') {
    
$out = array();
    for (
$i=0$i<strlen($key); $i++) {
                
$char $key[$i];
        if (
strlen($key) == 1) {
            
$out[] = $praefix.$char;
        } else {
            
$key2 substr($key,0,max(0,$i)).substr($key,$i+1);
            
$out array_merge($outallSwapCombinations($key2$praefix.$char));
        }
    }
    return 
$out;
}

print_r(allSwapCombinations($key));
Daniel Marschall
ViaThinkSoft Co-Founder