当前位置:   article > 正文

yara编译过程全记录_yara-master

yara-master

yara安装过程:
1、环境说明:centos5.10
2、github下载yara-4.1.x
3、自带automake 1.9.6、autoconf 2.59、libtool 1.5.22、gcc 4.1.2
4、automake版本太低,要求1.12+,无法编译,升级automake、autoconf、libtool
    automake 1.9.6  --> 1.16.3
    autoconf 2.59   --> 2.71
    libtool  1.5.22 --> 2.4.6
5、执行build.sh正常,可使用yara检测自带规则

执行configure过程发现,提示未找到openssl,无法编译hash模块,看代码后,发现使用openssl只为hash,暂时忽略。

因项目要求,尽量使用静态库编译,到时候升级无需在环境安装依赖项。
编译yara、yarac依赖静态libyara.a:
不太了解automake的机制,所以没找到指定为静态编译的地方。
解决方案:(笨办法)
修改Makefile.am的yara_LDADD和yarac_LDADD,将-lyara 改为libyara/.libs/libyara.a

从github下载rule_master,想借用现有的规则库,测试一下检出率,学习一点已有的、开源的规则,前面提到hash模块编译失败,所以,在使用yarac编译rule_master的规则二进制文件时,提示找不到hash,因此重新排查;
1、本机有openssl,版本为0.9.8,但是没有openssl头文件,所以未编译进去。
2、sudo yum install openssl-devel.x86_64 安装openssl头文件
3、重新执行configure,提示找到openssl相关库和头文件
4、重新编译yara,提示libyara.c的_thread_id(CRYPTO_THREADID *id) *前应该是结束符。
分析原因,应该是无法识别CRYPTO_THREADID。上网找了一下CRYPTO_THREADID_set_callback是1.0.0后版本才出现,代码中只要求版本<1.1的使用锁保证线程安全,所以估计默认openssl要求1.0以上。
5、下载openssl,直接下载的较新版本1.1.1j,编译报错,Perl版本太低,要求5.30以上
6、下载Perl 5.34.0,安装perl,再安装openssl
7、重新执行yara的configure,成功找到openssl,执行make,编译yara出错,提示libcryrpto.a找不到dlopen等符号;
8、查找原因需要在链接中,添加-ldl,因为Makefile是直接生成的,所以这里直接在configure.ac的85行模拟libm.a的查找办法,添加AC_CHECK_LIB(dl, isnan),也不知道对不对。
9、重新执行configure,make成功
10、yarac重新编译rule_master,hash模块的报错过去,又找不到cuckoo,哭唧唧

上网找到这个,按步骤操作,开启cuckoo和其他模块
https://blog.csdn.net/weixin_40596016/article/details/80076632


./configure --with-crypto --enable-cuckoo --enable-dotnet CFLAGS=-fPIC

-- 未安装magic模块,没找到file-dev或libmagic-dev

之后,yarac编译rule_master成功


不需要 --disable-shared,这个标签会将整个项目编译为.la

工程编译为so,将libyara.a关联到so中,成为一个so。
-- 编译libyara时,使用noinst_LTLIBRARIES = libyara.la
-- 依赖时,libhids_webshell_la_LIBADD = libyara.la 这样,libhids_webshell.so编译出来就不依赖动态so了

---------------------------- 依赖静态jansson和crypto
1、编译jansson  
修改Makefile.am 和 Makefile.in AM_CFLAGS 加上-fPIC   这一步是为了生成.o时,也使用-fPIC,这样才不会报不可移植
    *** Warning: Linking the shared library libhids_webshell.la against the
    *** static library /usr/local/lib/libjansson.a is not portable!
    /usr/bin/ld: /usr/local/lib/libjansson.a(utf.o): relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
./configure CFLAGS=-fPIC
make clean
make
    可以通过 readelf --relocs utf.o | egrep '(GOT|PLT|JU?MP_SLOT)' 查看.o文件,有输出基本是用-fPIC编译的
sudo make install

2、编译openssl
./config  --prefix=/usr/local/openssl  -fPIC

3、编译yara
Make file.am  libyara/Makefile.am 修改AM_CFLAGS, 开始的位置加上-fPIC
./configure --with-crypto --enable-cuckoo --enable-dotnet CFLAGS=-fPIC
 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/874731
推荐阅读
相关标签
  

闽ICP备14008679号