parent
6e474781d7
commit
2e139688bb
@ -1,64 +0,0 @@ |
||||
package com.github.catvod.net; |
||||
|
||||
import com.github.catvod.spider.Init; |
||||
import com.google.net.cronet.okhttptransport.CronetInterceptor; |
||||
|
||||
import org.chromium.net.CronetEngine; |
||||
|
||||
import java.util.Map; |
||||
|
||||
import okhttp3.OkHttpClient; |
||||
|
||||
public class Cronet { |
||||
|
||||
private OkHttpClient client; |
||||
|
||||
private static class Loader { |
||||
static volatile Cronet INSTANCE = new Cronet(); |
||||
} |
||||
|
||||
public static Cronet get() { |
||||
return Loader.INSTANCE; |
||||
} |
||||
|
||||
public static OkHttpClient client() { |
||||
if (get().client != null) return get().client; |
||||
return get().client = getBuilder().build(); |
||||
} |
||||
|
||||
public static OkHttpClient noRedirect() { |
||||
return client().newBuilder().followRedirects(false).followSslRedirects(false).build(); |
||||
} |
||||
|
||||
public static String string(String url) { |
||||
return string(url, null); |
||||
} |
||||
|
||||
public static String string(String url, Map<String, String> header) { |
||||
return string(url, null, header); |
||||
} |
||||
|
||||
public static String string(String url, Map<String, String> params, Map<String, String> header) { |
||||
return new OkRequest(OkHttp.GET, url, params, header).execute(client()).getBody(); |
||||
} |
||||
|
||||
public static String post(String url, Map<String, String> params) { |
||||
return post(url, params, null).getBody(); |
||||
} |
||||
|
||||
public static OkResult post(String url, Map<String, String> params, Map<String, String> header) { |
||||
return new OkRequest(OkHttp.POST, url, params, header).execute(client()); |
||||
} |
||||
|
||||
public static String post(String url, String json) { |
||||
return post(url, json, null).getBody(); |
||||
} |
||||
|
||||
public static OkResult post(String url, String json, Map<String, String> header) { |
||||
return new OkRequest(OkHttp.POST, url, json, header).execute(client()); |
||||
} |
||||
|
||||
private static OkHttpClient.Builder getBuilder() { |
||||
return OkHttp.getBuilder().addInterceptor(CronetInterceptor.newBuilder(new CronetEngine.Builder(Init.context()).build()).build()); |
||||
} |
||||
} |
||||
@ -1,93 +0,0 @@ |
||||
package com.fongmi.tools; |
||||
|
||||
import com.google.common.io.BaseEncoding; |
||||
import com.google.gson.Gson; |
||||
import com.google.gson.JsonParser; |
||||
|
||||
import java.nio.charset.StandardCharsets; |
||||
import java.util.Base64; |
||||
import java.util.regex.Matcher; |
||||
import java.util.regex.Pattern; |
||||
|
||||
import javax.crypto.Cipher; |
||||
import javax.crypto.spec.IvParameterSpec; |
||||
import javax.crypto.spec.SecretKeySpec; |
||||
|
||||
public class Config { |
||||
|
||||
private final Gson gson; |
||||
|
||||
public static void main(String[] args) { |
||||
try { |
||||
Config config = new Config(); |
||||
String json = config.getJson("http://饭太硬.top/tv"); |
||||
System.out.println(config.gson.toJson(JsonParser.parseString(json))); |
||||
} catch (Exception e) { |
||||
e.printStackTrace(); |
||||
} |
||||
} |
||||
|
||||
public Config() { |
||||
gson = new Gson().newBuilder().disableHtmlEscaping().setPrettyPrinting().create(); |
||||
} |
||||
|
||||
private String getJson(String url) throws Exception { |
||||
String key = url.contains(";") ? url.split(";")[2] : ""; |
||||
url = url.contains(";") ? url.split(";")[0] : url; |
||||
String data = getData(url); |
||||
if (Utils.isJson(data)) return data; |
||||
if (data.isEmpty()) throw new Exception(); |
||||
if (data.contains("**")) data = base64(data); |
||||
if (data.startsWith("2423")) data = cbc(data); |
||||
if (key.length() > 0) data = ecb(data, key); |
||||
return data; |
||||
} |
||||
|
||||
private String getData(String url) throws Exception { |
||||
if (url.startsWith("http")) return Utils.call(url); |
||||
throw new Exception(); |
||||
} |
||||
|
||||
private String ecb(String data, String key) throws Exception { |
||||
SecretKeySpec spec = new SecretKeySpec(padEnd(key), "AES"); |
||||
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); |
||||
cipher.init(Cipher.DECRYPT_MODE, spec); |
||||
return new String(cipher.doFinal(decodeHex(data)), StandardCharsets.UTF_8); |
||||
} |
||||
|
||||
private String cbc(String data) throws Exception { |
||||
int indexKey = data.indexOf("2324") + 4; |
||||
String key = new String(decodeHex(data.substring(0, indexKey)), StandardCharsets.UTF_8); |
||||
key = key.replace("$#", "").replace("#$", ""); |
||||
int indexIv = data.length() - 26; |
||||
String iv = data.substring(indexIv).trim(); |
||||
iv = new String(decodeHex(iv), StandardCharsets.UTF_8); |
||||
SecretKeySpec keySpec = new SecretKeySpec(padEnd(key), "AES"); |
||||
IvParameterSpec ivSpec = new IvParameterSpec(padEnd(iv)); |
||||
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); |
||||
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec); |
||||
data = data.substring(indexKey, indexIv).trim(); |
||||
byte[] encryptDataBytes = decodeHex(data); |
||||
byte[] decryptData = cipher.doFinal(encryptDataBytes); |
||||
return new String(decryptData, StandardCharsets.UTF_8); |
||||
} |
||||
|
||||
private String base64(String data) { |
||||
String extract = extract(data); |
||||
if (extract.isEmpty()) return data; |
||||
return new String(Base64.getDecoder().decode(extract)); |
||||
} |
||||
|
||||
private String extract(String data) { |
||||
Matcher matcher = Pattern.compile("[A-Za-z0-9]{8}\\*\\*").matcher(data); |
||||
return matcher.find() ? data.substring(data.indexOf(matcher.group()) + 10) : ""; |
||||
} |
||||
|
||||
private byte[] padEnd(String key) { |
||||
return (key + "0000000000000000".substring(key.length())).getBytes(StandardCharsets.UTF_8); |
||||
} |
||||
|
||||
private byte[] decodeHex(String s) { |
||||
return BaseEncoding.base16().decode(s.toUpperCase()); |
||||
} |
||||
} |
||||
Loading…
Reference in new issue