Laden...

Viren, Torjaner und andere

Erstellt von Vellas vor 19 Jahren Letzter Beitrag vor 19 Jahren 3.455 Views
Thema geschlossen
V
Vellas Themenstarter:in
842 Beiträge seit 2003
vor 19 Jahren
Viren, Torjaner und andere

Hi!

Da ich nicht nochmal in dem Thread "wat wer bist du den?" antworten wollte zu dem Thema "Speicherangriffe", hier nun ein neuer Threrad und eine Verallgemeinerung des Titels.
Was bisher geschrieben wurde kann auf der 1. Seite bis zum 1. Post auf der 2. Seite hier gelesen werden:
http://www.mycsharp.de/wbb2/thread.php?threadid=1618&sid=

Original von Franknstein
Edit:
@CodeHakcer
Vielleicht sollte dem Brain gesagt werden, dass man Viren, Trojaner was weiß ich nicht mir C# macht, da kaum wer die .net Frameworks hat... 😁 (Hooks, Titel von Windows; mal sehen was als nächstes kommt 😉 )

Hm? Wie kommst du darauf das ich ihm sagen soll das man Viren, Torjaner etc. nicht mit C# macht? Der mag MS nicht und ist Linux-Fetischist. Falls es unklar ist, wir haben kein C#, sondern C89, also reines ANSI-C. 🙂
Oder habe ich hier was nicht verstanden? 🙂

@r00t:

erfolgt die speicherverwaltung nicht durch das os?
es wäre doch fatal wenn die berechnung von kapazität und verfügbaren restspeicher nicht gemanaged werden würde.

und du bist dir sicher dass windows 3.11 - ME den speicher nicht beobachtet?

Ja, die Speicherverwaltung. Aber was hindert es mich den Speicher zu killen? In WinME, 9x und älteren sollte ein bluescreen kommen mit einem schweren Ausnahmefehler. NT-Systeme werden auf jedenfall dein Programm killen. Du kannst wenns dir Spass macht auch in diverse Speicherstellen schreiben in der Hoffnung das du damit ein Programm schreibst und dieses abstürzt.

Wie Franknstein sagte, mit diesen Methoden, also dem Angriff des Speichers werden Bufferoverflows erzeugt. Wenn also bei einem Prog bekannt ist das es z.B. bei mehr als 3 mio. Zeichen abschmiert, dann müsste man dort nur solange Zeichen reinknallen bis es einen Bufferoverlow erzeugt hat und schwups stürzt das Prog ab. Wie man Speicheradressen mit reinem C oder C++ von Programmen genau ermitteln kann oder Speicherstellen von Variablen weiß ich leider auch nicht.

Code-Hacker

R
139 Beiträge seit 2004
vor 19 Jahren

und wie wird das overlflow verursachende porgramm beendet wenn ich den speicher kille? bzw "schmiert" das betriebsystem nicht mit ab?
killen in dem sinne das ich dann einen defekten speicherriegel habe? das glaube ich nicht, und **NEIN **ich will es auch nicht testen 😉

EDIT: und das mit neuer Thread ist auch eine gute idee.

posted by the real prince of persia

F
529 Beiträge seit 2003
vor 19 Jahren

1. zu @CodeHacker:

Hm? Wie kommst du darauf das ich ihm sagen soll das man Viren, Torjaner etc. nicht mit C# macht? Der mag MS nicht und ist Linux-Fetischist. Falls es unklar ist, wir haben kein C#, sondern C89, also reines ANSI-C.
Oder habe ich hier was nicht verstanden?

Doch doch du hast alles Verstanden, war mein Fehler, denn ich habe noch ein @Code-Hacker hingeschrieben, das habe ich vergessen zu löschen beim Erstellen des Beitrags. ...egal... ich hätte das im Allgemeinen schreiben sollen, ich war ein wenig verwirrt... Ich hoffe das hat dich nicht gekränk.....

Ich mussten bei dem Begriff ScriptKiddie sofort an den Brain(Tut mir leid dass ich das so direkt sage) denken: Weiß nicht wie man eine Klasse erstellt und verwendet, aber will wissen, wie man Hooks einrichtet oder Window-Titles herausfindet.

Des Weiteren habe ich geschrieben, dass man Viren, Trojaner, Würmer etc nicht mit C# schreibt. Allerdings ohne Begründung. Die will ich jetzt nachliefern: C# braucht das Framework, allerdings hat das kaum einer installiert....

2. Speicheradressen

Wie man Speicheradressen mit reinem C oder C++ von Programmen genau ermitteln kann oder Speicherstellen von Variablen weiß ich leider auch nicht.

