From aa05fcb510192dc467c596a6c7462323556a8c8d Mon Sep 17 00:00:00 2001 From: tonikelope Date: Wed, 22 Nov 2017 22:29:37 +0100 Subject: [PATCH] 2.27 --- src/megabasterd/CryptTools.java | 6 +- src/megabasterd/MainPanel.java | 3 +- src/megabasterd/MegaAPI.java | 10 ++- src/megabasterd/MiscTools.java | 79 +++++++++++++++++++++- src/megabasterd/SmartMegaProxyManager.java | 31 +++++++++ 5 files changed, 119 insertions(+), 10 deletions(-) create mode 100644 src/megabasterd/SmartMegaProxyManager.java diff --git a/src/megabasterd/CryptTools.java b/src/megabasterd/CryptTools.java index 3081eb17a..fb98780cb 100644 --- a/src/megabasterd/CryptTools.java +++ b/src/megabasterd/CryptTools.java @@ -565,16 +565,16 @@ public final class CryptTools { out.write(buffer, 0, reads); } - enc_dlc_key = findFirstRegex("< *rc *>(.+)< */ *rc *>", new String(out.toByteArray()), 1); + enc_dlc_key = findFirstRegex("< *rc *>(.+?)< */ *rc *>", new String(out.toByteArray()), 1); } String dec_dlc_key = new String(CryptTools.aes_ecb_decrypt(BASE642Bin(enc_dlc_key), hex2bin(dlc_master_key))).trim(); String dec_dlc_data = new String(CryptTools.aes_cbc_decrypt(BASE642Bin(enc_dlc_data), BASE642Bin(dec_dlc_key), BASE642Bin(dec_dlc_key))).trim(); - String dec_dlc_data_file = findFirstRegex("< *file *>(.+)< */ *file *>", new String(BASE642Bin(dec_dlc_data)), 1); + String dec_dlc_data_file = findFirstRegex("< *file *>(.+?)< */ *file *>", new String(BASE642Bin(dec_dlc_data), "UTF-8"), 1); - ArrayList urls = findAllRegex("< *url *>(.+)< */ *url *>", dec_dlc_data_file, 1); + ArrayList urls = findAllRegex("< *url *>(.+?)< */ *url *>", dec_dlc_data_file, 1); for (String s : urls) { diff --git a/src/megabasterd/MainPanel.java b/src/megabasterd/MainPanel.java index 335ef6627..bacf05675 100644 --- a/src/megabasterd/MainPanel.java +++ b/src/megabasterd/MainPanel.java @@ -45,7 +45,7 @@ import org.apache.http.auth.UsernamePasswordCredentials; */ public final class MainPanel { - public static final String VERSION = "2.26"; + public static final String VERSION = "2.27"; public static final int THROTTLE_SLICE_SIZE = 16 * 1024; public static final int DEFAULT_BYTE_BUFFER_SIZE = 16 * 1024; public static final int STREAMER_PORT = 1337; @@ -211,6 +211,7 @@ public final class MainPanel { } else { _mega_proxy_server = null; } + } public MegaProxyServer getMega_proxy_server() { diff --git a/src/megabasterd/MegaAPI.java b/src/megabasterd/MegaAPI.java index f4100bccf..def3e7bf1 100644 --- a/src/megabasterd/MegaAPI.java +++ b/src/megabasterd/MegaAPI.java @@ -152,18 +152,22 @@ public final class MegaAPI { public void login(String email, String password) throws Exception, MegaAPIException { - _email = email; + String[] email_split = email.split(" *# *"); + + _email = email_split[0]; _password_aes = MEGAPrepareMasterKey(bin2i32a(password.getBytes())); - _user_hash = MEGAUserHash(email.toLowerCase().getBytes(), _password_aes); + _user_hash = MEGAUserHash(_email.toLowerCase().getBytes(), _password_aes); _realLogin(); } public void fastLogin(String email, int[] password_aes, String user_hash) throws Exception, MegaAPIException { - _email = email; + String[] email_split = email.split(" *# *"); + + _email = email_split[0]; _password_aes = password_aes; diff --git a/src/megabasterd/MiscTools.java b/src/megabasterd/MiscTools.java index 53aa96ff6..273c1bf48 100644 --- a/src/megabasterd/MiscTools.java +++ b/src/megabasterd/MiscTools.java @@ -62,6 +62,7 @@ import org.apache.http.HttpRequestInterceptor; import org.apache.http.HttpStatus; import org.apache.http.auth.AuthScope; import org.apache.http.client.CredentialsProvider; +import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.protocol.RequestAddCookies; @@ -239,7 +240,7 @@ public final class MiscTools { } public static String findFirstRegex(String regex, String data, int group) { - Pattern pattern = Pattern.compile(regex); + Pattern pattern = Pattern.compile(regex, Pattern.DOTALL); Matcher matcher = pattern.matcher(data); @@ -247,7 +248,7 @@ public final class MiscTools { } public static ArrayList findAllRegex(String regex, String data, int group) { - Pattern pattern = Pattern.compile(regex); + Pattern pattern = Pattern.compile(regex, Pattern.DOTALL); Matcher matcher = pattern.matcher(data); @@ -938,6 +939,42 @@ public final class MiscTools { return url_ok; } + public static String getMyPublicIP() { + + String public_ip = null; + + try (CloseableHttpClient httpclient = getApacheKissHttpClientNOProxy()) { + + HttpGet httpget = new HttpGet(new URI("http://whatismyip.akamai.com/")); + + try (CloseableHttpResponse httpresponse = httpclient.execute(httpget)) { + + InputStream is = httpresponse.getEntity().getContent(); + + try (ByteArrayOutputStream byte_res = new ByteArrayOutputStream()) { + + byte[] buffer = new byte[MainPanel.DEFAULT_BYTE_BUFFER_SIZE]; + + int reads; + + while ((reads = is.read(buffer)) != -1) { + + byte_res.write(buffer, 0, reads); + } + + public_ip = new String(byte_res.toByteArray()); + } + } + + } catch (MalformedURLException ex) { + Logger.getLogger(MiscTools.class.getName()).log(Level.SEVERE, null, ex); + } catch (IOException | URISyntaxException ex) { + Logger.getLogger(MiscTools.class.getName()).log(Level.SEVERE, null, ex); + } + + return public_ip; + } + public static String checkNewVersion(String folder_node, String folder_key) { String new_version = null; @@ -1039,6 +1076,42 @@ public final class MiscTools { return builder.build(); } + public static CloseableHttpClient getApacheKissHttpClientSmartProxy() { + + HttpClientBuilder builder = _getApacheKissHttpClientBuilder(); + + if (MainPanel.isUse_proxy() && MainPanel.getProxy_host() != null) { + + HttpHost proxy = new HttpHost(MainPanel.getProxy_host(), MainPanel.getProxy_port()); + + builder = builder.setProxy(proxy); + + if (MainPanel.getProxy_credentials() != null) { + + CredentialsProvider credsProvider = new BasicCredentialsProvider(); + + AuthScope authScope = new AuthScope(MainPanel.getProxy_host(), MainPanel.getProxy_port()); + + credsProvider.setCredentials(authScope, MainPanel.getProxy_credentials()); + + builder = builder.setDefaultCredentialsProvider(credsProvider); + } + } + + RequestConfig requestConfig = RequestConfig.custom() + .setSocketTimeout(SmartMegaProxyManager.TIMEOUT * 1000) + .setConnectTimeout(SmartMegaProxyManager.TIMEOUT * 1000) + .setConnectionRequestTimeout(SmartMegaProxyManager.TIMEOUT * 1000) + .build(); + + return builder.setDefaultRequestConfig(requestConfig).build(); + } + + public static CloseableHttpClient getApacheKissHttpClientNOProxy() { + + return _getApacheKissHttpClientBuilder().build(); + } + public static byte[] recReverseArray(byte[] arr, int start, int end) { byte temp; @@ -1068,7 +1141,7 @@ public final class MiscTools { cmd.append("-cp ").append(ManagementFactory.getRuntimeMXBean().getClassPath()).append(" "); - cmd.append(MiscTools.class.getName()).append(" "); + cmd.append(MainPanel.class.getName()).append(" "); cmd.append(String.valueOf(delay)); diff --git a/src/megabasterd/SmartMegaProxyManager.java b/src/megabasterd/SmartMegaProxyManager.java new file mode 100644 index 000000000..9d59c5bc0 --- /dev/null +++ b/src/megabasterd/SmartMegaProxyManager.java @@ -0,0 +1,31 @@ +package megabasterd; + +import java.util.HashMap; +import java.util.concurrent.ConcurrentHashMap; + +/** + * + * @author tonikelope + */ +public class SmartMegaProxyManager implements Runnable { + + public static final int TIMEOUT = 15; + private final String _proxy_list_url; + private final ConcurrentHashMap _proxy_list; + + public SmartMegaProxyManager(String proxy_list_url) { + _proxy_list_url = proxy_list_url; + _proxy_list = new ConcurrentHashMap<>(); + } + + public HashMap getRandomProxy() { + + return null; + } + + @Override + public void run() { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + +}