购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.4.3 基于LIEF将可执行文件转变为共享库文件

本节通过一个例子来说明怎样使用Python的API将可执行文件转变为共享库文件。

可执行文件跟共享库文件头信息中的file_type是一样的,值都是E_TYPE.DYNAMIC,主要区别在于符号的导出。共享库的目的是公开函数,以便可执行文件可以链接并使用这些函数,而可执行文件则一般不公开函数。将可执行文件中的原始函数地址转换为与符号关联的导出函数,可公开可执行文件的内部函数。一旦目标函数被导出后,就可以像共享库函数那样链接并使用导出的目标函数。例如,在模糊测试的环境下,可以使用AFL(American Fuzzy Lop,一种基于覆盖引导的模糊测试工具)生成的数据对该函数进行测试。

本节的可执行文件源码如Listing 3.5所示。

Listing 3.5 位置无关的可执行文件源码crackme101.c

(1)转换脚本文件bin2lib.py如Listing 3.6所示。

Listing 3.6 基于LIEF的二进制文件到库文件的转换脚本文件bin2lib.py

脚本文件的运行命令如下:

其中,0x72A是可执行文件crackme101.bin中的check_found()函数的反汇编起始地址。

(2)生成的共享库文件为libcrackme101.so,其测试源码如Listing 3.7所示。

Listing 3.7 共享库文件libcrackme101.so的测试源码 cYfi12wKpG5NmbRwBMnnjAjDZzaq+vrgrrIAkq70mQ1sUQOdmqyiEbUJ9yM+iQk3

点击中间区域
呼出菜单
上一章
目录
下一章
×