Forum: Mikrocontroller und Digitale Elektronik Prozessortyp in einem SoC herausfinden


von Thomas W. (thomas_v2)


Angehängte Dateien:

Lesenswert?

Hallo,
ich habe hier eine Siemens SPS S7 1200 die ich als defekt erstanden und 
dann repariert habe.

Jetzt würde ich aus Neugier gerne herausfinden was für ein Prozessor da 
innendrin werkelt.
Mit der Bezeichnung auf dem Haupt-IC findet man keine weiteren 
Informationen, ich gehe darum davon aus dass es ein speziell gefertigter 
IC ist.
Selbst Siemens wird hier aber nicht das Rad komplett neu erfinden, 
sondern als Prozessor wird dort irgendetwas übliches wie z.B. ein ARM 
werkeln.

Der eigentliche Anwendungscode der von der zugehörigen 
Programmiersoftware in die laufende Steuerung hochgeladen wird habe ich 
schonmal abgehört, das
scheint aber kein (zumindest mir bekannter) Assembler zu sein sondern 
eine Art Zwischencode der vom Prozessor interpretiert wird.

Ein Firmwareupdate habe ich mir auch schonmal mit einem Hex-Editor 
angesehen, aber damit komme ich nicht weiter.
Wobei ich dort bisher nur nach dem Vorkommen von Zeichenketten und 
verdächtigen Texten gesucht habe.

Im Anhang Fotos der Hauptplatine mit den Bezeichnungen auf den 
Bauteilen.

Gibt es vielleicht Dinge (Anbindung des externen Speichers etc.) woran 
man verschiedene Prozessortypen erkennen kann?

von adsf (Gast)


Lesenswert?

Firmware wäre wohl der beste Ansatz zum rausfinden, falls die nicht 
verschlüsselt ist. Ansonsten könnte ich mir schon vorstellen, dass das 
ne Eigenentwicklung ist, die machen sowas ja schon ne Weile...

von Thomas W. (thomas_v2)


Lesenswert?

Also komplett verschlüsselt wohl nicht, zumindest finden sich einige 
Strings von Dateipfaden zu den Quelldateien wieder. Vielleicht sind 
andere Teile aber doch verschlüsselt, es wurde in der Vergangenheit über 
ein Firmwareupdate ja mal ein hardcodiertes Passwort herausgefunden, 
vielleicht sind die darum etwas vorsichtiger ;-)

Wobei es längere Strings gibt die nach 8 Bytes immer durch ein 0xff 
getrennt sind, wie auch welche die das nicht aufweisen.
Die Ursprungsdatei ist Intel-Hex codiert, die ich erstmal 1:1 in Binär 
zurückgewandelt habe. Vielleicht sind das nur Artefakte der Wandlung.

Ich habe momentan nur keinen Ansatz wie ich in der Firmware nach 
Kennzeichen suchen kann.
Eine Idee die ich hätte, wäre nach öfters vorkommenden Byte-Reihenfolgen 
zu suchen, um damit auf Dinge wie Funktionsaufrufe schließen zu können. 
Wenn die Firmware in C++ geschrieben wurde, muss man da doch bestimmte 
Muster erkennen können.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Vermutlich als ein ASIC von Fujitsu hergestellt. Mich würde aber mal der 
I/O-Schutz interessieren. Ist der auf einer anderen Platine?

Ich meine mich auch zu erinnern, daß Siemens erst diverse Generationen 
von normalen Prozessoren verwendete und dann auf eine direkte 
Implementierung als VM in Hardware umstieg.

von Thomas W. (thomas_v2)


Lesenswert?

Abdul K. schrieb:
> Vermutlich als ein ASIC von Fujitsu hergestellt. Mich würde aber mal der
> I/O-Schutz interessieren. Ist der auf einer anderen Platine?

Der I/O Krams ist auf einer anderen Platine, von der kann ich später 
gerne mal Fotos machen.
Die Spannungsversorgung ist auf einer weiteren Platine, da war auch der 
Defekt (wurde fälschlicherweise an 230V AC statt an 24 V DC 
angeschlossen).

> Ich meine mich auch zu erinnern, daß Siemens erst diverse Generationen
> von normalen Prozessoren verwendete und dann auf eine direkte
> Implementierung als VM in Hardware umstieg.

Das war bei den S7 300 so. Da gab es Varianten welche MC7 (quasi der SPS 
Assembler) von Hause aus sprechen, Nachbauten gibt es z.B. von Vipa 
käuflich zu erwerben.
Die 1200 ist aber eine komplett neue (Low-Cost)-Steuerung welche kein 
MC7 kann.

von Thomas W. (thomas_v2)


Angehängte Dateien:

Lesenswert?

Im Anhang die Fotos von dem I/O Board. Leider kann man auf denen die 
Bezeichnungen nicht wirklich erkennen.

Ich habe mal einen Musterzähler über das das ca. 1MB große 
Firmwareupdate  laufen lassen.

