Entschlüsselung unbekannter Zeichenfolgen

Hallo,

ich hoffe es hat jeamnd eine Idee zu meinem Problem:

Ich habe hier durch das Auslesen von Informationen im Internet etwa 140 Zeichen lange Zeichenfolgen in der Art „pHuSWV2ZY…pBAGBk=“. Ich habe Grund zu der Vermutung, dass in diesen Zeichenfolgen ein bestimmter bekannter Wert aus der Website (Session-ID) mit enthalten ist (bei der Verschlüsselung verwendet wurde) und ein mir unbekannter eigentlich gleicher Wert bei jeder Abfrage neu verschlüsselt wird.

Das Problem ist, dass sich die Zeichenfolge zur Markierung der gleichen Stelle sich bei jedem Abruf verändert (die Session ID ist natürlich auch jedes Mal anders).

Was ich suche, ist eine Möglichkeit, daraus den gleichbleinbenden Anteil zu ermitteln, um bereits gelesene Informationen von neuen unterscheiden zu können. Dabei ist es nicht wichtig, die ursprünglich tatsächlich enthaltene Information zu entschlüsseln.

Ich habe schon an verschiedenen Stellen zur Kryptoanalyse recherchiert, aber bisher fehlt mir die zündende Idee.

Irgendwelche Anregungen ? Vielen Dank im Voraus, Jörg

Also ohne genauere Analyse ist es eigentlich schwierig da etwas draus zu erkennen, aber wenn es lediglich Buchstaben sind, würde ich erstmal mit etwas einfachem anfange: base64. Du kannst mit der Funktion base64_decode() mal schauen, ob hinter dem String dort etwas steckt. Wenn ja: Dann ist es keine richtige Verschlüsselung. Wenn nein: Dann müsstest du erstmal herausfinden, welchen Algorythmus die nutzen, die das da verschlüsseln und das ist - ohne nachzufragen - eigentlich nur möglich, wenn man weiß, wie die Daten im Inneren aussehen, da man dann über aufwendige Verfahren den Algorythmus knacken könnte - dazu bräuchte man dann aber einige Zeichenketten und die dazugehörigen Klartext-Inhalte.

Allerdings habe ich nicht ganz verstanden, was du mit der Session-ID und dem angeschauten Inhalt meinst!? Ist der String also der einzige Inhalt, der an die Seite übergeben wird? Und der ändert sich bei jedem Aufruf?

Hallo,

danke erstmal für die Antwort :smile:

Also es geht darum, dass ich verschiedene Angebote auf verschiedenen Webseiten lese (automatisiert). Viele Seiten (z.B. ebay) haben Angebotsnummern. Ich kann mir also in einer Datenbank merken: Am (Datum) gab es den Artikel (Irgendwas) zum Preis (x) vom Anbieter (y). Wenn ich mir dazu die Artikelnummer (nnn) merke, habe ich die Möglichkeit diesen Artikel bei einer späteren Abfrage wieder zu identifizieren. Also Artikel mit der Nummer (nnn) ist in der Datenbank vorhanden, wenn sich was geändert hat (Preis z. B.) liegt eine Änderung an einem bereits beobachteten Artikel vor.

Das Problem tritt nun bei Amazon auf: Es geht hier um die Marketplace Angebote: Wenn ich mir die Seite mit den Angeboten zu einem bestimmten Buch aufrufe, kann ich aus dem Quelltext der Seite zu einem einzelnen Angebot folgende Angaben extrahieren: Anbieter-Name, Anbieter-ID (eine eindeutige und wiederkehrende Zeichenfolge), Preis (klar …), eine Session ID (wird im Header und im Body übertragen, etwas so: 270-4147959-3863683) und zu jedem Artikel eine Offering ID (verkürzt: „pHuSWV2ZYOvvkPpXRG0YsrViV9k%2…vjpBAGBk%3D“). Diese ist offensichtlich URL encoded (%3D). Wenn man sie mit urldecode() behandelt, bekommt man einheitlich lange Strings mit einem „=“ am Ende. Das spricht für base64 Codierung. Leider ergibt base64_decode() auch nur Zeichensalat („FUÀîЙ…—Ȍ賊å“). Soweit war ich schon allein gekommen.

