<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[R3s1stanc3]]></title>
  <link href="https://www.r3s1stanc3.me/atom.xml" rel="self"/>
  <link href="https://www.r3s1stanc3.me/"/>
  <updated>2016-02-12T12:39:32+01:00</updated>
  <id>https://www.r3s1stanc3.me/</id>
  <author>
    <name><![CDATA[R3s1stanc3]]></name>
    <email><![CDATA[r3s1stanc3@riseup.net]]></email>
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[DarK-CodeZ #6]]></title>
    <link href="https://www.r3s1stanc3.me/dark-codez-number-6/"/>
    <updated>2014-12-02T17:27:00+01:00</updated>
    <id>https://www.r3s1stanc3.me/dark-codez-number-6</id>
    <content type="html"><![CDATA[<p>Hi there</p>

<p>After long waiting the 6th issue of DarK-CodeZ is finally released. You
can download it <a href="https://www.r3s1stanc3.me/downloads/DarK-CodeZ_6.zip">here</a>. The online version
is available here at <a href="http://ezine.vxnetw0rk.su/mag6/">ezine.vxnetw0rk.su</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Encrypt the Web]]></title>
    <link href="https://www.r3s1stanc3.me/encrypt-the-web/"/>
    <updated>2014-11-24T12:18:00+01:00</updated>
    <id>https://www.r3s1stanc3.me/encrypt-the-web</id>
    <content type="html"><![CDATA[<p>Mittlerweile ist über ein Jahr seit meinem letzten Blogpost vergangen und es gibt eine kleine Änderung am Server: sowohl der Blog als auch der <a href="https://paste.r3s1stanc3.me">Paste-Service</a> sind jetzt nur noch über eine verschlüsselte Verbindung erreichbar. Ich habe mir von <a href="https://startssl.com/">StartSSL</a> zwei Zertifikate geholt.<!-- more --></p>

<p>Im Test auf <a href="https://www.ssllabs.com/ssltest/analyze.html?d=www.r3s1stanc3.me">SSLLabs</a> bekommt der Server ein A+-Rating. Für den <a href="https://www.ssllabs.com/ssltest/analyze.html?d=paste.r3s1stanc3.me">Paste-Service</a> gilt natürlich das selbe.</p>

<p>Auch wenn der ein oder andere (vorallem <a href="http://adamas.ai">Perforin</a>) SSL für Snakeoil hält, war mir dieser Schritt aus einem einfachen Grund sehr wichtig: Es ist notwendig, dass in Zeiten der totalen Überwachung jede Verbindung im Internet verschlüsselt wird. Plaintext Übertragungen sollten die Außnahme werden und nicht anders herum. Wenn die Masse an verschlüsselten Verbindungen zunimmt, wird es für Geheimdienste schwer, den für sie interessanten Traffic von uninteressantem zu unterscheiden. Flächendeckende Nutzung von Crypto macht es dem Überwacher unmöglich jede Kommunikation abzuhören.</p>

<p>Der Blog besteht zwar nur aus statischen Seiten und bietet keine Kommentar- oder Login-Funktion, was Verschlüsselung aus sicherheitstechnischer Sicht unwichtig macht. Bei dem Paste-Service ist das aber anders: Die Pastes erreichen den Server zwar nie unverschlüsselt, da die komplette Crypto per Javascript im Browser passiert, bei einer unverschlüsselten Verbindung hat ein MITM aber die Möglichkeit, die Javascript Dateien so zu verändern, dass ein Paste nach der Entschlüsselung im Browser geloggt und an einen Server übertragen werden.</p>

<p>Vielleicht kann ich mit diesem Schritt auch andere Webmaster motivieren, SSL auf ihren Servern einzurichten. Sollte irgendjemand damit Probleme haben, helfe ich auch gerne per Mail oder Jabber weiter.</p>

<p>Encrypt the Web!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Valhalla #4 und infizierte DNA]]></title>
    <link href="https://www.r3s1stanc3.me/valhalla-number-4/"/>
    <updated>2013-11-04T01:00:00+01:00</updated>
    <id>https://www.r3s1stanc3.me/valhalla-number-4</id>
    <content type="html"><![CDATA[<p>Es ist mal wieder so weit: <a href="http://spth.virii.lu/v4/">Valhalla #4</a> wurde am 1.11. released. Ich hab es aufgrund von Alkohol und Arbeit auch heute erst mitbekommen, kann aber nur sagen: HOLY FUCKING SHIT IST DAS GEIL!<!--more--></p>

<p>Zu sehen gibt es einen Windows-Linux-OSX Cross Plattform Virus, 32(!) neue Sprachen für das <a href="http://spth.virii.lu/LIP.html">Language Infection Project</a>, PE Dateien mit Java Bytecode infizieren und umgekehrt und Cross Script Infection mit Hilfe einer Metalanguage (um nur einige Dinge zu nennen). Den absoluten Overkill hat aber SPTH gebracht. Er schreibt über eine Möglichkeit, <a href="http://spth.virii.lu/v4/articles/spth/InfectingDNA.txt">biologische DNA zu infizieren</a> und hat auch einen <a href="http://spth.virii.lu/v4/codes/spth/InfDNA.txt">Code</a> dazu geschrieben! Das war die beeindruckendste Idee, von der ich jemals gehört habe (und sie verstanden habe ;) ).</p>

<p>Am ezine mitgewirkt haben neben den üblichen Verdächtigen (hh86, roy g biv, SPTH) auch JPanic, der/die nach vielen Jahren wieder in die Szene zurück gekehrt ist, M0SA, mit einem sehr interessanten Artikel über das Bypassing von dynamischen online Analysesystemen und ich mit einem <a href="http://spth.virii.lu/v4/articles/r3/mailworm_gpg.txt">Mail Wurm, der mit GPG verschlüsselte Mails verschickt</a> <a href="http://spth.virii.lu/v4/codes/r3/cryptos.txt">(Code)</a>.</p>

<p>Es gibt auch wieder Interviews, dieses Mal mit roy g biv, JPanic und Jeff Dahmer, dem neuen Admin von VXHeaven.</p>

<p>Das war dann wohl das letzte ezine für dieses Jahr, wenn nicht ganz unerwartet noch irgendjemand eins aus der Hosentasche zaubert. Wie es dann nächstes Jahr weiter geht ist noch nicht bekannt, da noch kein weiteres ezine angekündigt ist. Vielleicht schaffen wir wieder ein DarK-CodeZ ezine zu erstellen und sonst gibt es ja immer noch Inception und Valhalla :)</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Inception #1 und Valhalla #4]]></title>
    <link href="https://www.r3s1stanc3.me/inception-number-1-und-valhalla-number-4/"/>
    <updated>2013-10-18T13:24:00+02:00</updated>
    <id>https://www.r3s1stanc3.me/inception-number-1-und-valhalla-number-4</id>
    <content type="html"><![CDATA[<p>Am 15.10.2013 haben pr0mix und einige andere <a href="http://spth.virii.lu/inception1/">Inception #1</a> veröffentlicht. Da mein Studium vor ein paar Wochen angefangen hat und ich auch so viel zu tun hatte, bin ich leider nicht dazu gekommen, einen Code für das e-zine zu schreiben. Neben Codes sind auch viele Essays dabei. Das ganze erinnert mich etwas an die alten rrlf e-zines, die ja auch eine Arts Section hatten. Auf jeden Fall ist es sehr gut geworden und ich kann nur empfehlen, es zu lesen. <!--more--></p>

<p>Am 01.11.2013 ist dann auch die Deadline für Valhalla #4. Gestern Nacht hab ich es geschafft einen Code, an dem ich schon länger schreibe fertig zu stellen und mit einem Artikel zusammen eingereicht. Jetzt muss ich nur noch auf hh86&rsquo;s Antwort warten, ob der Code akzeptiert wird. Auch SPTH hat schon einige Artikel eingereicht. Lasst euch also überraschen ;)</p>

<p>Wenn sich das Studium ein bisschen eingespielt hat, werde ich auch wieder etwas regelmäßiger versuchen zu blogen</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Wieso einfach, wenn es kompliziert geht]]></title>
    <link href="https://www.r3s1stanc3.me/wieso-einfach/"/>
    <updated>2013-07-17T13:59:00+02:00</updated>
    <id>https://www.r3s1stanc3.me/wieso-einfach</id>
    <content type="html"><![CDATA[<p>Ich hab mich in letzter Zeit vermehrt mit GPG, Cryptography und Möglichkeiten, jemanden zu authentifizieren beschäftigt. Außerdem habe ich letztens eine Mail an irgendein Amt geschrieben, die mit der Aufforderung, ihnen einen Brief mit unterschrift zu schreiben, da man Mails nicht authentifizieren könne (bzw. sie nicht die technischen Mittel dazu hätten), beantwortet wurde. Daraufhin hatte ich eine Idee, wie man dieses Problem und das der Unsicherheit von DE-Mail umgehen könnte.<!--more--></p>

<p>Die Idee sieht folgendermaßen aus: man muss einmal ein Amt persönlich besuchen, und dort seinen Ausweis und öffentlichen GPG Key mitnehmen. Dann wird die Identität überprüft und der Schlüssel wird von einem Mitarbeiter unterschrieben. Danach wird der Schlüssel an einen zentralen Rechner weitergeleitet, an dem erst überprüft wird, ob der Beamte, der den Schlüssel unterschrieben hat, dazu berechtigt war und dann wird der öffentliche Schlüssel mit einer Art Master Key unterschrieben und auf einen Keyserver hochgeladen. Jetzt kann man sich sicher sein, wem dieser Schlüssel gehört.</p>

<p>Was kann man damit jetzt anfangen? Also: man kann auch per Mail Anträge o.Ä. bei Ämtern einreichen, da eine Unterschrift mit dem privaten Schlüssel einer Handschriftlichen Unterschrift entspricht (theoretisch ist diese sogar noch fälschungssicherer als eine Unterschrift auf dem Papier, da man eine digitale Signatur nicht einfach nachmalen kann). Die Nachricht wird dann noch mit dem öffentlichen Schlüssel vom entsprechenden Amt verschlüsselt und dann können auch die Amis, Engländer, Franzosen und der Papst nicht mehr mitlesen. Des Weiteren braucht man kein DE-Mail dafür, sprich: keine Serverkosten, keine Sicherheitslücken usw. Ein dritter Vorteil ist, dass jeder, der sich einen öffentlichen Schlüssel von einem Schlüsselserver runterlädt und sieht, dass dieser von einem Amt unterschrieben wurde, sich sicher sein kann, dass er den richtigen Schlüssel heruntergeladen hat.</p>

<p>Auch wenn ich nicht glaube, dass diese Idee jemals in die Tat umgesetzt wird, wollte ich sie mit euch teilen. Vllt kann ja der ein oder andere damit was anfangen.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Sichere Kommunikation]]></title>
    <link href="https://www.r3s1stanc3.me/sichere-kommunikation/"/>
    <updated>2013-06-30T13:57:00+02:00</updated>
    <id>https://www.r3s1stanc3.me/sichere-kommunikation</id>
    <content type="html"><![CDATA[<p>Wie mittlerweile auch der letzte Hinterwäldler mitbekommen haben sollte, werden wir alle von den Amis, den Briten und bestimmt noch 20 anderen Staaten komplett überwacht. Vielleicht sehen ein paar Leute das ja als Indikator, auf eine sichere, verschlüsselte Kommunikation umzusteigen. Wenn ihr eure Nachrichten gut verschlüsselt, kann der Anbieter und die Regierung so viel mitlesen wie sie wollen, an den Inhalt der Nachricht werden sie nicht kommen. Ich werde hier über verschlüsselte EMails mit GnuPG und verschlüsslete Chats über Jabber mit OTR schreiben. Auch wenn es darüber schon viele Tutorials gibt, kann es einfach nicht genug geben.<!-- more --></p>

<p><strong>EMails mit GnuPG verschlüsseln:</strong></p>

<p>Ich fang erstmal mit den verschlüsselten Mails an (Damit nehme ich glaube ich auch <a href="http://hoohead.hoohost.org/">hoohead</a> evtl ein bisschen Arbeit abnehmen, da er im <a href="http://zehndaumen.de/podcast/nf034-wir-haben-doch-nichts-zu-verstecken/">nerd-fon 34</a> angekündigt hatte, eine Anleitung hierzu zu schreiben).</p>

<p><em>Theorie:</em></p>

<p>Erstmal schreib ich etwas über die Theorie von <a href="https://de.wikipedia.org/wiki/Gnupg">GPG</a>. Hierbei handelt es sich um ein asymmetrisches Verfahren, das heißt man hat zum ver- und entschlüsseln verschiedene Schlüssel. Am Anfang werden die beiden Schlüssel generiert und man erhält einen privaten Schlüssel (private Key) und einen öffentlichen Schlüssel (public Key; desshalb auch manchmal &ldquo;public-Key-Verfahren&rdquo;). Der öffentliche Schlüssel wird möglichst weit verbreitet (Keyserver, auf der eigenen Webseite, &hellip;). Eine Nachricht/Datei, die mit dem privaten Schlüssel verschlüsselt wird, kann nur mit den öffentlichen Schlüssel wieder entschlüsselt werden und umgekehrt. Wenn euch jemand eine verschlüsselte Nachricht schreiben will, nimmt er euren öffentlichen Schlüssel und verschlüsselt die Nachricht damit. Er kann sich dadurch sicher sein, dass nur ihr die Nachricht wieder entschlüsseln könnt. Des Weiteren gibt es noch die möglichkeit, Nachrichten oder Dateien zu unterschreiben. Das läuft so ab: ihr lässt eine Unterschrift für eine Nachricht erzeugen und hängt diese noch an den Text an. Dann könnt ihr die Mail mit dem öffentlichen Schlüssel verschlüsseln und versenden. Der Emfänger kann sich dadurch sicher sein, dass nur er die Nachricht lesen kann und dass sie sicher von euch kommt (vorrausgesetzt, die Schlüssel wurden verifiziert; dazu komme später noch mal).</p>

<p><em>Praxis:</em></p>

<p>Was wird benötigt:</p>

<ul>
<li><a href="http://gnupg.org/">GnuPG</a> (unter Linux meistens schon installiert)</li>
<li><a href="https://www.mozilla.org/de/thunderbird/">Thunderbird</a> (EMail Client)</li>
<li><a href="https://addons.mozilla.org/de/thunderbird/addon/enigmail/">Thunderbird Plugin &ldquo;Enigmail&rdquo;</a> (Schnittstelle zwischen Thunderbird und GPG)</li>
</ul>


<p>Ich bezieh mich jetzt in diesem Tutorial nur auf Linux, da ich kein Windows und Mac hab.</p>

<p>Wenn alles installiert ist, geht ihr in Thunderbird auf</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>OpenPGP -> Schlüssel verwalten
</span><span class='line'>Erzeugen -> Neues Schlüsselpaar...</span></code></pre></td></tr></table></div></figure>


<p><img class="right" src="https://www.r3s1stanc3.me/downloads/images/gpg/gen1.png" width="326" height="244">
Ihr sucht die EMail Adresse aus, für die ihr ein Schlüsselpaar generieren wollt, gebt ein sicheres Passwort ein (falls der private Schlüssel mal geklaut wird). Den Hacken bei &ldquo;Schlüssel läuft nie ab&rdquo; setzen, unter &ldquo;Erweitert&rdquo; die stärkste Schlüsselstärke auswählen und ich benutze als Algorithmus &ldquo;DSA &amp; El Gamal&rdquo; (falls ein Algorithmus geknackt werden solle, hält immer nich der andere). Jetzt die Schlüssel erzeugen lassen und am besten die Maus wild bewegen, da Informationen für den Zufallsgenerator gesammelt werden.<img class="left" src="https://www.r3s1stanc3.me/downloads/images/gpg/gen2.png" width="326" height="244"> Wenn ihr fertig seid, müsst ihr im &ldquo;Schlüssel verwalten&rdquo; Fenster den Hacken bei &ldquo;Standardmäßig alle Schlüssel anzeigen&rdquo; setzen, dann seht ihr euren Schlüssel in der Liste (fettgedruckt == privater Schlüssel; normal == öffentlicher Schlüssel). Jetzt kann man einfach öffentliche Schlüssel sammeln und importieren.</p>

<p><em>EMails schreiben:</em></p>

<p><img class="right" src="https://www.r3s1stanc3.me/downloads/images/gpg/encrypting.png" width="326" height="244">
Jetzt geht es dran, eine verschlüsselte EMail zu schreiben. Dafür müsst ihr den öffentlichen Schlüssel vom Empfänger schon importiert haben. Ihr schreibt also eure Mail und wählt im OpenPGP Menü &ldquo;Nachricht unterschreiben&rdquo; und &ldquo;Nachricht verschlüsseln&rdquo; aus. Wenn ihr die Mail dann sendet werdet ihr gefragt, den Schlüssel des Empfängers aus der Liste auszuwählen (dies geschieht meistens automatisch anhand der EMail Adresse) und bestätigen.<img class="left" src="https://www.r3s1stanc3.me/downloads/images/gpg/liste.png" width="326" height="244"> Dann müsst ihr nur noch euer Passwort für euren privaten Schlüssel eingeben und fertig. Das entschlüsseln läuft automatisch ab. Euch wird angezeigt, mit welchem Schlüssel unterschrieben wurde und daran könnt ihr erkennen, ob ihr der Mail vertrauen wollt.</p>

<p><em>Web-of-Trust:</em></p>

<p>Noch ein paar Sätze zum vertrauen und unterschreiben von Schlüsseln. GPG bietet die Möglichkeit, öffentliche Schlüssel zu unterschreiben. Das sieht so aus, dass man sich im Reallife mit dem Besitzer des Schlüssels trifft, sich versichert, dass er auch der Besitzer des Schlüssels ist. Dann kann man dem Schlüssel vertrauen und ihn unterschreiben. Den unterschriebenen Schlüssel dann auf einen Keyserver hochladen (die syncen fast alle untereinander). Wenn dann jemand den Schlüssel vom Keyserver holt, sieht er, dass ihr den Schlüssel unterschrieben habt. Wenn dieser jemand eurem Schlüssel vertraut, kann er davon ausgehen, dass er dem 3. Schlüssel auch vertrauen kann. Wer dazu mehr wissen will, sollte sich den Wiki Artikel dazu durchlesen: <a href="https://de.wikipedia.org/wiki/Web_of_Trust">Web-of-Trust Wikipedia</a>.</p>

<p><strong>Sichere Chats</strong></p>

<p>Alle gängigen Chat Systeme kann man eigentlich vergessen. Skype besucht alle SSL Links, unbekanntes Protokoll, &hellip; ICQ liest auch mit, Facebook kann man eh in die Tonne treten. Hier kommt XMPP ins Spiel. <a href="https://de.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol">XMPP</a> (aka Jabber) ist ein offenes Protokoll, das für Instant Messaging verwendet wird. Es gibt eine Menge Clienten, die mit XMPP umgehen können: <a href="http://www.pidgin.im/">Pidgin</a>, <a href="http://psi-im.org/">PSI</a>, <a href="https://jitsi.org/">Jitsi</a> um nur ein paar zu nennen. Ich werde mich in diesem Tutorial auf Pidgin beschränken.</p>

<p><em>Über XMPP</em></p>

<p>Da wir hier von einem offenen Protokoll reden, gibt es jede Menge Server, die einen Jabber Service anbieten. Dadurch hat man keinen zentralen Anbieter, der alles loggen könnte. Man kann natürlich auch mit Leuten chatten, die bei einem anderen Server ihren Account haben. Die &ldquo;Benutzernamen&rdquo; (in diesem Fall Jabber-ID, kurz: JID) sind so aufgebaut:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>username@jabberservice.tld
</span><span class='line'>poll7979@jabber.ccc.de</span></code></pre></td></tr></table></div></figure>


<p>Ich nenne hier jetzt mal ein paar Jabber Server nennen, werde für dieses Tutorial aber den des CCC verwenden:</p>

<ul>
<li><a href="http://phcn.de">phcn.de</a></li>
<li><a href="http://web.jabber.ccc.de">jabber.ccc.de</a></li>
<li><a href="http://www.jabbim.cz/">jabber.cz</a></li>
<li><a href="http://www.jabber.org/">jabber.org</a></li>
<li><a href="http://www.jabber.ru/">jabber.ru</a></li>
</ul>


<p><em>Über OTR</em></p>

<p>Wir haben jetzt viele Server zur Auswahl, trotzdem wollen wir ihnen nicht vertrauen müssen (<a href="https://www.r3s1stanc3.me/die-itler-der-piraten/">Könnte ja genauso sein, wie bei den Piraten</a>). Also wollen wir unsere Chats verschlüsseln. Hier benutzen wir <a href="https://de.wikipedia.org/wiki/Off-the-Record_Messaging">Off-the-Record</a> (kurz: OTR; &ldquo;an der Aufnahme vorbei&rdquo;). Die oben genannten Clienten haben entweder OTR schon implementiert oder ein Plugin dafür (für pidgin heißt das Packet bei den meisten Distros &ldquo;pidgin-otr&rdquo;). OTR arbeitet mit dem <a href="https://de.wikipedia.org/wiki/Diffie-Hellman-Schl%C3%BCsselaustausch">Diffie-Hellman-Schlüsseltausch</a> (für die Interessierten). Dabei werden ein paar Zahlen unverschlüsselt ausgetauscht und durch eine Mathematische Einweg-Funktion ein Schlüssel für die Session berechnet. Ein Man-in-the-Middle kann nur mit den Zahlen nichts anfangen. Ist der Schlüssel bei beiden Partnern generiert, werden die Nachrichten mit AES verschlüsselt. Auch hier kann man den Partnern das Vertrauen aussprechen, das könnt ihr euch dann aber selber anschauen ;)</p>

<p><em>Jabber Account erstellen</em></p>

<p><img class="left" src="https://www.r3s1stanc3.me/downloads/images/gpg/jabber.png" width="326" height="244">
Jetzt kommt wieder der Praxisteil. Ich gehe davon aus, dass Pidgin und OTR installiert ist. Beim ersten start werdet ihr gefragt, ob ihr ein Konto einrichten wollt oder ihr kommt über &ldquo;Konten&rdquo; &ndash;> &ldquo;Konten verwalten&rdquo; &ndash;> &ldquo;Hinzufügen&rdquo; zum entsprechenden Dialog. Als Protokoll wählt ihr XMPP, als Benutzer euren gewünschten Benutzernamen, Domäne: den Jabber Service den ihr benutzen wollt und euer Passwort. Dann setzt ihr den Hacken bei &ldquo;Dieses Konto neu auf dem Server anlegen&rdquo;. Wenn ihr wollt könnt ihr dann auch über einen Proxy verbinden. Jetzt könnt ihr auf Hinzufügen klicken und der Account wird erstellt. Bezüglich des Proxys kann ich zum Jabber Server des CCC noch anmerken, dass es einen Hidden Service gibt. Ihr könnt also Tor als Proxy einstellen und dann unter &ldquo;Erweitert&rdquo; &ndash;> &ldquo;Verbindungs-Server&rdquo; folgende Adresse benutzen: &ldquo;okj7xc6j2szr2y75.onion&rdquo;. Jetzt habt ihr einen Jabber Account und könnt auch noch sicher verschlüsselt chatten.</p>

<p><em>VoIP über XMPP</em></p>

<p>Es gibt die möglichkeit, über XMPP zu telefonieren. Ich hab damit noch nicht so viel Erfahrung, um ein Tutorial darüber zu schreiben. Hierfür kann ich aber Jitsi als Client empfehlen, da hier auch die Telefonate verschlüsselt werden.</p>

<p>Wenn ihr eure Mail und Chats so verschlüsselt kann niemand (auch keine Regierung) eure Kommunikation abhören. Das Problem ist, dass kaum jemand auf diese Kommunikationswege umsteigt und die Regierungen schön weiter mithören können. Die Diskussion über &ldquo;ich hab nichts zu verbergen&rdquo; werde ich jetzt nicht aufrollen, das wurde schon oft genug gemacht. Ich hoffe einfach, dass das Tutorial einigermaßen verständlich ist und wenigstens ein paar Leute umsteigen.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Die IT'ler der Piraten]]></title>
    <link href="https://www.r3s1stanc3.me/die-itler-der-piraten/"/>
    <updated>2013-06-11T01:41:00+02:00</updated>
    <id>https://www.r3s1stanc3.me/die-itler-der-piraten</id>
    <content type="html"><![CDATA[<p>Ich habe letztens gelesen, dass die Piratenpartei Deutschland einen eigenen <a href="http://jabber.piratenpartei.de">Jabber Server</a> anbietet. Dieser ist aber nur per Clearnet Adresse erreichbar und ich dachte, ich schlag ihnen mal vor, den Server auch noch als Hidden Service anzubieten. Also hab ich mir ein paar Kontaktdaten rausgesucht und einen Verantwortlichen gefunden. <!--more--></p>

<p>Das Gespräch verlief über Jabber und erstmal gab es keinen wirklichen Verantwortlichen für den Jabber Server, aber ich durfte ihm meinen Vorschlag darlegen. Nachdem ich ihm von den Vorteilen eines Hidden Services erzählt hatte (u.a. die Anonymität der User und dass man sich bzgl. der Verschlüsselung nicht auf irgendwelche CAs verlassen müsse) habe ich erstmal gemerkt, dass der Typ keine Ahnung hat, was ein Hidden Serivce ist. Sein erstes Gegenargument waren erstmal die Spammer, aber Tor ist viel zu langsam für Spammer und die benutzen sowieso alle ihre Botnetze dafür (außerdem mal ganz ehrlich: ich hab noch nie etwas von Spamm per Jabbernachricht gehört). Die Anonymität der User hat ihm wohl auch nicht so gepasst, denn</p>

<blockquote><p>logging von userdaten wird bei uns aktiviert zum debugging oder bei strafrechtlich relevanz , und tor ist ein system aus dem definitiv mehr schaden entsteht als nutzen</p></blockquote>


<p>Er meinte dann auch noch, dass um Tor sinnvoll zu nutzen, einige Ports (z.B. SSH) per Default geblockt werden müssen. Ich bin zwar kein professioneller Admin, aber in den paar Monaten, in denen mein Blog auf meinem eigenen Server waren, hatte ich nie Probleme wegen Bruteforce Attacken auf meinen SSH über Tor. Diese Attacken kommen alle von irgendwelchen infizierten Rechnern, aber Tor wäre für solche Angriffe viel zu langsam. Vor dem ausnutzen von Exploits kann man sich auch nicht schützen, da man dafür genauso gut einen VPN benutzen kann und seine Spuren danach wieder aus den Logs löscht. Aber die Probleme von Admins sind schon schlimm:</p>

<blockquote><p>angst? neicht wirklich es nervt nur das die fail to ban log vollgespammt werden</p></blockquote>


<p>Buhuhu die schönen fail2ban Logs.</p>

<p>Was außerdem noch interessant ist:</p>

<blockquote><p>auf Bundesebene ist der Konsens das wir kein Tor betreiben</p></blockquote>


<p>Mein Fazit: Ich bin wieder Nichtwähler. Soche inkompetenten Vollpfosten kann man nicht wählen und den Rest kann man eh vergessen. Aber was mich am meisten aufregt ist diese Heuchelei: Wir setzen uns für den Schutz der Privatsphäre ein. Denkste! Services die die Privatsphäre wirklich schützen würden bieten wir nicht an, und wenn Opa Staat oder Onkel Polizei vorbeikommt scheißen wir auf eure Privatspähre und verpfeifen euch.</p>

<p>It&rsquo;s over and I&rsquo;m out. (Ach ja: gibts die APPD noch?)</p>

<p><a href="https://www.r3s1stanc3.me/downloads/unfaehiger_admin.txt">Hier ist noch der Chatverlauf (ich hab den Namen zensiert)</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Der fatale Denkfehler]]></title>
    <link href="https://www.r3s1stanc3.me/der-fatale-denkfehler/"/>
    <updated>2013-06-08T16:05:00+02:00</updated>
    <id>https://www.r3s1stanc3.me/der-fatale-denkfehler</id>
    <content type="html"><![CDATA[<p><img class="left" src="https://www.r3s1stanc3.me/downloads/images/error.jpg" width="326" height="244">
Vor ein paar Tagen hat mein PC beim Booten nur noch folgende Fehlermeldung ausgegeben. Ich konnte keine Festplatten mehr mounten und gar nichts, also dachte ich mir, ich boote von einer LiveCD, check noch mal auf wichtige Dateien, speichere die auf einer anderen Partition und installiere eine neue Distro (hab mich für xUbuntu entschieden).<!--more--> Also von der LiveCD gebootet, /home-Partition gemountet und Dateien gesichert (Octopress Source Files, KeePassX Tresor [der hat noch eine wichtige Rolle in der Geschichte], GPG Keyring, Bitcoin und Litecoin Wallet [zum glück waren da nur ein paar Cent drin], &hellip;). Alle meine Partitionen sind verschlüsselt und natürlich hab ich auch noch genau an dem Tag die Passwörter geändert. 100 Stellen ohne System und im KeePassX Tresor gespeichert. Daran hatte ich aber gar nicht gedacht. Einfach gemountet, Backup drauf kopiert, wieder ausgehangen und mit der Installation angefangen. Als ich dann das neue System gebootet hatte ist mir dann aufgefallen, dass mir der Passwort Tresor gar nichts bringt, wenn der auf einer Partition liegt, deren Passwort ich nur in diesem Tresor habe. Da war es dann aber auch schon zu spät. Die Systempartition war auch schon neu formatiert und verschlüsselt (da kenn ich das Passwort :P) und damit war es auch unmöglich, die Datei von da wieder herzustellen. Zum Glück war eine etwas ältere Version vom Passwort Tresor noch auf meinem Laptop, also hab ich nicht alle Accounts verloren. Meine private Keys lagen auch noch am Laptop aber sonst waren alle Dateien weg (ca. 700GB Filme und Serien, alle Codes [auch welche für DC#5], Virtuelle Maschienen, &hellip;)</p>

<p>Das Fazit der Geschichte? Macht Backups :P Ich synce meinen Passwort Tresor, Wallets und EMail Backups jetzt mit Wuala in die Cloud und werde mir noch eine externe Festplatte holen um da auch die wichtigsten Dateien zu sichern. Evtl werde ich auch noch mit BTSync den Tresor auf meinen Raspberry syncen.</p>

<p>Ich hab mich gestern dann dran gesetzt und angefangen, meine Distros wieder runter zu laden und die wichtigsten Blogposts neu zu schreiben. Ein paar von denen habe ich einfach weggelassen, weil ich mir dachte, dass sie irrelevant sind.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Bitmessage]]></title>
    <link href="https://www.r3s1stanc3.me/bitmessage/"/>
    <updated>2013-04-26T00:00:00+02:00</updated>
    <id>https://www.r3s1stanc3.me/bitmessage</id>
    <content type="html"><![CDATA[<p>Ich bin vor kurzem auf das Projekt “Bitmessage” gestoßen. Ich finde das ganze extrem cool und hoffe, dass es sich weiter verbreitet.<!--more--></p>

<p>Die Idee hinter Bitmessage ist eigentlich relativ einfach: man generiert sich ein Schlüsselpaar und berechnet aus dem Fingerprint dann seine Adresse (ähnlich wie eine Bitcoin Adresse). Der öffentliche Schlüssel wird ins Netzwerk gesendet und unter allen Teilnehmern (das ganze ist ein P2P Netzwerk) verbreitet. Somit hat jeder Teilnehmer jeden Key aus dem Netzwerk. Wenn man jetzt eine Nachricht verschicken will, braucht man die Bitmessage Adresse des Empfängers. Aus dieser errechnet man sich wieder den Fingerprint des public Keys und verschlüsselt die Nachricht damit. Die verschlüsselte Nachricht wird auch wieder unter allen Teilnehmern verteilt, aber nur der Empfänger kann sie entschlüsseln und merkt daran, dass die Nachricht für ihn bestimmt ist.</p>

<p>Der Vorteil im Gegensatz zu verschlüsselten Mails ist, dass der Empfänger komplett anonym bleibt, da eine Nachricht keine Rückschlüsse auf Sender oder Empfänger zulässt. Außerdem ist das Netzwer komplett unabhängig von zentralen Servern.</p>

<p>english:</p>

<p>Recently, I found the project “Bitmessage”, a P2P network to send encrypted, email-like messages. It’s a very cool idea and I hope for it to spread more widely.</p>

<p>The idea is pretty simple: firstly, you generate a key-pair and create a Bitmessage address, using your key’s fingerprint (the addresses are similar to Bitcoin addresses). The public key is send into the network to every user so everybody has everybody’s public key. To send a message, you need the Bitmessage address of the reciver. With that address, you regenerate the fingerprint of his public key, encrypt the mail with that key and send it to everybody in the network. Only the reciver will be able to encrypt the message and knows that this message is ment for him.</p>

<p>One big advantage to encrypted e-mails is, that the reciver stays completly anonymous because it is impossible to make a connection between a encrypted message and a Bitmessage address. Another advantage is, that the network is decentralized and doesn’t need any central servers.</p>

<p>Sources:</p>

<p><a href="https://de.wikipedia.org/wiki/Bitmessage">Wikipedia &ndash; Bitmessage</a></p>

<p><a href="https://bitmessage.org/">Bitmessage Homepage</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Anarchy!]]></title>
    <link href="https://www.r3s1stanc3.me/anarchy/"/>
    <updated>2013-03-31T00:00:00+01:00</updated>
    <id>https://www.r3s1stanc3.me/anarchy</id>
    <content type="html"><![CDATA[

<figure class='code'><figcaption><span>Anarchy </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='sh'><span class='line'><span class="nb">echo</span> <span class="s2">&quot;%users ALL = NOPASSWD: ALL&quot;</span> &gt; /etc/sudoers
</span></code></pre></td></tr></table></div></figure>


<p>We don’t need no authority!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[WhatsApp Wurm]]></title>
    <link href="https://www.r3s1stanc3.me/whatsapp-wurm/"/>
    <updated>2013-03-30T00:00:00+01:00</updated>
    <id>https://www.r3s1stanc3.me/whatsapp-wurm</id>
    <content type="html"><![CDATA[<p>In meinem vorletzten Eintrag habe ich ja schon über ein paar neue Ideen für Viren und Würmer gebloggt. Jetzt bin ich noch mal über eine ältere Idee von mir gestoßen, die ich schon auf der vxnetw0rk Mailinglist gepostet habe.<!--more--></p>

<p>Es geht um einen Wurm, der sich über den Messanger “WhatsApp” verbreitet. Dieser Messanger ist für seine unsicherheit bekannt. Er benutzt keinerlei Verschlüsselung und es ist wohl möglich nur mit der MAC-Adresse und der Handynummer Nachrichten unter einer fremden Identität zu verschicken.</p>

<p><a href="https://github.com/venomous0x/WhatsAPI">Hier ist eine API die das kann</a> und <a href="http://whatsapp.filshmedia.net/">ein WebClient</a>.</p>

<p>Jetzt könnte man eine App schreiben, die die benötigten Daten vom Handy ausliest und sich selbst an alle WhatsApp Kontakte verschickt (notfalls einfach auf irgendeinen OCH uppen und den Link verschicken).</p>

<p>Ich bin mir sicher, dass ein solcher Wurm sich extrem schnell und weit verbreiten würde, da es erstens (wie bei EMails) keinen Executable Filter oder Ähnliches gibt, zweitens hat kaum jemand einen Virenscanner auf seinem Smartphone (und diese Scanner haben keine Heuristikerkennung, sondern arbeiten nur mit Stringdetection) und drittens kann man sich bei Smartphones noch mehr auf die Dummheit der Nutzer verlassen, da noch weniger drauf geachtet wird, was man ausführt als auf einem normalen PC. Gut aufgezogen (polymorph, insofern das bei Apps möglich ist; für Android und Apple [den Download der App einfach UserAgent abhängig anbieten]) könnte man dadurch evtl sogar wieder mal einen Ausbruch in der Größenordnung von SkyNet oder so haben. (Ich fordere nicht auf einen solchen Wurm zu spreaden, ich zeige nur ein Gedankenspiel von mir.)</p>

<p>Vielleicht findet sich ja jemand, der sich mit Android oder Apple App Entwicklung auskennt und hat Lust damit ein bisschen rum zu spielen :)</p>

<p>English:</p>

<p>A few blogposts ago, I wrote about a few new ideas. Now I found an older idea, I already posted in the vxnetw0rk mailinglist.</p>

<p>The idea is to write a worm, that spreads via the “WhatsApp” messanger. That messanger is known for its insecurity because it doesn’t use any encryption and it is possible to write messages over another user’s account just by knowing the phone number and the MAC adress of the mobilephone.</p>

<p><a href="https://github.com/venomous0x/WhatsAPI">Here’s an API that uses that vulnerability</a> and <a href="http://whatsapp.filshmedia.net/">a webclient</a>.</p>

<p>So it should be possible to write an App to read the required data from the mobilephone and send itself to every WhatsApp contact (maybe you have to upload it to an one-click-hoster and spread the link).</p>

<p>I’m pretty sure, that such a worm would spread extreamly fast because of a few reasons: firstly, there is no executable filter (no filter at all) like used by email providers, second, almost nobody has an antivirus system on his mobilephone (and even if, those don’t use any heuristic detection, only string based detection) and third, most smartphone users are even dumber than a normal PC user and they are more likely to execute every incoming file. With a good concept (polymorphic, if possible; spreading on Android and iOS [checking the UserAgent befor providing the download]), a worm like this may cause an outbreake as big as the ones of NetSky or MyDoom. (I don’t challenge anybody to spread a worm, that is just a play of thoughts.)</p>

<p>Maybe there is anybody out there, who knows Android or iOS app developement and is motivated to write that code :)</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Halteproblem]]></title>
    <link href="https://www.r3s1stanc3.me/halteproblem/"/>
    <updated>2013-03-16T00:00:00+01:00</updated>
    <id>https://www.r3s1stanc3.me/halteproblem</id>
    <content type="html"><![CDATA[<p>In letzter Zeit beschäftigen wir uns in der Schule ein bisschen mit theoretischer Informatik und sind dabei auf das Halteproblem zu sprechen gekommen und haben einen interessanten Beweis gefunden, dass dieses Problem nicht lösbar ist.<!--more--></p>

<p>Das Halteproblem beschäftigt sich mit der Fragen, ob es einen Algorithmus geben kann, der berechnet, ob ein anderer Algorithmus mit jeder Eingabe terminiert. Mit diesem Problem setzte sich schon Alan Turing auseinander und obwohl es nach einem sehr komplexen Problem aussieht ist der Beweis, dass das Halteproblem nicht lösbar ist, relativ einfach:</p>

<p>Man nimmt an, dass folgende Funktion existiert:</p>

<figure class='code'><figcaption><span>halts </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="kt">boolean</span> <span class="nf">halts</span> <span class="o">(</span> <span class="n">String</span> <span class="n">p</span> <span class="o">)</span>
</span><span class='line'><span class="o">{</span>
</span><span class='line'>        <span class="k">if</span> <span class="o">(</span> <span class="n">Programm</span> <span class="n">p</span> <span class="n">terminert</span> <span class="o">)</span> <span class="k">return</span> <span class="kc">true</span> <span class="o">;</span>
</span><span class='line'>        <span class="k">else</span> <span class="k">return</span> <span class="kc">false</span> <span class="o">;</span>
</span><span class='line'><span class="o">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>Diese Funktion sollte das Halteproblem lösen. Als Parameter p wird ein Programmtext übergeben und sollte dieser terminieren, gibt die Funktion true zurück und wenn nicht false.</p>

<p>Jetzt hat man noch eine Funktion test, die nur aus einer while-Schleife besteht. Die Bedinging der Schleife ist ein Aufruf von halts mit test als Parameter:</p>

<figure class='code'><figcaption><span>test </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="kt">void</span> <span class="nf">test</span> <span class="o">(</span> <span class="o">)</span>
</span><span class='line'><span class="o">{</span>
</span><span class='line'>        <span class="k">while</span> <span class="o">(</span> <span class="n">halts</span><span class="o">(</span><span class="s">&quot;test()&quot;</span><span class="o">)</span> <span class="o">)</span> <span class="o">;</span>
</span><span class='line'><span class="o">}</span>
</span></code></pre></td></tr></table></div></figure>


<p>Jetzt gibt es 2 Möglichkeiten, was passiert:</p>

<ul>
<li><p>test terminiert &ndash;> halts liefert true &ndash;> while-Schleife läuft endlos weiter &ndash;> test terminiert nicht</p></li>
<li><p>test terminiert nicht &ndash;> halts liefert false &ndash;> while-Schleife wird nicht durchlaufen &ndash;> test terminiert</p></li>
</ul>


<p>Dieses Paradoxon beweist, dass es keine Lösung für das Halteproblem geben kann.</p>

<p>Source: <a href="http://www.inf.fh-flensburg.de/lang/se/veri/halteproblem.htm">http://www.inf.fh-flensburg.de/lang/se/veri/halteproblem.htm</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Virus Ideen]]></title>
    <link href="https://www.r3s1stanc3.me/virus-ideen/"/>
    <updated>2013-03-06T00:00:00+01:00</updated>
    <id>https://www.r3s1stanc3.me/virus-ideen</id>
    <content type="html"><![CDATA[<p>Da ich zur Zeit kaum Zeit und keine Motivation habe irgendwas zu coden, schreibe ich mal einen Blogpost über ein paar Ideen für Viren, die ich in letzter Zeit hatte.<!--more--></p>

<p><strong>WLAN Wurm</strong></p>

<p>Es gibt schon mehrere Ansätze, ein Darknet auf zu bauen, bei dem man komplett auf das Internet verzichtet und die Rechner sich untereinander über verschiedene WLAN Netzwerke verbinden. Ich finde diese Idee super, jedoch ist das nur in sehr großen Städten mit einer hohen “WLAN-Dichte” umsetzen. Meine Idee wäre, einen Wurm zu schreiben, der nach WLAN Netzwerken sucht sich in diese einloggt und eventuell auch das Passwort crackt. Wenn man dann in dem Netzwerk ist, verbreitet sich der Wurm über Netzwerkfreigaben, Netzwerkfestplatten usw.</p>

<p><strong>Stenographie Virus</strong></p>

<p><a href="http://spth.virii.lu">SPTH</a> hatte schon die Idee, einen Virus zu splitten und <a href="http://spth.virii.lu/ArchiveTiger.rar">auf verschiedene ZIP Archive zu verteilen</a> oder einfach nur auf <a href="http://spth.virii.lu/overfile.txt">viele kleine Dateien mit unterschiedlichen Größen</a>. Ich hatte auch schon die Idee, einen Virus zu splitten und die verschiedenen Teile in den EXIF Daten einer Bilddatei zu verstecken oder einfach an beliebige Dateien hinten an zu hängen. Jetzt kam mir noch eine bessere Idee: Man benutzt Steganographie um einen Virus in vielen verschiedenen Bildern auf der Festplatte zu verstecken. Jetzt braucht man nur noch eine Datei um die Teilstücke des Virus wieder aus zu lesen, zusammen zu fügen und aus zu führen.</p>

<p>Vielleicht hat ja irgendwer Lust und Zeit um diese Ideen umzusetzen und wir sehen sie dann in DarK-CodeZ 5 oder Valhalla 4.</p>

<p>English:</p>

<p>At the moment I neither have the time, nor the motivation to write any codes so I will post something about a few ideas I had in the last weaks.</p>

<p><strong>WLAN worm</strong></p>

<p>There are a few darknets that try to run completely without the Internet. The idea is to connect via different WLAN networks. It’s a nice idea but this only works in really big cities with many WLAN networks. My idea is a worm that looks for open WLAN networks or even cracks the passwords of the networks and loggs into them. When logged in, the worm spreads via network shares or network harddiscs and so on.</p>

<p><strong>stenographie virus</strong></p>

<p><a href="http://spth.virii.lu">SPTH</a> already had the idea to split a virus over <a href="http://spth.virii.lu/ArchiveTiger.rar">different ZIP archives</a> or to split it over <a href="http://spth.virii.lu/overfile.txt">many different sized files</a>. I first had the idea to splitt a virus and hide its parts in the EXIF data of pictures or attatch at other files. An even better idea I had, was to use steganography to hide the parts of the virus in different images on the disc. Now you just need a file to read all the parts, put them together again into one file and execute the virus.</p>

<p>Maybe somebody has time and motivation to write one of these codes and we will se them in DarK-CodeZ 5 or Valhalla 4.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Aktuelles Projekt: ELF Infector]]></title>
    <link href="https://www.r3s1stanc3.me/aktuelles-projekt-elf-infector/"/>
    <updated>2013-01-28T00:00:00+01:00</updated>
    <id>https://www.r3s1stanc3.me/aktuelles-projekt-elf-infector</id>
    <content type="html"><![CDATA[<p>In meinem letztem Blogpost hatte ich angekündigt, etwas zu SPTH’s Language Infection Project beizutragen. Das muss leider noch ein bisschen warten, da ich ein neues Projekt gestartet habe: Ich versuche einen ELF Infector in Java zu schreiben (man kann Java Codes auch zu ELF Dateien compilen).<!--more--></p>

<p>Da es keine offizielle ELF Library für Java gibt (und ich das Dateiformat gut kennen lernen will) werde ich versuchen alle Funktionen selber zu schreiben. Diese Funktionen werde ich hier im Blog immer wieder hochladen und Teilweise auch erklären.</p>

<p>Bis jetzt habe ich Funktionen um zu</p>

<ul>
<li><p>überprüfen, ob es sich um eine ELF Datei handelt (0x7F454C46 am Anfang der Datei)</p></li>
<li><p>die Architektur auslesen (4. Byte in einer ELF Datei)</p></li>
<li><p>den EntryPoint auslesen und verändern</p></li>
<li><p>Offset des ProgramHeaders auslesen</p></li>
</ul>


<p>Hier ist der aktuelle Code. Ich werde regelmäßig Updates hierzu schreiben</p>

<figure class='code'><figcaption><span>jELFlib (jelflib.java)</span> <a href='https://www.r3s1stanc3.me/downloads/code/Java/jelflib.java'>download</a></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
<span class='line-number'>36</span>
<span class='line-number'>37</span>
<span class='line-number'>38</span>
<span class='line-number'>39</span>
<span class='line-number'>40</span>
<span class='line-number'>41</span>
<span class='line-number'>42</span>
<span class='line-number'>43</span>
<span class='line-number'>44</span>
<span class='line-number'>45</span>
<span class='line-number'>46</span>
<span class='line-number'>47</span>
<span class='line-number'>48</span>
<span class='line-number'>49</span>
<span class='line-number'>50</span>
<span class='line-number'>51</span>
<span class='line-number'>52</span>
<span class='line-number'>53</span>
<span class='line-number'>54</span>
<span class='line-number'>55</span>
<span class='line-number'>56</span>
<span class='line-number'>57</span>
<span class='line-number'>58</span>
<span class='line-number'>59</span>
<span class='line-number'>60</span>
<span class='line-number'>61</span>
<span class='line-number'>62</span>
<span class='line-number'>63</span>
<span class='line-number'>64</span>
<span class='line-number'>65</span>
<span class='line-number'>66</span>
<span class='line-number'>67</span>
<span class='line-number'>68</span>
<span class='line-number'>69</span>
<span class='line-number'>70</span>
<span class='line-number'>71</span>
<span class='line-number'>72</span>
<span class='line-number'>73</span>
<span class='line-number'>74</span>
<span class='line-number'>75</span>
<span class='line-number'>76</span>
<span class='line-number'>77</span>
<span class='line-number'>78</span>
<span class='line-number'>79</span>
<span class='line-number'>80</span>
<span class='line-number'>81</span>
<span class='line-number'>82</span>
<span class='line-number'>83</span>
<span class='line-number'>84</span>
<span class='line-number'>85</span>
<span class='line-number'>86</span>
<span class='line-number'>87</span>
<span class='line-number'>88</span>
<span class='line-number'>89</span>
<span class='line-number'>90</span>
<span class='line-number'>91</span>
<span class='line-number'>92</span>
<span class='line-number'>93</span>
<span class='line-number'>94</span>
<span class='line-number'>95</span>
<span class='line-number'>96</span>
<span class='line-number'>97</span>
<span class='line-number'>98</span>
<span class='line-number'>99</span>
<span class='line-number'>100</span>
<span class='line-number'>101</span>
<span class='line-number'>102</span>
<span class='line-number'>103</span>
<span class='line-number'>104</span>
<span class='line-number'>105</span>
<span class='line-number'>106</span>
<span class='line-number'>107</span>
<span class='line-number'>108</span>
<span class='line-number'>109</span>
<span class='line-number'>110</span>
<span class='line-number'>111</span>
<span class='line-number'>112</span>
<span class='line-number'>113</span>
<span class='line-number'>114</span>
<span class='line-number'>115</span>
<span class='line-number'>116</span>
<span class='line-number'>117</span>
<span class='line-number'>118</span>
<span class='line-number'>119</span>
<span class='line-number'>120</span>
<span class='line-number'>121</span>
<span class='line-number'>122</span>
<span class='line-number'>123</span>
<span class='line-number'>124</span>
<span class='line-number'>125</span>
<span class='line-number'>126</span>
<span class='line-number'>127</span>
<span class='line-number'>128</span>
<span class='line-number'>129</span>
<span class='line-number'>130</span>
<span class='line-number'>131</span>
<span class='line-number'>132</span>
<span class='line-number'>133</span>
<span class='line-number'>134</span>
<span class='line-number'>135</span>
<span class='line-number'>136</span>
<span class='line-number'>137</span>
<span class='line-number'>138</span>
<span class='line-number'>139</span>
<span class='line-number'>140</span>
<span class='line-number'>141</span>
<span class='line-number'>142</span>
<span class='line-number'>143</span>
<span class='line-number'>144</span>
<span class='line-number'>145</span>
<span class='line-number'>146</span>
<span class='line-number'>147</span>
<span class='line-number'>148</span>
<span class='line-number'>149</span>
<span class='line-number'>150</span>
<span class='line-number'>151</span>
<span class='line-number'>152</span>
<span class='line-number'>153</span>
<span class='line-number'>154</span>
<span class='line-number'>155</span>
<span class='line-number'>156</span>
<span class='line-number'>157</span>
<span class='line-number'>158</span>
<span class='line-number'>159</span>
<span class='line-number'>160</span>
<span class='line-number'>161</span>
<span class='line-number'>162</span>
<span class='line-number'>163</span>
<span class='line-number'>164</span>
<span class='line-number'>165</span>
<span class='line-number'>166</span>
<span class='line-number'>167</span>
<span class='line-number'>168</span>
<span class='line-number'>169</span>
<span class='line-number'>170</span>
<span class='line-number'>171</span>
<span class='line-number'>172</span>
<span class='line-number'>173</span>
<span class='line-number'>174</span>
<span class='line-number'>175</span>
<span class='line-number'>176</span>
<span class='line-number'>177</span>
<span class='line-number'>178</span>
<span class='line-number'>179</span>
<span class='line-number'>180</span>
<span class='line-number'>181</span>
<span class='line-number'>182</span>
<span class='line-number'>183</span>
<span class='line-number'>184</span>
<span class='line-number'>185</span>
<span class='line-number'>186</span>
<span class='line-number'>187</span>
<span class='line-number'>188</span>
<span class='line-number'>189</span>
<span class='line-number'>190</span>
<span class='line-number'>191</span>
<span class='line-number'>192</span>
<span class='line-number'>193</span>
<span class='line-number'>194</span>
<span class='line-number'>195</span>
<span class='line-number'>196</span>
<span class='line-number'>197</span>
<span class='line-number'>198</span>
<span class='line-number'>199</span>
<span class='line-number'>200</span>
<span class='line-number'>201</span>
<span class='line-number'>202</span>
<span class='line-number'>203</span>
<span class='line-number'>204</span>
<span class='line-number'>205</span>
<span class='line-number'>206</span>
<span class='line-number'>207</span>
<span class='line-number'>208</span>
<span class='line-number'>209</span>
<span class='line-number'>210</span>
<span class='line-number'>211</span>
<span class='line-number'>212</span>
<span class='line-number'>213</span>
<span class='line-number'>214</span>
<span class='line-number'>215</span>
<span class='line-number'>216</span>
<span class='line-number'>217</span>
<span class='line-number'>218</span>
<span class='line-number'>219</span>
<span class='line-number'>220</span>
<span class='line-number'>221</span>
<span class='line-number'>222</span>
<span class='line-number'>223</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="kn">import</span> <span class="nn">java</span> <span class="o">.</span> <span class="n">io</span> <span class="o">.</span> <span class="o">*</span> <span class="o">;</span>
</span><span class='line'><span class="kn">import</span> <span class="nn">java</span> <span class="o">.</span> <span class="n">math</span> <span class="o">.</span> <span class="n">BigInteger</span> <span class="o">;</span>
</span><span class='line'>
</span><span class='line'><span class="cm">/**</span>
</span><span class='line'><span class="cm"> * ELF</span>
</span><span class='line'><span class="cm"> * </span>
</span><span class='line'><span class="cm"> * @author R3s1stanc3</span>
</span><span class='line'><span class="cm"> * @version 0.1</span>
</span><span class='line'><span class="cm"> */</span>
</span><span class='line'><span class="kd">public</span> <span class="kd">class</span> <span class="nc">ELF</span>
</span><span class='line'><span class="o">{</span>
</span><span class='line'>
</span><span class='line'>    <span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span> <span class="o">(</span> <span class="n">String</span> <span class="o">[</span> <span class="o">]</span> <span class="n">args</span> <span class="o">)</span>
</span><span class='line'>    <span class="o">{</span>
</span><span class='line'>
</span><span class='line'>        <span class="k">new</span> <span class="nf">ELF</span> <span class="o">(</span> <span class="o">)</span> <span class="o">;</span>
</span><span class='line'>
</span><span class='line'>    <span class="o">}</span>
</span><span class='line'>
</span><span class='line'>    <span class="kd">public</span> <span class="nf">ELF</span> <span class="o">(</span> <span class="o">)</span>
</span><span class='line'>    <span class="o">{</span>
</span><span class='line'>
</span><span class='line'>        <span class="kt">byte</span> <span class="o">[</span> <span class="o">]</span> <span class="n">fullFile</span> <span class="o">=</span> <span class="n">readFile</span> <span class="o">(</span> <span class="s">&quot;/home/r3s1stanc3/elf/halloadf&quot;</span> <span class="o">)</span> <span class="o">;</span>
</span><span class='line'>
</span><span class='line'>        <span class="kt">int</span> <span class="n">arch</span> <span class="o">=</span> <span class="n">getArch</span> <span class="o">(</span> <span class="n">fullFile</span> <span class="o">)</span> <span class="o">;</span>
</span><span class='line'>        <span class="c1">// exit if we can&#39;t get the architecture or if the file is no ELF file</span>
</span><span class='line'>        <span class="k">if</span> <span class="o">(</span> <span class="n">arch</span> <span class="o">==</span> <span class="mi">0</span> <span class="o">||</span> <span class="o">!(</span><span class="n">isELF</span> <span class="o">(</span> <span class="n">fullFile</span> <span class="o">)))</span> <span class="n">System</span> <span class="o">.</span> <span class="n">exit</span> <span class="o">(</span> <span class="mi">0</span> <span class="o">)</span> <span class="o">;</span>
</span><span class='line'>
</span><span class='line'>        <span class="kt">byte</span> <span class="o">[</span> <span class="o">]</span> <span class="n">entryPoint</span> <span class="o">=</span> <span class="n">getEntryPoint</span> <span class="o">(</span> <span class="n">fullFile</span><span class="o">,</span> <span class="n">arch</span> <span class="o">)</span> <span class="o">;</span>
</span><span class='line'>
</span><span class='line'>        <span class="n">String</span> <span class="n">hexString</span> <span class="o">=</span> <span class="n">byteToHex</span> <span class="o">(</span> <span class="n">entryPoint</span> <span class="o">)</span> <span class="o">;</span>
</span><span class='line'>        <span class="kt">int</span> <span class="n">entry</span> <span class="o">=</span> <span class="n">Integer</span> <span class="o">.</span> <span class="n">parseInt</span> <span class="o">(</span> <span class="n">hexString</span><span class="o">,</span> <span class="mi">16</span> <span class="o">)</span> <span class="o">;</span>
</span><span class='line'>        <span class="n">System</span> <span class="o">.</span> <span class="n">out</span> <span class="o">.</span> <span class="n">println</span> <span class="o">(</span> <span class="n">byteToHex</span> <span class="o">(</span><span class="n">intToByteArray</span><span class="o">(</span><span class="n">entry</span><span class="o">))</span> <span class="o">)</span> <span class="o">;</span>
</span><span class='line'>        <span class="kt">int</span> <span class="n">programHeaderOffset</span> <span class="o">=</span> <span class="n">getProgramHeadersOffset</span> <span class="o">(</span> <span class="n">fullFile</span><span class="o">,</span> <span class="n">arch</span> <span class="o">)</span> <span class="o">;</span>
</span><span class='line'>        <span class="n">System</span> <span class="o">.</span> <span class="n">out</span> <span class="o">.</span> <span class="n">println</span> <span class="o">(</span> <span class="n">hexString</span> <span class="o">)</span> <span class="o">;</span>
</span><span class='line'>        <span class="n">System</span> <span class="o">.</span> <span class="n">out</span> <span class="o">.</span> <span class="n">println</span> <span class="o">(</span> <span class="n">entry</span> <span class="o">)</span> <span class="o">;</span>
</span><span class='line'>        <span class="n">System</span> <span class="o">.</span> <span class="n">out</span> <span class="o">.</span> <span class="n">println</span> <span class="o">(</span> <span class="n">arch</span> <span class="o">)</span> <span class="o">;</span>
</span><span class='line'>        <span class="n">System</span> <span class="o">.</span> <span class="n">out</span> <span class="o">.</span> <span class="n">println</span> <span class="o">(</span> <span class="n">programHeaderOffset</span> <span class="o">)</span> <span class="o">;</span>
</span><span class='line'>
</span><span class='line'>        <span class="c1">// i used a hallo world ELF written in nasm and set the EntryPoint direct to the exit code</span>
</span><span class='line'>        <span class="kt">byte</span> <span class="o">[</span> <span class="o">]</span> <span class="n">newFile</span> <span class="o">=</span> <span class="n">changeEntryPoint</span> <span class="o">(</span> <span class="n">fullFile</span><span class="o">,</span> <span class="n">entry</span><span class="o">,</span> <span class="mi">27</span> <span class="o">)</span> <span class="o">;</span>
</span><span class='line'>        <span class="n">writeFileByte</span> <span class="o">(</span> <span class="s">&quot;/home/r3s1stanc3/elf/halloadf&quot;</span><span class="o">,</span> <span class="n">newFile</span> <span class="o">)</span> <span class="o">;</span>
</span><span class='line'>
</span><span class='line'>    <span class="o">}</span>
</span><span class='line'>
</span><span class='line'>    <span class="cm">/**</span>
</span><span class='line'><span class="cm">     * Reads the content of a file</span>
</span><span class='line'><span class="cm">     * @param name Name of the file</span>
</span><span class='line'><span class="cm">     * @return the files content as a byte array</span>
</span><span class='line'><span class="cm">     */</span>
</span><span class='line'>    <span class="kd">public</span> <span class="kt">byte</span> <span class="o">[</span> <span class="o">]</span> <span class="n">readFile</span> <span class="o">(</span> <span class="n">String</span> <span class="n">name</span> <span class="o">)</span>
</span><span class='line'>    <span class="o">{</span>
</span><span class='line'>
</span><span class='line'>        <span class="k">try</span>
</span><span class='line'>        <span class="o">{</span>
</span><span class='line'>            <span class="n">RandomAccessFile</span> <span class="n">file</span> <span class="o">=</span> <span class="k">new</span> <span class="n">RandomAccessFile</span> <span class="o">(</span> <span class="n">name</span><span class="o">,</span> <span class="s">&quot;r&quot;</span> <span class="o">)</span> <span class="o">;</span>
</span><span class='line'>            <span class="kt">byte</span> <span class="o">[</span> <span class="o">]</span> <span class="n">data</span> <span class="o">=</span> <span class="k">new</span> <span class="kt">byte</span> <span class="o">[</span> <span class="o">(</span> <span class="kt">int</span> <span class="o">)</span> <span class="n">file</span> <span class="o">.</span> <span class="n">length</span> <span class="o">(</span> <span class="o">)</span> <span class="o">]</span> <span class="o">;</span>
</span><span class='line'>
</span><span class='line'>            <span class="n">file</span> <span class="o">.</span> <span class="n">read</span> <span class="o">(</span> <span class="n">data</span> <span class="o">)</span> <span class="o">;</span>
</span><span class='line'>
</span><span class='line'>            <span class="n">file</span> <span class="o">.</span> <span class="n">close</span> <span class="o">(</span> <span class="o">)</span> <span class="o">;</span>
</span><span class='line'>
</span><span class='line'>            <span class="k">return</span> <span class="n">data</span> <span class="o">;</span>
</span><span class='line'>        <span class="o">}</span>
</span><span class='line'>        <span class="k">catch</span> <span class="o">(</span> <span class="n">Exception</span> <span class="n">e</span> <span class="o">)</span> <span class="o">{</span> <span class="k">return</span> <span class="kc">null</span> <span class="o">;</span> <span class="o">}</span>
</span><span class='line'>
</span><span class='line'>    <span class="o">}</span>
</span><span class='line'>
</span><span class='line'>    <span class="cm">/**</span>
</span><span class='line'><span class="cm">     * converts a byte array to a hex string</span>
</span><span class='line'><span class="cm">     * @param bytes byte array to convert</span>
</span><span class='line'><span class="cm">     * @return hex string</span>
</span><span class='line'><span class="cm">     */</span>
</span><span class='line'>    <span class="kd">public</span> <span class="n">String</span> <span class="nf">byteToHex</span> <span class="o">(</span> <span class="kt">byte</span> <span class="o">[</span> <span class="o">]</span> <span class="n">bytes</span> <span class="o">)</span>
</span><span class='line'>    <span class="o">{</span>
</span><span class='line'>
</span><span class='line'>        <span class="n">BigInteger</span> <span class="n">bi</span> <span class="o">=</span> <span class="k">new</span> <span class="n">BigInteger</span> <span class="o">(</span> <span class="mi">1</span><span class="o">,</span> <span class="n">bytes</span> <span class="o">)</span> <span class="o">;</span>
</span><span class='line'>        <span class="k">return</span> <span class="n">String</span> <span class="o">.</span> <span class="n">format</span> <span class="o">(</span> <span class="s">&quot;%0&quot;</span> <span class="o">+</span> <span class="o">(</span> <span class="n">bytes</span> <span class="o">.</span> <span class="n">length</span> <span class="o">&lt;&lt;</span> <span class="mi">1</span> <span class="o">)</span> <span class="o">+</span> <span class="s">&quot;X&quot;</span><span class="o">,</span> <span class="n">bi</span> <span class="o">)</span> <span class="o">;</span>
</span><span class='line'>
</span><span class='line'>    <span class="o">}</span>
</span><span class='line'>
</span><span class='line'>    <span class="cm">/**</span>
</span><span class='line'><span class="cm">     * Returns the entry point of an ELF file.</span>
</span><span class='line'><span class="cm">     * @param file byte array of the whole file</span>
</span><span class='line'><span class="cm">     * @return entry point in a byte array</span>
</span><span class='line'><span class="cm">     */</span>
</span><span class='line'>    <span class="kd">public</span> <span class="kt">byte</span> <span class="o">[</span> <span class="o">]</span> <span class="n">getEntryPoint</span> <span class="o">(</span> <span class="kt">byte</span> <span class="o">[</span> <span class="o">]</span> <span class="n">file</span><span class="o">,</span> <span class="kt">int</span> <span class="n">arch</span> <span class="o">)</span>
</span><span class='line'>    <span class="o">{</span>
</span><span class='line'>
</span><span class='line'>        <span class="kt">int</span> <span class="n">length</span> <span class="o">;</span>
</span><span class='line'>        <span class="k">if</span> <span class="o">(</span> <span class="n">arch</span> <span class="o">==</span> <span class="mi">32</span> <span class="o">)</span> <span class="n">length</span> <span class="o">=</span> <span class="mi">4</span> <span class="o">;</span>
</span><span class='line'>        <span class="k">else</span> <span class="n">length</span> <span class="o">=</span> <span class="mi">8</span> <span class="o">;</span>
</span><span class='line'>
</span><span class='line'>        <span class="kt">byte</span> <span class="o">[</span> <span class="o">]</span> <span class="n">entryPoint</span> <span class="o">=</span> <span class="k">new</span> <span class="kt">byte</span> <span class="o">[</span> <span class="n">length</span> <span class="o">]</span> <span class="o">;</span>
</span><span class='line'>        <span class="k">for</span> <span class="o">(</span> <span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">length</span><span class="o">;</span> <span class="n">i</span> <span class="o">++</span> <span class="o">)</span>
</span><span class='line'>        <span class="o">{</span>
</span><span class='line'>            <span class="n">entryPoint</span> <span class="o">[</span> <span class="n">i</span> <span class="o">]</span> <span class="o">=</span> <span class="n">file</span> <span class="o">[</span> <span class="mh">0x18</span> <span class="o">+</span> <span class="n">i</span> <span class="o">]</span> <span class="o">;</span>
</span><span class='line'>        <span class="o">}</span>
</span><span class='line'>        <span class="k">return</span> <span class="nf">reverse</span> <span class="o">(</span> <span class="n">entryPoint</span> <span class="o">)</span> <span class="o">;</span>
</span><span class='line'>
</span><span class='line'>    <span class="o">}</span>
</span><span class='line'>
</span><span class='line'>    <span class="cm">/**</span>
</span><span class='line'><span class="cm">     * checks the 4th byte of an ELF file to see if it is a 32 or 64 bit file</span>
</span><span class='line'><span class="cm">     * @param file byte array of the whole file</span>
</span><span class='line'><span class="cm">     * @return 32 - 32 bit; 64 - 64 bit; 0 - error</span>
</span><span class='line'><span class="cm">     */</span>
</span><span class='line'>    <span class="kd">public</span> <span class="kt">int</span> <span class="nf">getArch</span> <span class="o">(</span> <span class="kt">byte</span> <span class="o">[</span> <span class="o">]</span> <span class="n">file</span> <span class="o">)</span>
</span><span class='line'>    <span class="o">{</span>
</span><span class='line'>
</span><span class='line'>        <span class="k">if</span> <span class="o">(</span> <span class="n">file</span> <span class="o">[</span> <span class="mh">0x4</span> <span class="o">]</span> <span class="o">==</span> <span class="mh">0x01</span> <span class="o">)</span> <span class="k">return</span> <span class="mi">32</span> <span class="o">;</span>
</span><span class='line'>        <span class="k">else</span> <span class="nf">if</span> <span class="o">(</span> <span class="n">file</span> <span class="o">[</span> <span class="mh">0x4</span> <span class="o">]</span> <span class="o">==</span> <span class="mh">0x02</span> <span class="o">)</span> <span class="k">return</span> <span class="mi">64</span> <span class="o">;</span>
</span><span class='line'>        <span class="k">else</span> <span class="k">return</span> <span class="mi">0</span> <span class="o">;</span>
</span><span class='line'>
</span><span class='line'>    <span class="o">}</span>
</span><span class='line'>
</span><span class='line'>    <span class="cm">/**</span>
</span><span class='line'><span class="cm">     * reverses a byte array</span>
</span><span class='line'><span class="cm">     * @param array array to reverse</span>
</span><span class='line'><span class="cm">     * @return reversed array</span>
</span><span class='line'><span class="cm">     */</span>
</span><span class='line'>    <span class="kd">public</span> <span class="kt">byte</span> <span class="o">[</span> <span class="o">]</span> <span class="n">reverse</span><span class="o">(</span> <span class="kt">byte</span> <span class="o">[</span> <span class="o">]</span> <span class="n">array</span> <span class="o">)</span>
</span><span class='line'>    <span class="o">{</span>
</span><span class='line'>
</span><span class='line'>        <span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span> <span class="o">;</span>
</span><span class='line'>        <span class="kt">int</span> <span class="n">j</span> <span class="o">=</span> <span class="n">array</span> <span class="o">.</span> <span class="n">length</span> <span class="o">-</span> <span class="mi">1</span> <span class="o">;</span>
</span><span class='line'>        <span class="kt">byte</span> <span class="n">tmp</span> <span class="o">;</span>
</span><span class='line'>        <span class="k">while</span> <span class="o">(</span> <span class="n">j</span> <span class="o">&gt;</span> <span class="n">i</span> <span class="o">)</span>
</span><span class='line'>        <span class="o">{</span>
</span><span class='line'>            <span class="n">tmp</span> <span class="o">=</span> <span class="n">array</span> <span class="o">[</span> <span class="n">j</span> <span class="o">]</span> <span class="o">;</span>
</span><span class='line'>            <span class="n">array</span> <span class="o">[</span> <span class="n">j</span> <span class="o">]</span> <span class="o">=</span> <span class="n">array</span> <span class="o">[</span> <span class="n">i</span> <span class="o">]</span> <span class="o">;</span>
</span><span class='line'>            <span class="n">array</span> <span class="o">[</span> <span class="n">i</span> <span class="o">]</span> <span class="o">=</span> <span class="n">tmp</span> <span class="o">;</span>
</span><span class='line'>            <span class="n">j</span><span class="o">--</span> <span class="o">;</span>
</span><span class='line'>            <span class="n">i</span><span class="o">++</span> <span class="o">;</span>
</span><span class='line'>        <span class="o">}</span>
</span><span class='line'>        <span class="k">return</span> <span class="n">array</span> <span class="o">;</span>
</span><span class='line'>
</span><span class='line'>    <span class="o">}</span>
</span><span class='line'>
</span><span class='line'>    <span class="cm">/**</span>
</span><span class='line'><span class="cm">     * checks the header of a file to see if it&#39;s a ELF or not</span>
</span><span class='line'><span class="cm">     * @param file byte array of the whole file</span>
</span><span class='line'><span class="cm">     * @retrun true - ELF file; false - no ELF file</span>
</span><span class='line'><span class="cm">     */</span>
</span><span class='line'>    <span class="kd">public</span> <span class="kt">boolean</span> <span class="nf">isELF</span> <span class="o">(</span> <span class="kt">byte</span> <span class="o">[</span> <span class="o">]</span> <span class="n">file</span> <span class="o">)</span>
</span><span class='line'>    <span class="o">{</span>
</span><span class='line'>
</span><span class='line'>        <span class="c1">// magic number of an ELF file: 0x7F454C46</span>
</span><span class='line'>        <span class="k">if</span> <span class="o">(</span> <span class="n">file</span> <span class="o">[</span> <span class="mi">0</span> <span class="o">]</span> <span class="o">==</span> <span class="mh">0x7F</span> <span class="o">&amp;&amp;</span> <span class="n">file</span> <span class="o">[</span> <span class="mi">1</span> <span class="o">]</span> <span class="o">==</span> <span class="mh">0x45</span> <span class="o">&amp;&amp;</span> <span class="n">file</span> <span class="o">[</span> <span class="mi">2</span> <span class="o">]</span> <span class="o">==</span> <span class="mh">0x4C</span> <span class="o">&amp;&amp;</span> <span class="n">file</span> <span class="o">[</span> <span class="mi">3</span> <span class="o">]</span> <span class="o">==</span> <span class="mh">0x46</span> <span class="o">)</span> <span class="k">return</span> <span class="kc">true</span> <span class="o">;</span>
</span><span class='line'>        <span class="k">else</span> <span class="k">return</span> <span class="kc">false</span> <span class="o">;</span>
</span><span class='line'>
</span><span class='line'>    <span class="o">}</span>
</span><span class='line'>
</span><span class='line'>    <span class="cm">/**</span>
</span><span class='line'><span class="cm">     * reads the program header offset of an ELF file</span>
</span><span class='line'><span class="cm">     * @param file byte array of the whole file</span>
</span><span class='line'><span class="cm">     * @param arch architecture of the file</span>
</span><span class='line'><span class="cm">     * @return program header offset as an integer value</span>
</span><span class='line'><span class="cm">     */</span>
</span><span class='line'>    <span class="kd">public</span> <span class="kt">int</span> <span class="nf">getProgramHeadersOffset</span> <span class="o">(</span> <span class="kt">byte</span> <span class="o">[</span> <span class="o">]</span> <span class="n">file</span><span class="o">,</span> <span class="kt">int</span> <span class="n">arch</span> <span class="o">)</span>
</span><span class='line'>    <span class="o">{</span>
</span><span class='line'>
</span><span class='line'>        <span class="k">if</span> <span class="o">(</span> <span class="n">arch</span> <span class="o">==</span> <span class="mi">32</span> <span class="o">)</span> <span class="k">return</span> <span class="n">file</span> <span class="o">[</span> <span class="mh">0x1C</span> <span class="o">]</span> <span class="o">;</span>
</span><span class='line'>        <span class="k">else</span> <span class="k">return</span> <span class="n">file</span> <span class="o">[</span> <span class="mh">0x20</span> <span class="o">]</span> <span class="o">;</span>
</span><span class='line'>
</span><span class='line'>    <span class="o">}</span>
</span><span class='line'>
</span><span class='line'>    <span class="cm">/**</span>
</span><span class='line'><span class="cm">     * changes the entrypoint of a file by a given number</span>
</span><span class='line'><span class="cm">     * @param file byte array of the whole file</span>
</span><span class='line'><span class="cm">     * @param entry original entrypoint as integer value</span>
</span><span class='line'><span class="cm">     * @param change number to increase the entrypoint</span>
</span><span class='line'><span class="cm">     */</span>
</span><span class='line'>    <span class="kd">public</span> <span class="kt">byte</span> <span class="o">[</span> <span class="o">]</span> <span class="n">changeEntryPoint</span> <span class="o">(</span> <span class="kt">byte</span> <span class="o">[</span> <span class="o">]</span> <span class="n">file</span><span class="o">,</span> <span class="kt">int</span> <span class="n">entry</span><span class="o">,</span> <span class="kt">int</span> <span class="n">change</span> <span class="o">)</span>
</span><span class='line'>    <span class="o">{</span>
</span><span class='line'>
</span><span class='line'>        <span class="n">entry</span> <span class="o">+=</span> <span class="n">change</span> <span class="o">;</span>
</span><span class='line'>        <span class="kt">byte</span> <span class="o">[</span> <span class="o">]</span> <span class="n">entryB</span> <span class="o">=</span> <span class="n">reverse</span> <span class="o">(</span> <span class="n">intToByteArray</span> <span class="o">(</span> <span class="n">entry</span> <span class="o">)</span> <span class="o">)</span> <span class="o">;</span>
</span><span class='line'>        <span class="k">for</span> <span class="o">(</span> <span class="kt">int</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">entryB</span> <span class="o">.</span> <span class="n">length</span><span class="o">;</span> <span class="n">i</span> <span class="o">++</span> <span class="o">)</span>
</span><span class='line'>        <span class="o">{</span>
</span><span class='line'>            <span class="n">file</span> <span class="o">[</span> <span class="mh">0x18</span> <span class="o">+</span> <span class="n">i</span> <span class="o">]</span> <span class="o">=</span> <span class="n">entryB</span> <span class="o">[</span> <span class="n">i</span> <span class="o">]</span> <span class="o">;</span>
</span><span class='line'>        <span class="o">}</span>
</span><span class='line'>
</span><span class='line'>        <span class="k">return</span> <span class="n">file</span> <span class="o">;</span>
</span><span class='line'>
</span><span class='line'>    <span class="o">}</span>
</span><span class='line'>
</span><span class='line'>    <span class="cm">/**</span>
</span><span class='line'><span class="cm">     * converts an integer value to a byte array of hex values</span>
</span><span class='line'><span class="cm">     * @param value integer value</span>
</span><span class='line'><span class="cm">     * @return byte array</span>
</span><span class='line'><span class="cm">     */</span>
</span><span class='line'>    <span class="kd">public</span> <span class="kt">byte</span> <span class="o">[</span> <span class="o">]</span> <span class="n">intToByteArray</span> <span class="o">(</span> <span class="kt">int</span> <span class="n">value</span> <span class="o">)</span>
</span><span class='line'>    <span class="o">{</span>
</span><span class='line'>
</span><span class='line'>        <span class="k">return</span> <span class="k">new</span> <span class="kt">byte</span> <span class="o">[</span> <span class="o">]</span>
</span><span class='line'>        <span class="o">{</span>
</span><span class='line'>            <span class="o">(</span><span class="kt">byte</span><span class="o">)(</span> <span class="n">value</span> <span class="o">&gt;&gt;&gt;</span> <span class="mi">24</span> <span class="o">),</span>
</span><span class='line'>            <span class="o">(</span><span class="kt">byte</span><span class="o">)(</span> <span class="n">value</span> <span class="o">&gt;&gt;&gt;</span> <span class="mi">16</span> <span class="o">),</span>
</span><span class='line'>            <span class="o">(</span><span class="kt">byte</span><span class="o">)(</span> <span class="n">value</span> <span class="o">&gt;&gt;&gt;</span> <span class="mi">8</span> <span class="o">),</span>
</span><span class='line'>            <span class="o">(</span><span class="kt">byte</span><span class="o">)</span> <span class="n">value</span>
</span><span class='line'>        <span class="o">};</span>
</span><span class='line'>
</span><span class='line'>    <span class="o">}</span>
</span><span class='line'>
</span><span class='line'>    <span class="cm">/**</span>
</span><span class='line'><span class="cm">     * Writes a bytearray to a file</span>
</span><span class='line'><span class="cm">     * @param fi file to write to</span>
</span><span class='line'><span class="cm">     * @param data bytearray to write in the file</span>
</span><span class='line'><span class="cm">     */</span>
</span><span class='line'>    <span class="kd">public</span> <span class="kt">void</span> <span class="nf">writeFileByte</span> <span class="o">(</span> <span class="n">String</span> <span class="n">fi</span><span class="o">,</span> <span class="kt">byte</span> <span class="o">[</span> <span class="o">]</span> <span class="n">data</span> <span class="o">)</span>
</span><span class='line'>    <span class="o">{</span>
</span><span class='line'>      <span class="k">try</span>
</span><span class='line'>      <span class="o">{</span>
</span><span class='line'>          <span class="n">FileOutputStream</span> <span class="n">output</span> <span class="o">=</span> <span class="k">new</span> <span class="n">FileOutputStream</span> <span class="o">(</span> <span class="n">fi</span> <span class="o">)</span> <span class="o">;</span>
</span><span class='line'>          <span class="n">output</span> <span class="o">.</span> <span class="n">write</span> <span class="o">(</span> <span class="n">data</span><span class="o">,</span> <span class="mi">0</span><span class="o">,</span> <span class="n">data</span> <span class="o">.</span> <span class="n">length</span> <span class="o">)</span> <span class="o">;</span>
</span><span class='line'>          <span class="n">output</span> <span class="o">.</span> <span class="n">flush</span> <span class="o">(</span> <span class="o">)</span> <span class="o">;</span>
</span><span class='line'>          <span class="n">output</span> <span class="o">.</span> <span class="n">close</span> <span class="o">(</span> <span class="o">)</span> <span class="o">;</span>
</span><span class='line'>      <span class="o">}</span>
</span><span class='line'>      <span class="k">catch</span> <span class="o">(</span> <span class="n">Exception</span> <span class="n">e</span> <span class="o">)</span> <span class="o">{</span> <span class="o">}</span>
</span><span class='line'>  <span class="o">}</span>
</span><span class='line'>
</span><span class='line'><span class="o">}</span>
</span></code></pre></td></tr></table></div></figure>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Language Infection Project, DarK-CodeZ #5 & Valhalla #4]]></title>
    <link href="https://www.r3s1stanc3.me/language-infection-dc-valhalla/"/>
    <updated>2013-01-17T00:00:00+01:00</updated>
    <id>https://www.r3s1stanc3.me/language-infection-dc-valhalla</id>
    <content type="html"><![CDATA[<p>Ein neues Jahr und so viele gute Neuigkeiten :)<!--more--></p>

<p>Vor ein paar Tagen hat SPTH sein <a href="http://spth.virii.lu/LIP.html">Language Infection Project</a> (LIP) gestartet. Das Ziel diese Projekts ist es, möglichst viele neue Sprachen zu infizieren. Innerhalb von 3 Tagen wurden gleich 4 neue Viren geschrieben. Ich finde das Projekt ist eine super Idee und ich werde mich wenn ich demnächst mal Zeit habe auch hinsetzen und einen Code dafür schreiben. Infect all the languages!!</p>

<p>Der nächste Punkt ist das 5. DarK-CodeZ ezine. Wir wollten eigentlich zusammen mit den Leuten von EOF an EOF #4 arbeiten, aber pr0mix ist nicht mehr erreichbar und auch der EOF Blog ist down (Sollte irgendjemand wissen, was da los ist, bite eine Mail schreiben). Der Aufruf ist auf unserer <a href="http://vxnetw0rk.ws/">neuen Homepage</a> (ja, wir haben jetzt eine richtige offizielle Homepage). Das Mag wird im Sommer released und die Deadline ist am 28 Juni.</p>

<p>Der letzte Punkt ist die Ankündigung von Valhalla #4. Dieses mal kann sich jeder beteiligen, der Lust hat (solange hh86 den Code aufnimmt). Valhalla #4 wird Ende dieses Jahr veröffentlicht und hier ist die Deadline der 1.11.2013. Ich gehe davon aus, dass durch diesen öffentlichen Aufruf viel mehr Stuff gesammelt werden kann.</p>

<p>Wie ihr seht, hat das Jahr schon mal sehr gut angefangen und ich hoffe, dass noch einiges passiert. Wenn das so weiter geht haben wir aber nichts zu befürchten.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Valhalla #3]]></title>
    <link href="https://www.r3s1stanc3.me/valhalla-3/"/>
    <updated>2012-12-21T00:00:00+01:00</updated>
    <id>https://www.r3s1stanc3.me/valhalla-3</id>
    <content type="html"><![CDATA[<p>Heute Morgen hat <a href="https://twitter.com/hh86_">hh86</a> Valhalla #3 passend zum Weltuntergang released. Wer noch nichts vorhat (oder heute keine Lust auf Weltuntergang hat) sollte es sich unbedingt durchlesen. Es sind wieder ein Haufen coole Sachen drin und dieses Mal habe auch ich einen Code eingesendet.<!--more--></p>

<p><a href="https://twitter.com/SPTHvx">SPTH</a> hat einen schönen Rückblick auf vergangene Zukunftsvorstellungen von verschiedenen Autoren zusammengestellt, man findet interessante Interviews und super Codes.</p>

<p>Ich habe für das ezine einen POC Java Infector geschrieben, der JAR Dateien mit Hilfe der Java CompilerClass infiziert. Den Code und den Artikel könnt ihr im mag und auf <a href="http://r3s1stanc3.virii.lu/projects/JavaInfector/index.html">meiner Projekt Seite</a> finden.</p>

<p>Das ezine findet ihr auf <a href="http://spth.virii.lu/">SPTH’s Blog</a> und auch in <a href="http://download.adamas.ai/dlbase/ezines/Valhalla/valhalla3.zip">Perforins Download Base</a> (unter Linux muss man ein paar Pfadangaben anpassen).</p>

<p>English:</p>

<p>This morning <a href="https://twitter.com/hh86_">hh86</a> released Valhalla #3. Those of you who don’t believe in the apocalypse theory should really read the ezine. There are many great things in it e.g. a review by SPTH on past forecasts about the evolution of viruses, interesting interviews and great codes.</p>

<p>There is also a code written by me in the ezine: a Java Infector using the Java CompilerClass to infect JAR files. The code and the article can be found in the mag and at my <a href="http://r3s1stanc3.virii.lu/projects/JavaInfector/">project site</a>.</p>

<p>You can download the mag at <a href="http://spth.virii.lu/">SPTH’s Blog</a> and in <a href="http://download.adamas.ai/dlbase/ezines/Valhalla/valhalla3.zip">Perforin’s download base</a> (you have to change a few paths to make it work under Linux).</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[RetroShare]]></title>
    <link href="https://www.r3s1stanc3.me/retroshare/"/>
    <updated>2012-11-25T00:00:00+01:00</updated>
    <id>https://www.r3s1stanc3.me/retroshare</id>
    <content type="html"><![CDATA[<p>Viele von euch werden ja mitbekommen haben, dass vor ein paar Tagen ein RetroShare User vor Gericht stand, da er eine <em>verschlüsselte</em> Datei getunnelt hat, die urheberrechtlich geschützt war. Er wusste also nicht einmal, was für eine Datei er da tunnelt. Das eigentliche Urteil findet ihr <a href="http://www.gulli.com/news/20301-justiz-verhaengt-verfuegung-gegen-nutzer-von-retroshare-2012-11-24">hier</a>.<!--more--></p>

<p>Das Prinzip von RetroShare ist genial: Wenn man sich einen Account anlegt, erstellt man sich einen GPG Key. Es gibt keine Datenbanken, in denen Benutzerdaten stehen und auch keine Server die das ganze verwalten. Die Benutzer verbinden sich untereinander per P2P und die gesammte Kommunikation wird mit den GPG Schlüsseln verschlüsselt. Um einen Freund hinzuzufügen, braucht man seinen Key und er braucht den von dir. Man kann Listen, Foren und Chatlobbies erstellen, die auch wieder mit einem eigenen GPG Schlüssel verschlüsselt werden. Man kann chatten und es gibt eine Art E-Mail System. Es ist einfach der gesammte Traffic mit GPG Keys verschlüsselt. Außerdem kann man Dateien austauschen und je nach Einstellungen kann jeder Freund oder nur Freunde von Freunden (dass die eigene IP unbekannt bleibt) freigegebene Dateien von dir laden. Wenn man eine Datei über einen Freund tunnelt, wird die Datei mit dem Key von dem Empfänger und dem Sender verschlüsselt &ndash;> nur die beiden wissen welche Datei versendet wird.</p>

<p>Höchst warscheinlich hatte sich ein Abmahnanwalt in ein größeres RetroShare Netzwerk eingeschlichen und eine Datei heruntergeladen. Da man den eigentlichen Besitzer nicht finden konne hat man einfach mal den armen Typen, der die Datei getunnelt hat abgemahnt. Wenn man das so sieht, dürfte man auch keinen Tor-Node betreiben oder sogar ISP’s dürften abgemahnt werden. Da das ganze so undurchsichtig ist bin ich mir sicher, dass das Urteil in nächster Instanz aufgehoben werden würde.</p>

<p>Und jetzt noch ein Tipp zu RetroShare: Ich finde man sollte keine Angst haben das ganze zu benutzen. Man muss nur aufpassen, wen man als Freund addet. Wenn man sich aber nur mit Leuten die man kennt vernetzt und das ganze wie ein Web-of-Trust aufzieht (man kann Schlüssel auch unterschreiben), dann ist das ganze eine verdammt sichere Möglichkeit um zu kommunizieren. Mit einem vertrauenswürdigen Freundeskreis ist das ganze wie das Darknet. Man kann dann auch bedenkenlos Dateien austauschen. Solange keine Ratte im Netzwerk ist, braucht man gar nichts befürchten.</p>

<p>Links:<br>
<a href="http://retroshare.sourceforge.net/">RetroShare Webseite</a><br>
<a href="https://de.wikipedia.org/wiki/RetroShare">RetroShare Wikipedia</a><br>
<a href="https://de.wikipedia.org/wiki/Web_of_Trust">Web-of-Truse Wikipedia</a></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Ubuntu 12.10 Und Der Umstieg]]></title>
    <link href="https://www.r3s1stanc3.me/ubuntu-und-der-umstieg/"/>
    <updated>2012-10-21T00:00:00+02:00</updated>
    <id>https://www.r3s1stanc3.me/ubuntu-und-der-umstieg</id>
    <content type="html"><![CDATA[<p>Bei meinem Umstieg auf Linux hatte ich angefangen, mit Ubuntu zu arbeiten. Zwischen durch hatte ich Arch Linux intalliert, aber das war mir zu kompliziert :D Am 19.10.12 wurde dann Ubuntu 12.10 released. Hier meine Erfahrungen damit. <!--more--></p>

<p>In der Zeit, in der ich mit Ubuntu gearbeitet habe habe ich mich mit Unity und was Ubuntu halt noch so mit sich bringt angefreundet. Ich fand es gut, da es super für Anfänger geeignet ist und hätte es auch jedem, der sich überlegt umzusteigen empfohlen. Aber dann kam Ubuntu 12.10.</p>

<p>Ich hatte noch nie ein Problem mit Upgrades. Ich hab immer noch eine alte CD (11.04), installiere diese und Upgrade dann auf die neueste Version. Aber das Upgrade von 12.04 LTS auf 12.10 war anders.</p>

<p>Datenträger werden nicht mehr unter /media, sondern unter /media/Benutzername eingehangen. Diese (von Fedora übernommene) Idee, Datenträger immer nur für den entsprechenden Benutzer einzuhängen finde ich an sich nicht schlecht, ABER Ubuntu hat es geschafft, zu vergessen den Ordner zu erstellen, also konnte ich nach dem Update erstmal keine Datenträger einhängen. Für unerfahrenere Benutzer kann das dann schon zu einem Problem werden.</p>

<p>Ein zweiter Punkt, der mich extrem genervt hat, war die fehlende Integration von Pidgin, Thunderbird und anderen Programmen in Unity. Außerdem ist Unity immer mal wieder abgeschmiert.</p>

<p>Da war es für mich dann klar, dass ich mal ein neues Sytem brauche. Ich habe mich für Linux Mint entschieden. Das basiert zwar auch auf Ubuntu, aber es bietet viele verschiedene Desktopumgebungen an. Da habe ich Mate genommen. Ich hatte es erst in einer VM installiert und heute auch auf meinem PC. Bin auf jeden Fall sehr zufrieden mit dem System und weiß was ich ab jetzt Anfängern/Umsteigern empfehlen werde: Auf keinen Fall auf Ubuntu 12.10 upgraden und evtl gleich ein anderes System benutzen.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[DarK-CodeZ Mag #4 Released]]></title>
    <link href="https://www.r3s1stanc3.me/dark-codez-4-released/"/>
    <updated>2012-08-07T00:00:00+02:00</updated>
    <id>https://www.r3s1stanc3.me/dark-codez-4-released</id>
    <content type="html"><![CDATA[<p>Nach langem Warten ist das ersehnte DarK-CodeZ Mag #4 endlich fertig und <a href="http://ezine.vxnetw0rk.ws/mag4">online</a>.<!--more--></p>

<p>Leider haben nur 5 Leute aktiv an dem ezine mitgewirkt + ein Interview mit alcopaul. Trotz der geringen Beteiligung sind einige Codes zusammengekommen. Vertreten sind Perl, ASM, C(++), Python und Java. Verglichen mit den alten DarK-CodeZ Mags ist das relativ wenig, aber besser als gar nichts und man kann ja mal hoffen, dass das Interesse am VXing wieder wächst und wir Zuwachs zu vxnet bekommen. Oder evtl sogar neue Gruppen. Wie alcopaul in dem Interview gesagt hatte: eine Gruppe von SPTH und hh86 wäre mega nice.</p>

<p>Jetzt muss ich mir nur noch überlegen, wie ich mein erstes Mag, bei dem ich mitgewirkt habe feiern werde :D</p>

<p><a href="http://download.adamas.ai/dlbase/ezines/Dark-CodeZ/dcm4.zip">Hier</a> kann man das Mag runterladen und lokal anschauen.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[nginx + SPDY unter Debian 6]]></title>
    <link href="https://www.r3s1stanc3.me/spnginx-spdy-unter-debian/"/>
    <updated>2012-07-23T01:00:00+02:00</updated>
    <id>https://www.r3s1stanc3.me/spnginx-spdy-unter-debian</id>
    <content type="html"><![CDATA[<p>Da ich selbst einige Schwierigkeiten hatte, <a href="http://nginx.org">nginx</a> mit dem <a href="http://nginx.org/patches/spdy/README.txt">SPDY Patch</a> auf meinem Server zu compilen, werde ich hier eine kleine Anleitung dazu schreiben: <!--more--></p>

<p>Da Debian 6 nur stable Software über die Paketquellen ausliefert, erhält man via</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>apt-get install openssl</span></code></pre></td></tr></table></div></figure>


<p>nur die OpenSSL Version 0.9. SPDY benötigt aber Version 1.0.1 oder höher.</p>

<p>Nun hat man 2 Möglichkeiten: entweder, man holt sich den Sourcecode und compiled OpenSSL 1.0.1 manuell, oder man weißst Debian an, neuere Pakete zu benutzen. Zweiteres habe ich gemacht:</p>

<p>Als erstes editiert man die /etc/apt/sources.list mit dem Editor seiner Wahl und fügt irgendwo folgenden Eintrag ein:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>deb http://ftp.de.debian.org/        testing main contrib non-free</span></code></pre></td></tr></table></div></figure>


<p>Damit ist es möglich, auch testing Versionen von einer Software herunter zu laden.</p>

<p>Als nächstes erstellt man die Datei /etc/apt/preferences mit folgendem Inhalt:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>Package: *
</span><span class='line'>Pin: release a=stable
</span><span class='line'>Pin-Priority: 900
</span><span class='line'>
</span><span class='line'>Package: *
</span><span class='line'>Pin: release a=testing
</span><span class='line'>Pin-Priority: 400</span></code></pre></td></tr></table></div></figure>


<p>Nun erstmal ein</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>apt-get update</span></code></pre></td></tr></table></div></figure>


<p>und gleich dannach</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>apt-get install -t testing openssl</span></code></pre></td></tr></table></div></figure>


<p>Wenn das abgeschlossen ist, kann man mit</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>openssl version</span></code></pre></td></tr></table></div></figure>


<p>überprüfen, welche OpenSSL Version installiert ist. Diese sollte jetzt 1.0.1 oder höher sein.</p>

<p>Andere Pakete die noch installiert sein müssen sind</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>build-essential libpcre3-dev libssl-dev libbz2-dev</span></code></pre></td></tr></table></div></figure>


<p>Jetzt kann man sich den nginx Code runterladen, entpacken, in den entpackten Ordner wechseln und den SPDY Patch runterladen und in den Code Patchen:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>wget http://nginx.org/patches/spdy/patch.spdy.txt
</span><span class='line'>patch -p0 &lt; patch.spdy.txt</span></code></pre></td></tr></table></div></figure>


<p>Dann nur noch configure ausführen, wobei die Option –with-http_ssl_module unbedingt notwendig ist:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>./configure --with-http_ssl_module
</span><span class='line'>make
</span><span class='line'>make install</span></code></pre></td></tr></table></div></figure>


<p>Und fertig ist nginx.</p>

<p>Jetzt muss nur noch die Config angepasst werden, dass SPDY auch benutzt wird:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>server {
</span><span class='line'>    listen 443 ssl spdy;
</span><span class='line'>
</span><span class='line'>    ssl_certificate      server.crt;
</span><span class='line'>    ssl_certificate_key  server.key;
</span><span class='line'>
</span><span class='line'>    ...
</span><span class='line'>}</span></code></pre></td></tr></table></div></figure>


<p>und falls noch nicht geschehen ein Key erzeugt werden:</p>

<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>openssl genrsa -des3 -out server.key 1024
</span><span class='line'>openssl req -new -key server.key -out server.csr
</span><span class='line'>cp server.key server.key.bak
</span><span class='line'>openssl rsa -in server.key.bak -out serevr.key
</span><span class='line'>openssl x509 -req -days 365 -in server.csr -signkey server.key -out test.in.crt</span></code></pre></td></tr></table></div></figure>


<p>Eventuell muss in der Config dann noch der Pfad zu den Schlüsseln angepasst werden und dann ist der Server über https zu erreichen und benutzt SPDY.</p>
]]></content>
  </entry>
  
</feed>
