2017-08-20 2 views
0

J'ai un fichier que je regarde. Quand je l'ouvre dans un éditeur hexadécimal, le début montre tout 00 00 tandis que le bas montre 64 C4 54 F7. Les octets magiques pour un ELF sont 7F 45 4C 46, ce qui est l'inverse de cela. J'utilise python pour essayer de retourner le programme en arrière autour, mais quand je le fais, je reçois F7 54 C4 64 au lieu de 45 4C souhaité 7F 46. Voici le code que je utilisele fichier est en arrière, littéralement

import sys 

if len(sys.argv) < 2: 
    print "Error: one argument is required!" 
    exit(-1) 

try: 
    f1 = open(sys.argv[1], 'r') 
except IOError: 
    print "Error: the file cannot be opened." 
    exit(-1) 

# else 
lines = [] 
for line in f1: 
    line = line.replace('\n', '') 
    reversedLine = line[::-1] 
    lines.append(reversedLine) 
f1.close() 

reversedLines = lines[::-1] 
for line in reversedLines: 
    print line 

end of file

after script

toute aide sera grandement appréciée

+1

on dirait que vous voulez inverser comme une séquence de morceaux de 4 bits plutôt qu'une série d'octets. D'où vient ce fichier, cependant? Pourquoi ressemble-t-il à un fichier ELF inversé comme une séquence de morceaux de 4 bits? – user2357112

+0

J'aide un ami, on m'a dit que c'était peut-être un ELF. Quand je l'ai regardé au début il a juste montré "données" avec la commande de fichier alors je doutais que c'était un ELF, essayé quelques autres choses ... rien. Puis je l'ai ouvert en hexagone et j'ai vu les octets magiques. Principalement juste suscité ma curiosité. –

+0

Si c'est un fichier binaire, je ne pense pas que 'for line in f1' soit la bonne façon de le lire. –

Répondre

0
l = [] 
with open(sys.argv[1], 'rb') as f: 
    ch = f.read(1) 
    while ch != "": 
     byte = ord(ch) 
     reverse_byte = chr((byte & 15) << 4 | byte >> 4) 
     l.insert(0, reverse_byte) 
     ch = f.read(1) 

with open(sys.argv[1], 'wb') as g: 
    for byte in l: 
     g.write(byte) 
+0

ce que le b se référant à reverse_byte @JackYang? Je vois ce que vous faites avec le bitwise mais b n'est pas défini. se référant à l'octet? –

+0

Oui, il devrait être octet. Ma faute de frappe. –

+0

hmm son ne renversant rien. Après l'avoir exécuté sur le fichier, la seule chose qui s'y trouve est 00. Toutes les autres données ont été effacées. http://imgur.com/a/DqYFO –