美文网首页
MIASM安装在MacOS遇见的坑记录

MIASM安装在MacOS遇见的坑记录

作者: 摩哈 | 来源:发表于2019-05-25 20:33 被阅读0次

    MIASM的安装

    在MacOS上面安装MIASM相对来说还是比较简单的。

    在主机中安装好PyEnv就可以安装多版本的Python了,再通过PyEnv的插件VirtualEnv构建一个独立的Python库环境基本上就可以完全得到一个隔离的Python环境来安装MIASM。

    基本的步骤:

    1. 通过 git clone https://github.com/cea-sec/miasm.git 把MIASM的源码下载到我们本地。

    2. 一顿PyEnv的安装操作构建一个Python的隔离环境(这个步骤可以省略,如果你觉得无所谓的话)

    3. 上面的两个步骤完成以后,按照 "Requirements.txt" 把一些依赖的Python三方库使用Pip安装好。重点需要安装一个 elfstreem https://github.com/serpilliere/elfesteem.git,这个用来解析文件格式用的。

    4. 然后在MIASM的目录中使用

    python setup.py build
    python setup.py install

    上面的步骤完成以后MIASM就安装成功了,也正式进入了文章的主题:

    使用MIASM目录中的 setup.py来进行编译MIASM中那些 .so 库文件,在Linux下面是没有问题的,因为Linux下面对于动态库的类型只有一类,都可以在运行时或者编译时链接到执行程序中去。

    但是在MAC中有Bundle和Dylib两种类似于“动态链接库”功能的文件,作用都是为了让可执行程序调用第三方的API功能。但是MacOS系统为了安全性,所以这两种类型的文件在调用上面是区别的,Bundle类型的文件只能在Runtime中动态的获取里面提供的API,但是Dylib是可以在编译的时候直接链接到我们的可执行程序中去的。

    上面的区别在主要是因为在使用MIASM的模拟执行的过程使用Sandbox_Linux_x86_6类的时候,会进行一个可能是环境的编译,而这个编译过程会使用上面在 MIASM setup.py安装过程中生成的 .so 文件,这些 .so文件默认是生成的是bundle类型的文件导致不能在编译中进行引用。需要对setup.py进行如下修改:

    if sys.platform == 'darwin':
    from distutils import sysconfig
    vars = sysconfig.get_config_vars()
    vars['LDSHARED'] = vars['LDSHARED'].replace('-bundle', '-dynamiclib')

    这样可以修改Python的系统配置,该配置的路径为:~/.pyenv/versions/2.7.7/lib/python2.7/_sysconfigdata.py 如果你使用的PyEnv安装的环境的话就跟我一样,否则的话需要自己在自己使用的Python环境中去查找这个文件。

    上面这样修改以后如果不是2.x版本的话应该就没什么问题了,但是由于我这里的版本2.7.7版本可能有点太老了所以“_sysconfigdata.py”配置文件中的配置是:

    'LDSHARED': 'clang -bundle -bundle_loader /Users/ooxx/.pyenv/versions/2.7.7/bin/python2.7 -L/usr/local/opt/readline/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/openssl/lib -L/Users/ooxx/.pyenv/versio ns/2.7.7/lib -L/usr/local/opt/zbar/lib'

    这里由于有 -bundle_loader 这个选项之前的修改只是简单的替换一下"bundle"这个字符串,这里进行替换以后会出现一个莫名的选项 -dynamiclib_loader 使得编译出错。所以如果是Python2.X版本的需要自己手动修改这个配置文件的此处,将这里修改成:

    clang -dynamiclib -undefined dynamic_lookup -L/usr/local/opt/readline/lib -L/usr/local/opt/readline/lib -L/usr/local/opt/openssl/lib -L/Users/ooxx/.pyenv/versio ns/2.7.7/lib -L/usr/local/opt/zbar/lib

    这样修改以后主要是防止在编译过程中遇见为定义的符号的时候报错,如果发现没有定义的符号的时候会在之后的runtime的时候再进行动态查找。

    经过上面的步骤,才可以正常的在MacOS中把一个MIASM完整的Build完成。

    参考

    https://glandium.org/blog/?p=2764

    相关文章

      网友评论

          本文标题:MIASM安装在MacOS遇见的坑记录

          本文链接:https://www.haomeiwen.com/subject/xrmzzqtx.html