[LINUX] Ich möchte Robomaster S1 ① Rooting und Dateikonfigurationsprüfung hacken

Überblick

Was hast du getan

Was kannst du tun?

――Ich weiß nicht ... (leidenschaftlich)

Was möchten Sie tun

Der ultimative Zweck dieses Artikels

Das Ball Tracking-Demo-Video ist unten angefügt. Ich möchte so etwas tun.

Ich möchte dies tun

Politik

Es gibt ein Modell namens EP, das der Nachfolger von Robomaster S1 ist, und Sie können das tun, was Sie gerade gesagt haben. SDK wird ebenfalls verteilt. (Dokument ist hier)

https://github.com/dji-sdk/RoboMaster-SDK/tree/master/sample_code

Laut Herrn Bruno, der mit dieser Angelegenheit vertraut ist, unterstützt dieses SDK ursprünglich nicht S1, aber da die Konfiguration ähnlich ist, kann es umgeleitet werden, wenn es gut gemacht wird.

Referenz:

Was ich tatsächlich getan habe

Derzeit scheint ein Root-Zugriff erforderlich zu sein

Root-Zugriff von einem Windows 10-PC mit adb

Stellen Sie über den microUSB-Anschluss eine Verbindung zu Robomasters 1 von Ihrem Windows 10-Heim-PC her.

Ich werde basierend auf PDF hier fortfahren, aber beachten Sie, dass die Software nicht fest verwurzelt werden kann, wenn sie nicht fest verwurzelt ist. Bitte nicht aktualisieren **, da ein Bericht von vorliegt.

Vorbereitung

Bereiten Sie die folgenden Elemente vor.

Entpacken Sie Platform Tools und merken Sie sich den Speicherort des Ordners. Schließen Sie Ihren PC an Robomasters 1 an. image.png

** Bitte entfernen Sie das an Ihren PC angeschlossene Android-Gerät, bevor Sie mit dem nächsten Schritt fortfahren. ** ** **

Verbindung zwischen PC und Robomasters 1

  1. Schalten Sie Robomasters1 ein und starten Sie die Software auf der PC-Seite, um eine Verbindung herzustellen. (Ich habe eine Wifi-Verbindung)

  2. Gehen Sie zur Seite, um Python-Skripte aus "Lab" -> "DIY Programming" zu schreiben.

  3. Kopieren Sie den folgenden Code, fügen Sie ihn ein, um einen neuen zu erstellen, und führen Sie ihn aus. (Es sieht so aus, als würdest du sh drücken, um adb zu aktivieren.)

def root_me(module):
 __import__=rm_log.__dict__['__builtins__']['__import__']
 return __import__(module,globals(),locals(),[],0)
builtins=root_me('builtins')
subprocess=root_me('subprocess')
proc=subprocess.Popen('/system/bin/adb_en.sh',shell=True,executable='/system/bin/sh',stdout=subprocess.PIPE,stderr=subprocess.PIPE)

Verbindung mit adb

Wechseln Sie als Nächstes zum Ordner Platform Tools (dem Ordner, in dem adb ausgeführt werden kann), den Sie zuvor entpackt haben, und starten Sie Powershell. (Terminal für Linux-Leute)

.\adb.exe devices

Nach der Ausführung

.\adb.exe shell

Ausführen. Wenn alles gut geht, sollten Sie es wie unten gezeigt als root haben.

image.png

Was als nächstes zu tun ist (vielleicht)

