binäres Rätsel

Neue Frage »

Honeybye Auf diesen Beitrag antworten »
binäres Rätsel
Hallo zusammen,

könnt ihr euch bitte einmal den binären Lindwurm im Anhang anschauen und mir sagen, was das sein könnte bzw. welcher Text dahinter steckt? Mein erster Gedanke war ASCII-Code, da in jeder Zeile 80 Bits stehen. Demnach wäre der erste 8er-Block ein P, der nächste ein K, dann der Code für Textende und Ende Übertrag. Aber dann weiß ich nicht mehr weiter, weil 27 Bits nur aus Nullen bestehen, und das macht ASCII-mäßig keinen Sinn. Auch alle anderen mir bekannten Binär-Codes haben keine so immense Häufung von Nullen. Diese Häufung kommt in den insgesamt 34 Zeilen mehrmals vor.

Besten Dank schonmal und Gruß
honeybye
AD Auf diesen Beitrag antworten »

Ach ja, diese Geocacher ...

Das ist ein ganz ordinärer ZIP-File, in dessem Inneren sich ein netter 8086-Assembler-Quellfile für ein MS-DOS-Programm (liebe Grüße aus der Steinzeit Big Laugh ) befindet, der dir wohl die nächste Position verraten soll...
Honeybye Auf diesen Beitrag antworten »
binäres Rätsel
Hallo Arthur,

Du siehst mich ehrfürchtig erstaunt, darauf wäre ich niemals gekommen, besten Dank. Da ich leider kein Programmierer bin, ist mir der weitere Werdegang nicht klar. Komme ich so weiter: das file Rätsel.txt umbenenne ich einfach in z.B. Rätsel.zip und entpacke es. Dann müßte im Entpacker irgendwas stehen wie r*.bat, exe oder com. Das rufe ich einfach auf und erfahre den Text. Kommt das so hin?

Viele Grüße
honeybye
AD Auf diesen Beitrag antworten »

Hast du denn schon den ZIP-File ausgepackt? Da steht eine Datei namens 80x86.asm drin. Dann wird's ja erst richtig spannend. Augenzwinkern
Honeybye Auf diesen Beitrag antworten »

Leider habe ich davon so gut wie keine Ahnung. Wie oder womit soll ich denn das zip-file entpacken, wenn ich nur binäre Daten habe? Ich habe mir mal ein "richtiges" zip-file mit dem Editor angesehen, und es beginnt mit PK geschrieben in ASCII, umgewandelt in binär ist es 01010000. Muß ich jetzt alle binären Bytes händisch in ASCII übersetzen, dann diese Datei z.B. bbb.zip nennen, und beim entpacken erscheint diese Assembler-Datei?
AD Auf diesen Beitrag antworten »

Das muss ja nicht händisch sein - schreib ein kleines Programm! Ich dachte, Geocacher sind beweglicher...
 
 
Honeybye Auf diesen Beitrag antworten »

Wie schon erwähnt bin ich kein Programmierer und habe von dieser Materie keine Ahnung. Da nutzt leider die ganze Beweglichkeit nix, wenn das erforderliche Wissen nicht vorhanden ist ;-) Nun gut, wenn es mit händisch übersetzen auch geht, nehme ich das gerne auf mich, auch wenn's ne Weile dauert.
Gualtiero Auf diesen Beitrag antworten »

@Honeybye
Zum Vergleichen: das habe ich herausbekommen, allerdings mit einem kleinen, schnell geschriebnenen Progrämmchen. Augenzwinkern
Die Datei 80x86.asm kann ich hier nicht hochladen, deshalb nur der Inhalt.

stack segment
dw 128 dup(0)
ends

code segment
start:
mov ax, data
mov ds, ax
mov es, ax

mov cx, 100b
mov dx, 0
mov si, 03h
mov ax, 117735O
mov bx, 10h
mx: div bx
mov east_minutes[si], dl
dec si
loop mx
mov si, 03h
mov ax, 104644O
mov cx, 100b
my: div bx
mov north_minutes[si], dl
dec si
loop my

mov ax, 4c00h
int 21h
ends

end start
AD Auf diesen Beitrag antworten »

Wenn schon, dann bitte vollständig: Da fehlt der Anfang, das zugehörige Datensegment:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
data segment
    north_minutes db 4 dup(0)
    east_minutes db 4 dup(0)
ends

stack segment
    dw   128  dup(0)
ends

code segment
start:
    mov ax, data
    mov ds, ax
    mov es, ax
    
    mov cx, 100b
    mov dx, 0
    mov si, 03h 
    mov ax, 117735O 
    mov bx, 10h 
mx: div bx   
    mov east_minutes[si], dl 
    dec si 
    loop mx 
    mov si, 03h
    mov ax, 104644O
    mov cx, 100b
my: div bx
    mov north_minutes[si], dl
    dec si
    loop my
 
    mov ax, 4c00h
    int 21h    
ends

end start

Das muss ein 40+Programmierer gewesen sein, der sowas gemeines verpacken konnte. Big Laugh

Übrigens nützt auch das Kompilieren und reines Ausführen als DOS-Programm herzlich wenig: Die Ergebnisse werden zwar in den beiden enthaltenen Schleifen in den Variablen north_minutes und east_minutes abgelegt, aber nirgends brauchbar ausgegeben (auf Bildschirm oder in Datei). Nur mit einem Debugger oder durch "Nachvollziehen" der Rechnung bekommt man die Resultate - ich empfehle den zweiten Weg. Augenzwinkern
Honeybye Auf diesen Beitrag antworten »

Hallo Gualtiero, hallo Arthur,

wow, besten Dank für die Übersetzung. Meine bisherigen Versuche, die Binärdaten in ASCII zu überführen und dann zu entzippen, waren leider erfolglos; angeblich war immer das zip-file defekt. Die Frage für mich als Laie ist, wie mache ich weiter? Wenn ich Arthur richtig verstehe, kann ich das asm-file mit einem Debugger dazu bewegen, die Koordinaten auszugeben. Wenn ich mich recht erinnere, gab's bei den MSDOS-Versionen den debug- Befehl. Ich werde meine alten MSDOS5-Disketten mal auskramen und probieren, wie weit ich komme. Die Rechnung nachvollziehen kann ich mangels des erforderlichenWissens sicher nicht, aber ich werde versuchen die Assemblerbefehle zu verstehen. Vielleicht hilft mir das auch ein wenig weiter.

Besten Dank nochmal an euch beide und viele Grüße
honeybye
AD Auf diesen Beitrag antworten »

Wenn man's einmal hat, ist es gar nicht so schwer. Kernstück sind die beiden Schleifen

code:
1:
2:
3:
4:
mx: div bx   
    mov east_minutes[si], dl 
    dec si 
    loop mx 


code:
1:
2:
3:
4:
my: div bx
    mov north_minutes[si], dl
    dec si
    loop my

die beide jeweils 100b = 4-mal durchlaufen werden. Die Suffixe hinter den Zahlen im Assemblercode verrate ich mal noch, dann lasse ich dich allein rätseln - viel Spaß mit dem Prozessor 8086, dessen Urenkel heute immer noch die PC-Landschaft dominieren. smile

b ... binär (Basis 2)
O ... oktal (Basis 8)
h ... hexadezimal (Basis 16)
ohne Suffix ... dezimal (Basis 10, also "normal")
Gualtiero Auf diesen Beitrag antworten »
RE: binäres Rätsel
Zitat:
Original von Arthur Dent
Wenn schon, dann bitte vollständig: Da fehlt der Anfang, das zugehörige Datensegment:

Sorry, ich Doofkopp hab beim Markieren nicht bis an den Dateianfang gescrollt. traurig
Honeybye Auf diesen Beitrag antworten »

