Skip to content

Commit 8adf5fb

Browse files
author
Daniel Plohmann (jupiter)
committed
a couple fixes as noticed while testing against malpedia
1 parent e8d768b commit 8adf5fb

11 files changed

+532337
-52
lines changed

analyze.py

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,12 @@
22
import json
33
import os
44
import re
5-
import sys
65
import time
76
import traceback
87

98
import config
109
from smda.Disassembler import Disassembler
1110
from smda.utility.FileLoader import FileLoader
12-
from smda.common.SmdaExceptions import TimeoutException
1311

1412

1513
def parseBaseAddrFromArgs(args):
@@ -24,7 +22,7 @@ def parseBaseAddrFromArgs(args):
2422

2523
def disassembleFile(file_path, base_addr, map_file=False):
2624
print("now analyzing {}".format(file_path))
27-
loader = FileLoader(file_path, base_addr=base_addr, map_file=map_file)
25+
loader = FileLoader(file_path, map_file=map_file)
2826
file_content = loader.getData()
2927
disasm = Disassembler(config)
3028
start = time.clock()
@@ -40,21 +38,22 @@ def disassembleFile(file_path, base_addr, map_file=False):
4038

4139

4240
if __name__ == "__main__":
43-
parser = argparse.ArgumentParser(description='Demo: Use SMDA to disassemble a given file (loaded memory view), optionally map it first and/or write the output to a file.')
44-
parser.add_argument('-m', '--map_file', action='store_true', default=False, help='Perform mapping of the file as normalization.')
45-
parser.add_argument('-b', '--base_addr', type=str, default='', help='Set base address to given value (int or 0x-hex format).')
46-
parser.add_argument('-o', '--output_path', type=str, default='', help='Optionally write the output to a file (JSON format).')
47-
parser.add_argument('input_path', type=str, default='', help='Path to file to analyze.')
48-
49-
args = parser.parse_args()
50-
if args.input_path:
41+
PARSER = argparse.ArgumentParser(description='Demo: Use SMDA to disassemble a given file (loaded memory view), optionally map it first and/or write the output to a file.')
42+
PARSER.add_argument('-m', '--map_file', action='store_true', default=False, help='Perform mapping of the file as normalization.')
43+
PARSER.add_argument('-b', '--base_addr', type=str, default='', help='Set base address to given value (int or 0x-hex format).')
44+
PARSER.add_argument('-o', '--output_path', type=str, default='', help='Optionally write the output to a file (JSON format).')
45+
PARSER.add_argument('input_path', type=str, default='', help='Path to file to analyze.')
46+
47+
ARGS = PARSER.parse_args()
48+
if ARGS.input_path:
5149
REPORT = {}
52-
if os.path.isfile(args.input_path):
53-
base_addr = parseBaseAddrFromArgs(args)
54-
REPORT = disassembleFile(args.input_path, base_addr, map_file=args.map_file)
55-
if args.output_path:
56-
with open(args.output_path, "w") as fout:
50+
INPUT_FILENAME = ""
51+
if os.path.isfile(ARGS.input_path):
52+
BASE_ADDR = parseBaseAddrFromArgs(ARGS)
53+
INPUT_FILENAME = os.path.basename(ARGS.input_path)
54+
REPORT = disassembleFile(ARGS.input_path, BASE_ADDR, map_file=ARGS.map_file)
55+
if REPORT and os.path.isdir(ARGS.output_path):
56+
with open(ARGS.output_path + os.sep + INPUT_FILENAME + ".smda", "w") as fout:
5757
json.dump(REPORT, fout, indent=1, sort_keys=True)
5858
else:
59-
parser.print_help()
60-
59+
PARSER.print_help()

config.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@
77
VERSION = "1.0.1"
88

99
### An (optional) WinAPI database as generated by ApiScout (https://github.com/danielplohmann/apiscout)
10-
API_COLLECTION_FILE = PROJECT_ROOT + os.sep + os.sep.join(["data", "apiscout_winxp_prof_sp3.json"])
10+
API_COLLECTION_FILES = {
11+
"win_xp": os.sep.join([PROJECT_ROOT, "data", "apiscout_winxp_prof_sp3.json"]),
12+
"win_7": os.sep.join([PROJECT_ROOT, "data", "apiscout_win7_prof-n_sp1.json"])
13+
}
1114

1215
### global logging-config setup
1316
LOG_PATH = "./"

0 commit comments

Comments
 (0)