如何确定移动APP向API发送POST请求的密码加密算法以适配Python请求
加密逻辑逆向解决思路
首先排除无关项
- CERT.SF、CERT.RSA是安卓APK的系统签名文件,和业务层密码加密逻辑无关联,可直接排除。
- 你找到的hashCode相加逻辑只是普通哈希计算片段,和密码加密流程无关,不需要在混淆代码中搜索加密相关关键词的优先级为:
Cipher>encrypt>Base64>SecretKey,远高于搜索password。
核心特征对应算法方向
相同明文每次加密输出不同,符合两类加密场景匹配该特征:
- 带随机IV的对称加密,最常见为
AES/CBC/PKCS5Padding,加密完成后做Base64编码,你看到的==`是Base64填充后缀,不是加密结果不是Base64,而是明文先加密再转Base64,所以明文直接Base64的结果和加密后转Base64的结果不同。 - 非对称公钥加密,最常见为RSA公钥加密,公钥一般硬编码在APK代码中,可搜索代码内长度32位以上的Base64常量字符串排查公钥内容。
落地操作步骤
- 优先用Frida Hook系统加密类方法,直接抓取加密过程:
Hookjavax.crypto.Cipher类的init、doFinal方法,打印入参的明文、密钥、IV、加密后字节数组,和Burp抓包拿到的密码字段做Base64转码对比,匹配成功即可直接拿到完整算法、密钥、IV生成规则。 - 不想手动还原算法可以用Frida RPC直接调用APP内部加密方法,Python代码对接Frida服务传入明文密码,直接返回符合要求的加密结果,无需逆向完整算法,实现成本最低。
内容的提问来源于stack exchange,提问作者Abdellah
相关产品推荐
相关产品推荐