Muss man die nicht bei jedem Programmneustart neu herausfinden? Ich weiß dass man die herausfinden kann, wenn man das Programm während des Betriebs mit W32.DASM debuggt...

So das wars von meiner Seite, hoffentlich sind alle Unklarheiten jetzt geklärt...

--
mfg
Franknstein

Besuchen sie das VisualC++ - Forum

V
Vellas Themenstarter:in
842 Beiträge seit 2003
vor 19 Jahren

Hi!

@Franknstein:
Axso. Nö gekränkt bin ich nicht, wieso auch?
Doch du hattest das schon begründet 😉

Ja, die muss man bei Programmstart neu herausfinden. Aber selbst wenn nicht würde das nicht viel an der Tatsache ändern das diese Adresse bei jedem PC woander liegt, selbe Position wäre somit Zufall. Naja und wer Schaden anrichten will der schreibt wie gesagt an eine bestimmte Speicherstelle in der Hoffnung das etwas passiert.

@r00t:
Also WinME und alles dadrunter sollten abschmieren, eventuell kommt auch nur ein Bluescreen mit einer Meldung das ein schwerer Ausnahmefehler entstanden ist an der und der Speicherstelle. Danach kommst du entweder zurück in das System oder nicht. das Programm....nunja, wenn du den PC nue starten musst ist das natürlich beendet, ansonsten glaube nicht, außer es killt sich selbst g.

Nein, der Speicherriegel wird an den Adressen nur überschrieben, also wo zuvor eine 1 stand steht jetzt eine 0. Allerdings können da wichtige Ressourcen gespeichert sein, die dann natürlich futsch sind und das System oder ein Programm zum Absturz bringen.

Wenn du Win2k, WinXP, Win2k3 wird es auf jedenfall vom Betriebssystem gekillt da es an eine ungültige Speicheradresse schreiben wollte. Ungültig in dem Sinne als das es außerhalb des eigenen Speichers gelandet ist. Deswegen dürfen die Algorithmen der C-Standardbibliothek auch nicht lesen oder schreiben was sich hinter dem letzten Element befindet. Die Algotirhmen iterieren schließlich und ein Zeiger zeigt dabei oft hinter das letzte Element und das darf weder gelesen noch geschrieben werden, da es dann vermutlich außerhalb des gültigen Bereiches sein wird. Genauso verhält es sich mit einer künstlich erstellten Pascalindizierung, wobei festgelegt wird von welchem bis zu welchem Index ein Array geht. In C könnte man es so darstellen das man einen Pointer auf das Array-1 setzt und ist somit außerhalb der gültigen Grenze ist in C, C und C#. D.h. wir befinden uns vor dem ersten Elemten, also müsste man mit dem Pointer über inidzierung bei 1 statt bei 0 beginnen und kann dann bis 30 statt 29 indizieren. Also wären die Grenzen nicht mehr 0-29 wie bei C üblich sondern 1-30. Davon rate ich ab, da bei sowas sehr leicht ein Fehler mit diesem Zeiger passieren kann und dann hat man den Salat wenn es doch irgendwie gut geht, wird auf jedenfall später etwas passieren.

Code-Hacker

R
139 Beiträge seit 2004
vor 19 Jahren

*g*

jo, hätte mich schon stark gewundert wie eine methode die riegelbausteine "zum explodieren" bringen soll/kann 😁

noch was zu zeigern allg: mit zeigern sollte man generell aufpassen, wohin man "zeigt".

posted by the real prince of persia

445 Beiträge seit 2003
vor 19 Jahren

Hi,

Das ist mir mal passiert: Ich hab auf meinem ME durch den Speicher iteriert, und alles ausgegeben (nicht mit Absicht). Als ich dann am Ende des für das Programm reserviertzen Speichers gekommen bin, ist das Programm abgeschmiert. Ich hab allerdings nur lesend zugegriffen, wie ME beim Schreiben reagiert hätte, weiß ich nicht. Ich glaub allerdings nicht, dass es beim schreiben abgestürzt währe.
PS:Ein interesander Link zu Thema:http://www.zotteljedi.de/doc/stacksmashing/stacksmashing.html

Viele Grüße
www.mycsharp.de

Bitte vor dem Fragen immer in die FAQ schauen und die Suche benutzen. Danke.

R
139 Beiträge seit 2004
vor 19 Jahren

natürlich kann sich (fast) jeder was über overflow vorstellen.

aber inwiefern? deswegen ist der link genial -> big THX!

posted by the real prince of persia

V
Vellas Themenstarter:in
842 Beiträge seit 2003
vor 19 Jahren

Hi!

Original von r00t
noch was zu zeigern allg: mit zeigern sollte man generell aufpassen, wohin man "zeigt".

Ja, aber das hat auch einen Grund. 😉
Immerhin speichert ein Zeiger die Adresse eines Objekts. Bei einer fehlerhaften Zeigeroperation kann natürlich was schief gehen. Außer aus Performancesicht sind Zeiger imho sowieso unnütz, d.h. man kann sie vermeiden und sollte die vermeiden. Ich benutze Zeiger eigentlich nur wenn ich ein char-Array benötige und das kommt relativ selten vor.

Bei Gesprächen über Zeigern kommt mir immer der Zeigersalat von meinem Dozenten in den Kopf. Sieht nicht nur schlimm aus, ist es auch 🙂

Code-Hacker

R
139 Beiträge seit 2004
vor 19 Jahren

😉 ich kenne mich relativ gut mit zeigern aus.

aber danke dass du genau diesen punkt angesprochen hast. 👍

posted by the real prince of persia

V
Vellas Themenstarter:in
842 Beiträge seit 2003
vor 19 Jahren

Hi!

Original von zeus
Hi,

Das ist mir mal passiert: Ich hab auf meinem ME durch den Speicher iteriert, und alles ausgegeben (nicht mit Absicht). Als ich dann am Ende des für das Programm reserviertzen Speichers gekommen bin, ist das Programm abgeschmiert. Ich hab allerdings nur lesend zugegriffen, wie ME beim Schreiben reagiert hätte, weiß ich nicht. Ich glaub allerdings nicht, dass es beim schreiben abgestürzt währe.
PS:Ein interesander Link zu Thema:
>

ME ist löchriger als ein schweizer Läse, was wir zwar von MS kennen, aber ME ist echt heftig. Ich hatte es auch mal, das schmiert ab wenn es die Chance hat. Naja, habe danach dirket zu 2k gewechselt.

Zum Link:
Natürlich müssen Underflows genauso streng behandelt werden wie Overflows.

Was memcpy betrifft so werde ich das demnächst unter Win98 mal testen, evtl auch unter ME. Habe hier noch nen alten Laptop stehen, der kann ja mal für sowas herhalten. g
Kann dann ja mal die Ergebnisse posten von 98 und ME, also die Reaktionen der beiden BS.

Code-Hacker

R
139 Beiträge seit 2004
vor 19 Jahren

jo gerne 😁

gib aber uns dann nicht die schuld wenn dein nb nicht mehr angeht 😉

posted by the real prince of persia

445 Beiträge seit 2003
vor 19 Jahren

Hi,

bei meinem ME ist es mit dem abstürzen eigentlich nicht so schlimm. Auch von Viren bin ich bis jetzt verschohnt geblieben.

Viele Grüße
www.mycsharp.de

Bitte vor dem Fragen immer in die FAQ schauen und die Suche benutzen. Danke.

N
4.644 Beiträge seit 2004
vor 19 Jahren

Original von Code-Hacker
[...] und sollte die vermeiden. [...]

Kannst Du das begründen?
Man sollte sie meiner Meinung nach nur vermeiden, wenn man damit nicht umgehen kann.

V
Vellas Themenstarter:in
842 Beiträge seit 2003
vor 19 Jahren

Hi!

Ja! Genau. Aber was verstehst du wederum unter "umgehen können"? Ich verstehe darunter jemanden der sich nicht tiefgründig mit Zeigerarithmetik auseinander gesetzt hat. Es gibt so viele Dinge die man beachten muss, wie ich in den C-Vorlesungen gesehen habe, in den Übungen gemerkt habe und auch jetzt beim durcharbeiten vom Stroustrup merke und lese. Das ist Wahnsinn. Ich nehme an solchen stellen zu gerne das Beispiel von meinem Dozenten, den Zeigersalat und der ist alles andere als leicht oder übersichtlich.
Zur Zeigerarithmetik gehört ja nicht nur +x sondern wirklich komplexe arithmetische Operationen und erst wenn man damit enigermaßen umgehen kann kann man imho mit einem Zeiger umgehen.

Außerdem selbst wenn man es kann, wirklich benötigen tut man sie selten. Selbst bei zeitkritischen Situationen können sie teilweise schon vernachlässigt werden, da die Compiler mittlerweile fast alles rausholen können. Lieber etwas zu wenig optimiert, dafür richtig, als zuviel und dafür falsch.

Code-Hacker

