最近研究内核Pwn需要用到Ropper找gadgets,安装过程中遇到了一系列糟心的事情,可以说能踩的坑被我一个不落的都踩了,记录一下。
Ropper安装前需要安装一些其他的依赖,首先安装capstone。
#pip install capstone
ok这个没问题,但是一直提示pip版本过低,所以更新pip。
python -m pip install --upgrade pip
更新完毕检查一下版本,这个居然都报错惹。
# pip -V
Traceback (most recent call last):
File "/usr/bin/pip", line 9, in
from pip import main
ImportError: cannot import name 'main'
ok看一下错误原因,打开/usr/bin/pip
文件,按错误提示修改main。
#!/usr/bin/python
# GENERATED BY DEBIAN
import sys
# Run the main entry point, similarly to how setuptools does it, but because
# we didn't install the actual entry point from setup.py, don't use the
# pkg_resources API.
from pip import __main__
if __name__ == '__main__':
sys.exit(__main__._main())
ok保存了之后能正常运行了。按步骤再安装filebytes。
# pip install filebytes
这个安装过程出了许多问题,实在懒得一一去查看原因了,只记录下最终的解决办法。
filebytes
这个包好像对python还是pip版本有限制,低版本是无法安装成功的,所以我又把python2.7升级到了python3.5,一系列恶心人的事情又开始了,略过不提。
后来是直接克隆的库进行安装。
# git clone https://github.com/sashs/filebytes.git
# cd filebytes
# sudo python setup.py install
ok虽然安装最后提示成功,但是显示的包名变成了UNKNOWN是什么狗,搜索了一下原因是setuptools
没更新的原因。
# pip install setuptools --upgrade
ok这次终于安装成功了,版本也符合要求(ropper要求filebytes版本>=0.10.0)。接下来安装keystone-engine
,但是因为我个人小手一抖敲成了pip install keystone
,我又没取消于是一路安装各种库,然而中间失败了好几个,抱着侥幸的心理,安装了ropper发现不行,还是回过头老老实实装keystone
。
还是直接从源码来安装。
wget https://github.com/keystone-engine/keystone/archive/0.9.1.tar.gz
~ tar xzvf 0.9.1.tar.gz
~ cd keystone-0.9.1/
~ mkdir build
~ cd build
~ ../make-share.sh
~ sudo make install
~ sudo ldconfig
~ kstool
ok这个也安装成功了。最后安装pip install ropper
看上去也没什么问题成功安装,但是使用ropper时会报错。
# ropper
Traceback (most recent call last):
File "/usr/local/bin/ropper", line 11, in
load_entry_point('ropper==1.13.2', 'console_scripts', 'ropper')()
......
AttributeError: module 'keystone' has no attribute 'KS_ARCH_X86'
看提示是说keystone
这个模块并没有该属性,最开始猜测是否是keystone没有安装完全,于是有用pip安装了一遍。
# pip install keystone-engine
但是提示我keystone-engine
已安装,到/dist-packages
下查看发现确实有这个包。于是在网上搜索了一下,发现一个可能的解释,说是因为同时安装了keystone
和keystone-engine
导致有冲突,需要删除keystone
。于是尝试删除keystone。
pip uninstall keystone
ok提示我这个包根本没安装,想起来我是从源码安装的,和pip安装路径不一致,所以应该不是因为这个导致ropper运行报错。
想了想直接删除keystone-engine
…
# pip uninstall keystone-engine
Uninstalling keystone-engine-0.9.1.post3:
Would remove:
/usr/lib/python3/dist-packages/keystone
/usr/local/lib/python3.5/dist-packages/keystone_engine-0.9.1.post3-py3.5.egg-info
Proceed (y/n)? y
Successfully uninstalled keystone-engine-0.9.1.post3
删除后重新pip安装一遍keystone-engine
,安装成功后再pip install ropper
,安装成功后运行试试:
# ropper
(ropper)>
再试试用ropper找gadgets:
# ropper -f vmlinux --nocolor > goldfish_ropper_gadgets
[INFO] Load gadgets for section: LOAD
[LOAD] loading... 100%
[INFO] Load gadgets for section: LOAD
[LOAD] loading... 100%
[INFO] Load gadgets for section: LOAD
[LOAD] loading... 100%
[INFO] Load gadgets for section: LOAD
[LOAD] loading... 100%
[INFO] Load gadgets for section: NOTE
[LOAD] loading... 100%
[INFO] Load gadgets for section: GNU_STACK
[LOAD] loading... 100%
[LOAD] removing double gadgets... 100%
ok fine可以找到了。