Zum Inhalt wechseln

Als Gast hast du nur eingeschränkten Zugriff!


Anmelden 

Benutzerkonto erstellen

Du bist nicht angemeldet und hast somit nur einen sehr eingeschränkten Zugriff auf die Features unserer Community.
Um vollen Zugriff zu erlangen musst du dir einen Account erstellen. Der Vorgang sollte nicht länger als 1 Minute dauern.

  • Antworte auf Themen oder erstelle deine eigenen.
  • Schalte dir alle Downloads mit Highspeed & ohne Wartezeit frei.
  • Erhalte Zugriff auf alle Bereiche und entdecke interessante Inhalte.
  • Tausche dich mich anderen Usern in der Shoutbox oder via PN aus.
 

   

Foto

[C#] Obfuscation Test - Schaffst du es? [Rätsel]

- - - - -

  • Bitte melde dich an um zu Antworten
11 Antworten in diesem Thema

#1
Lopus

Lopus

    Script Kiddie

  • Banned
  • PIPPIPPIPPIP
  • Likes
    14
  • 31 Beiträge
  • 22 Bedankt

Hey,

 

Und zwar hab ich ein einfaches kurzes Programm in C# geschrieben.

Es ist 100% clean und es passiert nur innerhalb des Programmes etwas.

 

Die Sache ist:

 

Schafft ihr es mir den ungefähren cleanen SourceCode zu schicken?
Ich halte sehr viel von diesem Obfuscator, weiß aber auch dass hier

keine Laien auf dem Board sind. Also, wer ist stärker?

 

Was es ungefähr macht kann man erkennen, ja. Aber ich würde

gerne von euch einen "saubereren" SourceCode sehen^^

 

Eventuell bekommt der "Gewinner" auch nen kleines Preis.

Sollte aber mehr ein kleines Rätsel für euch sein.

 

Download:

Please Login HERE or Register HERE to see this link!

VT:

Please Login HERE or Register HERE to see this link!

 

Lg

 

Lopus


Bearbeitet von Lopus, 18 February 2015 - 12:57 Uhr.


Thanked by 1 Member:
parisdefr

#2
juPP

juPP

    Hacker

  • Premium Member
  • Likes
    49
  • 174 Beiträge
  • 61 Bedankt
  • 000000
  • Blackberry
  • Windows, Linux
    private void Field_01_Click(object _param1, EventArgs _param2)
    {
      bool flag = false;
      WebClient webClient = new WebClient();
      int num1 = System.Type.EmptyTypes.Length + 10159;
      int num2 = System.Type.EmptyTypes.Length + 11083;
      int num3 = \u003CModule\u003E.Field_09;
      int num4 = (-(num3 << 23) & 7129) != 0 ? sizeof (int) - 708873888 : System.Type.EmptyTypes.Length + 174;
      string address = \u003CModule\u003E.Method_02(num1, num2, num4);
      string str1 = webClient.DownloadString(address).Substring(0, 10);
      string str2 = str1;
      int num5 = 4 & (num3 + num3 * 15 ^ 1587);
      int num6 = 4;
      int num7 = \u003CModule\u003E.Field_12;
      int num8 = (int) ((uint) (num7 << 8) >> 5);
      int num9 = num6 & num8;
      int num10 = num5 != num9 ? -2076188109 ^ 422676110 : sizeof (long) + 41530;
      int num11 = checked (1255152650 - 1255110199);
      int num12 = num11;
      int num13 = sizeof (Guid) - 5;
      string str3 = \u003CModule\u003E.Method_02(num10, num12, num13);
      if (str2.StartsWith(str3))
      {
        int num14 = (int) MessageBox.Show(\u003CModule\u003E.Method_02(sizeof (Guid) + 35240, ((int) ((uint) (7364 + (num11 << 29)) >> 29) & 2) == (~num11 - 2958 & 2) ? ((((int) ((uint) (num7 * -1073741824) >> 10) ^ num7 * 57 + 7 * num7) & 57) == 0 ? System.Type.EmptyTypes.Length + 36234 : System.Type.EmptyTypes.Length + 695708289) : -1673074294 ^ 37606627, checked (1218914572 - 1218914442)));
      }
      else if (str1.StartsWith(\u003CModule\u003E.Method_02(checked (1412093671 - 1412029349), sizeof (long) + 65285, sizeof (ulong) + 56)))
      {
        int num15 = Class_00.Field_03;
        int num16 = (int) MessageBox.Show(\u003CModule\u003E.Method_02(num15 * 12966 - -131 != (int) ((uint) num15 % 256U / 1972U >> 23) ? System.Type.EmptyTypes.Length + 45985 : System.Type.EmptyTypes.Length + 1457581078, System.Type.EmptyTypes.Length + 46825, 9));
      }
      else
        flag = true;
    }

Hab keine Ahnung von RE habs einfach mal in Decompiler geworfen...


Bearbeitet von juPP, 18 February 2015 - 17:02 Uhr.

... hier könnte Ihre Werbung stehen ;)

Thanked by 1 Member:
parisdefr

#3
Lopus

Lopus

    Script Kiddie

  • Banned
  • PIPPIPPIPPIP
  • Likes
    14
  • 31 Beiträge
  • 22 Bedankt

Was es ungefähr macht kann man erkennen, ja. Aber ich würde

gerne von euch einen "saubereren" SourceCode sehen^^

 

 

    private void Field_01_Click(object _param1, EventArgs _param2)
    {
      bool flag = false;
      WebClient webClient = new WebClient();
      int num1 = System.Type.EmptyTypes.Length + 10159;
      int num2 = System.Type.EmptyTypes.Length + 11083;
      int num3 = \u003CModule\u003E.Field_09;
      int num4 = (-(num3 << 23) & 7129) != 0 ? sizeof (int) - 708873888 : System.Type.EmptyTypes.Length + 174;
      string address = \u003CModule\u003E.Method_02(num1, num2, num4);
      string str1 = webClient.DownloadString(address).Substring(0, 10);
      string str2 = str1;
      int num5 = 4 & (num3 + num3 * 15 ^ 1587);
      int num6 = 4;
      int num7 = \u003CModule\u003E.Field_12;
      int num8 = (int) ((uint) (num7 << 8) >> 5);
      int num9 = num6 & num8;
      int num10 = num5 != num9 ? -2076188109 ^ 422676110 : sizeof (long) + 41530;
      int num11 = checked (1255152650 - 1255110199);
      int num12 = num11;
      int num13 = sizeof (Guid) - 5;
      string str3 = \u003CModule\u003E.Method_02(num10, num12, num13);
      if (str2.StartsWith(str3))
      {
        int num14 = (int) MessageBox.Show(\u003CModule\u003E.Method_02(sizeof (Guid) + 35240, ((int) ((uint) (7364 + (num11 << 29)) >> 29) & 2) == (~num11 - 2958 & 2) ? ((((int) ((uint) (num7 * -1073741824) >> 10) ^ num7 * 57 + 7 * num7) & 57) == 0 ? System.Type.EmptyTypes.Length + 36234 : System.Type.EmptyTypes.Length + 695708289) : -1673074294 ^ 37606627, checked (1218914572 - 1218914442)));
      }
      else if (str1.StartsWith(\u003CModule\u003E.Method_02(checked (1412093671 - 1412029349), sizeof (long) + 65285, sizeof (ulong) + 56)))
      {
        int num15 = Class_00.Field_03;
        int num16 = (int) MessageBox.Show(\u003CModule\u003E.Method_02(num15 * 12966 - -131 != (int) ((uint) num15 % 256U / 1972U >> 23) ? System.Type.EmptyTypes.Length + 45985 : System.Type.EmptyTypes.Length + 1457581078, System.Type.EmptyTypes.Length + 46825, 9));
      }
      else
        flag = true;
    }

Hab keine Ahnung von RE habs einfach mal in Decompiler geworfen...

 

Das schafft jeder. Bitte lies den Teil meines Threads oben nocheinmal durch. Dennoch welchen Decompiler hast du benutzt wenn ich fragen darf?


Bearbeitet von Lopus, 18 February 2015 - 17:08 Uhr.


#4
juPP

juPP

    Hacker

  • Premium Member
  • Likes
    49
  • 174 Beiträge
  • 61 Bedankt
  • 000000
  • Blackberry
  • Windows, Linux

JetBrains


... hier könnte Ihre Werbung stehen ;)

Thanked by 1 Member:
Lopus

#5
smc2014

smc2014

    Moderator

  • Moderator
  • Likes
    344
  • 576 Beiträge
  • 240 Bedankt
  • Spender
  • Android [root]
  • Windows, Linux

Willste auch noch von den Modulen a-e /bzw. class den source??? O.O

Oder haste es mal benutzt?


Bearbeitet von smc2014, 18 February 2015 - 18:34 Uhr.


#6
Lopus

