Warum ist es oft einfacher, Innovationen In China als In den Vereinigten Staaten


Über ein Jahr und einen halben Tag entdeckte ich dieses $12 "Gongkai" Handy (Bild oben) auf den Märkten in Shenzhen, China. Meine auffälligsten Eindruck war, dass chinesische Unternehmer relativ Zugriff auf modernste Technologie uneingeschränkten hatte, Start-ups beim bootstrapping Innovationen ermöglichen. Unterdessen finden westliche Unternehmer sich oft gefangen in ein Spinnennetz von IP-Frameworks, mehr Geld für Anwälte als auf dem Werkzeug.

Weitere Untersuchung hat mich gelehrt, dass die Chinesen ein paralleles System der Traditionen und Ethik haben um Austausch von IP, die mich prägen den Begriff "Gongkai" führen.

Dies ist absichtlich nicht das chinesische Wort für "Open Source", weil dieses Wort (Kaiyuan) bezieht sich auf Offenheit in einem westlich-Art IP-Rahmen, welche dies nicht. Gongkai ist mehr eine Anspielung auf die Tatsache, dass urheberrechtlich geschützte Dokumente, manchmal mit der Bezeichnung "vertraulich" und "proprietär", bekannt für die Öffentlichkeit und freigegebenen offen sind, aber nicht unbedingt nach dem Buchstaben des Gesetzes. Ist jedoch nicht das Kopieren einen One-Way-Fluss von Wert, als wäre es im Falle der kopierte Filme oder Musik. Vielmehr sind diese Dokumente der Knowledge-Base benötigt, um ein Telefon mit der Urheberrechtsinhaber Chips bauen, und als solche Chips Verkaufsförderung hilft diese gemeinsame Nutzung von Dokumenten. Es ist letztlich, wenn man so will, eine Gegenleistung zwischen dem Rechteinhaber und dem Kopierer.

Diese flauschigen, graue Beziehung zwischen Unternehmen und Unternehmer ist nur eine Manifestation der eine viel breitere kulturelle Kluft zwischen dem Osten und dem Westen. Im Westen hat eine "Übertragung" Aussicht auf IP und Eigentum: gute Ideen und Innovationen sind auf eine klar definierte Gruppe von Autoren oder Erfinder gutgeschrieben und Gesellschaft zahlt ihnen eine Lizenzgebühr für ihre Initiative und gute Werke. China hat einen "Netzwerk" Blick auf IP und Eigentum: der weit-Sicht notwendig, um gute Ideen und Innovationen zu schaffen wird erreicht, indem auf den Schultern der anderen, und als solche gibt es ein Netzwerk von Menschen, die diese Ideen als begünstigt untereinander handeln. In einem System mit einer lockeren Haltung in Richtung IP ist es notwendig, da Morgen könnte es dein Freund auf Ihre Schultern, und Sie werden Ihnen gefallen gesucht werde, mit dem Netzwerk zu teilen. Dies schafft im Gegensatz zum Westen, wo Rechtsstaatlichkeit IP, über einen langen Zeitraum hinweg angehäuft werden ermöglicht, undurchdringliche Monopolstellungen. Es ist gut für die Jungs an der Spitze, aber hart für die Emporkömmlinge.

Dies bringt uns zu der Situation, die wir heute haben: Apple und Google bauen erstaunliche Telefone von herausragender Qualität und Start-ups können nur hoffen, dass eine Appcessory für ihr Ökosystem zu bauen. Ich habe Business-Pläne von über hundert Hardware-Startups mittlerweile überprüft, und die meisten von ihnen sind mit überteuerten Chipsätze mit antiquierten Prozesstechnologien als deren Fundament gebaut. Ich bin keine Ausnahme von dieser Regel-Freescale i.MX6 verwenden wir für die Novene, die weder das billigste noch der schnellste Chip auf dem Markt ist, aber es ist ein Chip wo jeder kann frei download fast lückenlose Dokumentation und jeder kann es kaufen, bei Digikey. Diese parallele Abhängigkeit von knappen Dokumentation und knappen Angebots für Spitzentechnologie zwingt die westlichen Hardware Unternehmer sich in erster Linie an Arduino, Beaglebone und Raspberry Pi als Ausgangspunkte für ihre guten Ideen.

Oben: Jedes Objekt im Bild ist ein Telefon. Einschub: Detail des Telefons "Skelett" Neuheit. Bildnachweis: Halfdan, Rachel Kalmar

Chinesische Unternehmer, churn auf der anderen Seite neue Handys mit fast alarmierender Geschwindigkeit. Handy Modelle Änderung auf saisonaler Basis. Unternehmer-Experiment alle Zeit, Integration whacky Funktionen in Handys, wie Feuerzeuge, extra große Akkupacks (das auf ein anderes Handy kostenlos genutzt werden können), große Tasten (für Sehbehinderte), reduzierte Knöpfe (Kinder als Notruf Telefone geben), Formfaktoren zu sehen, und so weiter. Dies ist aktiviert, da sehr kleine Teams von Ingenieuren komplette Design-Pakete für die Telefone – Fall, Board und Firmware – so dass sie das Design Gabel und konzentrieren uns nur auf die Stücke sie wirklich Pflege über Arbeit erhalten können.

Als Hardware-Ingenieur möchte ich, dass. Ich möchte in der Lage, bestehende Handy Designs Gabel. Ich möchte eine 364 MHz 32-Bit-Mikrocontroller mit MB integriertem Arbeitsspeicher und Dutzende von Peripheriegeräten kostet $3 in einzelnen Mengen, anstelle von einem 16 MHz 8-Bit-Mikrocontroller mit ein paar Kilobyte RAM und ein paar Brocken der Peripherie kostet $6 in einzelnen Mengen nutzen zu können. Leider Abfragen in einer Western-lizenzierte EDK für die Chips in der chinesischen Handys verwendet immer stießen auf eine kalte Schulter – unser Volumen zu klein, oder wir haben Mindestabnahme Vereinbarungen unterstützt durch Hunderttausende von Dollar in eine echte Einzahlung eingeben; und selbst dann diese EDKs beinhalten nicht das Referenzmaterial, die, dem die Chinesen bekommen zu spielen. Die Datenblätter sind unvollständig und dadurch sind Sie gezwungen, ihre proprietären OS-Ports verwenden. Es fühlt sich an wie ein Fall, der die netten Jungs Beendigung zuletzt. Können wir einen Weg finden, noch weiterkommen, aber immer noch schön spielen?

