Not logged inCSS-Forum
Forum CSS-Online Help Search Login
CSS-Shop Impressum Datenschutz
Up Topic Hauptforen / CSS-Forum / Reverse Engineering
- - By Arno Nickel Date 2012-01-09 17:18
In einem geplanten Artikel habe ich folgende Fußnote vorgesehen, die ich von kompetenter Seite (Informatiker?!) um Überprüfung hinsichtlich Richtigkeit bitte:

Code:
Man kann durch "reverse engineering" zwar nicht den eigentlichen Programmcode 1:1 entschlüsseln, aber eine in weiten Teilen ziemlich genaue Kopie nachbilden.

Die Darstellungen, die ich im Zusammenhang mit der Rybka-Story und sog. Rybka-Clones im Netz gelesen habe, erscheinen mir widersprüchlich. Manche erwecken den Anschein oder behaupten gar, der Programmcode (Quellcode) von Rybka-Versionen sei durch die Ippolit-Leute (oder schon vorher durch Osipov) entschlüsselt worden, andere argumentieren in der (mir einleuchtenden) Richtung, wie oben zitiert. Da ich diesbezüglich ein technischer Laie bin, bitte ich hier kurz um einen Gegencheck. (Vielleicht sind die Antworten ja auch für andere aufschlussreich.)

Arno
Parent - - By Ingo Althöfer Date 2012-01-09 17:24
Lieber Herr Nickel,

[quote="Arno Nickel"]
In einem geplanten Artikel habe ich folgende Fußnote vorgesehen, die ich von kompetenter Seite (Informatiker?!) um Überprüfung hinsichtlich Richtigkeit bitte:

Code:
Man kann durch "reverse engineering" zwar nicht den eigentlichen Programmcode 1:1 entschlüsseln, aber eine in weiten Teilen ziemlich genaue Kopie nachbilden.

[/quote]

Der Begriff "Kopie" im zweiten Teil des Satzes ist irreführend bzw. sogar falsch.

Ich würde die Fussnote wie folgt formulieren:

> Durch "reverse engineering" kann man nicht den Programmcode 1:1 entschlüsseln.
> Man erhält aber ein Programm, was sich (im Idealfall) genau so verhält wie das
> ursprüngliche Programm.

Ingo Althöfer.
Parent - - By Michael Scheidl Date 2012-01-09 17:31
Das Computerschach erlebt derzeit eine derartige Glaubensspaltung, daß ich niemandem (auch keinem auf akademischen Niveau sich bewegenden) raten würde, in dieser Frage eine klare Stellung zu beziehen. Denn wenn er das tut - egal in welche Richtung - wird er von ca. 45%...55% der Szene verteufelt werden.
Parent - By Thorsten Czub Date 2012-01-09 18:40
wenn ich damals fuer die css einen artikel ueber den leonardo geschrieben habe nannte mich die "gegenseite" thorsten saitek. novag leute riefen erbost bei mir oder frederic an un drohten samit anzeigen zu stornieren weil ich es wagte novag forte a oder b zu kritisieren.

ich finde das ganz normal was hjer abgeht. so in etwa entstehen streits und fehden wenn die anhaenger der volksfront judaea sich mit der judaeischen volksfront streiten.

es war im computerschach m.e. nie friedlich. irgendein affentanz war immer.
vielleicht sind schachspieler psychopathen, oder der mensch an sich ist so veranlagt.

nun wird klar wie religionskriege oder glaubenskriege entstehen.

der mensch ist ein raubtier
Parent - - By Benno Hartwig Date 2012-01-09 21:25 Edited 2012-01-09 21:34
[quote="Michael Scheidl"]Das Computerschach erlebt derzeit eine derartige Glaubensspaltung, daß ich niemandem (auch keinem auf akademischen Niveau sich bewegenden) raten würde, in dieser Frage eine klare Stellung zu beziehen. Denn wenn er das tut - egal in welche Richtung - wird er von ca. 45%...55% der Szene verteufelt werden.[/quote]Gut gesagt.
Als ich mal nach der Begründung für einen zu diese Thema ultiativ vorgetragenen Standpunkt fragte,
und als ich dann wagte zu sagen, das mich die Begründung nicht überzeugte,
wurde ich erstmal rüde beschimpft,
und mir wurde beschieden, dass man mir aber deutlich ansieht, dass ich wohl noch niemals irgendwas programiert haben.
(Das hatte ich dann erstmal einfach zur Kenntnis genommen.)

