新浪邮箱登陆code算法


祭出神器Fiddler,安装新浪邮箱到模拟器。抓包得

分析可得code明细加密。

然后我们把APK拉入jadx看看反汇编代码如何

虽然混淆过。但是还是不错得。

分别查找下client_id,code,redirect_uri

之后进入com.sina.mail.d.e类看看

    public final void a(String str) {
        List arrayList = new ArrayList();
        arrayList.add(new BasicNameValuePair("client_id", "2026078627"));
        arrayList.add(new BasicNameValuePair(Columns.CODE, str));
        arrayList.add(new BasicNameValuePair("redirect_uri", "https://mail.sina.com.cn/client/mobile/callback.php"));
        this.a.a("/1/sauth", Oauth2AccessToken.class, arrayList);
    }

对着函数a 邮件FindUsage查看引用整个函数得有什么地方

需要引用我们注意得是第一个。因为LoginActivity就是登陆动作

    private void e() {
        try {
            String editable = this.c.getText().toString();
            String editable2 = this.e.getText().toString();
            if (bh.a(editable)) {
                bh.a((Context) this, (int) C0000R.string.login_please_input_account);
            } else if (bh.a(editable2)) {
                bh.a((Context) this, (int) C0000R.string.login_please_input_password);
            } else {
                this.f = k.a(editable, editable2);
                this.b.a(this.f);
            }
        } catch (Exception e) {
        }
    }

因为我们知道从CODE是从这里传回来得。this.b.a(this.f);就是调用com.sina.mail.d.e.a(str)
所以综合,k.a(editable, editable2)这个就是关键得函数
右键FindUsage

第四个就是静态方法。双击跟进

package com.sina.mail.utils;

public final class k {
    public static String a(String str, String str2) {
        return as.a(as.a("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCr6uxto9ld75P2oiV/DD51yr080zz7JMY4W+s2GE6gKtGOxwdFju+s4HNRQKPCh70Vt7tkovNIVt0/3Zyl9r7fgGDJGbssur1xJB1Xi/9zNY0mk5StBloaZbNbW+7ZbQh9AE1lY8LsqWqvn7PLZKMTWXFc0nDoCU9IERZDM9cizQIDAQAB"), str + ":" + str2);
    }
}

开始出现数据了。真相就在眼前。继续查看哪里调用了as.a然后找出下面得一个as类

package com.sina.mail.utils;

import a.a;
import a.b;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.security.InvalidKeyException;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.PublicKey;
import java.security.spec.X509EncodedKeySpec;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;

public final class as {
    private static Cipher a;

    static {
        try {
            a = Cipher.getInstance("RSA/ECB/PKCS1Padding");
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e2) {
            e2.printStackTrace();
        }
    }

    public static PublicKey a(String str) {
        a aVar = new a();
        byte[] bArr = new byte[str.length()];
        str.getBytes(0, str.length(), bArr, 0);
        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bArr);
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        aVar.a(byteArrayInputStream, byteArrayOutputStream);
        return KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(byteArrayOutputStream.toByteArray()));
    }

    public static String a(PublicKey publicKey, String str) {
        try {
            a.init(1, publicKey);
            return new b().a(a.doFinal(str.getBytes()));
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (IllegalBlockSizeException e2) {
            e2.printStackTrace();
        } catch (BadPaddingException e3) {
            e3.printStackTrace();
        }
        return null;
    }
}

现在数据有了,类也找到了。
得到得算法下:
填充方式:PKCS1_PADDING  字符集:UTF8编码
公钥为:

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCr6uxto9ld75P2oiV/DD51yr08
0zz7JMY4W+s2GE6gKtGOxwdFju+s4HNRQKPCh70Vt7tkovNIVt0/3Zyl9r7fgGDJ
Gbssur1xJB1Xi/9zNY0mk5StBloaZbNbW+7ZbQh9AE1lY8LsqWqvn7PLZKMTWXFc
0nDoCU9IERZDM9cizQIDAQAB
-----END PUBLIC KEY-----

加密数据:111111@sina.cn:111111
格式:邮箱:密码

因为没有私钥不能解密。
后面我不放心通过验证算法加密提交过也证明是对得。

发表评论

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