Wir haben einige der Forschung in die rechtlichen Rahmenbedingungen und Herausforderungen rund um die absorbierenden Gongkai IP in das westliche Ökosystem, und wir glauben, dass wir einen Weg, einige der IP von Gongkai in richtige Open-Source Rückführung gefunden haben. Allerdings muss ich mit einem standard-Disclaimer Einwurf: Wir sind nicht Anwälte, so dass wir Ihnen unsere Überzeugungen sagen aber nicht sie als rechtlichen Beratung konstruieren. Unsere Absicht ist es, unser Recht auf reverse Engineering in einer sorgfältigen, gebildete Weise um die Wahrscheinlichkeit zu erhöhen, wenn es hart auf hart kommt, die Gerichte unserer Aktionen zustimmen. Jedoch fühlen wir uns auch die Scheu vor reverse engineering-einfach weil es umstritten ist, ist eine glatte Steigung: Sie müssen Ihre Rechte zu lassen. Wenn Frauen nicht abstimmen und schwarze Menschen hinten im Bus saß, weil sie, Kontroverse fürchteten, die USA würden noch getrennt und ohne Wahlrecht.

Manchmal, muss man einfach aufstehen und Ihre Rechte geltend zu machen.

Es gibt zwei große Kategorien von Fragen, die wir behandeln, Patente und Urheberrechte. Für Patente die Fragen sind komplex, dennoch scheint es, dass die praktischste Ansatz besteht darin, im Wesentlichen auf das Thema punt. Dies macht der Großteil der open Source Community und in der Tat haben viele Unternehmen ähnliche Politik auf der technischen Ebene. Niemand, prüft soweit wir wissen, ihre Linux wegen Patentverletzung vor Upstreaming sie begeht. Warum? Unter anderem ist es eine riesige Menge an Ressourcen zu bestimmen, welche Patente gelten, und wenn man verletzen könnte; und auch nach diesen Ressourcen aufwendet, kann man nicht 100 % sicher sein. Darüber hinaus, wenn man sehr vertraut mit dem Körper der Patente wird, verstärkt es die Möglichkeit, dass eine Verletzung festgestellt werden sollte, ist eigenwillig und somit dreifach Schäden. Schließlich ist es nicht einmal klar, wo die Haftung liegt, besonders in einem open-Source-Umfeld. So, wir tun unser beste, nicht zu verletzen, aber nicht 100 % sicher, dass niemand Verletzung behauptet wird. Allerdings wenden wir eine Lizenz für unsere Arbeit mit einer "Giftpille" Klausel für Patentinhaber, die versuchen, zu prozessieren.

Für Urheberrechte geht es auch äußerst komplex. Der EFF Coders' Rights Project hat eine Reverse Engineering FAQ, die gut zu lesen ist, wenn Sie wirklich wollen, in der Fragen zu graben. Tl; dr ist, dass Gerichte festgestellt haben, dass reverse engineering zu verstehen, die Ideen im Code eingebettet und Interoperabilität fair Use ist. Infolgedessen haben wir das Recht, die IP-Adresse Gongkai-Stil zu studieren, verstehen und produzieren ein neues Werk auf die wir eine westlich orientierte offene IP-Lizenz anwenden können. Auch keiner der Dateien oder Binärdateien wurden verschlüsselt oder hatte Zugriff gesteuert durch eine technische Maßnahme – keine Umgehung, kein DMCA-Problem.

Darüber hinaus wurden alle Dateien entnommen sucht Verbindung zu öffentlichen Servern – damit problemlos CFAA, und keines der Geräte, die wir in der Arbeit verwendet kam mit Shrink-wraps, Klickraten, oder anderen Endbenutzer-Lizenzvereinbarungen, Nutzungsbedingungen oder andere Vereinbarungen, die unsere Rechte verzichten könnte.

So gestärkt durch unsere fair-Use-Rechte, haben wir uns entschlossen eine Reise für das reverse Engineering der Mediatek MT6260 anzutreten. Es ist ein 364 MHz, ARM7EJ-S, unterstützt durch 8MiB RAM und Dutzende von Peripheriegeräten, die Routine I2C, SPI, PWM und UART, verlockende Extras wie ein LCD + Touchscreen-Controller, audio-Codec mit Lautsprecher Verstärker, Akku-Ladegerät, USB, Bluetooth und natürlich GSM. Dem grauen Markt Preise es um $3/Einheit in einzelnen Mengen. Du musst lesen oder sprechen Chinesisch um es zu bekommen und Versorgung wurde in letzter Zeit aufgrund der hohen Nachfrage von Q4 ein wenig fleckig, aber wir hoffen, dass der Markt ein wenig wie die Dinge verlangsamen für Chinese New Year öffnet sich.

Für einen Chip von solcher Komplexität erwarten wir nicht unser zwei-Mann-Team in der Lage sein, daran zu arbeiten als Teilzeit Hobby-Projekt über den Zeitraum eines Jahres vollständig zu entwirren. Vielmehr wären wir glücklich, wenn wir genügend Funktionen haben, so dass wir das nächste Mal für ein ATMega oder STM32 zu erreichen, würden wir auch ernsthaft überlegen, die MT6260 als Alternative. So brachen wir als unser Ziel, Port NuttX, ein BSD-lizenzierte RTOS, den Chip, und einen soliden Rahmen für die schrittweise Portierung Treiber für die verschiedenen Peripheriegeräte in NuttX zu schaffen. Begleiten diese Codebasis wäre original Hardware Schaltpläne, Bibliotheken und Board-Layouts, die lizenziert sind mit CC BY-SA-3.0 plus ein Apache 2.0-Reiter für Patentfragen.

Und so entstand das Projekt Fernvale.

Fernvale Hardware

Im Vergleich zu den Mikroprogrammaufstellung, galt es Hardware reverse engineering recht unkompliziert. Die Dokumente, die wir ergattern konnte gab uns eine Vorstellung von der Kugel-Out für den Chip und das Namensschema für die Pins war ausreichend aussagekräftig, dass ich mich bewerben könnte, Vernunft und Erfahrung, die richtige Methode zum Verbinden der Chips zu erraten. Für Bereiche, die nicht eindeutig waren, hatten wir einige unten Handys beraubt, die konnte ich mit einem Multimeter buzz oder anstarren unter dem Mikroskop um Konnektivität zu bestimmen; und im schlimmsten Fall könnte ich auch eine live-Telefon Sonde mit einem Oszilloskop nur um sicherzugehen, dass mein Verständnis richtig war.