Bei 8 Byte Größe sind dieses die 15 häufigsten:
Vorkommen: 381 - Data: e92d0002e10f1000
Vorkommen: 381 - Data: 2d0002e10f1000e3
Vorkommen: 381 - Data: 1080e121f001e8bd
Vorkommen: 381 - Data: 80e121f001e8bd00
Vorkommen: 381 - Data: e121f001e8bd0002
Vorkommen: 272 - Data: e5940000e3500000
Vorkommen: 248 - Data: 21f001e8bd0002e5
Vorkommen: 243 - Data: 0000d3a00001dbff
Vorkommen: 232 - Data: 184000c1184000c0
Vorkommen: 228 - Data: 0002e10f1000e3c1
Vorkommen: 228 - Data: 02e10f1000e3c110
Vorkommen: 228 - Data: e10f1000e3c11080
Vorkommen: 228 - Data: 0f1000e3c11080e1
Vorkommen: 228 - Data: 1000e3c11080e121
Vorkommen: 228 - Data: 00e3c11080e121f0

Bei 16 Bytes diese:
Vorkommen: 228 - Data: e92d0002e10f1000e3c11080e121f001
Vorkommen: 228 - Data: 2d0002e10f1000e3c11080e121f001e8
Vorkommen: 228 - Data: 0002e10f1000e3c11080e121f001e8bd
Vorkommen: 228 - Data: 02e10f1000e3c11080e121f001e8bd00
Vorkommen: 228 - Data: e10f1000e3c11080e121f001e8bd0002
Vorkommen: 153 - Data: e92d0002e10f1000e3811080e121f001
Vorkommen: 153 - Data: 2d0002e10f1000e3811080e121f001e8
Vorkommen: 153 - Data: 0002e10f1000e3811080e121f001e8bd
Vorkommen: 153 - Data: 02e10f1000e3811080e121f001e8bd00
Vorkommen: 153 - Data: e10f1000e3811080e121f001e8bd0002
Vorkommen: 152 - Data: 0f1000e3811080e121f001e8bd0002e5
Vorkommen: 119 - Data: e5940000e2400001e5840000e5940000
Vorkommen: 119 - Data: 940000e2400001e5840000e5940000e3
Vorkommen: 119 - Data: 0000e2400001e5840000e5940000e350
Vorkommen: 119 - Data: 00e2400001e5840000e5940000e35000

Jetzt müsste man nur noch möglichst viele Compileroutputs von 
Vergleichsarchitekturen finden.

von (prx) A. K. (prx)


Lesenswert?

Nativen ARM Code erkennt man an einer Häufung von 32-Bit Worten der Form 
Exxxxxxx. Die meisten Codeworte eines Programms sehen so aus, weil 
E=unconditional. Allerding muss man bei einer solchen Analyse erst 
einmal rauskriegen, ob big- oder little-endian.

von Reinhard Kern (Gast)


Lesenswert?

Hallo,

am aussichtsreichsten wäre es wohl, den Anfang der Firmware durch alle 
verfügbaren Disassembler zu jagen, ob was vernünftiges rauskommt; 
schliesslich fangen alle Programme ähnlich an, z.B. DI JMP...

Ist leider sehr mühsam.

Thomas W. schrieb:
> Ich habe mal einen Musterzähler über das das ca. 1MB große
> Firmwareupdate  laufen lassen.

Ja, Statistiken wären auch eine gute Möglichkeit, aber dazu bräuchte man 
Vergleichsstatistiken von jedem in Frage kommenden Prozessor, über 
möglichst viele Projekte gebildet, sonst sagt das nichts aus. Woher 
nehmen? Schon möglich, dass es irgendwo Profiabteilungen gibt, die sich 
sowas erarbeitet haben, dann wäre die Analyse auf Knopfdruck möglich. 
Aber da müsste man wohl bei Spezialisten für Industriespionage und bei 
Geheimdiensten suchen. Lass mal deine Beziehungen spielen.

Gruss Reinhard

von Thomas W. (thomas_v2)


Lesenswert?

A. K. schrieb:
> Nativen ARM Code erkennt man an einer Häufung von 32-Bit Worten der Form
> Exxxxxxx. Die meisten Codeworte eines Programms sehen so aus, weil
> E=unconditional. Allerding muss man bei einer solchen Analyse erst
> einmal rauskriegen, ob big- oder little-endian.

Dem muss ich mal nachgehen, denn zumindest habe ich viele Werte nach dem 
Muster.

Mein Ansatz war Assembler Konstrukte wie
1
xor eax, eax
bei x86 zu finden.

Ich habe meine Analyse mal in 2-Byte Mustern über calc.exe laufen 
lassen. Dort kommt diese Anweisung aber erst an 104. Stelle der 
häufigsten Muster.
Am häufigsten sind hingegen die nops. Wobei ich ein Muster immer (zur 
Zeit noch) byteweise überprüfe, wenn mal 10 nops hintereinander stehen 
werden diese 9 mal als Muster gewertet. Das müsste ich nochmal anpassen.

Es gibt ja diese Webseite zum disassemblieren
http://onlinedisassembler.com
Nur muss man da vorher die Platform kennen, eine automatische Erkennung 
gibt es nicht.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.