本帖最后由 loveqq520 于 2024-4-4 23:23 编辑
样本:5Yac5Lq65LmL5a62(小米商城下载)
工具:Eclipse (4.30.0)、JEB 4.20.0、Fiddler、MT管理器
一、初窥门径
打开fiddler,配置好代{过}{滤}理抓包,在app里选择账号密码登录,抓到如下包
可以看到抓到了登录包,点进去发现账号是明文,密码被加密了,再抓一次试试看
第二次使用相同密码发现再抓包发现密码的密文改变了,刚开始猜测是不是加了时间戳,后来发现是rsa加密,且是RSA/ECB/PKCS1Padding模式,由于填充,所以密文不一样,并查阅了资料,链接:https://blog.csdn.net/guyongqiangx/article/details/74930951
二、崭露头角
使用MT管理器提取apk,发现未加固,扔进JEB反编译
根据技巧搜“password”搜索到好几个结果,一个个点进去看,发现可疑点
转化为java查看
看到这,我大致就觉得应该就是rsa加密了,这里正是登陆的Url,跟踪函数进去
三、渐入佳境
发现了key,可以看出是公钥,跟踪进去StrUtil类看看
可以看到了加密模式,这里就是将密码和公钥一起加密
自己练手就写了一下java自己实现一下
[Java] 纯文本查看 复制代码 package com.frank;
​
import java.security.KeyFactory;
import java.security.PublicKey;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
import javax.crypto.Cipher;
​
public class RSA {
public static String str_pubK = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7qPCn9w81CW7I9dbc+0YReFNEkiP/x7nTs5lAw+hLXmLsxNZtE/2kFN2XK3jcFOw6TSq/EbGhC9CD51q6n1B4AyfId+aGgB52ejRUrxvK+JOEWJrzXCbIOZg0QLfai+tFkmTi5jK91mQpX2di6xhiMk18gwnBmmNQQrSlEr1YgwIDAQAB";
public static String data = "a12345678";
public static PublicKey getPublicKey(String key) throws Exception {
byte[] arr_b = Base64.getDecoder().decode(key);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(arr_b);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey= keyFactory.generatePublic(keySpec);
return publicKey;
}
public static byte[] encryptByPublicKey(String data, PublicKey publicKey) throws Exception {
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(1, publicKey);
return cipher.doFinal(data.getBytes());
}
public static void main(String[] args) throws Exception {
byte[] arr_b = encryptByPublicKey(data, getPublicKey(str_pubK));
System.out.println(Base64.getEncoder().encodeToString(arr_b));
}
}
由于每次加密都是随机的,又获取不到私钥解密,所以加密过程中有没有动过其他手脚未知
|