PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [TUT] Crypter in C schreiben



blackberry
24.05.2009, 10:54
Da immer wieder gefragt wird, wie man einen Crypter in C coden kann habe ich mal ein kleines (relativ theoretisches) Tutorial geschrieben.

http://bbsrc.incecx.net/cs.rar <--- freundlicherweise zur Verfügung gestellt von cby (http://free-hack.com/member.php?u=75490)
Passwort: free-hack.com


mfG. BlackBerry

UPDATE, 14.05.2012
Neuer Link, danke an cby!

UPDATE, 24.01.2012
Links aktualisiert. Tutorial Version 2 vom 24.09.2010

rock superstar
24.05.2009, 10:57
ich kann ein bisschen c++ und n bisschen mehr c# :D ist es zeitverschwendung wenn ich es mir ankucke oder habe ich chancen es zu verstehen?

danke :))

blackberry
24.05.2009, 11:00
Ich habe den Code sehr genau erklärt und die Theorie (hoffentlich) auch mehr als ausführlich behandelt.
Die Chancen stehen also nicht ganz so schlecht...

Versuchen kostet ja nichts :)

DizzY_D
24.05.2009, 11:24
Also erstmal:
Sehr gutes Tut! Hast dir viel Mühe gegeben und auch einiges an Text und Informationen vermittelt :). Habs jetzt zwar nur überflogen aber hätte noch n Paar Verbesserungsvorschläge:

- Andere Verschlüsselung als XOR wäre interessant gewesen (wird IMMER benutzt)
- Der EP in der letzten Section ist zimlich auffällig und auch zimlich detected
- Andere Funktionen einbauen (vll. machst du ja noch ein zweites Tut :))

Wie gesagt an sonsten gefällt es mir sehr gut und vll. startet ja jetzt der ein - oder Andere so ein Projekt. Nicht nur für C Coder ist es interessant: In VB ist es genau so möglich (habe es selbst schon gemacht). Würde mich freuen wenn es demnächst in der Crypter Section mal diese Art von Cryptern geben würde ;)

MfG

Marabunta
30.05.2009, 20:43
ich kann ein bisschen c++ und n bisschen mehr c# :D ist es zeitverschwendung wenn ich es mir ankucke oder habe ich chancen es zu verstehen?

danke :))

ich dachte immer c++ ist das gleiche wie c# oder versteh ich was falsch?:confused:

Morphium
30.05.2009, 20:46
Java und C# [Bearbeiten (http://de.wikipedia.org/w/index.php?title=C%2B%2B&action=edit&section=12)]