Die schwierigere Frage war, wie man die Hardware Architekt. Wir waren nicht spritzen, um ein Handy zu bauen – vielmehr wollten wir etwas ein bisschen näher an die Spark Core, eine generische SoM zu bauen, die in verschiedenen IoT-Anwendungen verwendet werden können. In der Tat, wurden unsere ursprünglichen Renderings und Pin-Outs entwickelt, um mit dem Spark-Ökosystem von Hardware-Erweiterungen kompatibel, bis wir merkten, dass es gab einfach zu viele interessante Peripheriegeräte in der MT6260 in solch eine kleine Grundfläche passen.

Oben: erste Skizzen der Fernvale hardware

Schließlich ließen wir uns auf eine einseitige Kern PCB, die wir nennen das "Fernvale Wedel", die der MicroUSB, MicroSD, Akku, Kamera, Lautsprecher, und Bluetooth-Funktionalität (sowie die obligatorischen Tasten und LED) bettet. Es ist schlank, bei 3,5 mm dick, und bei 57x35mm ist es auch auf der kleinen Seite. Wir enthalten Löcher zur Montage einen Teilsatz der Stiftleisten, verteilt mit einem Arduino kompatibel sein soll, obwohl es nur an 3,3V angeschlossen werden kann-Arduino-kompatiblen Geräten.

Oben: tatsächliche Umsetzung des Fernvale, im Bild mit Arduino als Größe Referenz

Die übrigen Peripheriegeräte sind auf ein paar Anschlüsse ausgebrochen. Ein Connector ist GSM-Signale gewidmet; die andere Benutzeroberfläche bezogenen Peripheriegeräte. Aufteilung von GSM in ein Modul mit vielen Möglichkeiten für die RF-front-End ist wichtig, weil es GSM ein Bona-Fide Benutzer installierte Feature, so drängen die Regulierungs- und Emissionen Ausgabe bis auf Benutzerebene macht. Auch, Aufteilung der UI-bezogene Funktionen, um ein anderes Board Kosten das Core-Modul, so dass es in zahlreichen Szenarien passen ohne einsperren von Benutzern in einer bestimmten Anordnung von LCD- oder Taste.

Oben: Fernvale Systemdiagramm, die Features der einzelnen der drei boards

Fernvale Wedel mainboard

Fernvale Klinge UI breakout

Fernvale Spore AFE Dev board

Alle Hardware-Quelldokumente können von unserem Wiki heruntergeladen werden.

Als interessante Randnotiz hatte ich einige Röntgenaufnahmen von der MT6260. Wir taten dies, um uns gefälschte Komponenten identifizieren zu helfen, für den Fall, dass wir begegnet verkauften als leere Epoxy Blöcke oder als bemerkte Versionen von anderen Chips (der MT6260 hat Varianten, wie der DA - und -A, der Unterschied ist wie viel FLASH-Chip enthalten ist).

X-ray MT6260-Chip. Ein scharfes Auge holen, die Umrisse der mehrere ICs unter den Wirebonds. Bild-Gutschrift: Nadya Peek

Zu unserer Überraschung dieser $3-Chip keinen einzigen IC enthalten, aber eher, es ist eine Reihe von mindestens 4 Chips, möglicherweise 5, integriert in einem einzigen multi-Chip-Modul (MCM) mit Hunderten von Drahtbonds. Ich erinnere mich zurück, als der Pentium Pro Dual-sterben Paket herauskam. Das löste Argumente über ergab Kosten für MCMs gegenüber der Verwendung eines einzelnen größeren Würfel; im allgemeinen galten multi-Chip-Module exotisch und teuer. Ich erinnere mich auch damals Krste Asanović, damals Professor am MIT AI Lab jetzt bei Berkeley, erzählte mir, dass die Zukunft nicht System auf einem Chip, sondern eher "System on a Chip meist sein". Die Wurzel seines Anspruchs ist, dass die Wirtschaftlichkeit des Hinzufügens Schichten Maske verschmelzen DRAM, FLASH, RF, Analog und Digital zu einem einzigen Prozess war nicht günstig und stattdessen es wäre billiger und einfacher, mehrere sterben in einem einzigen Paket verkleben. Es ist ein Rennen zwischen den Ertrag und Kosten (pro Einheit und NRE) hinzufügen von mehr Prozess Schritte in der Halbleiter Fab vs. die Ausbeute Auswirkungen (und relative Wiederverarbeitbarkeit und geringeren NRE-Kosten) der Montage der Module. Single-Chip-SoCs damals den Zeitgeist (und noch Art von ist), so ist es interessant zu sehen, eine bedeutende Datapoint Validierung Krstes Einblick.

Umkehrung der Boot-Struktur

Die Menge an Dokumentation Shanzhai Ingenieure in China zur Verfügung gestellt scheint gerade genug, damit sie sich eine Telefon montieren und seine Benutzeroberfläche anpassen, aber nicht genug, um eine vollständige OS-Hafen. Schließlich kommen Sie zu erkennen, dass alle Handys basierend auf einen bestimmten Chipsatz verfügen über die gleichen Hintertür Codes, und oft die UI unvereinbar mit der implementierten Hardware ist. Zum Beispiel die $12 Telefon erwähnt an der Spitze der Post fordert Sie auf, schließen Sie Kopfhörer an die Kopfhörerbuchse für das UKW-Radio zu arbeiten, doch gibt es keine Kopfhörer-Buchse in der Hardware zur Verfügung gestellt. Um Fernvale im Westen für Ingenieure zugänglich zu machen, mussten wir alles aus dem nichts, aus der Toolchain zum Firmware blinkende Werkzeug, um das Betriebssystem, die Anwendungen zu rekonstruieren. Angesichts der Tatsache, dass die chinesischen Handy-Implementierungen Mediatek proprietäre Toolchain einfach verlassen, mussten wir einige reverse engineering Arbeit herausfinden, das Boot-Prozess und Firmware Upload-Protokoll zu tun.

Mein erste Schritt ist immer, wenn möglich die ROM dump. Wir fanden genau ein Handy-Modell, die ein externes ROM vorgestellt, die wir ablöten könnte (es nutzt die -D ROMless Variante des Chips), und wir den Inhalt mit einem konventionellen ROM Reader lesen. Die gute Nachricht ist, dass wir sehr wenig Geheimtext im ROM sah; die schlechte Nachricht ist, dass es eine Menge von komprimierten Daten. Unten stehend finden Sie eine Seite aus unserem Noten nach einer statischen Analyse auf das ROM-Image zu tun.

