PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Warum gelten die besten Programmierer, auch gleichzeitig als die besten Hacker?



BornInTheWoods
29.03.2017, 12:10
Ob Black Hat oder White Hat sei mal dahin gestellt, aber warum sagt man das so :D?
Ich mein wenn du ein Coder für beispielsweise kp GTA 6 bist, könnte man dann komplexe Viren etc bauen?
Wie steht Ihr dazu? Klar, Hacken ist nicht nur programmieren, doch wenn wir hier nur auf der programmieren Ebene bleiben,
bin ich der Meinung da gehört schon deutlich mehr dahinter als reine Coding Erfahrung. Ich will jetzt auch nicht zu tief ins Detail.
Wie seht Ihr dazu?

Ceos
29.03.2017, 12:36
Überleg doch mal kurz

Wenn ich nicht weis wie ein Angriff funktioniert, kann ich auch keine Gegenmaßnahmen ergreifen, ergo muss ich lernen wie der hack funktioniert um ihn zu kontern, das macht dich als Programmierer zu einem Hacker.

Anders herum hat ein Programmierer 50% der Zeit mit Bugs zu tun und Bugs sind die Quelle für Hacks ... kein Hack ohne Bug und das Debuggen erfodert einfach das wiederholtes provozieren des Bugs ... wenn man dann ein Potential erkennt damit unerwartetes Auszulösen, nennt man das einen Exploit

Black Hats sind halt die bösen, die Schwachstellen gezielt suchen und ausnutzen

White Hats suchen Entweder um etwas auf stabilität zu prüfen (aus Langeweile oder für Geld) oder es sind Programmierer die über Bugs stolpern die sich beim Debuggen als Exploit erweisen...

Das was du allgemein hin als Hacker kennst sind nur sog. Script-Kiddies .... die benutzen die Exploits die ein Black Hat zum nachbauen oder ein White-Hat zum Überprüfen der eigenen Systeme veröffentlicht hat um Schaden damit anzurichten oder sich zu bereichern ... Solche Leute brauchen ein Mindestmaß an Verständnis um die Exploits miteinander zu verbinden ... oder haben bekannte die sich damit auskennen aber nicht so viel kriminelle Energie aufbringen es anzuwenden

oberallgeier
29.03.2017, 12:40
.. da gehört schon deutlich mehr dahinter als reine Coding Erfahrung ..Ceos hat ja schön etliches beschrieben. Zu meinen persönlichen Erfahrungen: VOR meinem ersten Programmierkurs im Studium, FORTRAN mit/auf den alten Hollerithkarten

......https://upload.wikimedia.org/wikipedia/commons/thumb/e/ea/Hollerith_Punched_Card.jpg/220px-Hollerith_Punched_Card.jpg

. . . hatte ich mir etliche Wochen logische Propädeutik reingezogen, insbesondere mit Blick/Schwerpunkt auf Programmiersprachen. Das ist mE die Grundlage der Denkweise - und eine Vorstellung des abstrahierbaren Wissens. Vielleicht etwickelt sich dort das Gefühl für die Einschränkungen der (operationellen) Semantik. Natürlich gehört nach den ersten Programmierkenntnissen/-Erfahrungen Übung/Praxis etc dazu.

White, black und grey - das sind dann Fragen der Loyalität zu den Gesetzen, der Ethik die man als Könner hat oder nicht. Als Könner, denn ohne Können kennt man weder mehrere möglichen Wege noch mögliche Abwege.

Was schreibt Platon in seiner Politeia? Dass der gute Bäcker NICHT der ist, der gute Brötchen bäckt, sondern der, der schlechte Brötchen backen KANN und trotzdem gute Brötchen bäckt. Wesentlich simpler (und nicht so ganz richtig) legt es der deutsche dabbel yu Busch seiner frommen Helene in den Mund: "Das Gute, dieser Satz steht fest . . .".

White_Fox
29.03.2017, 19:56
Ob Black Hat oder White Hat sei mal dahin gestellt, aber warum sagt man das so :D?
Ich mein wenn du ein Coder für beispielsweise kp GTA 6 bist, könnte man dann komplexe Viren etc bauen?
Nein...definitiv (erstmal) nein.

Computerspiele werden heute nicht mehr programmiert, sondern "designt". Die Leute, die ein Computerspiel eigentlich machen, haben vom Programmieren kaum Ahnung. Das hat mehr mit Grafikdesign als mit Prorgammierung zu tun. Es gibt an meiner Hochschule einen Studiengang "Gamedesign"-die studieren genau das.
Stell dir das so vor wie Industriedesigner oder Architekten in ihrem Fach. Sie machen daß das Produkt wunderschön anzusehen ist-aber von der Technik an sich haben die keine Ahnung. Damit müssen sich dann Ingenieure später herumschlagen.

Um zu hacken benötigt es andere Dinge. Neben den eigentlichen Programmierkenntnissen sind Kenntnisse z.B. über Bussysteme oder die Funktionsweise von Betriebssystemen wichtig. Codemacherei ist da nur das Handwerkszeug.

Ceos
30.03.2017, 07:03
dem stimme ich zu @White_Fox

Hacker sind Menschen aus ALLEN Gebieten der Software welche sich die Zeit nehmen (oder Langeweile haben oder Authistisch veranlagt sind ... kenne 2 solche Personen) sich mit einem Machwerk eines anderen Menschen auseinander zu setzen um aus welchen Gründen auch immer heraus zu finden ob er dabei Fehler gemacht hat. Im Prozess vom zufälligen gefundenen Fehler auf die eigentliche Ursache zu schließen, erarbeitet man sich dabei Werkzeuge um den Weg zum Problem leichter und wiederholbar zu öffnen um dann an den sich entwickelnden Exploit immer wieder etwas Code anzuhängen bis der Weg zum Fehler nurnoch ein Klick ist.

Das ist (ACHTUNG) >>meines<< Erachtens nach das eigentliche Hacking. Das kann man auf Busssysteme(Fehler im Protokoll oder der Implementation selbigens), Spielesoftware(Glitches, Programmierfehler, hoch optimierte Ausnutzbare Bugs), Datencenter(Busssystem == Netzwerk in dem Fall) oder eben auch reale Menschen sein (Social Hacking)

Spiele cracken ist auch eine Form des Hackings, man untersucht den Schutzmechanismus und prüft ob dessen Implementierung einen Fehler hat oder ob sich dem Schutz auf irgend eine Art vormachen lässt das Spiel sei original (Es gibt zu viele sehr unterschiedliche Mechanismen um auf nur ein allgemeines Beispiel eingehen zu können)

zum Thema Glitches empfehle ich dir mal den Youtube Sethbling und wie er de "Cloud Glitch" in super Mario erklärt womit er im Endfight das Verhalten von Bowser manipuliert um dessen Zeitraubende Kampfphasen zu überspringen um ihn dann schneller zu besiegen .... ein SEHR klassisches Beispiel eines Glitches durch hoch optimiertem Code der durch eine Komibnation mit einem anderen Glitches erst möglich wird, weil die Entwickler gedacht haben dass in einem Normalen Spiel die Verwendung der Wolke im Bowser Fight nicht möglich sei!

Auch ich muss bei der Programmierung meiner Firmware hier auf Arbeit teilweise auf schmutzige Tricks und Kniffe zurückgreifen, damit die ausufernden Anforderungen an Funktion und Bedienung in einen möglichst kleinen und günstigen Controller passen. Aber ich schreib mir immer auf die Flagge defensiv zu programmieren ... ich kenne andere klollegen die a teilweise drauf pfeifen und erst was machen wenn ein Kunde mal drauf stößt ... in meinen Augen verwerflich

Peter(TOO)
30.03.2017, 08:20
Hallo Waldgeist,

Ein gutes Programm liefert für die erwarteten Daten die richtigen Resultate.
Ein sehr gutes Programm verhält sich auch mit unerwarteten Daten definiert, vorhersehbar und sicher.

Ein einfaches Beispiel:


INPUT "Alles löschen? (J/N)", A$
IF A$ = "N" THEN Goto nicht löschen
hier wird alles gelöscht

Erwartet wird als Eingabe "J" oder "N"
Das funktioniert bestens, so lange nur N und J gedrückt werden. Nun hat aber eine Tastatur noch eine Menge mehr Zeichen als nur diese beiden! Zudem ist die Gross/Klein-Schreibung auch noch zu beachten.
Da A$ ein String ist, kann da auch mehr als 1 Zeichen drin stehen.
Prellt das N gibt es eine Katastrophe, dann sind alle Daten weg!

Eine bessere Variante:


INPUT "Alles löschen? (J/N)", A$
IF A$ = "J" THEN Goto löschen
hier wird NICHTS gelöscht

Hier führt nur die Eingabe von "J" zum Löschen aller Daten, alle anderen Eingaben bewirken nichts.

Noch besser:


INPUT "Alles löschen? (J/N)", A$
IF A$ = "J" THEN Goto löschen
IF A$ = "N" THEN Goto nicht löschen
Falsche Eingabe verarbeiten


Dies ist jetzt kein Schulbeispiel, sondern ich habe dies in der Praxis mehrfach erlebt.

Je nach dem wie der Programmierer denkt, wählt er im Prinzip eine dieser Lösungen. Du darfst jetzt raten, welche ein sehr guter Programmierer wählt. :-)
Entsprechend geht man auch bein Hacken vor. Exploits findet man ausserhalb der vom Programm erwarteten Datenmenge.

Es ist immer wieder Lustig zu testen, was bei Rechnern oder Formularen passiert, wenn man z.B. negative Zahlenwerte eingibt oder Buchstaben an der Stelle von Ziffern! Schon ein einfacher "U = I * R" kann sich lustig verhalten, wenn man negative Widerstandswerte oder 0 Ohm eingibt.

oberallgeier
03.04.2017, 12:36
.. Ein sehr gutes Programm verhält sich auch mit unerwarteten Daten definiert, vorhersehbar und sicher ..Oh weh, ich habe das grade da und dort bei meinem Archie probiert. Ziemlich desaströs. Und dann bin ich auch noch über diese Site (https://jaxenter.de/das-fuenfsekundenexperiment-guter-code-schlechter-code-33196) gestolpert :-/ . Da sehe ich, dass ich viel zu viel Kommentar schreibe und zu wenig aussagekräftige Namen :-(

i_make_it
03.04.2017, 13:19
Mit dem Fazit auf der Seite stimme ich nicht überein.
Guter Code ist für mich robuster und effizienter Code. (habe da immer auch Assembler im Hinterkopf und nicht nur Hochsprachen)
Gute Lesbarkeit ist schön und zu begrüßen.

Bei den Kommentaren halte ich das bei Kleinprojekten die Ohne DevOps auskommen so das ich auch eher mal mehr kommentiere.
Da ich meist selbst nciht mehr weis was ich vor 10-20 Jahren programmiert habe, hilft das doch oft schnell wieder in ein altes Projekt einzusteigen.
Zu viel Kommentar ist halt tödlich beim lesen des Codes.
Ich gehe auch oft hin und öffne oft die selbe Source 2 mal und blende einmal alle Komentare aus, damit ich die Strukturen besser erkenne (weil mehr auf einen Bildschirm passt)
im zweiten Fenster lese ich dann was ich mir dabei mal gedacht habe.

Bei größerne Produktionen mit Rapid Development oder gar DevOps tool Chains haben separate Komentarzeilen aber allerdings nichts mehr zu suchen, da die auch mal nicht mehr an der selben Stelle stehen können wie der ursprünglich Code.
Oder aber der Code wurde so verändert das er nicht mehr zum Komentar passt. (wird so auch auf der Seite beschrieben)

White_Fox
03.04.2017, 21:35
Naja...Recht haben die da schon. Ihr Fazit ist nicht falsch. Ich halte es aber für unvollständig.

Code, der nicht zu lesen ist, ist meiner Meinung nach definitiv schlechter Code.
Da es auf dieser Seite auch um Hochsprachen geht (Java), stellt sich die Frage nach der Effizienz kaum. Wer weiß schon genau, was der Kompiler da nachher aus dem Code bastelt? Mit sowas wie z.B. statischen Methoden hat man zwar eine begrenzte Möglichkeit, auf Speicherplatz zu optimieren, aber so richtig dolle ist das nicht. Im Prinzip bleibt da als Kriterium nur noch Lesbarkeit. Und das, was Peter schon angesprochen hat. Code, der keine undefinierten Zustände zuläßt.

Assembler finde ich klasse, AVRs programmiere ich damit gerne. Und ja, man kann auch in ASM ganz vorzüglich gut verständlichen Code schreiben. Aber ganz ehrlich-ich bin heilfroh daß es für gewisse Probleme auch objektorientierte Hochsprachen gibt. Wer meint, Klassenprogrammierung sei umständlich, der hat meiner Meinung nach OOP nicht verstanden. Und wen interessiert es, ob auf einem Desktoprechner ein Programm ein oder zwei MB weniger braucht?
Klar, man kann es auch in die Richtung wieder übertreiben und mit irgendeinem MS-Framework eine simple Messagebox auf 200MB aufblasen.

Ich persönlich nehme ja lieber für jedes Problem das passende Werkzeug.

Peter(TOO)
03.04.2017, 22:07
Da sehe ich, dass ich viel zu viel Kommentar schreibe und zu wenig aussagekräftige Namen
Ich erinnere mich noch an meine ersten BASIC-Dialekte, da waren für Variablen A..Z und A1..A9 bis Z1..Z9 zulässig :-(
Funktionen gabs gar nicht, nur Zeilennummer ....

Assembler liessen maximal 5 Zeichen für Labels zu.

Damals ging es nur kryptisch :-(
Da Zudem alle Label und Variablen global waren haben wir in den Kommentaren oft Tabellen erstellt, welche Variable was enthält und wo verwendet wird.

Ich hatte aber auch schon katastrophale Projekte übernommen:
Xyz_temp war eine temporäre globale Variable und Xyz, auch global, wurde als temporäre Variable für Berechnungen verwendet, Die Prozedur-Namen waren auch nicht besser! :-(
Ich habe da erst einmal 2 Tage lang fast alles neu gelabelt.

Zudem war dieses C-Programm, mit über 2'000 Zeilen als einzelne Datei erstellt worden. Das nächste war dann, alles in überschaubare Module zu zerlegen. Zudem war alles global deklariert. Erstellt wurde das Programm von einer Software-Firma.

Ich habe schon immer nach einem Objekt Orientierten Ansatz programmiert.

Zu jedem Modul gibt es eine Header-Datei mit den globalen/öffentlichen Aufrufen, Datentypen und Konstanten. Alles Andere ist dann lokal in diesem Modul.
Dies funktionierte dann auch schon mit jedem Macro-Assembler.

Am Modul-Anfang habe ich dann eine Kommentarblock, welcher die global aufrufbaren Funktionen beschreibt.

Seit etwa Mitte der 80er arbeite ich nur noch mit Versionskontroll-Systemen. Da sind dann noch ein paar automatische Versions-Informationen in diesem Kommentar-Block enthalten.

Bewährt hat es sich auch, dass nie eine Programm-Version meinen Schreibtisch verlassen hat ohne eine eigene Versionsnummer zu erhalten. Man glaubt gar nicht auf welchen verschlungen Wegen, auch eine interne Alpha-Version, den Weg zu Kunden findet!

S3r3nity
05.05.2017, 12:25
Ja Hacking ist schon etwas mit dem man sich wirklich explizit beschäftigen muss. Ein Freund von mir war mal in der Szene und der sagt auch, dass da die Entwicklungen so schnell voranschreiten, dass er schon nach ein paar Jahren außerhalb der szene gar keine Ahnung mehr hat.

OlaffD
26.06.2017, 11:38
Das Thema klingt wie rhetorische Frage)))

HaWe
26.06.2017, 14:45
Das Thema klingt wie rhetorische Frage)))