Die Programmiersprachen Java (http://de.wikipedia.org/wiki/Java_%28Programmiersprache%29) und C# (http://de.wikipedia.org/wiki/C-Sharp) verfügen über eine ähnliche, ebenfalls an C angelehnte Syntax wie C++[2] (http://de.wikipedia.org/wiki/C%2B%2B#cite_note-1),[3] (http://de.wikipedia.org/wiki/C%2B%2B#cite_note-2), sind auch objektorientiert und unterstützen seit einiger Zeit Typparameter, weshalb ein Vergleich mit ihnen besonders naheliegend ist. Trotz äußerlicher Ähnlichkeiten unterscheiden sie sich aber konzeptionell von C++, zum Teil beträchtlich.
Generische Techniken ergänzen die objektorientierte Programmierung um Typparameter und erhöhen so die Wiederverwertbarkeit einmal kodierter Algorithmen. Die generischen Java-Erweiterungen sind jedoch lediglich auf Klassen, nicht aber auf primitive Typen oder Datenkonstanten anwendbar; Abhilfe bietet Java hier allerdings mittels sogenannter Wrapper-Klassen, welche für primitive Typen entsprechende Klassen zur Verfügung stellen. Demgegenüber beziehen die generischen Spracherweiterungen von C# auch die primitiven Typen mit ein. Dabei handelt es sich allerdings um eine Erweiterung für Generik zur Laufzeit, die die auf Kompilationszeit zugeschnittenen C++-Templates zwar sinnvoll ergänzen, nicht aber ersetzen können.
Gerade die generische Programmierung macht C++ zu einem mächtigen Programmierwerkzeug. Während die objektorientierte Programmierung in Java und C# nach wie vor den zentralen Abstraktionsmechanismus darstellt, ist diese Art der Programmierung in C++ rückläufig. So werden tiefe Klassenhierarchien vermieden, und zu Gunsten der Effizienz und der Minimierung des Ressourcenverbrauchs verzichtet man in vielen Fällen auf Polymorphie (http://de.wikipedia.org/wiki/Polymorphie_%28Programmierung%29), einen der fundamentalen Bestandteile der objektorientierten Programmierung.

quelle: wikipedia

nathex
30.05.2009, 23:31
ich dachte immer c++ ist das gleiche wie c# oder versteh ich was falsch?:confused:
Lies dir mal die Zusammenfassung bei Wikipedia jeweils zu C++ und zu C# durch, und du wirst merken, dass zwischen diesen beiden Sprachen jede Menge unterschiede liegen! :)

Sawyer
31.05.2009, 01:46
Pauschal kann man sagen das C++ Native Compiliert und eigene Bibliotheken besitzt , die automatisch in die exe Gelinkt werden^^
Das hat den vorteil das C++ Anwendungen unabhängig sind , und zum laufen keinen JITER Benötigen wie z.B C#

C# ist , wie man wissen sollte eine .net Sprache , baut daher logischerweise auch auf das Framework auf und benötigt zur Ausführung die CLR

Das ist dann eigentlich der größte unterschied den man mal wissen sollte^^

@BlackBerry , danke für dein Ausführliches Tutorial , werde es mal genauer durcharbeiten , nachdem ich mit meinem C++ Buch durch bin ;)

MfG

bugyc66
31.05.2009, 08:40
hey das tut ist nice bin noch nicht ganz durch aber es ist ech klasse
weiter so

Cr4ckEye
05.06.2009, 18:58
Schönes tut und schöner Code, meiner is nich ansatzweise so schön strukturiert :D
Mehr Funktionen einzubaun finde ich unnötig, da das Tut ja nur das konzept und herangehensweise aufzeigen soll, wer also mehr funktionen oder eine andere Verschlüsselung will muss ein wenig selber denken.
Und so ein Tut für C zu machen ist ja zum glück schonmal von natur aus ne gut C&P Sicherung :P

MfG

DK007
06.06.2009, 18:02
Kann man mit VB kenntnissen einen Crypter erstellen?

Kolabi
06.06.2009, 18:09
Kann man mit VB kenntnissen einen Crypter erstellen?
Ja,man kann mit VB Crypter erstellen.