0x0000_0000 Medien Signatur "SF_BOOT" 0x0000_0200 Bootloader Signatur "BRLYT", "BBBB" 0x0000_0800 Bereich Kopfzeile 1 ("MMM.8") 0x0000_09BC Reset Vektor Tabelle 0x0000_0A10 Beginn der ARM32 Anweisungen – Stufe 1 Bootloader? 0x0000_3400 Sektor Kopfzeile 2 ("MMM.8") – 2. Etappe Bootloader? 0x0000_A518 Thunk Tabelle einige Typ 0x0000_B704 Ende der Code (Polsterung bis zum nächsten Sektor) 0x0001_0000 Sektor Header 3 ("MMM.8") – Kernel? 0x0001_0368 Sprung Tisch + Runtime Setup (Stack, etc.) 0x0001_0828 ARM Daumen Code Start – möglicherweise auch Basisband Code 0x0007_2F04 Code Ende 0x0007_2F05 – 0x0009_F0005 "DFFF" 0x0009_F006 Code Polsterteil beginnen "Beschleunigte Technologie / ATI / Kern PLUS" 0x000A_2C1A Code Abschnitt Ende; Pad mit Nullen 0x000A_328C Region komprimiert/unbekannte Daten beginnen 0x007E_E200 geändert FAT-Partition #1 0x007E_F400 geändert FAT-Partition #2

Eine Besorgnis über reverse engineering SoCs ist, dass sie eine interne Boot-ROM, die immer ausgeführt wird, bevor der Code von einem externen Gerät geladen wird. Diese interne ROM kann auch Signatur und Sicherheitskontrollen, die Manipulationen mit dem externen Code, und um den Aufwand zu bestimmen Niveau gewünscht wollten wir schnell herausfinden, wie viel Code innerhalb der CPU ausgeführt wurde, vor dem Sprung zu externen Boot-Code. Diese Aufgabe wurde super-schnell fertig in ein paar Stunden mit einem Tek-MDO4104B-6. Es hat die unheimliche Fähigkeit, tief, hochauflösende analoge Spuren und Post-Analyse als digitale Daten zu erfassen. Beispielsweise könnten wir einfach Sonde um beim Radfahren macht bis sahen wir etwas, das aussah wie RS-232 und führen Sie dann eine Post-Capture-Analyse um ASCII-Text zu extrahieren, der in der analogen Spuren codiert werden konnte. Ebenso könnten wir SPI Spuren erfassen und das Oszilloskop konnte ROM Zugriffsmuster durch eine ähnliche Methode extrahieren. Mit Blick auf den Zeitpunkt der Text Emissionen im Vergleich zu SPI ROM Adresse Muster, konnten wir schnell feststellen, dass täte der internen Boot-ROM überprüft, es minimal war und nichts nähert sich der Rechenaufwand von RSA.

Oben: Screenshot aus dem Tek-MDO4104B-6, zeigt die analoge Spur in gelb und die ASCII-Daten extrahiert in Cyan. Das obere Viertel zeigt eine verkleinerte Ansicht der gesamten Aufnahme; man kann deutlich sehen, wie SPI ROM Zugriffe in grau mit Konsolenausgabe in Cyan unterbrochen sind.

Von hier aus mussten wir unsere Maßnahme-ändern-Test Schleife zu beschleunigen; Entlöten ROM, kleben Sie es in einem Brenner und auf die Platine Umlöten wollte wirklich schnell alt werden. Angesichts der Tatsache, dass wir vorher ein NAND-Flash-ROMulator Novene realisiert hatte, machte es Sinn, Wiederverwendung, dass Code-Basis und ein SPI-ROMulator zu implementieren. Wir gehackt ein GPBB-Board und seine entsprechenden FPGA-Code und die Fähigkeit, wechseln Sie zwischen den ursprünglichen Boot-SPI ROM und eine Dual-ported 64kiB Emulator-Region, die auch in der Novene Linux Host-Adressraums zugewiesenem Speicher ist implementiert.

Blockschaltbild des SPI ROMulator FPGA

Es ist ein Telefon in meine Novene! Was ist das dort?

Eine Kombination dieser Tools – die Adresse Stream bestimmt durch die Tek-Oszilloskop, schnelle ROM Patchen von der ROMulator und statische Code-Analyse mit IDA (fanden wir eine SHA-1-Implementierung) – konnten wir feststellen, dass die ursprünglichen Bootloader, die wir als die 1bl bezeichnen, wurde Hash-geprüft mit einer SHA-1 Anhang.

Gebäude einen Brückenkopf

Der nächste Schritt war, eine kleine interaktive Shell zu schaffen, die wir als einen Brückenkopf für Experimente auf der Zielhardware ausgeführt verwenden könnte. Xobs erstellt eine kompakte REPL-Umgebung namens Fernly die Befehle wie spähen und stossen auf Speicher und CPU-Register dumping unterstützt.

Weil wir die ROMulator machen das emulierte ROM als 64 k zugewiesenem Speicher Fenster auf einem Linux-Host angezeigt werden, es ermöglicht der Verwendung eine Vielzahl von POSIX Abstraktionen, wie z. B. mmap(), open() (über Gedächtniszugänge), read() und write(), entworfen um das emulierte Rom zugreifen verwendet Xobs diese Abstraktionen für radare2 ein I/O Ziel erstellen. Das I/O Ziel wird den SHA-1 Hash automatisch aktualisiert, jedes Mal, wenn wir Änderungen im Bereich 1bl Code ermöglichen uns süße Sachen wie interaktiv Patch und Code innerhalb der emulierten ROM Raum zu zerlegen.

Wir verdrahtet auch der ein-/Ausschalter des Telefons zu einem FPGA i/o, so dass wir automatisierte Skripts, die die Macht auf dem Handy zu wechseln schreiben könnte, während der Aktualisierung der ROM Inhalt, automatisiert ermöglicht es uns, tun fuzzing unbekannte Hardware Blöcke.

Anhängen eines Debuggers

