對一批二進制文件執行IDA Python腳本


IDA的批處理

參考IDA官方提供的幫助文檔,下面的命令將會對指定文件執行指定腳本且不顯示IDA的窗口,因此,遍歷文件夾內所有文件,依次執行下面的命令即可。

ida -c -A -S"script_path" filepath

參數說明:

-c 刪除舊的數據庫
-A autonomous模式,IDA將不會顯示
-S 后面緊跟着IDA Python腳本的路徑

IDA Python腳本的限制

在使用批處理時,IDA Python的腳本中需要按照如下的模式進行編程,其中idc.Wait()是等待IDA對二進制文件的自動分析結束,idc.Exit()是用來結束IDA進程的。

def main():
    pass

if __name__ == "__main__":
    idc.Wait()
    main()
    idc.Exit(0)

特別需要注意的是idc.Exit(0),如果寫成idc.Exit(1)或者idc.Exit(),那么ida退出之后將不會打包成數據庫文件。

IDA Python中的參數傳遞

在使用批處理時,一個常見的場景是需要傳遞參數,script_path中是可以包含參數的,例如

ida -c -A -S"script_path argv[1] argv[2] argv[3]" filepath

在腳本中獲取參數的方式和正常Python有所不同,如下所示:

import idc

def main(A, B, C):
    pass

if __name__ == "__main__":
    idc.Wait()
    main(idc.ARGV[1], idc.ARGV[2], idc.ARGV[3])
    idc.Exit(0)

ps:
除了參數傳遞,有時候還會想讓腳本的輸出打印在控制台中,而不是文件中。
在IDA/python目錄下,可以找到init.py

sys.stdout = sys.stderr = IDAPythonStdOut()

這里面將標准輸出和標准錯誤都重定向至IDAPythonStdOut類中,將這句代碼注釋掉,然后再使用ida的命令行版本idat執行批處理可以解決這個問題。由於ida和idat的執行結果有不一致的地方,在項目中並沒有使用這樣的方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM