吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1743|回复: 12
收起左侧

[求助] 国外某APP签名算法,来个大神给翻一下这句代码的意思

[复制链接]
xiaolin9966 发表于 2021-4-21 01:44
最近在学习,请给翻译下运行流程,谢谢
[Java] 纯文本查看 复制代码
public String getSignature(String str, String str2) throws GeneralSecurityException {
        String hMacSHA256 = getHMacSHA256(str, str2, 0);
        if (hMacSHA256 != null) {
            return hMacSHA256;
        }
        throw new GeneralSecurityException();
    }

    private String getHMacSHA256(String str, String str2, int i) {
        if (i > 1) {
            return null;
        }
        try {
            SecretKeySpec secretKeySpec = new SecretKeySpec(str2.getBytes("UTF-8"), "HmacSHA256");
            Mac instance = Mac.getInstance("HmacSHA256");
            instance.init(secretKeySpec);
            return toHex(instance.doFinal(str.getBytes("UTF-8")));
        } catch (Exception e) {
            if (i == 1) {
                HSLogger.f(TAG, "Could not generate mac signature: " + e.getLocalizedMessage() + ", retryCount: " + i, e, new ILogExtrasModel[0]);
            } else {
                HSLogger.e(TAG, "Could not generate mac signature: " + e.getLocalizedMessage() + ", retryCount: " + i, e);
            }
            return getHMacSHA256(str, str2, i + 1);
        }
    }

    private String toHex(byte[] bArr) {
        char[] cArr = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
        char[] cArr2 = new char[(bArr.length * 2)];
        for (int i = 0; i < bArr.length; i++) {
            int i2 = bArr[i] & 255;
            int i3 = i * 2;
            cArr2[i3] = cArr[i2 >>> 4];
            cArr2[i3 + 1] = cArr[i2 & 15];
        }
        return new String(cArr2);
    }
}

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

ofo 发表于 2021-4-21 08:19
getHMacSHA256(str, str2, 0)
xeonfeng 发表于 2021-4-21 08:40
用途同下面这个函数。
void hmac_sha256_get(uint8_t digest[32], uint8_t *message, int message_length, uint8_t *key, int key_length);
/*此函数用于HMAC_SHA256加密,秘钥任意长度,输出32字节*/
laos 发表于 2021-4-21 08:43
流程好像也没啥

String hMacSHA256 = getHMacSHA256(str, str2, 0);
调用getHMacSHA256方法对输入的字符串str进行HmacSha256, 密钥为str2

getHMacSHA256(String str, String str2, int i)
HmacSha256的算法实现过程并对结果以十六进制字符串形式输出  捕获到异常会进行重试 重试次数i大于1直接返回NULL
佚名RJ 发表于 2021-4-21 08:49
Frida Hook 它试试
[Java] 纯文本查看 复制代码
private String toHex(byte[] bArr) {
        char[] cArr = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
        char[] cArr2 = new char[(bArr.length * 2)];
        for (int i = 0; i < bArr.length; i++) {
            int i2 = bArr[i] & 255;
            int i3 = i * 2;
            cArr2[i3] = cArr[i2 >>> 4];
            cArr2[i3 + 1] = cArr[i2 & 15];
        }
        return new String(cArr2);
    }
lycgood123 发表于 2021-4-21 08:50
非常感谢分享,学习学习。
不一般 发表于 2021-4-21 10:06
HmacSHA256(原始文本,加密密钥)
好像是这样的
不一般 发表于 2021-4-21 10:08
佚名RJ 发表于 2021-4-21 08:49
Frida Hook 它试试
[mw_shl_code=java,true]private String toHex(byte[] bArr) {
        char[] cArr = ...

传参是字节集,不能显示啊。
闷骚小贱男 发表于 2021-4-21 12:06
不一般 发表于 2021-4-21 10:08
传参是字节集,不能显示啊。

他想说的  应该是hook return吧

return new String(cArr2);
 楼主| xiaolin9966 发表于 2021-4-21 12:32
闷骚小贱男 发表于 2021-4-21 12:06
他想说的  应该是hook return吧

return new String(cArr2);

是的,就是看不懂这个加密过程有加盐吗
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

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

GMT+8, 2024-4-29 21:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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