vous ne pouvez pas exécuter des scripts vraiment IDAPython en dehors de l'IDA, mais vous pouvez faire en sorte IDA est exécuté silencieux et ne pas afficher son interface graphique.
Dans vos scripts, vous devez rediriger stdout
vers un fichier, par exemple:
import sys
import idaapi
import idc
import os
def stdout_to_file(output_file_name, output_dir=None):
'''Set stdout to a file descriptor
param: output_file_name: name of the file where standard output is written.
param: output_dir: output directory for output file, default to script directory.
Returns: output file descriptor, original stdout descriptor
'''
# obtain this script path and build output path
if not output_dir:
output_dir = os.path.dirname(os.path.realpath(__file__))
output_file_path = os.path.join(output_dir, output_file_name)
# save original stdout descriptor
orig_stdout = sys.stdout
# create output file
f = file(output_file_path, "w")
# set stdout to output file descriptor
sys.stdout = f
return f, orig_stdout
def main(args):
# get original stdout and output file descriptor
f, orig_stdout = stdout_to_file("output.txt")
if idc.ARGV:
for i, arg in enumerate(idc.ARGV):
print "[*] arg[{}]: {}".format(i, arg)
# call something from IDA (get the original input file name from IDB)
print "[*] filename from IDB: {}".format(idaapi.get_root_filename())
print("[*] done, exiting.")
# restore stdout, close output file
sys.stdout = orig_stdout
f.close()
# exit IDA
idc.Exit(0)
if __name__ == "__main__":
main(sys.argv)
ensuite sur la ligne de commande, vous pouvez appeler votre script IDAPython (en supposant l'IDA est dans votre PATH):
idaq.exe -A -S"C:\tmp\test_script.py foo bar" "C:\tmp\mydatabase.idb"
-A
est pour l'exécution de l'IDA silencieux
-S
est pour le script path et les arguments de script
- Le dernier argument est le chemin idb (ou utilisez
-t
pour générer un idb temporaire)
Vérifiez le fichier d'aide IDA pour obtenir une liste complète de toutes les options disponibles.
sortie, dans le fichier sortie.txt (la BID était à partir du fichier d'entrée 'calc.exe'):
[*] arg[0]: C:\tmp\test_script.py
[*] arg[1]: foo
[*] arg[2]: bar
[*] filename from IDB: calc.exe
[*] done, exiting.
Vous pouvez également consulter le blog de rayons hex intitulé "Running scripts from the command line with idascript"