allerdings!
und dazu noch mit der "untergejubelten" Unterstellung, dass es tatsächlich stimmt, was in der Frage impliziert wird.
Wer bitteschön ist es denn, der behauptet, daß angeblich die besten Programmierer auch gleichzeitig als die besten Hacker gelten?
Behauptet das überhaupt jemand (außer dem OP) ?
Gilt das wirklich als allgemein als bewiesene Tatsache, oder ist es nur eine Minderheitenmeinung oder nur eine Überspitzung, bestenfalls ein in den Raum geworfenes "Bonmot", um eine Pseudo-Diskussion anzustoßen?
Nach dem Motto:
Warum gelten die besten Autofahrer auch gleichzeitig als die besten Formel-1-Rennfahrer?
Warum gelten die besten Deutschlehrer auch gleichzeitig als die besten Romanautoren?
:-/

i_make_it
26.06.2017, 15:43
Die Behauptung ist zumindest soweit zutreffend, wenn man mal den Ursprung des Begriffs Hacker betrachtet.
Das ganze geht ja auf das Jahr 1958 und das MIT zurück und den dort vorhandenen TX-0 sowie seine nächtliche Nutzung durch den TMRC.
Da das Hacken von der Geräuschkulisse des Fiden Flexowriter stammte mit dem der TX-0 programmiert wurde, waren Hacker einfach diejenigen die ihn Programmiert hatten.
Da unter den Teilnehmern dieser nächtlichen sessions ein Wettbewerb über den besten Code entstand. Waren zumindest Damals die besten Programmierer die besten Hacker.
Z.B. hat mit 12 Jahren der spätere Erfinder von Ghostscript dort programmiert.
Und auch Marvin Minsky war da nicht weit (kam 1958 ans MIT).

Als dann das MIT eine PDP-1 bekam war wieder der TMRC nicht weit und Minky förderte die Hacker, da er für die Probleme der KI, viele gute Programmierer benötigte.
so entstand z.B. auf der DPD-1 "Spacewar".
Das wiederum hat DEC als Funktions und Benchmark Test im Kernspeicher jeder PDP-1 bei der Auslieferung hinterlegt.
Über eine PDP-11 auf der Spacewar in einem Cafe in _Stanford lief, kam es z.B. zur Gründung von Atari.

Das lässt sich über mehrere Jahrzehnte fortsetzen, also ja vom ürsprünglichen Wortsinn her sind die besten "Hacker" die besten Programmierer.

Auch heute noch sind Hacker (nicht skript Kiddies) diejenigen die sich so in die Technik von Systemen vertiefen, das sie teilweise bessere Systemkenntniss als die Entwickler erlangen. und um so in ein womöglich abgesichertes System vorzudringen muß man halt auch ganz gut programmieren können und nicht nur einen Werkzeug Baukasten bedienen können.

Wobei ich zustimme, ja die Eingangsfrage dürfte rein Rethorisch gewesen sein.
Und da der TO sich einen Tag nach dem Post das letzte mal im Forum angemeldet hat, interessieren Ihn auch die Antworten nicht.

