Go to English page

Neuigkeiten

Downloadbeschreibung:

Das Nightly Nuild des GWhoIs-Forks von ViaThinkSoft !
Daniel Marschall
ViaThinkSoft Mitbegründer
Projektbeschreibung:

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 Mitbegründer
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.
  • 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 Mitbegründer
Downloadbeschreibung:

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 Mitbegründer
Downloadbeschreibung:

For the latest source code, please check the SVN repository.
Daniel Marschall
ViaThinkSoft Mitbegründer
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('_', $name, 3), 3, null);
                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 Mitbegründer
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($ch, CURLOPT_POST, TRUE);

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


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

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_HEADER, TRUE);

$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($ch, CURLOPT_HTTPHEADER, $extraHeaders);
if (isset($headers['cookie']))
{
        curl_setopt($ch, CURLOPT_COOKIE, $headers['cookie']);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
$response = curl_exec($ch);

$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$headers = substr($response, 0, $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($header, 0, $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($header, FALSE);
}

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", $logcontent, FILE_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($key, 0, 5) <> 'HTTP_') {
            continue;
        }
        $header = str_replace(' ', '-', ucwords(str_replace('_', ' ', strtolower(substr($key, 5)))));
        $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 Mitbegründer
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 Mitbegründer
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 Mitbegründer
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 Mitbegründer
Downloadbeschreibung:

Dieses Tool kann Bilder aus der Containerdatei BLOWNAWY.ART des Spiels "Explosiv - Blown Away" extrahieren und wieder hinzufügen.

Es werden folgende Spiele unterstützt:
- "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)

Im Paket enthalten sind:
- Linux Binaries
- Ausführbare 32-Bit Windows-Anwendung
- Quelltext in C
Daniel Marschall
ViaThinkSoft Mitbegründer
#!/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 Mitbegründer
aptitude install aview imagemagick

convert beispiel.jpg beispiel.pgm

asciiview beispiel.pgm
Daniel Marschall
ViaThinkSoft Mitbegründer
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 Mitbegründer
Downloadbeschreibung:

Der YouTube Downloader ist ein Tool für Linux. Es basiert auf dem Tool youtube-dl und bietet einige Zusatzfunktionen wie z.B. das Herunterladen und Suchen in Kanälen oder das Herunterladen von Playlists. Es können sowohl Videos als auch Audio-Dateien heruntergeladen werden. Youtube-IDs können in die ID-Tags von heruntergeladenen MP3-Dateien eingebunden werden. Eine automatisch verwaltete Liste mit bereits heruntergeladenen Videos erlaubt es, die heruntergeladenen Dateien zu verschieben, ohne dass die Videos neu heruntergeladen werden. YouTube Downloader ist vollständig kommandozeilenbasiert und für Cronjobs optimiert.

Anforderungen:
- PHP CLI
- Paket "youtube-dl"
- Falls MP3-Dateien extrahiert werden sollen: "avconv" oder "ffmpeg", sowie optional "id3v2"
- Ein Youtube API-Key (hier kostenlos beantragen)
Daniel Marschall
ViaThinkSoft Mitbegründer
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 Mitbegründer
<?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($out, allSwapCombinations($key2, $praefix.$char));
                }
        }
        return $out;
}

print_r(allSwapCombinations($key));
Daniel Marschall
ViaThinkSoft Mitbegründer
Projektbeschreibung:

LogViewer ist ein kleines Tool für Linux, das Logdateien (üblicherweise von PHP) ausliest und in eine MySQL-Datenbank speichert.
Dort werden die Fehler kategorisiert und nach Eintrittszeitpunkt und Anzahl zusammengefasst.
Über ein Webinterface können die Fehler sortiert und gefiltert werden. Da es das Ziel ist, die Fehler zu korrigieren, kann mit einem Klick der Fehler ausgeblendet werden. Er wird dann nur noch eingeblendet, wenn er trotzdem nocheinmal auftritt.
Daniel Marschall
ViaThinkSoft Mitbegründer
Projektbeschreibung:

LogViewer ist ein kleines Tool für Linux, das Logdateien (üblicherweise von PHP) ausliest und in eine MySQL-Datenbank speichert.
Dort werden die Fehler kategorisiert und nach Eintrittszeitpunkt und Anzahl zusammengefasst.
Über ein Webinterface können die Fehler sortiert und gefiltert werden. Da es das Ziel ist, die Fehler zu korrigieren, kann mit einem Klick der Fehler ausgeblendet werden. Er wird dann nur noch eingeblendet, wenn er trotzdem nocheinmal auftritt.
Daniel Marschall
ViaThinkSoft Mitbegründer
Problemstellung:
locate findet keine Dateien aus Verzeichnissen, in den besondere Zugriffsrechte gelten, z.B. keine Leserechte für "other", oder ACLs.

Lösung:
in /etc/cron.daily/locate den wert LOCALUSER von nobody auf root umstellen.
Daniel Marschall
ViaThinkSoft Mitbegründer