www.opensc.ws/vb-rat-source/1665-vb-packer-source-code.html (http://anonym.to/?http://www.opensc.ws/vb-rat-source/1665-vb-packer-source-code.html)

DK007
06.06.2009, 18:19
@Kolabi danke werd ich mir mal anschauen

Deshoax
07.06.2009, 13:50
Hallo BlackBerry, ich hab mich ein bisschen nach deinem Tutorial orientiert, finde aber meinen Fehler nicht, warum es nicht funktioniert...
Ich bin zwar fertig, aber wenn die Datei gecrypted ist, lässt sie sich nicht starten...

Main
http://nopaste.free-hack.com/index.php?id=8ce76fe53e

out_section_details
http://nopaste.free-hack.com/index.php?id=3a4d161851

Ich hab echt keinen Plan mehr was ich falsch mache... bin am verzweifeln :(

nathex
07.06.2009, 14:00
Main
http://nopaste.free-hack.com/index.php?id=8ce76fe53e
In Zeile 7 fehlt ein int vor der main() funktion.. also anstatt main(), musst du int main() schreiben!

Deshoax
07.06.2009, 14:02
Ich benutze Dev-CPP, der fügt das automatisch beim kompilieren ein, wenn ich das manuell mache, bekom ich ne fehlermeldung.

blackberry
07.06.2009, 15:38
@Deshoax
Ich habe dir doch schon beim letzten Mal gesagt, dass du die Datei in den Arbeitsspeicher laden sollst. ( http://free-hack.com/showpost.php?p=309320&postcount=4 )

Bei dem ganzen fputc's Blickt doch niemand mehr durch.
Und das fehlende bzw. willkürliche Einrücken von Code-Blöcken trägt auch nicht gerade zur Übersichtlichkeit bei.
Folgende Optionen bei Dev-C++ nehmen dir das Einrücken sogar beinahe ab:
http://img13.imageshack.us/img13/5142/r65f6.png

Wenn du deinen Code eingerückt hast und auf http://pastebin.com/ "gepastet" hast (da kann man das dann besser kopieren), wäre ich gerne bereit mir das nochmal anzusehen. (obwohl ich dringend zur Benutzung von Strukturen wie IMAGE_DOS_HEADER, IMAGE_NT_HEADERS, IMAGE_SECTION_HEADER, usw. rate, da man dadurch mit der korrekten Positionierung der Werte schonmal keine Probleme mehr hat)
______________________________________

Und jetzt wenigstens noch ein bisschen was produktives...
Ich habe versucht auf test.exe (das kleine "Hello World"-Programm aus dem Tutorial) zu crypten.
Als Option wollte ich, dass eine neue Section hinzugefügt wird.

Hier die Ausgabe von der Konsole:

Bitte EXE Datei selektieren: test.exe

Magic DOS Signatur erkannt!
PE Signatur erkannt!
Number of Sections: 3
1. Section: <.text>
Virtual Size [HEX]: 26
Virtual Size [DEZ]: 38
Virtual Offset [HEX]: 1000
Virtual Offset [DEZ]: 4096
Raw Size [HEX]: 200
Raw Size [DEZ]: 512
Raw Offset [HEX]: 400
Raw Offset [DEZ]: 1024

Flags [HEX]: 60000020
Flags [DEZ]: 1610612768

2. Section: <.rdata>
Virtual Size [HEX]: 92
Virtual Size [DEZ]: 146
Virtual Offset [HEX]: 2000
Virtual Offset [DEZ]: 8192
Raw Size [HEX]: 200
Raw Size [DEZ]: 512
Raw Offset [HEX]: 600
Raw Offset [DEZ]: 1536

Flags [HEX]: 40000040
Flags [DEZ]: 1073741888

3. Section: <.data>
Virtual Size [HEX]: 12
Virtual Size [DEZ]: 18
Virtual Offset [HEX]: 3000
Virtual Offset [DEZ]: 12288
Raw Size [HEX]: 200
Raw Size [DEZ]: 512
Raw Offset [HEX]: 800
Raw Offset [DEZ]: 2048

Flags [HEX]: C0000040
Flags [DEZ]: 3221225536

Ausgabe von RO_VS_fuenf= 42B

Wollen Sie die Crypter-Stub in einer neuen Section einpflanzen?

1. New Section

2.Vorhandene Section
=1

Entrypoint [HEX]: 1000
Entrypoint [DEZ]: 4096


Entrypoint wurde nach 42B verlegt!
RAW Offset [HEX]: 400
RAW Offset [DEZ]: 1024
[Zeichen]
Datei ist gecrypted!


FERTIG!

PEiD sagt nun folgendes:
http://img34.imageshack.us/img34/6929/peidnotvalid.png

LordPE sagt das:
http://img34.imageshack.us/img34/7162/lordpeepsec.png
----> Wo ist die neue Section?

Ein Blick in OllyDBG verrät:
http://img194.imageshack.us/img194/3317/ollynonewsec.png
---> Es wurde nichtmal eine neue Section hinzugefügt!

Der neue EntryPoint liegt außerdem zwischen IMAGE_DOS_HEADER/IMAGE_NT_HEADERS und der ersten Section.

Wenn man sich das so anschaut ist klar, wieso es einen Fehler gibt, wenn man versucht die Datei zu starten:
http://img193.imageshack.us/img193/1497/ollyep.png
-----------> Beim EntryPoint ist nichts!


mfG. BlackBerry

EBFE
07.06.2009, 16:26
Also:


# printf("\nFlags \t[HEX]: \t%X",VS);
# printf("\nFlags \t[DEZ]: \t%u\n",VS);
# fseek(stream,e_lfanew+point,SEEK_SET);
# VS+=0x80000000;
Flag setzten tut man immer noch am besten mit OR:
VS|=0x80000000;
Denn sollte dieses Flag schon zufällig gesetzt sein, bekommst du durch eine Addition einen Überlauf und als Ergebnis sowas wie 0x20 oder 0x40 - was dann natürlich zu "unerklärbaren" Fehlern führt.

Außerdem:
if(xcount==1) RO_VS_fuenf+=VS;
das ermittelt ja praktisch den neuen EP. Der wird aber irgendwie auf VirtualSize+5 gesetzt. Ergibt für mich keinen Sinn. Sollte eher (wenn es die letze Section sein soll) so gehen: RO_VS_fuenf=VirtualOffset+VirtualSize (die Werte ließt du ja eher ein, in der großen Schleife. Allerdings komme ich wegen der total komischen Einrückung sowie Benutzung gleicher Variablennamen (VS) für alle möglichen Werte (warum überhaupt? warum nicht aussagekräftige Variablen nutzen? ) nicht zu recht, daher musst du schon selber schauen, wo du den Code am besten platzierst).
Jedenfalls, wenn man RO_VS_fuenf=VirtualOffset+VirtualSize macht, wird es korrekterweise nach dem "Sectionloop" die Adresse der letzen Section+Sectionsize (also die Adresse des "letzen" Bytes) beinhalten. Wenn man nun eine Stub dranhängt, zeigt RO_VS_fuenf (und damit der neue EP) korrekterweise auf diese Stub.

skullyan
11.08.2009, 23:58
Schönes TUT! Könntest Du das ganze auch noch mal für C++ schreiben?

blackberry
12.08.2009, 10:37
Wenn du es jetzt nicht verstehst, wirst du es noch weniger verstehen, wenn ich Klassen zum Einsatz bringen würde.

Zudem lässt sich sagen, dass alle Sourcecodes in diesem Tutorial auch 100% syntaktisch korrekte C++ Sourcecodes darstellen.
Ich verstehe also nicht warum eine Übersetzung nötig sein sollte.

skullyan
12.08.2009, 10:45
Vollzitat vom Vorposter entfernt - § 2.6 - Boardregeln - BlackBerry
Ich verstehe schon, nur benutze ich z.B. zum Allokieren von Speicher nicht die C-Methoden, sondern new und delete.

blackberry
12.08.2009, 10:54
Ein Tutorial soll dir weder voll funktionierende Programme, noch Sourcecodes nach deinen Wünschen liefern.
Es soll einen Leitfaden darstellen.

Das ändern von malloc zu new wirst du doch sicher auch noch hinbekommen, oder wo liegt dann das Problem?
(eigentlich war mein Code ja nicht als Kopiervorlage gedacht, sondern mehr als Referenz - aber ich werd's wohl nicht ändern können)

skullyan
12.08.2009, 10:56
Hast schon recht. Mein Fehler.

Keksdose
17.08.2009, 11:17
Schönes TUT, hab aber noch eine Frage und zwar wie beweg ich OllyDbg dazu aus dem ASM-Code den "Hex"-Code zu machen?

edit: du meinst nicht zufällig mit MASM32 "compilieren" und dann mit OllyDbg auslesen ?!:confused:

blackberry
17.08.2009, 12:27
Du kannst OllyDbg's single-line Assembler benutzen.
Einfach eine beliebige .EXE in Olly ziehen und mit Doppel-Klick auf eine Zeile in der Disassembly den single-line Assembler aufrufen, deinen Befehl eingeben und ENTER drücken (danach kannst du entweder den single-line Assembler wieder schließen, oder das nächste Mnemonic eingeben).
(Wichtig: Doppel-Klick auf die Spalte mit den Mnemonics - ein Doppel-Klick auf z.B. die Hex-Dump Spalte setzt per Default einen Breakpoint)

Anschließend kann man entweder den Hex-Dump neben den neu erstellten Instruktionen abschreiben und mit den entsprechenden Escape-Sequenzen versehen (\x), oder (wenn man es unordentlich mag) die gewünschten Instruktionen selektieren und über Rechtsklick > Edit > Binary Copy die Bytes im Clipboard abspeichern.
Diese sind dann in 16 Bytes pro Zeile angeordnet und können ebenfalls nach versehen mit den Escape-Sequenzen als String-Literal im Sourcecode eingefügt werden.
(kleiner Trick hierbei: im Texteditor deiner Wahl einfügen, vor den ersten Bytes der Reihen noch ein Leerzeichen hinzufügen und dann mit der Replace-Funktion [bei Notepad CTRL + H] alle Leerzeichen durch \x ersetzen lassen - das geht schneller ;))

Keksdose
17.08.2009, 13:19
Danke für den Tipp, funktioniert 1A ;)

Späßer
13.09.2009, 17:46
Ich habs gedownloadet, finde aber das ursprüngliche TuT nicht!:O

SUCHTI
25.09.2010, 17:01
Kann jemand Reuppen? Hätte das TUT gerne mal gelesen...

blackberry
25.09.2010, 17:06
Der Link funktioniert einwandfrei.

LuLu-X
25.09.2010, 18:23
Bei mir kommt


Die Datei, auf die Sie zugreifen möchten, ist derzeit leider nicht verfügbar.
:-0

blackberry
25.09.2010, 18:26
Derzeit heißt derzeit und nicht immer.
Versuch es in 10 Minuten nochmal... manchmal hat Megaupload dieses Problem.

hackerking
25.09.2010, 19:44
i-wie ist das grad bei vielen mu files bei mir so oO also das mit dem derzeit nicht verfügbar
is das nur bei mir so?

blackberry
25.09.2010, 19:48
Nein, das ist häufiger so. Allerdings hat MU den Vorteil, dass die Dateien nicht nach einiger Inaktivität gelöscht werden.

SUCHTI
25.09.2010, 20:25
hmmm.... bei mir geht es immer noch nicht....

kann es jemand der es hat bei rs.com oder ul.to uppen??

LuLu-X
25.09.2010, 20:28
Ich kann es jetzt gerade laden, also einfach weiter versuchen! :o

blackberry
25.09.2010, 20:29
RapidShare: 1-CLICK Web hosting - Easy Filehosting (http://rapidshare.com/files/417025654/cs.rar)
MD5: 88F35EB3831FDD7363296CAA11425352

Mirr0w
25.09.2010, 21:18
/edit ;D

habe den ersten post als download versucht und am ende den reupp nicht gesehen.

danke dir !

kInGoFcHaOs
27.09.2010, 19:57
Editiere mal in deinem ersten Post den DL link bitte ;)

blackberry
27.09.2010, 20:12
Bringt nicht viel; ist eh bald wieder down.

SUNZ
03.10.2010, 16:38
kannst du bitte auflisten was alles im ordner ist?

blackberry
03.10.2010, 16:44
http://rapidshare.com/files/422887587/CrypterSchreiben.rar

C:\Users\BlackBerry\Desktop>md5sum CrypterSchreiben.rar
2f31ad7693dc0de861bab8aba4e5ffc1 *CrypterSchreiben.rar

Fenftw
03.10.2010, 16:47
http://rapidshare.com/files/422888706/CrypterSchreiben.rar

Damit Blackberry sich die Arbeit erspart ;)


PW: free-hack.com

penguin
03.10.2010, 16:48
Falls der Link wieder offline ist, hab ichs mal auf nen webspace hochgeladen.
http://77.91.225.138/~files/FH/CrypterSchreiben.rar
Passwort ist free-hack.com

Mofo
03.10.2010, 18:20
Was gefällt dir an Penguins Link nicht?

swobby
24.11.2010, 21:54
Links down -.- :D ich danke schon mal für den reup

blackberry
24.11.2010, 23:39
Es gilt nach wie vor: der Megaupload Link funktioniert einwandfrei. "Temporarily unavailable" heißt, dass der bald wieder funktioniert - bei mir geht er jetzt schon wieder.

ReiDC0Re
24.01.2012, 11:39
Hrr, hier muss echt mal wieder Leben in die Sektion.

An black, nimm mal den Megaupload raus und reup das mal.
Sry fürs Leichenschänden oO, aber leider ist der Bereich hier fast ne Leiche. Mal sehn, was sich da noch machen lässt.

Wird wohl mal Zeit, für nen kleines Projekt...
*nyan*

cby
24.01.2012, 12:24
Ja Blackberry bitte uploade es noch einmal und mach Version 2.0.

Gribbler
24.01.2012, 12:35
bin auch für ein reup

blackberry
24.01.2012, 12:39
Lustiger Weise habe ich wirklich eine Version 2. Die ist allerdings von 2010 und enthält vorwiegend kosmetische Änderungen. Was eine erweiterte Version des Tutorials angeht, so habe ich aktuell keine Pläne eine solche zu verfassen. Habe allerdings noch einen ganzen Haufen Assembler Code (etwa 900 Zeilen) vor etwas über einem halben Jahr geschrieben, der in gewisser Weise das geistige Erbe von dem Tutorial darstellt... vielleicht veröffentliche ich den irgendwann... ist allerdings noch unfertig.

Aktuell schwirrt mir eher die Idee zu einem etwas umfangreicherem C Tutorial im Kopf rum, aber ob ich das umsetze überlege ich mir erst noch, wenn ich hier wieder etwas freier Luft atmen kann nach meinen ganzen Klausuren.

P.S.: Links sind erneuert; siehe ersten Beitrag. MD5 Checksum ist auch dabei, also kann ja jederzeit jemand anderes einen Reup hochladen und man kann prüfen ob damit alles in Ordnung ist.

cby
24.01.2012, 12:43
Lustiger Weise habe ich wirklich eine Version 2
*lawl* Du machst mein Sarkasmus kap0t :(

blackberry
24.01.2012, 12:44
Sowas nennt man dann dumm gelaufen. Obvious troll is obvious ;)
Aber für sowas gibt es ja eine Fuck You Button ;D

cby
24.01.2012, 12:51
Aber für sowas gibt es ja eine Fuck You Button ;D
Ich kann doch nicht täglich die ganze Zeit auf diesen Link klicken.

Bonkers
24.01.2012, 13:07
C:\Users\BlackBerry\Desktop>

C:\Users\

C:\

http://i.imgur.com/OFkUV.jpg

Von dir hätte ich mehr erwartet.

crazy8
12.12.2015, 16:23
hat noch jmd das tut bitte reup ?^^

wacked
13.12.2015, 18:19
http://www.xup.in/dl,52470446/crypter_schreiben.7z/
https://www.sendspace.com/file/9pjoo1
Keine Ahnung ob da alles drin ist, hab nur kurz reingeschaut.