开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 47819|回复: 17
收起左侧

[交流] 某咖啡APP,加密分析

[复制链接]
发表于 2018-7-8 11:46:48 | 显示全部楼层 |阅读模式   重庆市重庆市
拿到app,第一件事,随便抓了个包,看看里面是什么造型。。。
POST https://****.**********.com/resource/m/user/login HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 563
Host: ****.**********.com
Connection: Keep-Alive
Accept-Encoding: gzip
User-Agent: okhttp/3.10.0
q=D--WfGoKRf-ehIELY4hxZfe5e8JoO9ypPJFQBISTjUQT9FpQ6_MvzBobksXdFndvafubHhCxZRGWl8ERBOk9SQYvCILZdd6227nJ_nweZ0ikAp4OkH86s8x-jsxBP5bKES1XKNCwPhzPhbxVSu_hwZoYSvQOan3eyCqhSuWY_jipeY3DakPVYz2dOYk4WZVXSIwQSfpCQDbH0mwLqiB1cbYQAacUFSTfv9tiqUN0n5-t7_cng06zEsNIk9osZFh9NCEcF6mmoFZ__5Wxx_e4HhvheoLzUz5RMQkuDKVEUj-i7ZIiW4BYqKHBJ9pkwbO6v1j73NrQ9ZGgLlNJeiwQHEROxqGPSSBJmQo_9q6A4whwryrZFfs20zGMp6NtwEc3PXOqTDgyw3K6uVDwMVaw3hXafEySPWPREsOIEZFrQWI%3D&cid=210101&uid=fb6c2569-fc5e-441c-b30e-0d4f2dcd16f01531017003058&sign=1200200831733062862662787061182468686&event_id=1531019410031

HTTP/1.1 200
Server: openresty
Date: Sun, 08 Jul 2018 03:10:10 GMT
Content-Type: text/html;charset=UTF-8
Content-Length: 256
Connection: keep-alive
F8Xh2r65jF-2uZCIyIB8Fr9W-5UzJX1sBUt_GRh22cUORpY8U8m8UfkwfUwVymLwS2g0jSVV_kXPBFE79NI4BuxJCC2oDt7tIUsIEvirxdSL76cvuvQf7iJbntzrh_2qBrIFDw9WS8cGoIt1LqhautB65iRBpsZx9ksTb5hdWWgk7530Kfp3wIBfaujye-lLX5kvfK-DnDu53opmrLHhUhO33klPz5ip_amuPgtgIVl5ZE8LLI2ccFpHzC6G0YJL


好吧,看来不把它拆开是不行的了。。结果有TX壳子,暴力脱掉。。。反编译。。
搜索sign

跟进f.a看看,原来是个变形的md5,它得到的结果,与我们平时看到的32位hex字符不同

  public static String a(String str) {
        byte[] bArr = new byte[0];
        try {
            bArr = MessageDigest.getInstance("MD5").digest(str.getBytes("UTF-8"));
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e2) {
            e2.printStackTrace();
        }
        if (bArr.length != 16) {
            throw new IllegalArgumentException("MD5加密结果字节数组错误");
        }
        return Integer.valueOf(Math.abs(a(bArr, 0))).toString() + Integer.valueOf(Math.abs(a(bArr, 4))).toString() + Integer.valueOf(Math.abs(a(bArr, 8))).toString() + Integer.valueOf(Math.abs(a(bArr, 12))).toString();
    }

    private static int a(byte[] bArr, int i) {
        return ((((bArr & 255) << 24) | ((bArr[i + 1] & 255) << 16)) | ((bArr[i + 2] & 255) << 8)) | (bArr[i + 3] & 255);
    }
看到请求正文中的q生成方法也在这里
public class a {
    public static final String a = e.h().f();
    private static final int b = 128;
    private static final Charset c = Charset.forName("utf-8");
    private static final String d = "AES/ECB/PKCS7Padding";

    static {
        Security.addProvider(new BouncyCastleProvider());
    }

    public static String a(String str) {
        try {
            Cipher instance = Cipher.getInstance(d);
            instance.init(1, c(a));
            return new String(Base64.encodeBase64(instance.doFinal(str.getBytes(c)), false), c).replace('+', '-').replace('/', '_');
        } catch (Exception e) {
            b.a("数据加密异常:" + e.toString());
            return "";
        }
    }

    public static String a(String str, boolean z) throws Exception {
        return !z ? str : b(str);
    }

    public static String b(String str) throws IOException {
        try {
            Cipher instance = Cipher.getInstance(d);
            instance.init(2, c(a));
            return new String(instance.doFinal(Base64.decodeBase64(str.replace('-', '+').replace('_', '/').getBytes(c))), c);
        } catch (Exception e) {
            b.a("数据解密异常:" + e.toString());
            b.a("返回密文:" + str);
            return "";
        }
    }

    private static SecretKeySpec c(String str) {
        byte[] bytes = str.getBytes(c);
        byte[] bArr = new byte[16];
        for (int i = 0; i < bArr.length; i++) {
            if (bytes.length > i) {
                bArr = bytes;
            } else {
                bArr = (byte) 0;
            }
        }
        return new SecretKeySpec(bArr, "AES");
    }
}
进行到这里,就已经没啥悬念了。懒得调试,hook出它的key,调用上面的方法,OK,正确。。
哎,感觉就像撸完一发,一切都那么嗦然无味了


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 2精币 +2 收起 理由
rainkong + 1 感谢分享,很给力!~
搞事 + 1 奉上小小红包希望笑纳

查看全部评分

发表于 2023-9-12 09:41:23 | 显示全部楼层   四川省成都市
一切都那么嗦然无味了,大神啊
回复 支持 反对

使用道具 举报

结帖率:60% (3/5)

签到天数: 8 天

发表于 2023-9-4 14:47:43 | 显示全部楼层   福建省厦门市
哎,感觉就像撸完一发,一切都那么嗦然无味了
回复 支持 反对

使用道具 举报

签到天数: 5 天

发表于 2023-5-7 00:32:30 | 显示全部楼层   湖北省武汉市
感谢大神
回复 支持 反对

使用道具 举报

结帖率:90% (19/21)

签到天数: 14 天

发表于 2021-8-14 16:53:50 | 显示全部楼层   湖南省长沙市
感觉就像撸完一发,一切都那么嗦然无味了
回复 支持 反对

使用道具 举报

发表于 2021-8-13 15:39:59 高大上手机用户 | 显示全部楼层   河南省新乡市
求某巴克算法.......
回复 支持 反对

使用道具 举报

发表于 2021-7-29 19:33:37 高大上手机用户 | 显示全部楼层   福建省泉州市
大佬联系方式
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)
发表于 2021-7-11 19:17:28 | 显示全部楼层   贵州省遵义市
学习了,感谢大神分享
回复 支持 反对

使用道具 举报

结帖率:33% (1/3)
发表于 2021-2-7 20:18:18 | 显示全部楼层   辽宁省铁岭市
不错不错,谢谢分享
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)
发表于 2020-12-30 08:30:47 | 显示全部楼层   海南省文昌市
愁怀了新手的难题对于大神居然是如此的索然无味```受教受教
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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