R
139 Beiträge seit 2004
vor 19 Jahren

wenn man es aus der oop perspektive siehst dann "solltest" du sogar pointer vermeiden. nehmen wir mal c++ im verlgeich zu c:

bei oop werden klassenvariablen werden über konstr. initialisiert, und dass ist fakt. Gegenfrage: warum sollte man die variablen über zuweisungen initialisieren? wäre das nicht so als wenn man auf einen Fortschritt und Verbesserung der OOP verzichten würde?

r00t

posted by the real prince of persia

V
Vellas Themenstarter:in
842 Beiträge seit 2003
vor 19 Jahren

Hi!

Original von r00t
wenn man es aus der oop perspektive siehst dann "solltest" du sogar pointer vermeiden. nehmen wir mal c++ im verlgeich zu c:

bei oop werden klassenvariablen werden über konstr. initialisiert, und dass ist fakt. Gegenfrage: warum sollte man die variablen über zuweisungen initialisieren? wäre das nicht so als wenn man auf einen Fortschritt und Verbesserung der OOP verzichten würde?

Ich verstehe irgendwie nicht genau was du mit den letzten 2 Sätzen sagen bzw. fragen willst. Meinst du warum man Variablen per Zuweisung statt Konstruktoraufruf initialisieren sollte oder was? Wenn ja, auf welche Variablen beziehst du dich? Built-Ins oder eigene Datentypen.
Wieso verzichtet man auf etwas wenn man per Zuweisung initialisiert? (oder was meinst du mit dem letzten Satz?)

Code-Hacker

R
139 Beiträge seit 2004
vor 19 Jahren

Original von Code-Hacker
Meinst du warum man Variablen per Zuweisung statt Konstruktoraufruf initialisieren sollte oder was? Wenn ja, auf welche Variablen beziehst du dich? Built-Ins oder eigene Datentypen.

auf built-ins (char, int, double...).

Original von Code-Hacker
Wieso verzichtet man auf etwas wenn man per Zuweisung initialisiert

darauf zb. char *txt

edit: naja eigentlich waren das rethorische fragen kombiniert mit bier 😁

edit2:

Original von Code-Hacker
Wieso verzichtet man auf etwas wenn man per Zuweisung initialisiert

axo, ne 😉 das war so gemeint: du verzichtest auf ein vorteil von oop wenn du das dennoch mit pointer machst.

posted by the real prince of persia

V
Vellas Themenstarter:in
842 Beiträge seit 2003
vor 19 Jahren

Hi!

Ich steh irgendwie im Wald. Auf welchen Vorteil verzichtet man wenn man das mit OOP macht? Also Pointer verwenden?

Code-Hacker

R
139 Beiträge seit 2004
vor 19 Jahren

ja. der coder muss nicht einen pointer verwenden, besser wäre aber berücksichtigen.

auf mtv läuft atm scare tatics schau dir das an! einfach genial 😁

posted by the real prince of persia

F
529 Beiträge seit 2003
vor 19 Jahren

Wenn ich das richtig gelesen habe, glaube ich, dass du irgentwie verwirrt bist....
Warum sollte man denn z.B. auf Chars verzichten? Ok Chars mag noch gehen, ist ja fast nix anderes wie ein Bytearray, aber WARUM? Dir ist klar, dass das ganze alles irgentwann(nach dem Compiler) nur noch prozenduraler Bytecode ist? Und wenn nicht nach dem Compiler dann nach dem Interpreter...
Jetzt bin ich aber völlig verwirrt und perplex...

btw: Starkbier???

--
mfg
Franknstein

Besuchen sie das VisualC++ - Forum

R
139 Beiträge seit 2004
vor 19 Jahren

auf char wollte ich nicht hinaus sonder auf den zeiger auf char.
muss ja nicht char sein (int ect.) es geht um die initialisierung 😉

btw starkbier gibt es hier nicht (bzw ist nicht verbreitet), schmeckt mir auch nicht 🙂
kann sein das nicht jedem bier schmeckt 8)

posted by the real prince of persia

N
4.644 Beiträge seit 2004
vor 19 Jahren

Original von r00t
wenn man es aus der oop perspektive siehst dann "solltest" du sogar pointer vermeiden. nehmen wir mal c++ im verlgeich zu c:

bei oop werden klassenvariablen werden über konstr. initialisiert, und dass ist fakt. Gegenfrage: warum sollte man die variablen über zuweisungen initialisieren? wäre das nicht so als wenn man auf einen Fortschritt und Verbesserung der OOP verzichten würde?

