Minor update to draw map. Now annotates multiple overlaps. But doesn't draw them yet..
This commit is contained in:
parent
dd28bd80d4
commit
13f080e111
12
.vscode/launch.json
vendored
12
.vscode/launch.json
vendored
@ -20,6 +20,18 @@
|
|||||||
"console": "integratedTerminal",
|
"console": "integratedTerminal",
|
||||||
"justMyCode": false
|
"justMyCode": false
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "FF_MemoryDrawer",
|
||||||
|
"type": "debugpy",
|
||||||
|
"request": "launch",
|
||||||
|
"program": "herrewebpy/firmware_forensics/memory_drawer.py",
|
||||||
|
"args": [
|
||||||
|
"--input",
|
||||||
|
"sample_data/csv/stack_and_functions.csv",
|
||||||
|
],
|
||||||
|
"console": "integratedTerminal",
|
||||||
|
"justMyCode": false
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "C-ReadPlanGenerator",
|
"name": "C-ReadPlanGenerator",
|
||||||
"type": "debugpy",
|
"type": "debugpy",
|
||||||
|
7
debug.py
7
debug.py
@ -4,5 +4,8 @@
|
|||||||
#from herrewebpy.firmware_forensics import function_extractor
|
#from herrewebpy.firmware_forensics import function_extractor
|
||||||
#function_extractor.FunctionExtractor('', 'ARM_AARCH64')
|
#function_extractor.FunctionExtractor('', 'ARM_AARCH64')
|
||||||
|
|
||||||
from herrewebpy.christianity import readplan_generator
|
#from herrewebpy.christianity import readplan_generator
|
||||||
readplan_generator.generate_readplan()
|
#readplan_generator.generate_readplan()
|
||||||
|
|
||||||
|
from herrewebpy.firmware_forensics import memory_drawer
|
||||||
|
memory_drawer.MemoryDrawer('sample_data/csv/stack_and_functions.csv')
|
@ -4,8 +4,8 @@ import random, argparse
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
|
|
||||||
def read_data(df):
|
def read_data(input_file):
|
||||||
data = pd.read_csv('stack_and_functions.csv')
|
data = pd.read_csv(input_file)
|
||||||
|
|
||||||
def convert_to_int(value):
|
def convert_to_int(value):
|
||||||
try:
|
try:
|
||||||
@ -27,24 +27,24 @@ def read_data(df):
|
|||||||
data.reset_index(drop=True, inplace=True)
|
data.reset_index(drop=True, inplace=True)
|
||||||
|
|
||||||
data['overlap'] = False
|
data['overlap'] = False
|
||||||
|
data['index'] = data.index
|
||||||
|
|
||||||
for i, row in data.iterrows():
|
for i, row in data.iterrows():
|
||||||
for j, row2 in data.iterrows():
|
# Annotate rows that overlap with each other
|
||||||
if i == j:
|
temp = data.loc[(data['start'] <= row['start']) & (data['end'] >= row['end'])]
|
||||||
continue
|
data.at[i, 'overlap'] = False
|
||||||
if row['start'] <= row2['end'] and row['end'] > row2['start']:
|
|
||||||
if row['end'] - row['start'] >= row2['end'] - row2['start']:
|
|
||||||
continue
|
|
||||||
data.at[i, 'overlap'] = True
|
|
||||||
data.at[j, 'overlap'] = True
|
|
||||||
data.at[i, 'overlap_with'] = j
|
|
||||||
|
|
||||||
data['overlap_with'] = data['overlap_with'].fillna(data.index.to_series())
|
|
||||||
data['overlap_with'] = data['overlap_with'].astype(float)
|
|
||||||
|
|
||||||
|
if temp.shape[0] > 1:
|
||||||
|
data.at[i, 'overlap'] = True
|
||||||
|
# Increment the overlap_with column, with the value of of the column 'index' of the row, and allow multiple overlaps
|
||||||
|
data.at[i, 'overlap_with'] = ','.join(temp['index'].astype(str).to_list())
|
||||||
|
data.at[i, 'overlap_with'] = True
|
||||||
|
|
||||||
# Send warnings if sizes are negative
|
# Send warnings if sizes are negative
|
||||||
if (data['size'] < 0).any():
|
if (data['size'] < 0).any():
|
||||||
print(f'Warning: Negative sizes detected at indices {data[data["size"] < 0].index}')
|
print(f'Warning: Negative sizes detected at indices {data[data["size"] < 0].index}')
|
||||||
|
|
||||||
|
return data
|
||||||
|
|
||||||
|
|
||||||
def draw_diagram(data):
|
def draw_diagram(data):
|
||||||
@ -193,15 +193,20 @@ def draw_diagram(data):
|
|||||||
legend_title_text="Function/Locations",
|
legend_title_text="Function/Locations",
|
||||||
)
|
)
|
||||||
|
|
||||||
def write_output(fig):
|
return fig
|
||||||
fig.write_html("../_static/stack_and_functions.html")
|
|
||||||
|
def write_output(fig, output_file):
|
||||||
|
fig.write_html(f'{output_file}.html')
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
argparser = argparse.ArgumentParser()
|
argparser = argparse.ArgumentParser()
|
||||||
argparser.add_argument('input', help='Input CSV file path', required=True)
|
argparser.add_argument('--input', help='Input CSV file path', required=True, type=str)
|
||||||
argparser.add_argument('output', help='Output HTML filename', required=False)
|
argparser.add_argument('--output', help='Output HTML filename', required=False, type=str)
|
||||||
args = argparser.parse_args()
|
args = argparser.parse_args()
|
||||||
|
|
||||||
data = read_data('stack_and_functions.csv')
|
if not args.output:
|
||||||
|
args.output = 'memory_drawer'
|
||||||
|
|
||||||
|
data = read_data(args.input)
|
||||||
fig = draw_diagram(data)
|
fig = draw_diagram(data)
|
||||||
write_output(fig)
|
write_output(fig, args.output)
|
14
memory_drawer.html
Normal file
14
memory_drawer.html
Normal file
File diff suppressed because one or more lines are too long
@ -8,4 +8,5 @@ capstone
|
|||||||
keystone
|
keystone
|
||||||
plotly
|
plotly
|
||||||
BioPython
|
BioPython
|
||||||
pythonbible
|
pythonbible
|
||||||
|
tqdm
|
22
sample_data/csv/stack_and_functions.csv
Normal file
22
sample_data/csv/stack_and_functions.csv
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
start,end,name,order,comment,X0,LR
|
||||||
|
0x00000000,0x00020000,BootROM,,,,
|
||||||
|
0x02020f60,0x02020f68,_boot_usb_ra,,,,
|
||||||
|
0x00012848,0x000128e8,auth_bl1,,,,
|
||||||
|
0x000064e0,0x0000658c,_boot_usb,,,,
|
||||||
|
0x020c0000,0x020c0004,_frederic_dest_ptr,,,,
|
||||||
|
0x000002c0,0x000002c4,_jump_bl1,,,,
|
||||||
|
0x02022000,0x02024000,BL1,,,,
|
||||||
|
0x02024000,0x02048000,BL31,,,,
|
||||||
|
0x02048000,0x0206ed10,BL2,,,,
|
||||||
|
0x02069000,0x0206f000,Debugger,,,,
|
||||||
|
0x020c0000,0x020c7000,Debugger relocated,,,,
|
||||||
|
0x02048000,0x0204daf0,BL2 empty space?,,,,
|
||||||
|
0x0204eb00,0x0204eb00,BL2 copy start/source,,,,
|
||||||
|
0x020c2000,0x020e8d10,BL2 load address?,,,,
|
||||||
|
0x0206ed10,0x02070000,End/Start peripheral space?,,,,
|
||||||
|
0x02019e5c,0x02020e5c,Tried debugger space,,,,
|
||||||
|
0x020C7800,0x020C8000,modem_interface,,,,
|
||||||
|
0x14AC0000,0x14ac5000,mali@14AC0000,,,,
|
||||||
|
0x02035600,0x02035608,TTBR0_EL3 address ptr,,,,
|
||||||
|
0x11207010,0x11207010,memread/write space,,,,
|
||||||
|
0xa0000000,0xa0013fff,Parts of BL2,,,,
|
|
Loading…
Reference in New Issue
Block a user