Wegen der Schwierigkeiten bei dem Versuch, kritische Blöcke zu finden und weil JTAG mit kritischen Funktionen auf dem Zielgerät gemultiplext, einen unkonventionellen Ansatz wurde einen Debugger anhängen: Xobs emuliert den ARM-Kern und seine fernly Schale verwendet, um virtuelle Lade- und Speichervorgänge auf das live Ziel widerspiegeln. Dadurch ist der emulierten Kern, unter Umgehung der Notwendigkeit einer JTAG und ermöglicht es uns, Cross-Plattform-Tools wie IDA auf X86 für die Umkehr Benutzeroberfläche verwenden remote Debugger anfügen.

Das Herzstück dieser Technik ist Qemu, eine Multi-Plattform-System-Emulator. Es unterstützt emulating ARM Ziele, speziell der ARMv5 auf dem Zielgerät verwendet. Ein neuen Maschinentyp wurde genannt "Fernvale", die Teil der beobachteten Hardware auf dem Ziel implementiert, und einfach Pässe unbekannten Speicher direkt auf das Gerät zugreift.

Die Fernly Shell war nur drei Befehle unterstützen zerlegt: schreiben, lesen und Null-Memory. Der Schreibbefehl stößt ein Byte, Word oder Dword in den Arbeitsspeicher auf dem Leben Ziel und ein Lese-Befehl liest ein Byte, Word oder Dword aus dem Leben Ziel. Der Null-Speicher-Befehl ist eine Optimierung des Betriebssystems große Mengen von Nullen über einen großen Speicherbereich schreibt.

Darüber hinaus ist die serielle Schnittstelle Register sind süchtig und emuliert, so dass ein Hostsystem serielle Daten angezeigt, wie es auf dem Zielgerät gedruckt wurden. Zu guter Letzt werden SPI, IRAM und PSRAM alle nachgebildet, wie sie auf den echten Gerät erscheinen würden. Andere Bereiche des Speichers sind entweder gefangen und kanalisiert die tatsächlichen Gerät, oder die Links unzugeordnet und von Qemu als Fehler gemeldet.

Die Abbildung oben zeigt die Architektur des Debuggers.

Den Debugger zu berufen, ist ein mehrstufiger Prozess. Erstens ist das eigentliche Ziel der MT6260 mit der Fernly Shell-Umgebung grundiert. Dann die virtuelle ARM CPU "gebootet" mit den ursprünglichen Lieferanten Qemu image – oder besser gesagt, mit einem bekannten Register Zustand an einem günstigen Punkt beim Startvorgang grundiert. An dieser Stelle Codeausführung Erlöse auf dem virtuellen Computer bis zu einer Last oder laden zu einer unbekannten Adresse erfolgt. Virtuelle Maschine Ausführung wird angehalten, während eine Abfrage an die realen MT6260 über die Fernly Shell-Schnittstelle gesendet wird, und die Last oder das Geschäft auf der realen Maschine ausgeführt wird. Die Ergebnisse dieser Laden oder Geschäft ist dann mit dem virtuellen Computer weitergeleitet und Ausführung wird fortgesetzt. Natürlich wird Fernly abstürzen, wenn ein Geschäft passiert, irgendwo im Inneren der Speicherbedarf zu landen. So mussten wir die Fernly Shell-Code in einer Region von IRAM, die gefangen und emuliert, so lade- und Speichervorgänge Shell-Code überschreiben nicht verstecken. Laufen Fernly direkt aus dem SPI-ROM funktioniert auch nicht als Teil der Initialisierung des Verkäufers binäre SPI ROM Timings, SPI Emulation fehlschlagen verursachen ändert.

Emuliert das Ziel CPU ermöglicht uns einen remote-Debugger (z. B. IDA) befestigen über GDB über TCP ohne Mühe mit JTAG. Der Debugger hat die vollständige Kontrolle über die emulierten CPU und seinen emulierten RAM zugreifen kann. Darüber hinaus aufgrund der Architektur von Qemu, werden wenn der Debugger versucht, eine Memory-mapped-IO zugreifen, die auf das eigentliche Ziel umgeleitet wird der Debugger live-Werte im Speicher anzeigen können. Auf diese Weise die echten Zielhardware meist im Leerlauf ist und bleibt in der Fernly-Shell ausgeführt, während die virtuelle CPU alle Arbeiten führt. Die enge Integration von diesem Paket mit IDA über GDB ermöglicht auch sehr schnell und dynamisch ausführen Unterroutinen und Funktionen, um ihren Zweck zu bestätigen.

Im folgenden ist ein Beispiel für die Ausgabe des hybriden Qemu/Leben-Ziel Debug Kabelbaum. Sie können sehen, die eingeschlossene Seriennummer schreibt, die auf der Konsole, sowie ein Protokoll der Schreib-und Lesevorgänge ausgeführt von der emulierten ARM-CPU, wie sie zum Ausführen der reduzierten Fernly Shell live Ziel weitergeleitet werden.

Bunnie@Bunnie-Novena-Laptop:~/Code/Fernvale-QEMU$. /run.sh ~ ~ ~ Willkommen bei MTK Bootloader V005 (seit 2005) ~ ~ ~ ** === ** lesen Wort Fernvale Live 0xa0010328 = 0 x 0000... ok schreiben Wort Fernvale Live 0xa0010328 = 0x0800... ok lesen Wort Fernvale Live 0xa0010230 = 0x0001... ok schreiben Wort Fernvale Live 0xa0010230 = 0x0001... ok lesen DWORD Fernvale Live 0xa0020c80 = 0x11111011... ok schreiben DWORD Fernvale Live 0xa0020c80 = 0x11111011... ok lesen DWORD Fernvale Live 0xa0020c90 = 0x11111111... ok schreiben DWORD Fernvale Live 0xa0020c90 = 0x11111111... ok lesen Wort Fernvale Live 0xa0020b10 = 0x3f34... ok schreiben Wort Fernvale Live 0xa0020b10 = 0x3f34... Okay

