You can use Speakeasy as a Python library through the speakeasy.Speakeasy interface.
import speakeasy
se = speakeasy.Speakeasy()
module = se.load_module("sample.dll")
se.run_module(module, all_entrypoints=True)
report = se.get_report()
se.shutdown()import speakeasy
se = speakeasy.Speakeasy()
module = se.load_module("sample.dll")
se.run_module(module)
for export in module.get_exports():
if export.name == "myexport":
se.call(export.address, [0x0, 0x1])
report = se.get_report()
se.shutdown()- pass
config=to control environment and analysis - pass
argv=to populate emulated process arguments - pass
volumes=to mount host paths into emulated filesystem - pass
gdb_port=to block for GDB attach before execution;gdb_host=controls the bind address and defaults to127.0.0.1
se.add_api_hook(cb, "user32", "MessageBox*") calls cb(emu, api_name, func, params) in place of the handler. params holds the raw argument slots, and func(params) runs the handler. After that call, emu.get_api_args() returns the arguments as the report shows them, with the values the handler decoded:
def hook_messagebox(emu, api_name, func, params):
rv = func(params)
print(emu.get_api_args()[1].display) # the lpText string
return rvFor runnable scripts, see ../examples.