Es ist so, dass sich die Session ID und Offering ID bei jedem Aufruf (Neuladen) der Seite ändern. Ich kann also in diesem Fall die Offering ID nicht einfach als Identifizierung eines bereits gelesenen Artikels verwenden. Eine Kombination aus Verkäufer Name und / oder Preis und ISBN funktioniert nicht, da z. B. ein und derselbe Anbieter auch mehrere Exemplare des gleichen Artikels anbieten kann (das findet man bei beliebten Büchern wie z. B. Harry Potter schnell).

Amazon brauche ich nicht zu fragen, da die in dieser Hinsicht kaum kooperativ sein dürften. Ich vermute nun, dass sich in der Offering ID ein gleichbleibender Anteil (Artikel ID) und ein sich ändernder Anteil versteckt (das habe ich mir ausgedacht, weil das bedeutet, dass die Amazon Server nicht zu jeder Anfrage sich alle Details in Datenbanken merken müssten). Das muss natürlich nicht zwingend so sein, aber um es heraus zu finden, würde ich gern versuchen, diese IDs entsprechend zu analysieren. Naheliegend fände ich, dass der Server die in Website übermitteten Daten (Offering ID und Session ID) benutzt um das Angebot zu identifizieren (z. B. wenn der Artikel in den Warenkorb gelegt werden soll). Es könnten weitere Angaben darin codiert sein, wie z. B. Verkäufer Name oder ID, die sich aber nicht ändern. Ich brauche auch nicht den tatsächlichen Klartext, es würde zur Lösung der Aufgabe reichen, wenn sich aus diesen Angaben zu ein und demselben Artikel sicher bei jedem Aufruf eine gleichbleibende ID errechnen ließe.

Es ist natürlich nicht sicher, dass das funktioniert, aber ich fand die Idee der Überprüfung wert.

Also die Fragestellung: Ich habe beliebig viele Paare aus etwa 140 Byte langen Zeichenfolgen und 17 Byte langen Zahlenfolgen, die als zusammen gehörig angesehen werden. Kann ich mit einem Verfahren relativ schnell heraus finden, ob die in einer gleichbleibenden Beziehung zueinander stehen? Lese mich seit ein paar Tagen durch allerlei Websites zur Kryptoanalyse aber bis jetzt habe ich noch nichts passendes gefunden. Und im Gegensatz zu Bletchley Park (Enigma) brauche ich garnicht den originalen Inhalt…

Jörg

Also es geht darum, dass ich verschiedene Angebote auf
verschiedenen Webseiten lese (automatisiert). Viele Seiten
(z.B. ebay) haben Angebotsnummern. Ich kann mir also in einer
Datenbank merken: Am (Datum) gab es den Artikel (Irgendwas)
zum Preis (x) vom Anbieter (y). Wenn ich mir dazu die
Artikelnummer (nnn) merke, habe ich die Möglichkeit diesen
Artikel bei einer späteren Abfrage wieder zu identifizieren.
Also Artikel mit der Nummer (nnn) ist in der Datenbank
vorhanden, wenn sich was geändert hat (Preis z. B.) liegt eine
Änderung an einem bereits beobachteten Artikel vor.

Das Problem tritt nun bei Amazon auf: Es geht hier um die
Marketplace Angebote: Wenn ich mir die Seite mit den Angeboten
zu einem bestimmten Buch aufrufe, kann ich aus dem Quelltext
der Seite zu einem einzelnen Angebot folgende Angaben
extrahieren: Anbieter-Name, Anbieter-ID (eine eindeutige und
wiederkehrende Zeichenfolge), Preis (klar …)

was hälst du von webservices, apis und so kram?
http://pages.ebay.de/entwickler/api.html
http://docs.amazonwebservices.com/AWSECommerceServic…