Nachtrag: Wenn Sie sich [Exchange hier] ansehen (https://github.com/dji-sdk/RoboMaster-SDK/issues/10), müssen Sie die Datei von Robomaster EP kopieren, und Sie können es selbst tun. Korrekt ...

Erläuterung

Betrachtet man das SDK vom 12. August 2020, so scheint es, dass der SDK-Modus durch Senden eines Signals an einen bestimmten Port der Robomasters 1-Adresse aktiviert wird und verschiedene Befehle ausgegeben werden.

Beispielsweise sendet eine Testdatei, die das SDK aktiviert und verschiedene Anweisungen von einem PC aus ausführt, ein Signal über die Socket-Kommunikation an Port 40923.

SDK-Beispielcode
# -*- encoding: utf-8 -*-
#Messumgebung: Python 3.6 Ausgaben

import socket
import sys

#Unter dem Direktverbindungsmodell hat die Schreibtischausrüstungsperson IP-Erdungsstelle 192.168.2.1,Endnummer 40923 der einstweiligen Verfügung
host = "192.168.100.111"
port = 40923

def main():

        address = (host, int(port))

        #Yukikijin Rückhalteanordnung Ende Eingang Erektion TCP-Verbindung
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

        print("Connecting...")

        s.connect(address)

        print("Connected!")

        while True:

                #Gleiches Warten 户 Rückhalteanordnung importieren
                msg = input(">>> please input SDK cmd: ")

                #Zum Zeitpunkt von Q oder q vor dem Verlassen
                if msg.upper() == 'Q':
                        break

                #Additionsbindung
                msg += ';'

                #Rückhalteanordnung veröffentlichen
                s.send(msg.encode('utf-8'))

                try:
                        #Das Ergebnis der Rückkehr der Person
                        buf = s.recv(1024)

                        print(buf.decode('utf-8'))
                except socket.error as e:
                        print("Error receiving :", e)
                        sys.exit(1)
                if not len(buf):
                        break

        #Engagement
        s.shutdown(socket.SHUT_WR)
        s.close()

if __name__ == '__main__':
        main()

Bei einer Verbindung von der Clientseite wird jedoch der folgende Fehler ausgegeben.

ConnectionRefusedError: [WinError 10061]Es konnte keine Verbindung hergestellt werden, da dies vom Zielcomputer abgelehnt wurde.

Muss ich Hosts oder ähnliches bearbeiten oder mit der Berechtigung herumspielen? Ich untersuche es für einen Moment. (Ich möchte von jemandem lernen, der damit vertraut ist.)

Nachtrag: Als ich es ausprobiert habe, scheint das Problem zu sein, dass der in EP geöffnete Port in S1 nicht geöffnet ist.

Als Basis habe ich den folgenden Server mit Robomaster s1 gestartet und bestätigt, dass er von einem PC aus verbunden werden kann.

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.bind(("192.168.100.111", 1235))
s.listen(5)

timeout=60## run 60 sec
s.settimeout(timeout)

while True: 
    clientsocket, address = s.accept()
    print(f"Connection from {address} has been established!")
    clientsocket.send(bytes("Welcome to the server!", 'utf-8'))
    clientsocket.close()

print("Exit!")

Ergänzung: Durchsuchen Sie den Inhalt

Ich bin ein Amateur von Linux und Hack wie diesem, daher war es schwierig, den Inhalt zu sehen und zu verstehen. Ich werde es durch die Aufzeichnung posten.

System Information

Es scheint ein Linux-System zu sein.

$ cat /proc/version
Linux version 3.10.62 (jenkins@APServer01) (gcc version 4.7 (GCC) ) #1 SMP PREEMPT Tue Jul 16 04:08:11 CST 2019

Direkt unter /

Ich weiß nichts, also fühle ich mich so, als würde ich mir das ansehen, aber ich werde es mir notieren.

Klicken Sie hier, um
zu erweitern
amt
blackbox
cache
data
default.prop
dev
etc
file_contexts
ftp
init
init.environ.rc
init.lc1860.3connective.rc
init.rc
init.trace.rc
init.usb.rc
proc
property_contexts
root
sbin
sdcard
seapp_contexts
sepolicy
sys
system
system.md5
tmp
ueventd.rc
var
vendor

Python-Umgebung

Es gibt einen Python-Ordner in data / python_flies.

Der Inhalt von bin ist wie folgt

2to3
idle
pydoc
python
python-config
python3.6m
pyvenv

Sie können es tatsächlich tun. Die Umgebung scheint 3.6 zu sein.

126|root@xw607_dz_ap0002_v4:/data/python_files/bin # ./python
Python 3.6.6 (default, Jul 16 2018, 17:22:20)
[GCC 4.8.3 20140320 (prerelease)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

Der Unterschied zur Robomaster-App besteht darin, dass Sie bestimmte Pakete verwenden können.

In dem von der Anwendung erstellten Code wird beispielsweise ** Socket usw. beim Import als Fehler abgespielt, kann jedoch normal über die Root-Befehlszeilenausführung ausgeführt werden. ** ** **

Es wäre schön, wenn es einen Editor wie vi gäbe, aber was die Ausgabe von ls / system / bin betrifft, gibt es keinen Editor, so dass es notwendig erscheint, Dateien zu übertragen.

Wenn Sie wissen, wo sich die von der App erstellte Datei befindet, können Sie sie anscheinend bis zu einem gewissen Grad im Stammverzeichnis ausführen.

Inhalt von dev

Ausgelassen tty. Es gibt video0 und so weiter.

Klicken Sie hier, um
zu erweitern
alarm
android_adb
apple_roleswitch
applecp
ashmem
binder
block
bulk_usb
bus
comip-snd-lowpower
comip-ureg
console
cpu_dma_latency
cuse
full
fuse
graphics
hx170dec
hx280enc
hx280enc_h1
i2c-0
i2c-1
i2c-3
i2c-4
input
ion
kmsg
lcmem
log
loop-control
mem
modem
mtp_usb
network_latency
network_throughput
null
on2map
on2psm
ptmx
pts
random
rtc0
sdpr
sdps
snd
socket
spidev0.0
spidev1.0
spidev2.0
uio0
uio1
uio2
urandom
vcs
vcs1
vcsa
vcsa1
video0
zero

Recommended Posts

Ich möchte Robomaster S1 ① Rooting und Dateikonfigurationsprüfung hacken
Ich möchte ein Element mit numpy in eine Datei schreiben und es überprüfen.
Ich möchte die Einstellungsdatei erhalten und prüfen, ob die von jinja2 generierte JSON-Datei eine gültige JSON ist
Ich möchte Python-Code auf VS-Code nach meinen Wünschen formatieren und überprüfen
Wie auch immer, ich möchte JSON-Daten einfach überprüfen
Ich möchte die Eingabe / Ausgabe von Dateien unter Linux protokollieren
Ich möchte mit Python in eine Datei schreiben
Ich möchte eine Datei auf tkinter ablegen und ihren Pfad abrufen [Tkinter DnD2]
Ich möchte den Dateinamen, die Zeilennummer und den Funktionsnamen in Python 3.4 erhalten
Ich möchte in Python schreiben! (1) Überprüfung des Codeformats
Ich möchte den Dateinamen von DataLoader sehen
Ich möchte die Optimierung mit Python und CPlex behandeln
Ich möchte eine Datei mit Python zufällig testen
Ich möchte die Variablen in der Python-Vorlagendatei ersetzen und in einer anderen Datei in Massenproduktion herstellen
Ich möchte die von LINE an S3 gesendeten Fotos speichern
Ich möchte die Natur von Python und Pip kennenlernen
Ich möchte eindeutige Werte in einem Array oder Tupel zählen
Ich möchte, dass Sphinx bequem ist und von allen benutzt wird
Ich möchte VS Code und Spyder ohne Anakonda verwenden! !! !!
Ich möchte SUDOKU lösen
So überprüfen und ändern Sie Linux-Berechtigungen (chmod) (chmod) (Ich möchte bei Verweigerung von Permiss gespeichert werden)
Ich möchte Tag-Informationen (Titel und Künstler) einer Musikdatei (flac, wav) extrahieren.
Ich möchte APG4b mit Python lösen (nur 4.01 und 4.04 in Kapitel 4)
Ich möchte Rails mit Rails auch in einer vagabundierenden Umgebung betreiben
LINEbot-Entwicklung möchte ich den Betrieb in der lokalen Umgebung überprüfen
Ich möchte sowohl den Schlüssel als auch den Wert des Python-Iterators verwenden
Ich möchte japanische Bestandsdaten erfassen und auflisten, ohne sie zu kratzen
Holz kratzen und essen - ich möchte ein gutes Restaurant finden! ~ (Arbeit)
Ich möchte die Position meines Gesichts mit OpenCV überprüfen!
Ich möchte Bilder kratzen und trainieren
Ich möchte ○○ mit Pandas machen
Ich möchte Yolos Anmerkung kopieren
Ich möchte die Verarbeitung zwischen Testzeit und Produktionsumgebung trennen
Der Dateiname war in Python schlecht und ich war süchtig nach Import
Ich möchte die Gefühle von Menschen analysieren, die sich treffen und zittern wollen
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
Ich möchte eine Webanwendung mit React und Python Flask erstellen