Disassemblieren lässt sich so ein Programm wohl schon.
Und mit Glück vielleicht auch automatisiert zu etwas machen, was C-Syntax genügt.
Aber wie groß die (Un)Ähnlichkeit zu der original-Source dann sein kann, weiß ich nicht. sorry.

Benno

PS:
http://de.wikipedia.org/wiki/Decompiler beschreibt:
"Der gewonnene Quellcode hat in gewissen Grenzen Ähnlichkeit mit der Ursprungsfassung des Quellcodes, der zur Erzeugung des ausführbaren Programms benutzt wurde. Wenn in diesem ausführbaren Programm zusätzlich noch Debuginformationen gespeichert sind, dann können oft sogar die vom ursprünglichen Autor verwendeten Variablennamen, Funktionsnamen und Module wieder zurückgewonnen werden."
Vermutlich wird für das Dekopilieren aber wohl keine Debug-Version zur Verfügung stehen.
Es sei denn, z.B. Vas hat eine beta-Version zusammen mit deiner Debug-Version irgendjemandem vertrauenswürdig-Erscheinenden zum Test in die Hand gedrückt.
(Denkbar: Ippollit als derart geknackte R4-beta?)
Parent - - By Peter Martan Date 2012-01-10 06:13 Edited 2012-01-10 06:21
Benno, du bist mir da ein Quelle, das hast du jetzt davon!

Ich hoffe aber übrigens auch wieder sehr auf Thomas Mayer, der sich schon das eine oder andere Mal zu diesen Dingen geäußert hat, vielleicht könntest du den Riis- Artikel doch auch noch einmal kurz kommentieren, Thomas?

Sehe ich das richtig, was ja auch Riis gerade wieder so ähnlich schreibt, dass die Aufgabe, ein so komplexes Programm zu dekompilieren, ohne Vergleichssourcen gar keine Chance hat?
Hat er damit irgendwie dann jedenfalls recht, dass das Ergebnis sehr davon abhängen wird, wie man an das herangeht, was man als reversed engineered code erhält?
Würde es nicht zwangsläufig Fruit- ähnlich, wenn man als Grundlage der Interpretation Fruit verwendet?
Kann man das vermeiden, kommt man ohne vorhandenen code aus?
Nimmt man aus naheliegenden Gründen Fruit, in wie weit ist man dann von vornherein biased?

Ich weiß, ich bin selbst schon wieder tendenziös, aber müsste man nicht eigentlich, wenn man insbesonders mit meinem minimen Wissen an sowas herangeht, den Irrtum aktiv auszuschließen versuchen, um ihn nicht automatisch zu begehen?

Das im Zweifel für den Angeklagten, in diesem Fall das angeklagte Programm, müsste das hier nicht dazu zwingen, die Ähnlichkeiten, die durch einen bestimmten Prozess, der nicht anders als durch Vergleich Ergebnis liefert, mit anderen Programmen vergleichen, als mit dem allein, von dem man beweisen, nein eigentlich ausschließen will, dass es kopiert wurde?

Wurde deiner Meinung nach im ICGA Panel wirklich sorgfältig genug ein solches Ausschlussverfahren angewendet, oder hat man nur nach Indizien gesucht, um eine Anklage zu untermauern?
Das wäre nämlich für mich jedenfalls auch absolut kein wissenschaftliches Vorgehen gewesen, sondern einfach eine kriminaltechnische Untersuchung, CSI pur.
In diesem Fall kann man dann aber nicht einfach durch Abstimmung beurteilen lassen, inwiewiet die zusammengetragenen Indizien ausreichen, eine Abstimmung unter mehr oder weniger informierten und teilweise desinteressierten Mitgliedern, von denen man noch als bestes Abstimmverhalten die Enthaltung erhoffen kann, bei denen, dich nicht zu einem selbständigen Urteil kommen, .

Ja, für eine Anklage mag das noch reichen, bräucht aber juristischer Weise auch noch einen Stattsanwalt, es reicht aber jedenfalls absolut nicht für eine Verurteilung, nicht nach öffentlichen Recht, Vereinsrecht spielt in dem Zusammenhang einfach keine Rolle mehr.
Das ist ja das wirkliche Dilemma der ICGA mit der Sache, die hat jetzt in erster Linie damit zu kämpfen, die Verantwortung wieder abgeben zu dürfen, will sie weiter irgendwie öffentlich akzeptierte Turniere.

