2017-11-04 23 views
0

파이썬을 사용하여 특정 섹터 디스크 이미지 파일 (60GB)에서 16 진수 값을 어떻게 편집합니까?파이썬을 사용하여 디스크 이미지 파일의 특정 위치에서 16 진수 값 편집

Example: 
Given 512, 

File name: RAID.img 
Typical File size: 60gb+ 
Sector: 3 
Address Offset: 0000060A - 0000060F 
Value: 0f, 0a , ab, cf, fe, fe 

내가 생각할 수있는 코드 : 나는 부문 = 3에서 데이터를 수정하려면 어떻게

fname = 'RAID.img' 
with open(fname, 'r+b') as f: 
    newdata = ('\x0f\x0a\xab\xcf\xfe\xfe') 
    print newdata.encode('hex') 

는 주소 0000060A에서입니다 - 0000060F? 일부 라이브러리에서 사용할 수 있습니까? 당신은 당신이 업데이트 할 데이터의 정확한 오프셋 (바이트 위치)를 알고 있다면

답변

0

, 당신은 file.write 다음 file.seek을 사용할 수 있습니다

#!/usr/bin/env python 

offset = 0x60a 
update = b'\x0f\x0a\xab\xcf\xfe\xfe' 

with open('raid.img', 'r+b') as f: 
    f.seek(offset) 
    f.write(update) 

를 데이터 파일까지 (작은 경우 1메가바이트 아마도), 당신은 메모리의 데이터가 다음 파일을 다시 쓰기) 수정 (함께 플레이하는 bytearray으로 전체 이진 파일을 읽을 수 있습니다

#!/usr/bin/env python 

offset = 0x60a 
update = b'\x0f\x0a\xab\xcf\xfe\xfe' 

with open('raid.img', 'r+b') as f: 
    data = bytearray(f.read()) 
    data[offset:offset+len(update)] = update 
    f.seek(0) 
    f.write(data) 
+0

가 언급하는 것을 잊었다, 내 디스크 이미지 +에서 GB (60)입니다 크기 – Joal

+0

좋아, 내 업데이 트를 참조하십시오. – randomir

+0

x01에서 xof로 첫 번째 16 진 값 (현재 0xf)을 반복하는 방법은 무엇입니까? >>> 업데이트 = b '\ x0f \ x0a \ xab \ xcf \ xfe \ xfe' – Joal