파이썬 unpack 오류 해결좀... 부탁드립니다.
조회수 1139회
#-*- coding: utf-8 -*-
from winreg import *
from os.path import basename
import re, struct
net = "SYSTEM\\CurrentControlSet\\Control\\Session Manager\\AppCompatCache"
reg = ConnectRegistry(None,HKEY_LOCAL_MACHINE)
key = OpenKey(reg, net)
a,b,c = EnumValue(key,0)
bin_size = len(b)
print(bin_size)
binary = b
n = 0
header_size = binary[0]
while n < bin_size:
bin = binary[n+header_size:]
signature = bin[0:4].decode()
unknown = bin[4:8].hex()
entry_size = struct.unpack('i',bin[8:12])[0]
path_len = struct.unpack('h',bin[12:14])[0]
path_str = bin[14:path_len+14].decode('UTF-16')
time = bin[path_len+14:path_len+14+8]
data_size = struct.unpack('i',bin[path_len+22:path_len+26])[0]
#data = bin[path_len+14+12:path_len+14+12+data_size]
print("\nSignatue : " + signature)
print("\nEntrySize : ",entry_size)
print("\nPath Length : ",path_len)
print("\nPath : " + path_str)
print("\nTime : " ,time)
print("\nDataSize : " ,data_size)
n += path_len+12+14+data_size
코드를 실행하면 결과의 맨 마지막에 에러가 뜨는데 왜 에러가 뜨는지 감이 안잡힙니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
디버거 사용법을 익히세요
에러가 나는 이유는
bin = binary[n+header_size:]
슬라이싱후 결과가 없습니다.data size 이후부터 무조건 자르겠다는 식인데 끝까지 진행하면 더 이상 값이 없을 수도 있다(헤더만 있음)는 것을 놓친겁니다.
간단한 해결방법은 아래와 같이 검증로직을 넣는 겁니다.
while n < bin_size: bin = binary[n+header_size:] if not bin:break # bin 값이 없으면 중지 signature = bin[0:4].decode()
댓글 입력