吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3927|回复: 22
收起左侧

[Android 原创] 某东APP地址加密参数浅分析

  [复制链接]
tang0229 发表于 2022-11-22 14:18
第一次写博客 也是关于逆向方面的文章,首先将一些题外话,有很多人问我,我是小白我是新手,能不能也做到分析app的程度.。其实 世上无难事 ,只怕有心人。一年前我连python都不知道是什么东西,所有我相信技术是无门槛的,只是看坚持与否/


提示!本文章仅供学习交流,严禁用于任何商业用途以及非法用途!!! 如有侵权 请联系本文作者进行删除处理!

进入正题
1.首先使用Jadx 去分析 Jadx可以去Github上下载,新版的都很好用 ​
附:Jadx 下载地址

拖入京东APP进行反编译, 我已经提前抓过包了,抓包这里 不再过多的阐述

townNameName
hWKrX7LO0+740I5GGMmocw==f4NSVqYaKfDk/GX044TKhg==



这是我摘出来的两个加密参数,当然参数有很多,但加密的算法都是一样的,我们对这两个加密进行还原复现即可

尝试直接搜索特殊字段名字 “townName”


1.png


发现这里调用了名为 encrypt3DESECB 的方法 跟入分析!


[Java] 纯文本查看 复制代码
    private String encrypt3DESECB(String str) {
        return PDUtils.encryptThreeDESECB(str, SharedPreferencesUtil.getBoolean("isDesCbc", false), "np!u5chin@adm!n1aaaaaaa2");
    }


非常清晰 调用方法传进去 3 个参数 第一个 参数就是 我们传入的明文地址信息 第三个参数是一个字符串 我们先记录一下这个字符串

"np!u5chin@adm!n1aaaaaaa2"

[Java] 纯文本查看 复制代码
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


2.png


还原完毕!!!

结尾:也许讲的不是非常好 ,第一次发博客有所欠缺,而且也不知道阅读大众的平常实力,我只能按找自己的思路去展示和逆向分析这些东西,后面如果有人反馈说根本不知道为什么这么做,我会详细的使用Frida的HOOK 来进一步阐述这些问题

栓Q :如果对你有帮助,请帮我扣666

作者:沈听白






免费评分

参与人数 7吾爱币 +11 热心值 +6 收起 理由
zhan + 1 + 1 谢谢@Thanks!
qtfreet00 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
junjia215 + 1 + 1 用心讨论,共获提升!
LiD3ath + 1 谢谢@Thanks!
ayanga + 1 + 1 鼓励转贴优秀软件安全工具和文档!
挖掘机小王子 + 1 用心讨论,共获提升!
zhuzhuxia9527 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

haishe 发表于 2022-11-22 18:43
感谢分享·
个人建议可以丰富一下“跟入函数”这个步骤,这样可以让新人知道,是怎么从
[JavaScript] 纯文本查看 复制代码
private String encrypt3DESECB(String str) {
    return PDUtils.encryptThreeDESECB(str, SharedPreferencesUtil.getBoolean("isDesCbc", false), "np!u5chin@adm!n1aaaaaaa2");
}

到这个下面这个
[JavaScript] 纯文本查看 复制代码
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);
    }
Fgh745799516 发表于 2022-11-22 17:57
mirs 发表于 2022-11-22 19:16
侃遍天下无二人 发表于 2022-11-22 22:00
这个加密密钥设的有点意思,居然不随机生成一个
patagonia 发表于 2022-11-22 22:15

感谢分享
fnckyon2014 发表于 2022-11-22 23:36
竟然是固定的key,不过想想好像也挺正常,要是动态就涉及key的传递了。
YI0IX 发表于 2022-11-22 23:49
感谢楼主分享.
surenyue 发表于 2022-11-23 00:57
fnckyon2014 发表于 2022-11-22 23:36
竟然是固定的key,不过想想好像也挺正常,要是动态就涉及key的传递了。

省时省力,防君子不防小人
knight0531 发表于 2022-11-23 08:02
竟然用固定key,真没想到,东哥的app,应该是不差钱的那种....
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 12:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表