Aus diesem Brückenkopf konnten wir die Offsets von ein paar IP-Blöcke zu entdecken, die von früheren bekannten Mediatek Chips (z. B. die MT6235 in der OsmocomBB bei der Suche nach ihrer "Unterschrift". wiederverwendet wurden Die Signatur reichten von Dinge so einfach wie die Standardeinstellung einschalten Registerwerte zu Veränderungen im Bitmuster aufgrund der Nebenwirkungen von Bit setzen/löschen-Register am Offsets innerhalb des Blocks der IP-Adressraum. Mit dieser Technik konnten wir feststellen, dass das Register von mehreren Peripheriegeräten versetzt.

Starten eines Betriebssystems

Von hier aus konnten wir schnell an vielen Fronten Fortschritte, aber unser Ziel, einen Port NuttX blieb schwer, da gab es keine Dokumentation über die Interrupt-Controller innerhalb des Kanons der Shanzhai Datenblätter. Obwohl wir in der Lage waren, die Routinen zu finden, die den Interrupt-Handler durch statische Analyse der Binärdateien installiert, konnten wir feststellen, dass die Adresse der Interrupt-Controller selbst versetzt.

Zu diesem Zeitpunkt hatten wir öffnen die Mediatek-Codebasis und beziehen sich auf die Include-Datei, die die Register-Offsets enthalten und etwas Definitionen der Interrupt-Controller. Wir glauben, dass dies akzeptabel ist, weil die Fakten nicht urheberrechtlich geschützt sind. Justice O'Connor schrieb in Feist v. Rural (449 US-340, 345, 349 (1991). Siehe auch Sony Computer Entm't v. Connectix Corp, 203 F. 3d 596, 606 (9. Cir. 2000); Sega Enterprises Ltd. v. Auszeichnung, Inc., 977 f. 2D 1510, 1522-23 (9. Cir. 1992)),

"Gesunder Menschenverstand sagt uns, dass 100 unschützbar Fakten nicht auf magische Weise, ihren Status ändern, wenn an einem Ort versammelt. … Der Schlüssel zur Lösung der Spannung liegt im verstehen warum Fakten nicht urheberrechtlich geschützt sind: das Sine Qua Non des Urheberrechts ist Originalität "

und

"Ein nachfolgenden Compiler bleibt trotz eines gültigen Copyright frei, in fremdem Publikation enthaltenen Fakten zur Hilfe bei der Vorbereitung einer konkurrierenden arbeiten, so lange, wie die konkurrierende Arbeit nicht die gleiche Auswahl und Anordnung vorkommt".

Und hier müssen wir vorsichtig: Wir müssen Fakten zu extrahieren und sie in unsere eigene Auswahl und Anordnung ausdrücken. Ebenso wie die Fakten, die "John Doe Telefonnummer ist 555-1212" und "John Doe Adresse ist 10 Main St." ist nicht urheberrechtlich geschützt ist, müssen wir zu extrahieren Fakten wie "die Interrupt-Controller Basisadresse in 0xA0060000", und "ein bisschen 1 Steuerelemente Statusberichte der LCD" von Include-Dateien und sie wieder in unsere eigenen Header-Dateien ausdrücken.

Die Situation wird weiter erschwert durch die Blöcke für die haben wir absolut keine Dokumentation, nicht einmal eine Erklärung dessen, was die Register oder wie die Blöcke-Funktion. Für diese Blöcke wir reduzieren ihre Initialisierung in eine Liste von Adress- und Paaren, und dies in einer benutzerdefinierten Skriptsprache namens "scriptic". Wir haben unsere eigene Sprache zur Vermeidung von unterbewussten Plagiat erfunden – es ist zu einfach, ein Stück Code zu lesen und aus dem Gedächtnis, code etwas fast genau das gleiche. Durch den Code in eine neue Sprache zu verwandeln, sind wir gezwungen, die Fakten präsentiert und sie in eine ursprüngliche Anordnung ausdrücken.

Scriptic ist im Grunde ein Satz von Assembler-Makros und die Syntax ist sehr einfach. Hier ist ein Beispiel für ein scriptic Skript:

#include "scriptic.h" #include "Fernvale-pll.h" Sc_new "Set_plls", 1, 0, 0 sc_write16 0, 0, PLL_CTRL_CON2 sc_write16 0, 0, PLL_CTRL_CON3 sc_write16 0, 0, PLL_CTRL_CON0 Sc_usleep 1 sc_write16 1, 1, PLL_CTRL_UPLL_CON0 sc_write16 0x1840, 0, PLL_CTRL_EPLL_CON0 sc_write16 0x100, 0x100, PLL_CTRL_EPLL_CON1 sc_write16 1 , 0, PLL_CTRL_MDDS_CON0 sc_write16 1, 1, PLL_CTRL_MPLL_CON0 Sc_usleep 1 sc_write16 1, 0, PLL_CTRL_EDDS_CON0 sc_write16 1, 1, PLL_CTRL_EPLL_CON0 Sc_usleep 1 sc_write16 0x4000, 0x4000, PLL_CTRL_CLK_CONDB Sc_usleep 1 sc_write32 0x8048, 0, PLL_CTRL_CLK_CONDC / * die SPI-Uhr bei 104 MHz laufen * / sc_write32 0xd002 , 0, PLL_CTRL_CLK_CONDH sc_write32 0xb6a0, 0, PLL_CTRL_CLK_CONDC Sc_end

Dieses Skript initialisiert die PLL auf der MT6260. Um hingegen ist hier die ersten Zeilen des Codeausschnitts, von dem es abgeleitet wurde:

HW-Modus TOPSM Kontrolle zu ermöglichen und die Uhr CG der PLL-Steuerung * PLL_PLL_CON2 = 0 x 0000; 0xA0170048, bit 12, 10 und 8 auf 0 gesetzt, um eine TOPSM Kontrolle ermöglichen / / bit 4, 2 und 0 auf 0 festgelegt, um Uhr CG der PLL-Steuerung aktivieren * PLL_PLL_CON3 = 0 x 0000; 0xA017004C, bit auf 0 gesetzt, um eine TOPSM Kontrolle ermöglichen 12 / / Steuerung aktivieren * PLL_PLLTD_CON0 = 0 x 0000; 0 X A0170700, bit 0 auf 0 festgelegt, um die Verzögerung Kontrolle //wait für 3us zu ermöglichen, für TOPSM und Verzögerung (HW) Signal für stabile Steuern (ich = 0; ich< loop_1us*3="" ;="" i++);="" enable="" and="" reset="" upll="" reg_val="*PLL_UPLL_CON0;" reg_val="" |="0x0001;" *pll_upll_con0="reg_val;" 0xa0170140,="" bit="" 0="" set="" to="" 1="" to="" enable="" upll="" and="" generate="" reset="" of="" upll="">

Der ursprüngliche Code eigentlich vor sich geht für Seiten und Seiten, und sogar dieses Snippet ist umgeben von bedingten Anweisungen, die wir getötet, da sie nicht relevanten Fakten zum Initialisieren der PLL korrekt waren.

