Describe the bug
특정 파일을 BinHandler로 로딩하는 과정에서 아래와 에러가 발생합니다.
C:\b2r2-dlls>ipy32 b2r2.py
./test/DeviceUxRes.dll
./test/DeviceUxRes.dll
Traceback (most recent call last):
File "b2r2.py", line 30, in <module>
IndexError: 인덱스가 배열 범위를 벗어났습니다.
To Reproduce
import clr
import os, sys
sys.path.append(os.path.abspath(r'./build_release/'))
clr.AddReferenceToFile(r'B2R2.Core.dll')
clr.AddReferenceToFile(r'B2R2.FrontEnd.Core.dll')
clr.AddReferenceToFile(r'B2R2.FrontEnd.Library.dll')
from B2R2 import *
from B2R2.FrontEnd import *
def search(dirname):
result = []
filenames = os.listdir(dirname)
for filename in filenames:
full_filename = os.path.join(dirname, filename)
ext = os.path.splitext(full_filename)[-1]
if ext == '.exe' or ext == ".dll":
result.append(full_filename)
return result
result = search(r'./test/')
for name in result:
try:
print name
handler = BinHandler.Init(ISA.OfString("i386"),name)
for s in handler.FileInfo.GetSections():
print " %s:%s [%s]"%(hex(s.Address),hex(s.Address+s.Size),s.Name)
except:
print name
raise
#pass
위 코드를 실행하였을때, 정상적으로 동작한다면 섹션들의 정보가 출력되어야겠지만, 오류가 발생합니다.
Describe the bug 특정 파일을 BinHandler로 로딩하는 과정에서 아래와 에러가 발생합니다.
To Reproduce
위 코드를 실행하였을때, 정상적으로 동작한다면 섹션들의 정보가 출력되어야겠지만, 오류가 발생합니다.
(문제가 발생 하는 파일은 여기 에서 다운로드 받을 수 있습니다.)
Additional context
PEHelper의 parseEAT 에서 문제가 발생하는데,
이 코드에서 edt.ExportAddressTableRVA가 0을 가르키고, getRawOffset의 아래 부분에서
-1의 인덱스를 참조하여 오류가 발생합니다.
이 파일은 아래 그림과 같이 Export Directory가 존재하고, Name도 있지만, 나머지 값들이 0인데, 이 경우에는 EAT를 파싱하지 않도록 수정하면 될 것 같습니다.
Environment (please complete the following information):