前言
openrasp是百度开源的主动式防御插件,与业务松耦合,在Java语言是使用javaagent的方式注入的,笔者前几章讲过javaagent的实现原理,笔者在使用openrasp的时候,发现openrasp-v8是快照版,并且依赖JNI实现,需要对不同的硬件与操作系统编译特定的函数库。
1. 准备
cmake指令
macOS推荐brew安装,非常方便:brew install cmake
mvn指令
maven管理,配置maven的path即可,开发人员常识。
git指令
GitHub源码下载必须
2. 编译
查阅百度openrasp资料,源码编译:rasp-Java
示例是Linux的,各个平台略有区别。以macOS为例
1 、git代码
git clone https://github.com/baidu-security/openrasp-v8.git
2、编译
# 编译 openrasp-v8
mkdir -p openrasp-v8/build64 && cd openrasp-v8/build64
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DENABLE_LANGUAGES=java ..
make
编译过程会出现找不到jni.h的现象
jni.h这个在jvm安装目录,拷贝出来
jni.h和jni_md.h
拷贝到build64目录,再执行make
3、复制编译函数库
mkdir -p ../java/src/main/resources/natives/osx_64 && cp java/libopenrasp_v8_java.dylib $_
因为是macOS环境,跟Linux有所区别
4、推送本地maven仓库
cd ../java
mvn install
至此jar就编译好了,可以编译agent的fatjar了,注入agent
<dependency> <groupId>com.baidu.openrasp</groupId> <artifactId>v8</artifactId> <version>1.0-SNAPSHOT</version> </dependency>
总结
笔者只编译了openrasp-v8的Java版本,实际上还有PHP版本,不过使用PHP的业务几乎没有,笔者也写过小段时间的PHP,调试真方便😋。编译v8的jar关键是有C代码,使用了JNI技术,需要jni.h文件支持。