Mit diesem Tool hinzugefügt, um unsere Waffenkammer konnten wir schließlich Code ausreichend Funktionalität zu booten NuttX auf eigene Fernvale Hardware.

Toolchain

Anmeldeaufforderung, eine Novene ROMulator auf Fernvale zu hacken ist eine skalierbare Lösung, und somit zur Abrundung der Geschichte nicht zu besitzen, mussten wir eine komplette Entwickler-Toolchain erstellen. Zum Glück, der Compiler ist ziemlich cut-and-dry – es gibt viele Compiler, die als Ziel, einschließlich Klang und Gcc ARM unterstützen. Jedoch blinkende Werkzeuge für die MT6260 sind viel komplizierter, da die bestehenden, denen wir kennen proprietären Windows-Programme und Osmocom Loader unterstützt nicht die Protokoll-Version durch die MT6260 erforderlich. So mussten wir zum reverse Engineering der Mediatek blinkende Protokoll und unser eigenes Open-Source-Tool zu schreiben.

Glücklicherweise zeigt eine leere, unfusionierten MT6260 als/dev/ttyUSB0, wenn Sie stecken Sie es in einem Linux-Host-in anderen Worten, es sich als eine emulierte serielle Gerät über USB zeigt. Dies sorgt mindestens für die Low-Level Details senden und empfangen von Bytes auf das Gerät, so dass uns mit der Aufgabe des reverse engineering der Protokollschicht. Xobs befindet sich die interne Boot-ROM von der MT6260 und durchgeführt statische Code-Analyse, die eine Menge Einblicke in das Protokoll zur Verfügung gestellt. Er hat einige statische Analyse auf Mediateks blinken Werkzeug und erfasst live Spuren mit einem USB-Protokoll-Analysator um die restlichen Details zu klären. Unten ist eine Zusammenfassung der Befehle, die er gewonnen, die wie in unserer offenen Version des USB-blinkende Tools verwendet.

ENUM Mtk_commands {mtk_cmd_old_write16 = 0xa1, mtk_cmd_old_read16 = 0xa2, mtk_checksum16 = 0xa4, Mtk_remap_before_jump_to_da = 0xa7, Mtk_jump_to_da = 0xa8, Mtk_send_da = 0xad, Mtk_jump_to_maui = 0xb7, Mtk_get_version = 0xb8, Mtk_close_usb_and_reset = 0xb9, mtk_cmd_new_read16 = 0xd0, mtk_cmd_new_read32 = 0xd1, mtk_cmd_new_write16 = 0xd2 mtk_cmd_new_write32 = 0xd4, / / Mtk_jump_to_da = 0xd5, Mtk_jump_to_bl = 0xd6, Mtk_get_sec_conf = 0xd8, Mtk_send_cert = 0xe0, Mtk_get_me = 0xe1, / * antwortet mit 22 Byte * / Mtk_send_auth = 0xe2, Mtk_sla_flow = 0xe3, Mtk_send_root_cert = 0xe5, Mtk_do_security = 0xfe, Mtk_firmware_version = 0xff,};

Aktueller Status und Zusammenfassung

Nach über einem Jahr ein- und Aufwand zwischen Arbeit auf die Novene und Chibitronics Kampagnen, wir in der Lage waren, ein Hafen des NuttX auf die MT6260 zu starten. Ein minimaler Satz von Hardware-Peripherie werden derzeit unterstützt; Es ist genug für uns, etwa die Funktionalität von einem AVR verwendet in einem Arduino-ähnlichen Kontext, aber nicht viel mehr zu reproduzieren. Wir haben unsere Ergebnisse in diesem Jahr auf 31 3 (Folien) vorgestellt.

Die Geschichte nimmt eine unerwartete Wendung gleich um die Zeit, die wir unserem GFP-Vorschlag für 31 3 schreiben würden. Der Woche vor der Einreichung, wurde uns bewusst, dass Mediatek LinkIT ONE, basierend auf der MT2502A in Verbindung mit Seeed Studios veröffentlicht. Die LinkIT ONE richtet sich direkt eine Internet der Dinge-Plattform für Unternehmer und Privatpersonen bieten. Es ist integriert in den Arduino-Rahmen, mit einer offenen API, die die volle Funktionalität des Chips, einschließlich GSM-Funktionen ermöglicht. Jedoch die Kern-Betriebssystem, das auf der MT2502A in der LinkIT ONE Stiefel ist immer noch die proprietären Nucleus OS und man kann nicht erhalten direkten Zugriff auf die Hardware; Sie müssen durch die API-Aufrufe zur Verfügung gestellt von der Arduino-Shim gehen.

Realistisch betrachtet, wird es eine Weile dauern, bis wir ein angemessener Teil der MT6260 Funktionen in den open-Source-Bereich Port können, und es durchaus möglich, dass wir nie in der Lage ist, eine Blob-freie Implementierung des GSM-Call-Funktionen zu tun werden, wie diejenigen, die noch dunkel und undokumentiert ist eine DSP-Einheit gesteuert. So, angesichts der robuste Funktionalität des LinkIT ONE im Vergleich zu Fernvale, haben wir beschlossen, es als eine offene Frage hinterlassen, an der open Source Community, ob gibt es Wert in Fortsetzung der Bemühungen für das reverse Engineering der MT6260: wie wichtig es, in der Praxis, eine Blob-freie Firmware zu haben ist?

Unabhängig von der Antwort haben wir Fernvale veröffentlicht, weil wir denken, es ist zwingend notwendig, um unsere fair-Use-Rechte, reverse Engineering und interoperable, open-Source-Lösungen zu schaffen. Rechte sind in der Regel zu verkümmern und bekommen herausdrücken durch konkurrierende Interessen, wenn sie nicht energisch ausgeübt werden; Jahrzehntelang haben Ingenieure saß an der Seitenlinie und gesehen immer mehr expansive Patent und copyright-Gesetze schrumpfen ihre breite frei zu lernen und zu erneuern. Ich bin traurig, dass die prägenden basteln ich habe als Kind nicht mehr eine rechtliche Möglichkeit für die nächste Generation von Ingenieuren. Der Aufstieg von der Shanzhai und ihre erstaunlichen Fähigkeiten ist ein Wake-Up Call. Ich sehe es als Beweis, dass eine permissive IP-Umgebung Innovation, vor allem auf der Basis-Ebene treibt. Wenn mehr Ingenieure bewusst ihre Messe Nutzungsrechte und kräftig und gezielt ausüben, kann vielleicht dies eine größere und dringend notwendige Reform des Patent- und Urheberrecht katalysieren.

