zoukankan      html  css  js  c++  java
  • 运行二进制分析框架Genius 配置IDA6.8+python2.7+idapython 使用命令行执行idapython脚本 idapython传参问题的解决 No module named _idaapi

    参考论文

    Scalable graph-based bug search for firmware images

    https://github.com/qian-feng/Gencoding

    windows

    1.1 安装python2.7  

    https://www.python.org/downloads/release/python-2716/   选择32位python 。并设置环境变量。

    注意,如果之前安装过python3,只需要在环境变量上移到3之上  (where python)

     1.2安装ida.

    参考 https://www.cnblogs.com/CoBrAMG/p/9198113.html 安装。

    最好按照对应版本的ida,如6.8.     注意,Genius源码是python2写的,需要环境为IDA6.8+PYTHON2.7(32位)

    若安装idapython7.0以上,自带idapython,可以跳过下面1.3-----但是只能用python3的脚本。而https://github.com/qian-feng/Gencoding提供的Genius源码是python2的,所以需要自己更改

     1.3 安装idapython

    ida6.8

    https://github.com/idapython/bin

    1. 将IDAPython解压后的Python文件夹内的所有内容覆盖掉IDA原有Python文件夹(IDA安装目录下)下面的内容。
    2. 将IDAPython解压后的Plugins文件夹的python.plw和python.p64拷贝到IDA原有Plugins文件夹(自定义,一般IDA安装目录下)下。
    3. 将IDAPython解压后的python.cfg文件拷贝到IDA原有cfg文件夹(IDA安装目录下)下。

    解决:

    参考以下两个博客,没有解决问题

    http://spd.dropsec.xyz/2016/10/04/%E5%85%B3%E4%BA%8EIDA%E6%89%BE%E4%B8%8D%E5%88%B0%E6%8C%87%E5%AE%9A%E7%9A%84%E6%A8%A1%E5%9D%97%E7%9A%84%E6%83%85%E5%86%B5/

    https://hex-rays.com/blog/ida-and-common-python-issues/

    更换为安装版idapro6.8、添加dll高ida目录等,都没有解决问题

    最后解决问题参照的方法:

    https://blog.csdn.net/sdutstudent/article/details/116197661

    https://zhuanlan.zhihu.com/p/102655828

    idapython-1.7.2_ida6.8_py2.7_win32.zip

    其实idapython写的很清楚了,就是需要安装32位python。之前1.1中安装python时因为系统是64位win10,所以想当然的安装了64位python导致错误。更换为32位 python2.7即可

    注意更换后别忘了设置path,替换idapython/bin文件

    之后就完美运行了。和是不是安装版没有关系、

    1.4 安装相关python库

    可能还需要安装一些python的包。参考Genius的源码需要哪些库 https://github.com/qian-feng/Gencoding

    如 需要为python2.7 安装networkx

    首先安装pip

    因为安装的是2.7.16版本的python,自带pip,只需要添加相关系统变量即可

    注意如果安装了其他版本的python,需要将2.7对应的环境变量上移

    然后安装networkx。

    法一:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple networkx         目前采用法一

    法二:http://www.doczj.com/doc/6ad0e24976c66137ee06196c.html

     1.5 pycharm+ida 解决No module named _idaapi //尝试运行Genius Extractor

    https://github.com/qian-feng/Gencoding下载源码。ida打开一个binary文件,file->script file,运行相关脚本,有报错。分析后是没有传参

    直接用ida-file-script file,除非写死,不然不能传参,故用pycharm 调试 dapython

     https://www.programmerall.com/article/99121641505/

    interpreter选择之前安装的python2.7.复制相关文件到pycharm项目

    问题:

    报错

     

     解决思路:

    思路1:.尝试 使用ida命令行,提供ida上下文  // linux ida运行

    思路2:https://blog.csdn.net/lichao890427/article/details/52133712 

    使用ida都知道idapython插件,提供idc.py idaapi.py idautils.py,可以直接import进来,可以在ida运行时使用内部python插件运行
    
    然而这几个函数在不使用ida上下文的时候是无法使用的,会提示找不到_idaapi模块,那么_idaapi又是哪里来的呢,
    
    通过搜索可以发现是ida\plugin\python.plw中声明的,因此把该文件放到%PYTHONROOT%\Lib\下面,
    
    同时把导入的ida.wll和pytho27.dll放到%PYTHONROOT%\下,即可使用import _idaapi了,这样,上述几个py就可以工作了
    ————————————————
    版权声明:本文为CSDN博主「lichao890427」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/lichao890427/article/details/52133712

    https://answerrrrrrrrr.github.io/2016/09/20/idapython-commandline/

    http://h4ck.org.cn/2012/03/ida-batch-mode/

    思路三:

    看ida/python/idaapi.py的源代码

    from sys import version_info
    if version_info >= (2,6,0):
        def swig_import_helper():
            from os.path import dirname
            import imp
            fp = None
            try:
                fp, pathname, description = imp.find_module('_idaapi', [dirname(__file__)])  //寻找_idaapi.py
            except ImportError:
                import _idaapi
                return _idaapi

    目前采用思路一:

    在pycharmternminal

    E:\BaiduNetdiskDownload\IDA_Pro_v6.8\IDA_Pro_v6.8/idaq.exe -c -S"raw-feature-extractor/preprocessing_ida.py" hpcenter (hpcenter为固件,放在pycharm项目文件夹)

    还是报错但是至少可以跑了

     对应代码

    下一步就是 E:\BaiduNetdiskDownload\IDA_Pro_v6.8\IDA_Pro_v6.8/idaq.exe -c -S"raw-feature-extractor/preprocessing_ida.py --path XXX" hpcenter

    这样添加适当的参数即可

    1.6 IDA命令行执行 IDApython 脚本传参 // pycharm运行genius extractor   

    使用命令行,执行:

    D:\IDA_Pro_68\idaq.exe -c -S"raw-feature-extractor/preprocessing_ida.py --path D:\pycharmproject\Genius\storefile" hpcenter

    报错和上面一样

     查了下 https://stackoverflow.com/questions/35591455/python-os-path-join-typeerror-object-of-type-nonetype-has-no-len

    查看splitdrive函数的原型。没解决问题

    添加打印信息

     发现binary_name成功识别,但是path 为None。没输入成功

    测试代码

    import os
    import argparse
    
    def parse_command():
       parser = argparse.ArgumentParser(description='Process some integers.')
       parser.add_argument("--path", type=str, help="The directory where to store the generated .ida file")
       args = parser.parse_args()
       return args
    
    if __name__ == '__main__':
    
       args = parse_command()
       path = args.path
       print path

    输出

    PS D:\pycharmproject\Genius> python main.py --path "D:\pycharmproject\Genius\storefile"
    D:\pycharmproject\Genius\storefile
    
    PS D:\pycharmproject\Genius> python main.py --path D:\pycharmproject\Genius\storefile
    D:\pycharmproject\Genius\storefile

    可以正常读取参数。说明命令行格式没问题,只是IDApython的问题导致不能读取参数

    D:\IDA_Pro_68\idaq.exe -c -S"raw-feature-extractor/preprocessing_ida.py --path D:\pycharmproject\Genius\storefile" hpcenter

     解决:

    思路一,没有解决问题,但是有些帮助:

    google  ida的命令行模式。

    idapython batch mode

    找到:

    https://hex-rays.com/products/ida/support/idadoc/417.shtml

    IDA的官方help。得到参数的输入格式

      It is possible to pass command line arguments after the script name.
            For example: -S"myscript.idc argument1 \"argument 2\" argument3"

    思路二:

    又参考 idapython arguments

    https://reverseengineering.stackexchange.com/questions/8428/idapro-the-arguments-could-not-be-passed-to-the-python-script

    https://reverseengineering.stackexchange.com/questions/13286/executing-an-idapython-script-with-arguments-within-ida-pro

    命令行输入:

    PS C:\Program1\pycharmproject\Genius3> E:\BaiduNetdiskDownload\IDA_Pro_v6.8\IDA_Pro_v6.8\idaq.exe -c -S"raw-feature-extractor/preprocessing_ida.py --path C:\Program1\py
    charmproject\Genius3\new" hpcenter

    添加打印信息:

        print str(sys.argv) #['raw-feature-extractor/preprocessing_ida.py']
        print str(idc.ARGV) #['raw-feature-extractor/preprocessing_ida.py', '--path', 'C:\\Program1\\pycharmproject\\Genius3\\new']

    输出:

     所以修改下代码对argv的引用:

    原:
        path = args.path
    改为:
        path = idc.ARGV[2]

    之后可以运行。对固件hpcenter提取信息如图

    linux

  • 相关阅读:
    UML期末复习题——2.7:UML Sequence Diagram
    UML期末复习题——2.6:Package Diagram
    UML期末复习题——2.5:System Sequence Diagram & Post-condition
    UML期末复习题——2.4:Domain Model
    UML期末复习题——2.3:UML State Diagram
    UML期末复习题——2.2:UML Activity Diagram.
    UML期末复习题——2.1:Use Case Diagram
    UML期末复习题
    《C++之那些年踩过的坑(附录一)》
    《C++之那些年踩过的坑(三)》
  • 原文地址:https://www.cnblogs.com/lqerio/p/15557087.html
Copyright © 2011-2022 走看看