Das asm-file habe ich nun in einen 8086-Emulator geladern und im debug-mode single-step ablaufen lassen. Leider wurden dabei die Inhalte der beiden Variablen north- und east-minutes nicht angezeigt. Dann habe ich versucht die Assemblerbefehle zu übersetzen und zu verstehen, aber das hat mir auch nicht weitergeholfen. Es werden zwar verschiedene Hex- und Dez-werte in verschiedene Register geschrieben, aber was sagt das dem Laien? Meine rechnerischen Versuche (z.B. 1177350/4) ergaben natürlich auch nur Müll. Als letztes habe ich das Programm versucht mit im web gefundenen Codeschnipseln so umzuschreiben, das die Ergebnisse der beiden Variablen am Bildschirm ausgegeben werden:

nach Zeile loop,my

mov bx,1 Ausgabe am Bildschirm
mov dx, offset north_minutes Inhalt der Variablen anzeigen
mov ah,40 Zeichen ausgeben
mov ax,4c00h Programm beenden
int 21,h

Natürlich funktionierte das auch nicht. Welche Befehle müßte ich denn eingeben, daß nach dem compilieren des asm-files die Ergebnisse am Bildschirm im DOS-Mode angezeigt werden?
AD Auf diesen Beitrag antworten »

Zitat:
Original von Honeybye
Natürlich funktionierte das auch nicht.

Das Problem ist, dass die Werte, die in die Felder eingetragen werden, keine ASCII-Codes sind, sondern nur Werte zwischen 00h ... 0Fh - das sind keine druckbaren Zeichen. Der Autor des ASM-Files ist wirklich ziemlich fies. Augenzwinkern
Honeybye Auf diesen Beitrag antworten »

Es ist zum Mäusemelken, in den Datenfeldern stehen nur Nullen. Bei der Umwandlung in ein bin-file steht in Zeile 35 für Nord 0000: 00 00 00 00, in Zeile 36 für Ost dasselbe. Wenn auch die ASCII-Zeichen 0 - 0Fh nicht druckbar sind, sichtbar am Bildfschirm müßten sie doch sein.
AD Auf diesen Beitrag antworten »

Zitat:
Original von Honeybye
Wenn auch die ASCII-Zeichen 0 - 0Fh nicht druckbar sind, sichtbar am Bildfschirm müßten sie doch sein.

Du nimmst mich allzu wörtlich: Mit "druckbar" meine ich nicht nur auf Papier, sondern auch auf den Bildschirm. Finger1



Was soll's, des Rätsels Lösung (?):

Es ist 117735O = 9FDDh und 104644O = 89A4h, und genau diese Hexziffern werden durch diese Divisionsschleifen dann in die Variablen eingetragen, wo dann im Endeffekt folgendes steht

code:
1:
2:
3:
4:
data segment
    north_minutes   db  08h, 09h, 0Ah, 04h
    east_minutes    db  09h, 0Fh, 0Dh, 0Dh
ends


Damit bin ich am Ende - inwieweit das nun geografische Koordinaten sind, vermag ich nicht zu erkennen, das ist dann wirklich dein Part. Augenzwinkern
Honeybye Auf diesen Beitrag antworten »

danke, Arthur, das hilft mir schon mal sehr weiter. Koordinaten sind das ganz sicher nicht; vermutlich ist noch irgendwo eine Gemeinheit eingebaut. Man muß sicher noch irgendwie umrechnen.

Noch eine Frage: was hat es mit dem stack-segment in diesem file auf sich? Warum wird da ein word definiert (dw), das aus 128 Nullen besteht?
AD Auf diesen Beitrag antworten »

Dann willst du wohl doch noch Programmieren lernen. Augenzwinkern

Sinn und Zweck eines Programmierstacks
Honeybye Auf diesen Beitrag antworten »

Nee, programmieren will ich nicht lernen, ich bleibe schon bei meinem Leisten. Mir würde es schon reichen, nur DIESES Assemblerfile zu verstehen und Deine Schritte nachvollziehen zu können. Aber das wird wohl nicht so einfach sein, weil mir ja jegliches Grundwissen fehlt. Jedenfalls werde ich mir noch einige webseiten zu diesem Thema ansehen; vielleicht checke ich's ja doch noch.
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »