某东APP地址加密参数浅分析
第一次写博客 也是关于逆向方面的文章,首先将一些题外话,有很多人问我,我是小白我是新手,能不能也做到分析app的程度.。其实 世上无难事 ,只怕有心人。一年前我连python都不知道是什么东西,所有我相信技术是无门槛的,只是看坚持与否/提示!本文章仅供学习交流,严禁用于任何商业用途以及非法用途!!! 如有侵权 请联系本文作者进行删除处理!
进入正题
1.首先使用Jadx 去分析 Jadx可以去Github上下载,新版的都很好用
附:Jadx 下载地址
拖入京东APP进行反编译, 我已经提前抓过包了,抓包这里 不再过多的阐述
townNameName
hWKrX7LO0+740I5GGMmocw==f4NSVqYaKfDk/GX044TKhg==
这是我摘出来的两个加密参数,当然参数有很多,但加密的算法都是一样的,我们对这两个加密进行还原复现即可
尝试直接搜索特殊字段名字 “townName”
发现这里调用了名为 encrypt3DESECB 的方法 跟入分析!
private String encrypt3DESECB(String str) {
return PDUtils.encryptThreeDESECB(str, SharedPreferencesUtil.getBoolean("isDesCbc", false), "np!u5chin@adm!n1aaaaaaa2");
}
非常清晰 调用方法传进去 3 个参数 第一个 参数就是 我们传入的明文地址信息 第三个参数是一个字符串 我们先记录一下这个字符串
"np!u5chin@adm!n1aaaaaaa2"
public class DesCbcCrypto {
private static final String DES = "DESede";
public static final byte[] IV_BYTES = {0, 0, 0, 0, 0, 0, 0, 0};
private static final String PADDING = "DESede/CBC/PKCS5Padding";
public static byte[] encrypt(byte[] bArr, byte[] bArr2, byte[] bArr3) throws Exception {
if (bArr3 == null) {
bArr3 = IV_BYTES;
}
SecretKey generateSecret = SecretKeyFactory.getInstance(DES).generateSecret(new DESedeKeySpec(bArr2));
IvParameterSpec ivParameterSpec = new IvParameterSpec(bArr3);
Cipher cipher = Cipher.getInstance(PADDING);
cipher.init(1, generateSecret, ivParameterSpec);
return cipher.doFinal(bArr);
}
我们一直跟入函数 最后进入了这里 这里模式展示的非常清楚IV向量是一个8位的数组 在JS中可以作为HEX 00000000使用
那么 我觉得 应该无需再用FridaHOOK 再去判断 , 作为一个成熟的老鸟 应该有自己的判断 直接祭出工具解密试一下
1. 加密类型:3DES
2. 加密IV:00000000
3. 加密Key: np!u5chin@adm!n1aaaaaaa2
4. 加密模式:CBC
5. 加密填充:PKCS5
还原完毕!!!
结尾:也许讲的不是非常好 ,第一次发博客有所欠缺,而且也不知道阅读大众的平常实力,我只能按找自己的思路去展示和逆向分析这些东西,后面如果有人反馈说根本不知道为什么这么做,我会详细的使用Frida的HOOK 来进一步阐述这些问题
栓Q :如果对你有帮助,请帮我扣666
作者:沈听白
感谢分享{:1_893:}·
个人建议可以丰富一下“跟入函数”这个步骤,这样可以让新人知道,是怎么从
private String encrypt3DESECB(String str) {
return PDUtils.encryptThreeDESECB(str, SharedPreferencesUtil.getBoolean("isDesCbc", false), "np!u5chin@adm!n1aaaaaaa2");
}
到这个下面这个
public class DesCbcCrypto {
private static final String DES = "DESede";
public static final byte[] IV_BYTES = {0, 0, 0, 0, 0, 0, 0, 0};
private static final String PADDING = "DESede/CBC/PKCS5Padding";
public static byte[] encrypt(byte[] bArr, byte[] bArr2, byte[] bArr3) throws Exception {
if (bArr3 == null) {
bArr3 = IV_BYTES;
}
SecretKey generateSecret = SecretKeyFactory.getInstance(DES).generateSecret(new DESedeKeySpec(bArr2));
IvParameterSpec ivParameterSpec = new IvParameterSpec(bArr3);
Cipher cipher = Cipher.getInstance(PADDING);
cipher.init(1, generateSecret, ivParameterSpec);
return cipher.doFinal(bArr);
} 新人不明觉厉:lol 没记错的话这个是下单的加密 这个加密密钥设的有点意思,居然不随机生成一个
感谢分享{:1_893:} 竟然是固定的key,不过想想好像也挺正常,要是动态就涉及key的传递了。 感谢楼主分享. fnckyon2014 发表于 2022-11-22 23:36
竟然是固定的key,不过想想好像也挺正常,要是动态就涉及key的传递了。
省时省力,防君子不防小人:lol 竟然用固定key,真没想到,东哥的app,应该是不差钱的那种....