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

Funktionsweise von PE-Crypter / Virenscanner

- - - - -

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

#1
Koffee

Koffee

    Noob

  • Banned
  • PIPPIP
  • Likes
    2
  • 8 Beiträge
  • 0 Bedankt

Hallo zusammen,

 

ich versuche derzeit das Konstrukt eines guten PE-Crypters zu verstehen und umzusetzen, jedoch tauchen einige Fragen dazu auf.

 

Es scheint bei Cryptern ja immer um möglichst einzigartige, unbekannte Stubs zu gehen. Wäre es als Verschleierung für eine Stub bzw. die Stub und das daran gebundene Anhängsel sinnig, das Anhängsel zu codieren und danach den gesamten Programmcode zu nehmen, byteweise durcheinanderzuwürfeln und durch Sprungbefehle wieder den korrekten Programmablauf zu gewährleisten? So entstünde jedes Mal ein neues, unerkanntes Programm. Würde das die Erkennungsrate nach unten drücken? Oder ist es so, dass Virenscanner nach bestimmten vorkommenden Elementen suchen, z.B. den gängigen RunPE-Methoden? Was wäre ein guter Weg um eine Stub möglichst lange unerkannt zu lassen?

 

Ein weiterer - mit sehr viel Arbeit verbundener - Weg wäre es, praktisch die Stub in 10 Varianten zu schreiben und die einzelnen Arbeitsgänge vom Code her miteinander zu variieren, so dass praktisch pro Arbeitsgang eine Potenz von 10 entstehen würde. Jedoch - die Anzahl der verfügbaren RunPE- Methoden ist begrenzt, einige Variationen sind möglich, nur kann ich das Rad leider nicht xMal neu erfinden - irgendwann ist auch das detected.

 

Macht es in VB6 Sinn den Variablen / API-Aufrufen kryptische Bezeichnungen zu geben? Meines Wissens werden die Namen im kompilierten Code doch gar nicht mitgespeichert, oder?

 

Und nun zur letzten Frage: Nehmen wir an, der Virenscanner schlug bisher nicht an, die Stub mit dem gebunden Programm wird ausgeführt, das angehängte Programm wird zur Laufzeit entschlüsselt und in den Speicher geladen um nun dessen Code nun ausführen zu können. Jemand schrieb, dass Virenscanner mittlerweile auch den RAM überwachen, dass also spätestens jetzt Alarm vom Scanner ausgelöst wird. Würde es Sinn machen, die Malwäre wie oben beschrieben mit Sprungbefehlen zu durchsetzen und sinnlosen Code beizumengen oder gibt es dafür bessere Techniken?

 

Bitte nehmt mir diese Anfängerfragen nicht krumm. Mit diesen Informationen erspart ihr mir unglaublich viel Try&Error. Ich danke euch im Vorab für Denkanstöße und wünsche euch weiterhin einen schönen Abend.


  • cubik gefällt das

#2
gr33d

gr33d

    Pentester

  • Premium Member
  • Likes
    169
  • 130 Beiträge
  • 471 Bedankt
  • Android [root]
  • Windows, Linux

Ein Crypter der jedes mal eine neue völlig zufällige Stub generiert wäre natürlich genial, die Frage ist aber wie sich das umsetzten lässt. Schließlich gab es ja schon viele versuch von Polymorphismus (z.B. Fly Crypter und die ganzen Würmer damals kp. :D) aber richtig gute Ansätze kenne ich nicht. Es gib schließlich immer Teile die gleich bleiben, und diese werden dann entdeckt. Vielleicht ist anfangs der Zufallsalgorithmus gut genug aber das wird nichts nützten wenn ein Profi sich ransetzt und das ganze analysiert. Kleine Änderungen sind aber trotzdem sinnvoll. Du musst halt damit rechnen nach einer gewissen Zeit eine neue RunPe oder so schreiben zu müssen aber bis dahin sollte das reichen um die statische Analyse zu umgehen.

Was runtime angeht ist das natürlich egal ob Polymorph oder nicht - Da gibt es auch Methoden z.B. den MemScan zu umgehen (frag mich nicht wie - das weiß ich auch nur so halb) aber das ist wie gesagt unabhängig von deiner Stub randomization.

 

Ich habe bis jetzt die Erfahrung gemacht, dass wenn man ein bisschen anti Vm code einbaut das Virenlabor immer clean meldet. D.h. Avast & AVG sollten die File nicht erkennen solange sich da kein Profi dahinter klemmt (und bis das passiert muss man glaube ich schon hart spreaden)

 

Benennungen sind egal (zumindest bei C++ ). Ich entferne halt immer die Debug Symbole aber kp ob das was bringt :D

Bei VB6 und insgesamt .Net code wäre ich mir da nicht so sicher weil man das ja immer decompilen kann. Bei .net code würde ich die also ändern.

 

Fazit: Ein guter polymorphic stub generator ist den Aufwand nicht wert. Leichte Modifikationen um signature scanner zu umgehen reichen eigentlich und sind sehr einfach zu implementieren (junk code etc.). 

 

Muss dazu sagen, dass ich allerdings auch noch nie richtig krass gespreaded.



Thanked by 1 Member:
Koffee

#3
rat123

rat123

    Member

  • Premium Member
  • Likes
    97
  • 107 Beiträge
  • 31 Bedankt
  • verifiziert

Ein PE-Crypter, wie der Name schon sagt, setzt Kenntnisse in PE Format/Loading voraus. 

Könnte jetzt deine ganzen Fragen beantworten, bin aber gerade viel zu Faul. Einen Link kann ich dir aber gerne mitgeben: 

 

Please Login HERE or Register HERE to see this link!

 

PECOFF ist die offizielle Dokumentation über Windows PE Formate von MSDN.

 

 

Hier eine Visualisierung von Call-Flow Obfuscation falls dich das interessiert, ist einer meiner alten Projekte:

 

Normal (55% Zoom):

a1a183a2e1c291f2b94cb62a930ddd17.png

 

 

Obfuscated (20% Zoom):

16d445e13a39b73ba67195ef53b3483c.png


  • gr33d, cubik und Koffee gefällt das

Eingefügtes Bild


#4
Koffee

Koffee

    Noob

  • Banned
  • PIPPIP
  • Likes
    2
  • 8 Beiträge
  • 0 Bedankt

Hallo zusammen,

 

@creed: Herzlichen Dank für die ausführliche und freundliche Antwort, du bist die nette Stimme des Forums! ;)

 

@rat123: Auch dir vielen Dank für die Antwort. Selbstverständlich habe ich mich damit beschäftigt wie ein Fileheader aufgebaut ist :), dennoch danke für dem Link. Ist bei diesem Thema ja Grundlage. Ein Mann mit Erfahrung, Respekt, sieht wirklich gut aus. Wie lange hast du gebraucht bis die obfuskierte Fassung fertig war? Wärst du so lieb mir eine einzige Frage zu beantworten, bitte? Mußt auch keine Romane schreiben .. Wie geht man vor wenn man den Payload in den Speicher geladen hat dass der Scanner nicht anschlägt? Ein Stups in die richtige Richtung würde mir schon sehr weiterhelfen...



#5
rat123

rat123

    Member

  • Premium Member
  • Likes
    97
  • 107 Beiträge
  • 31 Bedankt
  • verifiziert

Hallo zusammen,

 

@creed: Herzlichen Dank für die ausführliche und freundliche Antwort, du bist die nette Stimme des Forums! ;)

 

@rat123: Auch dir vielen Dank für die Antwort. Selbstverständlich habe ich mich damit beschäftigt wie ein Fileheader aufgebaut ist :), dennoch danke für dem Link. Ist bei diesem Thema ja Grundlage. Ein Mann mit Erfahrung, Respekt, sieht wirklich gut aus. Wie lange hast du gebraucht bis die obfuskierte Fassung fertig war? Wärst du so lieb mir eine einzige Frage zu beantworten, bitte? Mußt auch keine Romane schreiben .. Wie geht man vor wenn man den Payload in den Speicher geladen hat dass der Scanner nicht anschlägt? Ein Stups in die richtige Richtung würde mir schon sehr weiterhelfen...

 

Danke für die netten Worte. Für die Call-Obfuscation muss ich eigentlich nicht mehr viel machen, meine Engine macht alles automatisch.

Zu deiner Frage: Die Payload im PE-Header verschlüsselt als Section speichern, (Flags: Executable, Readable, Writeable, Code), während der Laufzeit die Payload Section im eigenen PE finden, decrypten und die PE laden. Professioneller wäre eine PE Injection mit QueueUserAPC in einem Windows Host Process, ohne DEP zu triggern natürlich. Ich rede hier von ROP Chains.

 

LG


Eingefügtes Bild


#6
sup3ria

sup3ria

    Hacker

  • Premium Member
  • Likes
    123
  • 177 Beiträge
  • 50 Bedankt

Fazit: Ein guter polymorphic stub generator ist den Aufwand nicht wert. Leichte Modifikationen um signature scanner zu umgehen reichen eigentlich und sind sehr einfach zu implementieren (junk code etc.). 

Also man baut sich normalerweise einfach einen ordenlichen Obfuscator, so bekommt man einen pseudo polymorphic Stubgen. Laufzeit ist natürlich etwas aufwendiger aber habe Ich auch schon in .net Implementiert der die .exe immer neu obfuskiert wenn es auf den Disk gedropped wird.



#7
gr33d

gr33d

    Pentester

  • Premium Member
  • Likes
    169
  • 130 Beiträge
  • 471 Bedankt
  • Android [root]
  • Windows, Linux
Habe hier noch ein Paper gefunden das von Code Obfuscation handelt:
OK funkt nich
Also:
Sci-hub.cc
Und dann nach folgendem Link suchen:

Please Login HERE or Register HERE to see this link!



Hoffe der Link funktioniert :)



  Thema Forum Themenstarter Statistik Letzter Beitrag

Besucher die dieses Thema lesen:

Mitglieder: , Gäste: , unsichtbare Mitglieder:


This topic has been visited by 38 user(s)


    0*ptr, 1x1, arcticfly, Avni, brucereed64, Crap, cubik, Dean36, eq22, fluffybunny, Framerater, Franziskaner, gr33d, Haxlor, jmPesp, Kaase, Koffee, Kraenk, lNobodyl, loginman1, Mini Rick, most_uniQue, n1nja, nibble nibble, o0o, PadX18, peppi200, pfadn, pi^2, Psykoon303, rat123, repjona, shiznith, sup3ria, terratec1991, TuttiFrutti, w0tan, xxas
Die besten Hacking Tools zum downloaden : Released, Leaked, Cracked. Größte deutschsprachige Hacker Sammlung.