libnum-error

由于之前清理空间的时候不慎将 WSL 的配置文件也误删掉了,所以慌忙还原 WSL 当初的配置,对于一些 Python 库的安装大多用 pip 的命令,直接安装,通过 import ... 的方式做一个简单的检查。但是前段时间在使用 libnum 的时候遇到了 AttributeError: 'str' object has no attribute 'hex' 的报错。

网络上并没有这么针对性的博客来排除这个 AttributeError,也几乎没有讲过用 pip 命令其实也可以安装 libnum。

所以这篇文章就讲解 libnum 两种不同的安装方法,以及为什么会出现和如何解决 libnum 下的 AttributeError

python libnum库安装使用方法

方法1:
在 Python 2.7 的环境下安装:

1
2
3
git clone https://github.com/hellman/libnum
cd libnum
python setup.py install

方法2:
在 Python 3 环境下安装:

1
pip3 install libnum

Python2 for libnum

这里做下解释,如果搜索 “ python libnum 库安装 ”的文章,一般都只会告诉你第一种方法。

这是因为在很长一段时间,libnum 都只支持 Python2,在它的开源库中我们也可以看到:“Requirements: python2.7”

甚至在 2018 年 12 月还有人 issue 是否支持 Python3:

很多写 libnum 安装教程的博客也多半是在 2018 年12月前写的。

Python3 for libnum

然而!!!在 2019 年 3 月的时候有人回复了这个 issue,已经实现支持 Python3 的libnum。

其地址是:https://github.com/JafarAkhondali/python3-libnum

同时我们可以查到在 https://pypi.org/ 中查到 libnum 1.6.0

此时可以用 pip install libnum 的方式安装 libnum,但需要注意的是,这里的 pip install libnum 对应的是 只支持 Python3 的 libnum。

AttributeError: ‘str’ object has no attribute ‘hex’

报错原因分析

出现这个错误的原因是 python3 中只有 unicode str,所以把 decode 方法去掉了,所以 “str’ object has no attribute 'hex”。

比较抱歉,没有截图,只是文字描述。

我们仔细看报错的信息,稍作分析就发现,运行过程中是遇到 encode('hex') 之类的方法的时候报错的。说明错误是用 Python3 的解释器去解释 Python2 的代码 或者其他等价的情况发生的。

很可能是因为我 当初+后来 同时使用 pip install libnum 和 python setup.py install 的方法安装库,所以导致解释器解释代码的时候产生冲突。

问题解决

笔者并不精通 Python2 和 Python3 的兼容问题。
只是单纯在 Python2 下使用这些库(毕竟 Python3 的环境是部署在 Windows下的,WSL 只是由于特殊情况也安装了Python3),所以采用 pip uninstall libnum 的方法卸载了支持 Python3 的libnum库。

之后代码解释正常,也得到了 flag, hhh。

------ The end ------

本文标题:libnum-error

文章作者:Andy Wu

发布时间:2020年02月05日 - 17:02

最后更新:2020年12月18日 - 22:12

原始链接:https://zer0-nu1l.github.io/2020/02/05/libnum-error/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。