gibt es auch schon mit zuckerguss:
http://framework.zend.com/manual/de/zend.service.ama…

Hallo,

Moin moin und ein frohes neues Jahr erstmal :wink:

danke erstmal für die Antwort :smile:

Dafür nicht.

Also es geht darum, dass ich verschiedene Angebote auf
verschiedenen Webseiten lese (automatisiert). Viele Seiten
(z.B. ebay) haben Angebotsnummern. Ich kann mir also in einer
Datenbank merken: Am (Datum) gab es den Artikel (Irgendwas)
zum Preis (x) vom Anbieter (y). Wenn ich mir dazu die
Artikelnummer (nnn) merke, habe ich die Möglichkeit diesen
Artikel bei einer späteren Abfrage wieder zu identifizieren.
Also Artikel mit der Nummer (nnn) ist in der Datenbank
vorhanden, wenn sich was geändert hat (Preis z. B.) liegt eine
Änderung an einem bereits beobachteten Artikel vor.

Das Problem tritt nun bei Amazon auf: Es geht hier um die
Marketplace Angebote: Wenn ich mir die Seite mit den Angeboten
zu einem bestimmten Buch aufrufe, kann ich aus dem Quelltext
der Seite zu einem einzelnen Angebot folgende Angaben
extrahieren: Anbieter-Name, Anbieter-ID (eine eindeutige und
wiederkehrende Zeichenfolge), Preis (klar …), eine Session
ID (wird im Header und im Body übertragen, etwas so:
270-4147959-3863683) und zu jedem Artikel eine Offering ID
(verkürzt: „pHuSWV2ZYOvvkPpXRG0YsrViV9k%2…vjpBAGBk%3D“).
Diese ist offensichtlich URL encoded (%3D). Wenn man sie mit
urldecode() behandelt, bekommt man einheitlich lange Strings
mit einem „=“ am Ende. Das spricht für base64 Codierung.
Leider ergibt base64_decode() auch nur Zeichensalat
(„FUÀîЙ…—Ȍ賊å“). Soweit war ich schon allein gekommen.

Hier würde ich wie mein Vorredner auch die API von Amazon benutzen, denn genau dafür sind diese Services ja da.

Es ist so, dass sich die Session ID und Offering ID bei jedem
Aufruf (Neuladen) der Seite ändern. Ich kann also in diesem
Fall die Offering ID nicht einfach als Identifizierung eines
bereits gelesenen Artikels verwenden. Eine Kombination aus
Verkäufer Name und / oder Preis und ISBN funktioniert nicht,
da z. B. ein und derselbe Anbieter auch mehrere Exemplare des
gleichen Artikels anbieten kann (das findet man bei beliebten
Büchern wie z. B. Harry Potter schnell).

Ich vermute, dass es sich bei der Offering-ID nicht um die ID des Artikels handelt, sondern eher um die angezeigten Artikel bei „Kunden, die diesen Artikel gekauft haben haben auch folgende Artikel gekauft“ (oder so ähnlich). Das würde in meinen Augen deutlich eher einen Sinn ergeben. Da sich diese Angabe wahrscheinlich an ihrem Such-Verhalten auf Amazon und der sich stetig ändernden Statistik unterliegt, wird die ID der Angebote vermutlich jedes Mal neu errechnet oder was weiß ich, was dahinter steht. Ich bezweifle jedenfalls, dass es etwas mit dem Artikel ansich zu tun hat.

