破解ElasticSearch 镜像版 X-Pack的流程

适合版本: ElasticSearch 5.X

目前网上流传的x-pack破解都是基于本地版本进行的,鲜有针对docker版本的。 当下越来越多用户都是使用ElasticSearch Docker版本进行部署,因此特别提供一份针对docker版本的x-pack破解流程。

下载luyten

[https://github.com/deathmarine/Luyten/releases]

下载docker 镜像

docker pull [docker.elastic.co/kibana/kibana-x-pack:5.5.2]  

创建 /tmp/elasticsearch.yml

http.host: 0.0.0.0  
http.cors.enabled: true  

启动镜像

ps:  
    markdown 中’- -’会自动变成— ,所以下面命令中应该是两个’-‘,中间带有空格,请留意。

docker run -it - -rm - -name elasticsearch -p 9200:9200 -p 9300:9300  -v /etc/localtime:/etc/localtime  -v /tmp/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -it --rm vikings/elasticsearch:5.5.2  

拷贝Jar包

docker cp elasticsearch:/usr/share/elasticsearch/lib/lucene-core-6.6.0.jar .  
docker cp elasticsearch:/usr/share/elasticsearch/lib/elasticsearch-5.5.2.jar .  
docker cp elasticsearch:/usr/share/elasticsearch/plugins/x-pack/x-pack-5.5.2.jar .  

执行反编译

使用下载的luyten打开x-pack-5.5.2.jar,找到org.elasticsearch.license. LicenseVerifier类,这个类用来验证license是否合法。破解x-pack就是破解这个验证类。 将这个类所有函数都返回true,即可。

package org.elasticsearch.license;

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

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

    public static boolean verifyLicense(final License license) {
        return true;
    }
}

编译LicenseVerifier类

javac -cp "/tmp/elasticsearch-5.5.2.jar:/tmp/lucene-core-6.6.0.jar:/tmp/x-pack-5.5.2.jar" LicenseVerifier.java  

得到LicenseVerifier.class文件

替换旧类

解压x-pack-5.5.2.jar,使用上一步生成的LicenseVerifier.class文件,替换旧的LicenseVerifier.class文件。

打包生成jar

cd x-pack-5.5.2;  
jar -cvf jar -cvf x-pack-5.5.2.jar .  

将生成的jar文件,改名为x-pack-5.5.2.jar。

构建镜像

使用下面的Dockerfile构建镜像

FROM docker.elastic.co/elasticsearch/elasticsearch:5.5.2  
COPY x-pack-5.5.2.jar /usr/share/elasticsearch/plugins/x-pack/x-pack-5.5.2.jar  

重新启动Elasticsearch

使用上一步生成的镜像重新启动Elasticsearch集群,然后申请一个Basic License。 修改里面的:

"expiry_date_in_millis":9532563199999

然后注册此License:

curl -XPUT -u elastic 'http://<elasticsearch ip>:9200/_xpack/license?acknowledge=true' -H "Content-Type: application/json" -d@license.json