Beherrschst Du beide Sprachen so gut, um diese Aussage treffen zu können?
Denkst Du Zeiger wurden nur wegen der Variableninitialisierung erschaffen?
Warum redest Du über OOP und vergleichst dann C und C++, wo C doch eine prozedurale Programmiersprache ist?

445 Beiträge seit 2003
vor 19 Jahren

Außerdem:

Was meinst du damit, dass man in C++ keine Zeiger einsetzen soll? Wenn man ein Objekt auf dem Heap anlegt (Ja, das macht man in C++ so) schreibt man doch:

MeinObjekt * mo = new MeinObjekt("Hallo", 345);

Warum sollen Zeiger also unter OOP veraltet (im sinn von nicht mehr zu nutzen) sein. Klar, solche Sachen wie Zeiger auf Zeiger werden unter C++ selten genutzt.

Viele Grüße
www.mycsharp.de

Bitte vor dem Fragen immer in die FAQ schauen und die Suche benutzen. Danke.

R
139 Beiträge seit 2004
vor 19 Jahren

Hi und ohjeohje,

Original von den anderen
Beherrschst Du beide Sprachen so gut, um diese Aussage treffen zu können?

<- sorry aber was war das? habe ich dich gekränkt? wenn ja dann tut es mir leid.
was ist gesagt habe habe ich dir aus meiner erfahrung/lernen gesagt. berherrschen ist mir zu relativ,
und ich bin eher bescheiden.

Original von den anderen
->Denkst Du Zeiger wurden nur wegen der Variableninitialisierung erschaffen?

wo bitte schön habe ich geschrieben dass die ptr "nur wegen der Variableninitialisierung erschaffen" wurden?
man kann ist aber kein muss...
das (Variableninitialisierung allg.) war aber auch die überleitung zu oop:

Original von den anderen
->Warum redest Du über OOP und vergleichst dann C und C++, wo C doch eine prozedurale Programmiersprache ist?

gerade deswegen erwähne ich ja oop! ja und ich weiß es selber ->
c++ = oop; c= proze...
bei c++/oop allg. hast du deinen konstruktor zwecks initialisierung, und das ist ein "fortschritt/verbesserung" im verlgeich zu der proze. progr. da du (an vielen stellen) jetzt auf pointer verzichten kannst.
somit ist das doch auch ein punkt gegen pointer in der oop/c++, weil du jetzt eine alternative zu pointer hast.

Fazit: also nochmal-> ptr sind nicht sch*** oder nutzlos aber bei initialisierungen in der oop muss man sie nicht verwenden.
und bitte nicht wieder irgendwelche sachen erfinden, die ich angeblich behauptet habe, wie ptr sind veraltet, nutzlos, char braucht man nicht mehr und weiss der teufel...

"So das wars von meiner Seite, hoffentlich sind alle Unklarheiten jetzt geklärt..."

posted by the real prince of persia

445 Beiträge seit 2003
vor 19 Jahren

Original von r00t
c++ = oop; c= proze...

Hi,

das stimmt so aber nicht. C++ ist nicht nur OOP Sprache, sondern eine MultiPragmatik-Sprache. Du kannst damit OO, Generisch und Prozendual programmieren.

Viele Grüße
www.mycsharp.de

Bitte vor dem Fragen immer in die FAQ schauen und die Suche benutzen. Danke.

R
139 Beiträge seit 2004
vor 19 Jahren

Original von zeus
das stimmt so aber nicht. C++ ist nicht nur OOP Sprache, sondern eine MultiPragmatik-Sprache.

@zeus: habe ich geschrieben das c++ **nur **eine oo-p.sprache ist?

posted by the real prince of persia

F
529 Beiträge seit 2003
vor 19 Jahren

ne, aber ein = signalisiert das sogar einem Nicht-Programmier-Wissenden(*).....

Kann das Thema mal bitte jemand schließen... langsam wirds 🙄

edit
zu *:
Damit meine ich mich

--
mfg
Franknstein

Besuchen sie das VisualC++ - Forum

N
4.644 Beiträge seit 2004
vor 19 Jahren

@ r00t
Ich habe keine Sachen erfunden, ich habe nur Fragen zu Deinen Aussagen gestellt.
Nein, Du hast mich nicht gekränkt, aber wenn eine Aussage macht wie ich sie oben von Dir zitiert habe macht, dann sollte man schon starke Kenntnisse der Sprachen bzw Zeigerarithmetik vorweisen um diesen Vergleich zu untermauern und nicht irgendwas nachreden was man vielleicht mal irgendwo gelesen hat!

Thema geschlossen