MCPcopy Index your code
hub / github.com/dobin/SuperMega / Injectable

Class Injectable

model/injectable.py:42–95  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

40
41
42class Injectable():
43 def __init__(self, exe_file: str):
44 self.iat_requests: List[IatRequest] = []
45 self.reusedata_fixups: List[DataReuseEntry] = []
46 self.exe_filepath: str = exe_file
47 self.superpe: SuperPe = None
48
49 def init(self) -> bool:
50 # check if file exists
51 if not os.path.exists(self.exe_filepath):
52 logger.error("Injectable file does not exist: {}".format(self.exe_filepath))
53 return False
54 self.superpe = SuperPe(self.exe_filepath)
55 return True
56
57
58 # IAT
59
60 def add_iat_request(self, func_name: str, placeholder: bytes):
61 # existing?
62 for iat in self.iat_requests:
63 if iat.name == func_name:
64 iat.add_reference(placeholder)
65 return
66
67 # new
68 self.iat_requests.append(IatRequest(func_name, placeholder))
69
70 def get_all_iat_requests(self) -> List[IatRequest]:
71 return self.iat_requests
72
73 def get_unresolved_iat(self):
74 """Returns a list of IAT entries not available in the PE file"""
75 functions = []
76 for iat in self.iat_requests:
77 if self.superpe.get_vaddr_of_iatentry(iat.name) == None:
78 functions.append(iat.name)
79 return functions
80
81
82 # Data Reuse
83
84 def add_datareuse_fixup(self, fixup: DataReuseEntry):
85 logger.debug(" Add datareuse: {}".format(fixup.string_ref))
86 self.reusedata_fixups.append(fixup)
87
88 def get_all_reusedata_fixups(self) -> List[DataReuseEntry]:
89 return self.reusedata_fixups
90
91 def get_reusedata_fixup(self, string_ref) -> DataReuseEntry:
92 for entry in self.reusedata_fixups:
93 if entry.string_ref == string_ref:
94 return entry
95 return None
96

Callers 6

initMethod · 0.90
test_asm_fixupMethod · 0.90
test_asm_iat_requestMethod · 0.90
test_data_reuse_fixupMethod · 0.90
compile_devFunction · 0.90

Calls

no outgoing calls

Tested by 4

test_asm_fixupMethod · 0.72
test_asm_iat_requestMethod · 0.72
test_data_reuse_fixupMethod · 0.72