Невозможно расшифровать зашифрованный запрос Http Post из приложения android - PullRequest
0 голосов
/ 17 марта 2020

Попытка протестировать приложение и получить перехваченный http-вход приложения, но, к сожалению, запрос http-тела был зашифрован. Поскольку, по-видимому, шифрование было выполнено на стороне клиента, достаточно ясно получить ключ шифрования и схему алгоритма, затем я перевернул приложение и подозревал, что следующий код за шифрованием:

import a.a;
import android.util.Base64;
import java.io.UnsupportedEncodingException;
import java.security.GeneralSecurityException;
import java.security.InvalidKeyException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Random;
import java.util.regex.Pattern;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;

public class b {

    /* renamed from: a reason: collision with root package name */
    private static volatile b f4799a;

    /* renamed from: b reason: collision with root package name */
    private byte[] f4800b = null;

    /* renamed from: c reason: collision with root package name */
    private String f4801c;

    private b() {
        try {
            this.f4801c = a.a(new byte[]{97, 110, 100, 95, 50, 51, 116, 107, 108, 35, 95, 97, 105, 116, 33}, new byte[]{75, 24, 109, 27, -24, -51, 22, -58, -44, -74, 21, 91, -88, 48, -52, -63, 69, -67, 71, 17, 116, 77, 70, -94, 41, 121, 20, 120, 8, 121, 33, 77});
        } catch (GeneralSecurityException e2) {
            e2.printStackTrace();
        }
        this.f4800b = e(this.f4801c);
    }

    public static b a() {
        if (f4799a == null) {
            synchronized (b.class) {
                if (f4799a == null) {
                    f4799a = new b();
                }
            }
        }
        return f4799a;
    }

    private final String c(String str) {
        try {
            Cipher instance = Cipher.getInstance("DESEDE/ECB/PKCS5Padding");
            instance.init(2, new SecretKeySpec(this.f4800b, "DESede"));
            return a(instance.doFinal(new a().a(str)));
        } catch (Exception e2) {
            e2.printStackTrace();
            return null;
        }
    }

    private final String d(String str) {
        try {
            Cipher instance = Cipher.getInstance("DESEDE/ECB/PKCS5Padding");
            instance.init(1, new SecretKeySpec(this.f4800b, "DESede"));
            try {
                return Base64.encodeToString(instance.doFinal(str.getBytes()), 0);
            } catch (IllegalBlockSizeException e2) {
                e2.printStackTrace();
                return "";
            } catch (BadPaddingException e3) {
                e3.printStackTrace();
                return "";
            }
        } catch (NoSuchAlgorithmException e4) {
            e4.printStackTrace();
        } catch (NoSuchPaddingException e5) {
            e5.printStackTrace();
        } catch (InvalidKeyException e6) {
            e6.printStackTrace();
        }
    }

    private final byte[] e(String str) {
        try {
            return MessageDigest.getInstance("MD5").digest(str.getBytes("UTF-8"));
        } catch (NoSuchAlgorithmException e2) {
            e2.printStackTrace();
            return null;
        } catch (UnsupportedEncodingException e3) {
            e3.printStackTrace();
            return null;
        }
    }

    public String b(String str) {
        StringBuilder sb = new StringBuilder();
        sb.append(str);
        sb.append(b());
        return d(sb.toString());
    }

    private String b() {
        int nextInt = new Random().nextInt(999999);
        StringBuilder sb = new StringBuilder();
        sb.append("|");
        sb.append(nextInt);
        return sb.toString();
    }

    public String a(String str) {
        return c(str).split(Pattern.quote("|"))[0];
    }

    public b(String str) {
        this.f4800b = e(str);
    }

    private final String a(byte[] bArr) {
        StringBuffer stringBuffer = new StringBuffer();
        for (byte b2 : bArr) {
            stringBuffer.append((char) b2);
        }
        return stringBuffer.toString();
    }
}

честно Я не понял, как найти ключ шифрования и как этот код создает тело http-запроса, как показано ниже:

{
"UserName":"N67a2TEuY6/+6ev2csIlcUnh0f844m+a\n",
"Password":"t1h6/ATZ26VA8nS+fcnvkgtyapIPArT7\n"
}

Буду признателен за вашу помощь. спасибо

...