Amazon brauche ich nicht zu fragen, da die in dieser Hinsicht
kaum kooperativ sein dürften. Ich vermute nun, dass sich in
der Offering ID ein gleichbleibender Anteil (Artikel ID) und
ein sich ändernder Anteil versteckt (das habe ich mir
ausgedacht, weil das bedeutet, dass die Amazon Server nicht zu
jeder Anfrage sich alle Details in Datenbanken merken
müssten). Das muss natürlich nicht zwingend so sein, aber um
es heraus zu finden, würde ich gern versuchen, diese IDs
entsprechend zu analysieren. Naheliegend fände ich, dass der
Server die in Website übermitteten Daten (Offering ID und
Session ID) benutzt um das Angebot zu identifizieren (z. B.
wenn der Artikel in den Warenkorb gelegt werden soll). Es
könnten weitere Angaben darin codiert sein, wie z. B.
Verkäufer Name oder ID, die sich aber nicht ändern. Ich
brauche auch nicht den tatsächlichen Klartext, es würde zur
Lösung der Aufgabe reichen, wenn sich aus diesen Angaben zu
ein und demselben Artikel sicher bei jedem Aufruf eine
gleichbleibende ID errechnen ließe.

Hier habe ich einen Anhalt: Die ID eines Artikels befindet sich in der URL. Als Beispiel:

http://www.amazon.de/Kosmos-6930150-Die-Siedler-Cata…

Das ist der Link zu „Die Siedler von Catan“. Alles ab dem „ref=[…]“ kann man getrost vergessen, das sind Parameter, die mit dem Artikel selber nichts zu tun haben.
Direkt nach www.amazon.de/ folgt einmal der Titel des Artikels, der in diesem Fall einfach nur etwas mit der Suchmaschinen-Optimierung zu tun hat.
Und jetzt wird es interessant: Das dp/ und der danach folgende String sind die ID des Artikels. Man kann den ersten Teil auch einfach weglassen und statt der obigen URL einfach nur:

http://www.amazon.de/dp/3440693015/

schreiben und kommt trotzdem zum Artikel. Hier wird vermutlich mit mod_rewrite oder einer ähnlichen Technik gearbeitet, um aus dieser „Pfadangabe“ einen Parameter zu machen. Der Parameter heißt also dp und der Inhalt ist der nachfolgede String. Dieser besteht manchmal auch aus einer Kombination von Zahlen und Buchstaben, in diesem Beispiel ist es jedenfalls nur eine Zahl.

Ich hoffe, dass das weitergeholfen hat, wenn du weiterhin manuell in den Artikeln rumwerkeln möchtest!?

Es ist natürlich nicht sicher, dass das funktioniert, aber ich
fand die Idee der Überprüfung wert.

Also die Fragestellung: Ich habe beliebig viele Paare aus etwa
140 Byte langen Zeichenfolgen und 17 Byte langen Zahlenfolgen,
die als zusammen gehörig angesehen werden. Kann ich mit einem
Verfahren relativ schnell heraus finden, ob die in einer
gleichbleibenden Beziehung zueinander stehen? Lese mich seit
ein paar Tagen durch allerlei Websites zur Kryptoanalyse aber
bis jetzt habe ich noch nichts passendes gefunden. Und im
Gegensatz zu Bletchley Park (Enigma) brauche ich garnicht den
originalen Inhalt…

Jörg

Viel Erfolg und beste Grüße
Lutz

Auch Moin und frohes Neues,

Das mit den APIs sehe ich mir mal näher an, das wird ein paar Tage dauern. Ist auf jeden Fall ein interessanter Hinweis in eine neue Richtung.

Was der Reiz an der Auslese der Websites ist:

  • Ich bin nicht auf das Wohlwollen der Seitenbetreiber angewiesen und zeige denen nicht ganz so nachvollziehbar, was ich mache. Gerade zu Amazon gibt es da auch kritische Stimmen.
  • Das ist nur eine Website von Mehreren. Ich benutze ein eigenes Projekt zum Ausprobieren für weiterführende Projekte. Nicht jeder Website Betreiber ist so „zugänglich“ wie Amazon oder ebay.
  • Wenn man fremde Websites analysiert lernt man auch was (und findet haufenweise Fehler …)
  • Es reizt mich persönlich eine Lösung zu finden. (Herausforderung). Zudem ich schon ganz schön weit gekommen bin bisher.

Zu deinen Hinweisen:

  • Unter
    http://www.amazon.de/gp/offer-listing/3551555559/
    bekommst du eine Liste der Marketplace Angebote für ein bestimmtes Buch. Die letzten Ziffern sind die ISBN, kann man einfach austauschen und bekommt die entsprechenden Listen zum jeweiligen Buch, wenn Angebote vorliegen. Bei den IDs geht es darum, die einzelnen Artikel der einzelnen Anbieter zu unterscheiden. Irgendwie muss der Server ja unterscheiden, ob du das Buch von Anbieter 1, 2 oder sonstwem kaufen willst. Die liegen auch hinter dem Button „In den Einkaufswagen“.
  • Amazon ist ja bekannterweise ziemlich gut darin, auch bei abgeschalteten Cookies und ohne Javascript trotzdem noch zu funktionieren. Daher sind sie aber darauf angewiesen, die Daten in die Links, hidden Formularfelder oder input Bereiche mit einzubauen. Das ist zum Einen technisch interessant (bin ein Fan von Seiten, die immer funktionieren, soweit das technisch machbar ist), aber deswegen bin ich auch ziemlich sicher, dass es was mit dem speziellen Angebot zu tun hat und nicht mit irgendwelchen Sachen, wie Empfehlungen, andere Kunden kauften etc.
  • Was du beschreibst, ist „wie komme ich zum Amazon Angebot“, mir geht es um die Marketplace Angebote von Dritten. Und die müssen irgendwie unterschieden werden können (für meine Auswertung genauso, wie für den Amazon Server). Und wenn du mal genau hin siehst: Auf Seite 1 der Suche oben (Link) (Harry Potter Bd 1) gibt es ein Angebot von Medimops für 12,94. Auf Seite 6 gibt es ein gleich aussehendes Angebot noch mal (gleicher Anbieter, gleicher Preis). Der hat mehrere Exemplare, die er zum gleichen Preis anbietet. Amazon muss die unterscheiden können. Interessant ist übrigens, dass Amazon die Listen so gestaltet, dass nicht ein Anbieter 10x auf den vorderen Plätzen erscheint, sondern erstmal andere und die evtl. sogar günstigeren weiteren Angebote weiter hinten (letzte oder vorletzte Seite). Tatsächlich ist die genannte Offering ID das unterscheidende Merkmal, wenn man die Site analysiert

Ich erzeuge mir eine temporäre Kopie der Website und extrahiere den eigentlichen HTML Anteil (sogar mit einfacher Validierung des HTML). Wenn ich darin die Formulardaten etwas „umbiege“ (Ich ersetze die Form method durch GET und gebe als Ziel eine eigene PHP Seite an), dann bekomme ich genau diese vorher beschrieben offering.id als Get (oder auch Post) Daten übermittelt, wenn ich einen Artikel in den Einkaufswagen lege. Deswegen bin ich eigentlich ziemlich sicher, dass sich darin eine eindeutige Identifikation des Angebots verbirgt.

Deine Ausführungen zu den Resten der URL und mod_rewrite etc. sind sicher richtig (Stand der Technik, Suchmaschinenoptimierung und was sonst noch an technischen Gründen dafür spricht), aber wenn du Marketplaceartikel in den Einkaufswagen legst erscheint garnichts in der URL (natürlich nicht, sind ja Post Variablen), der Server weiß aber was du gerade willst. Ändert man die Websitekopie auf method=„get“ erscheint auch die ominöse offering.id in der URL.

Ich hoffe, ich habe es verständlich beschrieben, damit zumindest mein Ansatz klar wird.

Viele Grüße, Jörg

OK, ich habe mir die Webseite auch mal etwas genauer angeschaut und bin dabei ebenfalls auf die Offering-ID gestoßen.

Ich hatte deinen Beitrag erst so verstanden, dass du eine eindeutige ID zu dem Artikel selbst wolltest, aber jetzt verstehe ich etwas besser, was du eigentlich vor hast.