Lopus

    Script Kiddie

  • Banned
  • PIPPIPPIPPIP
  • Likes
    14
  • 31 Beiträge
  • 22 Bedankt

Willste auch noch von den Modulen a-e /bzw. class den source??? O.O

Oder haste es mal benutzt?

 

Wie benutzt?^^ Ich würde nur gerne wissen ob ihr den Code, den juPP oben rein geschickt hat, in einen etwas schöneren umwandeln könnt^^



#7
easysurfer

easysurfer

    Script Kiddie

  • Premium Member
  • Likes
    62
  • 41 Beiträge
  • 58 Bedankt
  • verifiziert

Es ist wieder das alte Spiel: Am Ende landen die Daten wieder unverschlüsselt im Speicher ;)

 

Gibt hier zwei Möglichkeiten:

  1. Man schreibt einen Stack-Parser, tract die Schritte von der String-Decryption-Methode zurück (<Module>.C(int,int,int)) und bekommt so die Parameter raus. Anschließend ruft man die Methode dynamisch mit diesen Parametern auf und ersetzt den ganzen MSIL-Code zum Laden der Params und Callen der Funktion mit einem "ldstr" des entschlüsselten Strings. Dauert realtiv Lange und ist bei JetBrains ziemlich uncool, da hier der Stack vor der Decrypt-Funktion stehts anders ist (Mal wird XOR genommen, mal statische Arrays geladen, mal die Variable erst in eine lokale Variable geschrieben etc etc etc).
  2. Man schreibt sich einen kleinen Debugger, welcher auf die Decrypt-Methode ein Breakpoint setzt. Dann lässt man die Methode ausführen und ließt das Resultat (was auf dem nativen (!) Stack ist, EAX Register) aus. Habe ich bereits für Confuser ein

    Please Login HERE or Register HERE to see this link!

    geschrieben, wer sich dafür interessiert. ;)

Das Resultat: Die Strings hab ich soweit, jetzt muss ich sie nur noch per Mono.Cecil in die Assembly einfügen. Update folgt ;)

temp73ucg.png


  • Becks, Cube, pdr0 und 2 anderen gefällt das

#8
pdr0

pdr0

    Pentester

  • Premium Member
  • Likes
    86
  • 148 Beiträge
  • 87 Bedankt

Es ist wieder das alte Spiel: Am Ende landen die Daten wieder unverschlüsselt im Speicher ;)

 

Gibt hier zwei Möglichkeiten:

  1. Man schreibt einen Stack-Parser, tract die Schritte von der String-Decryption-Methode zurück (<Module>.C(int,int,int)) und bekommt so die Parameter raus. Anschließend ruft man die Methode dynamisch mit diesen Parametern auf und ersetzt den ganzen MSIL-Code zum Laden der Params und Callen der Funktion mit einem "ldstr" des entschlüsselten Strings. Dauert realtiv Lange und ist bei JetBrains ziemlich uncool, da hier der Stack vor der Decrypt-Funktion stehts anders ist (Mal wird XOR genommen, mal statische Arrays geladen, mal die Variable erst in eine lokale Variable geschrieben etc etc etc).
  2. Man schreibt sich einen kleinen Debugger, welcher auf die Decrypt-Methode ein Breakpoint setzt. Dann lässt man die Methode ausführen und ließt das Resultat (was auf dem nativen (!) Stack ist, EAX Register) aus. Habe ich bereits für Confuser ein

    Please Login HERE or Register HERE to see this link!

    geschrieben, wer sich dafür interessiert. ;)

Das Resultat: Die Strings hab ich soweit, jetzt muss ich sie nur noch per Mono.Cecil in die Assembly einfügen. Update folgt ;)

temp73ucg.png

 

 

Kann sein das ich mich beim copy und pasten der Strings vertan habe. Der crypter XORed nur an einer stelle.

 

    private void Field_01_Click(object _param1, EventArgs _param2)
    {
      WebClient webClient = new WebClient();
      string str1 = webClient.DownloadString("

Please Login HERE or Register HERE to see this link!

10);
      if (str1.StartsWith("ToolbaseTest"))
      {
        MessageBox.Show("Yeah Toolbase!");
      }
      else if (str1.StartsWith(getResource(64322, 65293, 64)))
      {
        MessageBox.Show("Oh not Toolbase");
      }
    }


Bearbeitet von pdr0, 19 February 2015 - 03:25 Uhr.

  • Becks, easysurfer und smc2014 gefällt das

#9
Lopus

