Press "Enter" to skip to content

ELK 7.2 本地实验环境搭建方法

本文章只为学习研究目的,我们应当尊重elastic的官方权益,禁止使用本文方法做任何商业用途!你可能会被追究商业责任。

初始化项目

我基于容器折腾的,所以要先初始化一个容器项目。

我这里使用的项目基于:https://github.com/deviantony/docker-elk

将项目克隆到本地

git clone https://github.com/deviantony/docker-elk.git
cd docker-elk
source .env
docker-compose up -d

项目就运行起来了,你通过 http://localhost:5601/ 就能看到你的kibana界面了。账号:elastic 密码:changeme,可以进去感受下界面。

开始破解

我们的目标是把x-pack-core-7.2.0.jar 这个文件处理下,该文件里面有验证license是否有效的函数,破坏该函数,然后用一个伪造的license来进行注册,即可达到可以长期本地实验环境继续体验强大elastic的目的。

使用命令提取jar包

docker cp 13be6172db3d:/usr/share/elasticsearch/modules/x-pack-core/x-pack-core-7.2.0.jar .

使用 docker cp 命令将 容器里面的文件复制出来, 冒号前面的是 容器id, 使用docker ps 来查询。

反编译jar包类容

我们使用 luyten 这个工具来反编译,下载页面:https://github.com/deathmarine/Luyten/releases

软件下载下来,打开软件,把x-pack-core-7.2.0.jar 丢进去,就能看到我们jar包的源代码了。
我们需要把2个文件提取出来进行修改。
org.elasticsearch.license.LicenseVerifier
org.elasticsearch.xpack.core.XPackBuild

修改LicenseVerifier
LicenseVerifier 中有两个静态方法,这就是验证授权文件是否有效的方法,我们把它修改为全部返回true.

package org.elasticsearch.license;

import java.nio.*;
import org.elasticsearch.common.bytes.*;
import java.security.*;
import java.util.*;
import org.elasticsearch.common.xcontent.*;
import org.apache.lucene.util.*;
import org.elasticsearch.core.internal.io.*;
import java.io.*;

public class LicenseVerifier
{
    public static boolean verifyLicense(final License license, final byte[] publicKeyData) {
        return true;
    }
    
    public static boolean verifyLicense(final License license) {
        return true;
    }
}

XPackBuild 中最后一个静态代码块中 try的部分全部删除,这部分会验证jar包是否被修改.

package org.elasticsearch.xpack.core;

import org.elasticsearch.common.io.*;
import java.net.*;
import org.elasticsearch.common.*;
import java.nio.file.*;
import java.io.*;
import java.util.jar.*;

public class XPackBuild
{
    public static final XPackBuild CURRENT;
    private String shortHash;
    private String date;
    
    @SuppressForbidden(reason = "looks up path of xpack.jar directly")
    static Path getElasticsearchCodebase() {
        final URL url = XPackBuild.class.getProtectionDomain().getCodeSource().getLocation();
        try {
            return PathUtils.get(url.toURI());
        }
        catch (URISyntaxException bogus) {
            throw new RuntimeException(bogus);
        }
    }
    
    XPackBuild(final String shortHash, final String date) {
        this.shortHash = shortHash;
        this.date = date;
    }
    
    public String shortHash() {
        return this.shortHash;
    }
    
    public String date() {
        return this.date;
    }
    
    static {
        final Path path = getElasticsearchCodebase();
        String shortHash = null;
        String date = null;
        Label_0109: {
            shortHash = "Unknown";
            date = "Unknown";
        }
        CURRENT = new XPackBuild(shortHash, date);
    }
}

编译修改后的java文件

编译需要用到elasticsearch的lib,所以要把elasticsearch的lib复制出来。

docker cp 13be6172db3d:/usr/share/elasticsearch/lib .

使用 docker cp 命令将 容器里面的文件复制出来, 冒号前面的是 容器id, 使用docker ps 来查询。

javac -cp ".:./x-pack-core-7.2.0.jar:./lib/*" LicenseVerifier.java
javac -cp ".:./x-pack-core-7.2.0.jar:./lib/*" XPackBuild.java

上面2条命令是将我们修改后的java文件进行编译,引号里面的依赖的库根据你实际的位置来指定,我这里都在相同目录。

将编译好的修改后的文件从新打会原来的jar包

将原版jar包解压出来

unzip x-pack-core-7.2.0.jar -d ./x-pack-core-7.2.0

将我们修改编译好的class文件替换到 解压出来的 x-pack-core-7.2.0 目录里面对应文件 的位置(我拖拽覆盖的,这里你们自己操作)

将修改过的x-pack-core-7.2.0目录从新打成jar包

jar -cvf x-pack-core-7.2.0.jar -C x-pack-core-7.2.0 .

将修改 过的jar包替换回容器,然后重新启动容器

ADD x-pack-core-7.2.0.jar /usr/share/elasticsearch/modules/x-pack-core/x-pack-core-7.2.0.jar

上面是elasticsearch的Docerfile,替换 x-pack-core-7.2.0.jar

导入授权文件

1、 先从官网申请basic授权文件
https://license.elastic.co/registration

2、 授权文件修改

{

   "uid": "6fb96d6b-938c-45ff-9ce7-6b53b39cd7dd",

   "type": "platinum", # 修改授权为白金版本

   "issue_date_in_millis": 1530489600000,

   "expiry_date_in_millis": 2855980923000, #修改到期时间为2060-07-02

   "max_nodes": 100,  # 修改最大节点数

   "issued_to": "xxxx",

   "issuer": "Web Form",

   "signature":"AAAAAwAAAA3PP60wKNtAvRmuCGdSAAABmC9ZN0hjZDBGYnVyRXpCOW5Bb3FjZDAxOWpSbTVoMVZwUzRxVk1PSmkxaktJRVl5MUYvUWh3bHZVUTllbXNPbzBUemtnbWpBbmlWRmRZb25KNFlBR2x0TXc2K2p1Y1VtMG1UQU9TRGZVSGRwaEJGUjE3bXd3LzRqZ05iLzRteWFNekdxRGpIYlFwYkJiNUs0U1hTVlJKNVlXekMrSlVUdFIvV0FNeWdOYnlESDc3MWhlY3hSQmdKSjJ2ZTcvYlBFOHhPQlV3ZHdDQ0tHcG5uOElCaDJ4K1hob29xSG85N0kvTWV3THhlQk9NL01V",

   "start_date_in_millis": 1530489600000

} 

进入到kibana后台,license管理,导入新的证书,完成。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注