Ich muss wirklich mehr und mehr darauf drängen, dass die FSF, die ja ganz offenbar schon vor längerer Zeit damit befasst wurde, irgend eine Stellungnahme dazu abgibt!
Tut sie das nicht, spricht das dann nicht erst recht eine deutliche Sprache?
Parent - - By Thomas Mayer (Quark) Date 2012-01-10 13:36
[quote="Peter Martan"]
Ich hoffe aber übrigens auch wieder sehr auf Thomas Mayer, der sich schon das eine oder andere Mal zu diesen Dingen geäußert hat, vielleicht könntest du den Riis- Artikel doch auch noch einmal kurz kommentieren, Thomas?[/quote]

Hallo Peter,

nein, möchte ich nicht - da ich mir sonst wieder seitenweise Unsinn von ein und derselben Person (nicht Dir) anhören muß, möchte ich zu diesem unsäglichen Thema zumindest im deutschsprachigen Raum nichts mehr sagen.

Gruß, Thomas
Parent - By Peter Martan Date 2012-01-10 15:19
Danke, Thomas, das reicht mir dann ohnehin als Antwort, wenn ich auch noch im CCC was dazu lese.
Parent - By Arno Nickel Date 2012-01-09 18:15
Besten Dank. Diese Korrektur leuchtet mir ein. Ich habe das Wort Kopie sehr umgangssprachlich verwendet.

Gruß, Arno
Parent - - By Wolfram Bernhardt Date 2012-01-09 20:58
Hallo!

Ja, mit "reverse engineering" ist das schwierig. Ich versuche mal eine Analogie ohne Computer:

Jemand rührt seinem Rezept (Programmcode) einen Teig an, dann haut er ihn in die Pfanne und brät ihn zu etwas Leckern (Vorgang des Compilierens mit dem Ergebnis "ausführbares Programm.
Jemand anders nimmt nun dieses Leckere, analysiert es weiss am Ende im Grunde, was drin ist und kann es mit viel Geschickt sogar selbst herstellen.
Aber: Ihm fehlt immer noch das original-Rezept und so kann er das original-Rezept auch nicht varieren, sondern nur das Ergebnis seiner Analyse.

Viele Grüße,
     Wolfram
Parent - - By Olaf Jenkner Date 2012-01-09 23:05
Das Beispiel hinkt.
Der Compiler übersetzt die Logik des Programms in die Maschinensprache.
Damit bleibt die Logik exakt erhalten, ansonsten würde das Programm nicht Schach spielen.
Da man die vollständige Logik in Maschinensprache hat, kriegt man diese auch
wieder als C-Code zurück. Sie sieht nur etwas anders aus, wahrscheinlich für Menschen
schwer lesbar und unstrukturiert. Die Variablen haben keine Namen, sondern Nummern,
was wohl noch das geringste Problem ist.
Aus einem Kuchen das Rezept zu zaubern, geht einfach nicht. Man kriegt höchstens
die Inhaltsstoffe raus, aber keinen Algorithmus, was in welcher Reihenfolge beim
Backen passieren muß.
Parent - - By Peter Martan Date 2012-01-10 06:26 Edited 2012-01-10 06:34
[quote="Olaf Jenkner"]
Aus einem Kuchen das Rezept zu zaubern, geht einfach nicht. Man kriegt höchstens
die Inhaltsstoffe raus, aber keinen Algorithmus, was in welcher Reihenfolge beim
Backen passieren muß.
[/quote]

Ha, Olaf!

Dass ich dich dazu noch nicht anzuzapfen versucht habe, war reine Rücksichtnahme!

Ist der Riis-Artikel im Kern wahr, ist mit Fruit als Vergleichssource das Dekompilieren automatisch Fruit ähnlich zu beurteilen, kann man das vermeiden und wie?
Geht es ohne Programm, von dem man weiß oder annimmt, dass es so ähnlich tickt?
Wie viele Vergleichsprogramme müsste man hernehmen, damit man wieder irgendwie von randomized reden könnte?
Sollte die FSF nicht endlich was dazu sagen?
Entschuldige bitte.
Parent - By Olaf Jenkner Date 2012-01-10 21:00
Ich kann dir keine Frage beantworten, weil ich bisher immer nur vorwärts kompiliert habe. Von Schachspielprogrammen verstehe ich auch nichts, habe nicht mal eins.
Parent - - By Wolfram Bernhardt Date 2012-01-10 09:50
[quote="Olaf Jenkner"]
Das Beispiel hinkt.
Der Compiler übersetzt die Logik des Programms in die Maschinensprache.
Damit bleibt die Logik exakt erhalten, ansonsten würde das Programm nicht Schach spielen.
Da man die vollständige Logik in Maschinensprache hat, kriegt man diese auch
wieder als C-Code zurück. Sie sieht nur etwas anders aus, wahrscheinlich für Menschen
schwer lesbar und unstrukturiert. Die Variablen haben keine Namen, sondern Nummern,
was wohl noch das geringste Problem ist.
Aus einem Kuchen das Rezept zu zaubern, geht einfach nicht. Man kriegt höchstens
die Inhaltsstoffe raus, aber keinen Algorithmus, was in welcher Reihenfolge beim
Backen passieren muß.
[/quote]

Hallo!

Ja, ein wenig hinkt das Beispiel. Allerdings auch wieder nicht so sehr: Die Logik bleibt beim Compilieren erhalten, allerdings gibt es durchaus unterschiedliche Compilate, wie der gelegentliche Hype um den einen oder anderen "Compilier-Experten" zeigt. Dort werden eindeutig aus demselben Rezept verschiedene Varianten.

Und Dein letzter Absatz unterstreicht nochmal, was ich sagen wollte: Genauso wenig wie man aus einem Kuchen das Rezept zurückgewinnen kann, bekommt man aus Maschinencode den echten Quelltext. Denn neben den oft wichtigen, erklärenden Variablennnamen fehlen auch Kommentare und Erklärungen - die sind aber ein ganz entscheidender Bestandteil des Codes.

Es gibt nicht wenige Leute , die vertreten die Ansicht, das Verhältnis von Kommentarzeilen zu Anweisungszeilen solle sogar 2:1 sein. Da ginge mir zu weit und ist mir zu pauschal bei den ganzen Programmiersprachen, die es gibt. Aber zum Verständnis (und eben zur Weiterentwicklung von Schachengines) tragen sie enorm bei.

Viele Grüße,
    Wolfram
Parent - By Benno Hartwig Date 2012-01-10 13:31
[quote="Wolfram Bernhardt"]Und Dein letzter Absatz unterstreicht nochmal, was ich sagen wollte: Genauso wenig wie man aus einem Kuchen das Rezept zurückgewinnen kann, bekommt man aus Maschinencode den echten Quelltext. Denn neben den oft wichtigen, erklärenden Variablennnamen fehlen auch Kommentare und Erklärungen - die sind aber ein ganz entscheidender Bestandteil des Codes.[/quote]Wichtig ist wohl auch die Wirkung des Optimizers bei der EXE-Erzeugung.
Wo in der Source ein Prozeduraufruf stehen kann, kann der Optimizer entscheiden, das aus Tempogründen direkt einzubetten.
Wo eine kurze Schleife durchlaufen wird, kann der Optimizer entscheiden, die Statements lieber ausdrücklich zu setzen.
Reihenfolgen der Abarbeitung können geändert werden. (vermutlich noch manches mehr)
Der Optimizer will gleiche Funktionalität erzeugen, baut dafür dann aber die Logik entsprechend seiner Analysen um, und das Ergebnis wird dann in Maschinencode gegossen.

"Baue die Logik so um, dass das Executable schnell wird, auch wenn es dafür etwas größer werden muss!" ist hier halt der Auftrag an die EXE-Erzeugung.
Und solch eine EXE will man dann für das Reverse Engineering benutzen.
Schwierig.

Aber es wird daran gearbeitet, und es ist wohl auch manches heute möglich:
http://boomerang.sourceforge.net/cando.php?hidemenu (sieht schon noch etwas verquast aus)
http://www.remotesoft.com/salamander/ (hier ist wohl auch noch einige Nacharbeit nötig)
http://www.german-sales.com/hex-rays-decompiler.htm (kann es vielleicht schon besser)
http://www.codeproject.com/KB/cpp/reversedisasm.aspx (auch interessant)
Welche Tools werden hier und darüber hinaus ggf. besonders empfohlen?

Benno
Parent - By Peter Martan Date 2012-01-10 06:27 Edited 2012-01-10 06:31
Also ich als Nichtprogrammierer finde den Vergleich einfach goldig, natürlich hinkt er wie jeder solche, danke trotzdem dafür, Wolfram!
Dabei scheint mir das der Kernsatz:
Zitat:
Jemand anders nimmt nun dieses Leckere, analysiert es weiss am Ende im Grunde, was drin ist und kann es mit viel Geschickt sogar selbst herstellen.
Up Topic Hauptforen / CSS-Forum / Reverse Engineering

Powered by mwForum 2.29.3 © 1999-2014 Markus Wichitill