Lopus

    Script Kiddie

  • Banned
  • PIPPIPPIPPIP
  • Likes
    14
  • 31 Beiträge
  • 22 Bedankt

Und noch nicht mal das alles ;). Kann sein das ich mich beim copy und pasten bei den Strings vertan habe. Die Binary (der crypter) hat eine Schwachstelle die es sehr einfach macht..

 

    private void Field_01_Click(object _param1, EventArgs _param2)
    {
      WebClient webClient = new WebClient();
      string str1 = webClient.DownloadString("

Please Login HERE or Register HERE to see this link!

10);
      if (str1.StartsWith("ToolbaseTest"))
      {
        MessageBox.Show("Yeah Toolbase!");
      }
      else if (str1.StartsWith(getResource(64322, 65293, 64)))
      {
        MessageBox.Show("Oh not Toolbase");
      }
    }

 

Fast... Trotzdem gute Arbeit. Am Schluss ist es dann wohl ein bisschen Rätsel raten oder nicht?

            bool tb = false;

            string data = new WebClient().DownloadString("http://google.de");
            data = data.Substring(0, 10);
            if (data.StartsWith("TB"))
            {
                MessageBox.Show("Yeah Toolbase!");
            }
            else if (data.StartsWith("NotTB"))
            {
                MessageBox.Show("Oh not Toolbase!");
            }
            else
            {
                tb = true;
            }

Bearbeitet von Lopus, 18 February 2015 - 22:46 Uhr.


#10
pdr0

pdr0

    Pentester

  • Premium Member
  • Likes
    86
  • 148 Beiträge
  • 87 Bedankt

Ich hatte NotTB und TB sogar decrypted aber nicht gesehen weil die so kurz waren :D. Ich habe nicht geraten ^^ 



#11
easysurfer

easysurfer

    Script Kiddie

  • Premium Member
  • Likes
    62
  • 41 Beiträge
  • 58 Bedankt
  • verifiziert

Magst noch auflösen mit welchem Decompiler dus gemacht hast? Nehme an einer, der dynamisch den Stack und die Ausdrücke auswertet?



#12
pdr0

pdr0

    Pentester

  • Premium Member
  • Likes
    86
  • 148 Beiträge
  • 87 Bedankt

Magst noch auflösen mit welchem Decompiler dus gemacht hast? Nehme an einer, der dynamisch den Stack und die Ausdrücke auswertet?

Der Decompiler war jetbrains und ich habe nichts mit dem Stack gemacht. Der Crypter decrypted in <module>c(..):

 

for (int index = 0; index < numArray.Length; ++index)
    numArray[index] = (byte) ((uint) numArray[index] ^ (uint) obj2);

 

 

Bei folgendem Weg wird davon ausgegangen das die "resource" auf dem Desktop liegt (extrahiert). Ihr braucht eine Form u. eine richTextBox1.

 

Versteckter Inhalt
Klicke auf den Danke-Button um den versteckten Inhalt sehen zu können. Nur registrierte Mitglieder haben Zugriff hierauf.


  • smc2014 gefällt das

Thanked by 3 Members:
ChEeTaH182 , alex7777 , easysurfer


  Thema Forum Themenstarter Statistik Letzter Beitrag

Besucher die dieses Thema lesen:

Mitglieder: , Gäste: , unsichtbare Mitglieder:


This topic has been visited by 70 user(s)


    , , alex7777, Ar@m!s, B1nary, Bad Grandpa, Becks, Blackhook, BlackZetsu, blue_eyed_devil, Born2Hack, Bot4ng, Bragi, Bypass, Caruso, caspR, ChEeTaH182, confick.ini, corkscrew, Cranky, Cube, Cyber Tjak, easysurfer, eq22, FalkE, Framerater, FullMetall, funstyler, G0rki, Gerald, hacke2010, holz96, ice, Injection, juPP, Juri, Kaban, keyb0ardz, kiwitone, lion., lolorollo, Lopus, LtoG, Lyrix, Masterzyklon, most_uniQue, Mr_NiceGuy, n1nja, nibble nibble, NoBack3, notfound, Osed28, PaulaAbdul, paulaner, pdr0, pr0legend, prto, qpq, R3s1stanc3, s3ff, SAR, ShanLer, smc2014, sup3ria, superuser123, Tittler, Tron23, Xenio, xmmlegends, zepsus
Die besten Hacking Tools zum downloaden : Released, Leaked, Cracked. Größte deutschsprachige Hacker Sammlung.