HaWe
27.06.2017, 08:43
Die Behauptung ist zumindest soweit zutreffend, wenn man mal den Ursprung des Begriffs Hacker betrachtet.
Das ganze geht ja auf das Jahr 1958 und das MIT zurück und den dort vorhandenen TX-0 sowie seine nächtliche Nutzung durch den TMRC.
Da das Hacken von der Geräuschkulisse des Fiden Flexowriter stammte mit dem der TX-0 programmiert wurde, waren Hacker einfach diejenigen die ihn Programmiert hatten.
Da unter den Teilnehmern dieser nächtlichen sessions ein Wettbewerb über den besten Code entstand. Waren zumindest Damals die besten Programmierer die besten Hacker.
Z.B. hat mit 12 Jahren der spätere Erfinder von Ghostscript dort programmiert.
Und auch Marvin Minsky war da nicht weit (kam 1958 ans MIT).

Als dann das MIT eine PDP-1 bekam war wieder der TMRC nicht weit und Minky förderte die Hacker, da er für die Probleme der KI, viele gute Programmierer benötigte.
so entstand z.B. auf der DPD-1 "Spacewar".
Das wiederum hat DEC als Funktions und Benchmark Test im Kernspeicher jeder PDP-1 bei der Auslieferung hinterlegt.
Über eine PDP-11 auf der Spacewar in einem Cafe in _Stanford lief, kam es z.B. zur Gründung von Atari.

Das lässt sich über mehrere Jahrzehnte fortsetzen, also ja vom ürsprünglichen Wortsinn her sind die besten "Hacker" die besten Programmierer.

Auch heute noch sind Hacker (nicht skript Kiddies) diejenigen die sich so in die Technik von Systemen vertiefen, das sie teilweise bessere Systemkenntniss als die Entwickler erlangen. und um so in ein womöglich abgesichertes System vorzudringen muß man halt auch ganz gut programmieren können und nicht nur einen Werkzeug Baukasten bedienen können.

Wobei ich zustimme, ja die Eingangsfrage dürfte rein Rethorisch gewesen sein.
Und da der TO sich einen Tag nach dem Post das letzte mal im Forum angemeldet hat, interessieren Ihn auch die Antworten nicht.

du hast Recht, vor 50 oder 60 Jahren, quasi bei der Erfindung des Rock'n'Roll (bei dem die Hacker sicher nicht dabei waren), da gAb es eine Hacker-Bewegung an den US-Unis, und da gAlten (Imperfekt) sicher diese Hacker als gute Programmierer, und die besten Programmierer konnten sich als beste Hacker selbst beweisen.
Auch später gAb es sicher immer wieder EINIGE Hacker, die auch zu den besten Programmerern ZÄHLTEN, und umgekehrt.
Heute allerdings zähle ich zu den Hackern auch die, die sich in fremde System einhacken, Trojaner platzieren, Email-Passwörter und Firmen-Datenbanken und Parteikonten anzapfen, löschen oder veröffentlichen, und auch wenn die alle sicher nicht ganz ungeschickt sind, bin ich nicht davon überzeugt, dass diese Hacker "auch immer gleichzeitig" zu den besten Programmieren gehören (Präsens), oder anders herum, wie im TOP formuliert, dass die besten Programmierer, also auch die, die Betriebssysteme wie Unix oder Linux oder Sprachen und Frameworks wie Java oder Mono oder Datenbanken wie Oracle oder SAP programmieren...: dass von diesen besten Programmieren alle auch gleichzeitig zu den besten Hackern ZÄHLEN (Präsens).
Diese Behauptung halte ich für äußerst verwegen, und welche "Hacker" der OP nun letztendlich meint und welche er ausschließt, das schreibt er ja nun gar nicht, abgesehen davon, dass in dieser Allgemeingültigkeit die Formulierung der Frage sowieso rein suggestiv und in ihrem implizierten Aussagewert und Informationsgehalt äußerst fragwürdig und dürftig - eben maximal rhetorisch zu verstehen ist .