Möchten Sie mehr lesen? Check out Xobs Beitrag auf Fernvale. Wollen Sie sich engagieren? Glockenspiel in unseren Foren. Oder die Aufzeichnung von unserem Gespräch unten ansehen.

Team Kosagi möchte wieder einmal ein besonderer Dank geht an .mudge für die Herstellung dieser Forschung möglich.

Andrew "Bunnie" Huang ist ein Hardware-Hacker und Unternehmer in Singapur. Er ist der Autor von Hacking the Xbox und schuf den Chumby. Folgen Sie ihm auf Twitter. Dieser Beitrag erschien ursprünglich im Dezember 2014 auf seinem Blog, die Sie lesen sollten.

Kontaktieren Sie den Autor unter [email protected].
Öffentlichen PGP-Schlüssel
PGP-Fingerprint: CA58 326B 1ACB 133B 0D 15 5BCE 3FC 6 9123 B2AA 1E1A

Verwandte Artikel

Geburt-Tourismus in den Vereinigten Staaten - was es ist? und warum?

Geburt-Tourismus weiter in den USA steigt. Ich weiß, es gibt Orte in Mexiko, die plastische Chirurgie Tourismus gerecht zu werden. Kann man eine billige Boob Job bekommen oder Bauch stecken, aber erfahren Sie, warum eine Geburt in Amerika so eine große Sa...

Warum ist die Kernenergie In den Vereinigten Staaten So umstritten

[youtube]_0P9S4F4KpQ[/youtube] Die Vereinigten Staaten haben die größte nukleare Stromerzeugungskapazität in der Welt, sondern als Prozentsatz der gesamten Energieerzeugung, wir eine bloße 16. Rang. Zumindest ein Teil des Grundes ist, dass Menschen Angst...

Wie Facebook ist Zensur Inhalte in den Vereinigten Staaten

Facebook schwört, transparent sein, und noch der Electronic Frontier Foundation entdeckt, dass das Unternehmen alle Möglichkeiten versteckt, dass es Zugang in den Vereinigten Staaten, im Auftrag von Strafverfolgungsbehörden blockiert. Gestern EFF veröffen...

Warum ist die US-Ostküste kälter als Europas Westküste

Es scheint brutal unfair gegenüber denen auf der US-Ostküste, dass westeuropäische mindestens 10 Grad Fahrenheit (5,5 ° c) wärmer im Durchschnitt während des Winters sind. Die durchschnittliche Temperatur im Januar in New York City beträgt 32 Grade Fahren...

Dies ist der ruhigste Ort in den Vereinigten Staaten

Wenn Sie wirklich wollen, um weg von allen, Kopf, US-Bundesstaat Washington. Dort, auf einem Pfad entlang des Flusses Hoh, im Regenwald von Olympic Nationalpark, nur 40 Meilen von Seattle, ist es, was ein Wissenschaftler den ruhigsten Ort in den benachbar...

Mehr Australier für engere Beziehungen mit China als in den USA Forschung zeigt

US-Studien-Zentrum sagt Erkenntnisse Auffassungen einige Amerikaner "Weichheit" stärken können Unterstützung für US-Allianz Eine überwältigende Anzahl von Australier glauben, dass China ist längst der einflussreichsten Nation in der Region Asien...

Warum ist eine "Beziehung" völlig anders aus als eine Beziehung

Es ist ein Spiegel, aber eine sehr seltsame Spiegel. Es kann Sie genau, zu reflektieren, wenn so etwas möglich ist. Oder es kann Sie verzerren Haben Sie schon einmal mit Freunden und Ihrem Partner, und betrachtete diese Person und sich gefragt: Warum...

Warum ist der Austritt Camp so besessen von Einwanderung? Denn das ist Sie

Seit wir die wirtschaftlichen Argumente auseinandergesprengt, hat Abstimmung lassen keine andere Wahl, als sich auf Fremdenfeindlichkeit zu verlassen Obwohl die frühen Scharmützel einer Kampagne nicht das Ergebnis bestimmen werden, entstehen die Kampflini...

Jason Toohey: Warum ist er besser für Jenny McCarthy als Jim Carrey

Jenny McCarthy scheint glücklicher als je zuvor mit ihrem neuen Mann, ehemalige Fitness-Modell Jason Toohey. Sie hat ruhig aus ihm für ein paar Monate, und sie selbst lebe zusammen während ihr Haus in Las Vegas Renovierungsarbeiten unterzogen wird. Es ist...

Warum ist rosa für Mädchen und blau für jungen?

Blau steht für Jungen und rosa für Mädchen, wir sind sagte. Aber spiegeln diese Geschlechternormen einige inhärente biologische Unterschiede zwischen den Geschlechtern, oder sind sie kulturell konstruiert? Es hängt davon ab, wen man fragt. Jahrzehntelange...

Warum ist die Büroklammer geformt, wie es ist?

Denkt man an Büroklammern, denkt man sofort an eine spezifische Form - die vertrauten Runde beendet, Doppel-Loop-Design. Die Draht-Posaune-Form. Aber das ist nur eine Sorte von Clip; das "Juwel", das hat seinen Namen von einer britischen Firma n...

Warum ist Gas in Zehntel-Cent günstig.

Die Praxis der Kraftstoff mit einem Bruchteil eines Pennys Preisgestaltung wird gedacht, um in den 1930er Jahren begonnen haben. Während wir nicht sicher sein können, die der erste Preis Kraftstoff so war, scheint es in den Vereinigten Staaten plötzlichen...

Warum ist die Comcast-Time Warner Cable Fusion noch schlimmer als Sie denken

Die bloße Erwähnung von Comcast und Time Warner kuscheln zu bilden ein mieses Super-Konglomerat genug ist, um Sie für die Mistgabeln senden. Aber diese unholy Union - wenn es regulatorischen Muster geht – geht tiefer als Monopol schlecht. Um zu verstehen,...

Naomi Shimada: "Warum ist plus ein Schimpfwort in Mode?"

Naomi Shimada ist ein Erfolgsmodell. Sie ist Größe 16. Sie zeigt offen, was es wirklich ist, zu sein ein "plus" Modell – von 'fat Suits"Vorurteile – und fordert eine Änderung in der Industrie Ich begann, Modellierung, als ich gerade war 13....