Meine Vermutung (oder eher Befürchtung?) ist jedoch, dass sich nicht unbedingt die Rohdaten hinter diesem Zeichen-Wirrwarr verstecken müssen. Ich selber habe einmal mit einer Technik gearbeitet, die eine Session validiert hat, um die Übernahme der Session durch Dritte zu erschweren. Dabei habe ich bestimmte Daten in der Session selbst gespeichert und einen sich bei jedem Seitenaufruf wechselnden Key übertragen. Ähnlich kann es hier sein: Die Rohdaten werden in der Session gespeichert und der Schlüssel zu diesen Daten wird in die POST-Daten gelegt. Ob das wirklich so arbeitet oder nicht sei mal dahin gestellt, aber wenn dem so sein sollte, wirst du kaum an die Details kommen. Ich weiß allerdings nicht, inwiefern die Amazon-API hier hilfreich ist, denn bisher habe ich die nicht benutzt.
Der Wechsel der ID bei jedem Seitenaufruf spricht meiner Meinung nach jedenfalls dafür, dass es sich nicht um Rohdaten handelt, sondern eher ein Schlüssel ist, über den auf im Hintergrund gespeicherte Rohdaten zugegriffen wird.

Was mir aber aufgefallen ist: Es kann natürlich mehrere Artikel eines Anbieters geben, diese werden sich aber wohl in den Details unterscheiden!? Die beiden Angebote von Medimops jedenfalls sind „Gebraucht - Gut“ und „Gebruacht - Akzeptabel“. Vielleicht ist das das entscheidende Unterscheidungsmerkmal!? Oder gibt es Anbieter, die mehrere Artikel des gleichen Artikel-Zustandes anbieten? Wäre in meinen Augen quatsch, denn weshalb sollte man soetwas machen!? Dafür gibt es doch sicher eine Funktion „Ich habe xy dieses Buches in der Qualität“…

Ich hoffe für dich, dass du eine Lösung findest!

Hallo,

danke auf jeden Fall für den Tipp. Ich denke es ist einen Versuch wert. Ich habe jetzt das mit dem Zend Framework versucht, bekomme aber leider keine Resultate.

Zend Server Community Edition runter geladen und installiert und bei AWS registriert und die Schlüssel / ID etc. erhalten. In der deutschen Version von ZF steht ich brauche einen Amazon API Key. In der englischen Version steht, der Secret Key ist zusätzlich erforderlich.

Ich habe versucht mit
$amazon = new Zend_Service_Amazon(‚AMAZON_API_KEY‘);
$amazon = new Zend_Service_Amazon(‚AMAZON_API_KEY‘, ‚DE‘, ‚AMAZON_SECRET_KEY‘);
die Beispiele aufzurufen (mit meinen Keys ersetzt), aber bekomme nur leere Antworten.

In Zend/ZendServer/logs/ finde ich php_error.log ‚Zend_Service_Amazon_Query‘ not found in ‚Zend/Apache2/htdocs/test.php‘
aber jetzt frage ich mich, wie bekomme ich die Verbindung zwischen meinem script und den Zend Funktionen. Finde leider gerade nicht die entscheidende Lösung auf der ZF Seite oder sonstwo. Brauche ich ein include (Welches) oder einen zusätzlichen Eintrag in der php.ini ?

Bin für alle Tipps dankbar. Jörg

Hast du das Script mit der Klassendefinition für Zend_Service_Amazon_Query eingebunden? Es sieht nämlich ganz danach aus, als würde einfach nur die Klasse fehlen (von der Fehlermeldung her)!? Die Original-Fehlermeldung für fehlende Klassen sieht zwar anders aus, aber wer weiß wie das ZendFramework mit Exceptions umgeht. Ich würde einfach mal statt ‚Zend/Service/Amazon.php‘ die Datei ‚Zend/Service/Amazon/Query.php‘ einbinden (die Einbindung von ‚Zend/Service/Amazon.php‘ erfolgt dann automatisch!) und schauen, ob es dann läuft!?