快手sig盐值如何得来

KS某手SIG的盐值如何从IDA中的SO文件得来?有详细过程吗?【382700b563f4】这个salt盐值,在native层libcore.so这个so里面,具体怎么分析计算的,学习一下

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
首先,需要了解一下快手sig的加密方法。它是通过对请求参数进行按字典序排序后进行md5加密,并加入固定的盐值。其中,盐值包括一个前缀和一个后缀,前缀为"56ka",后缀为"q4z9",中间部分则是动态生成的。

在IDA中找到SO文件后,可以通过阅读反汇编代码以及一些调试技巧来获取盐值的生成方法。

首先,我们需要找到生成sig的函数,这个函数可能会被多个地方调用,比如网络请求类的函数中。通过函数名和参数类型可以定位到这个函数的位置。在函数内部,可以找到一些打印日志的代码,这些日志信息可能会包含动态生成的盐值。通过读取日志信息中的盐值,并手动拼接出请求参数和固定盐值,就可以进行md5加密,得到sig值。

需要注意的是,盐值的生成方法可能会随着版本的不同而有所变化。因此,如果你需要反复破解不同版本的快手sig盐值,可能需要多次分析不同版本的SO文件。

以下是一个伪代码示例,用于说明盐值的生成过程:

def get_salt():
    # 从日志中读取盐值
    salt = read_salt_from_log()   # 示例中假设这个函数已经实现
    # 如果盐值获取失败,则直接使用默认盐值
    if not salt:
        salt = "382700b563f4"
    # 拼接出完整盐值
    return "56ka" + salt + "q4z9"


def get_sig(params):
    # 对参数按字典序排序
    sorted_params = sort_params(params)
    # 拼接出完整请求参数
    query_string = "&".join([f"{key}={value}" for key, value in sorted_params.items()])
    # 获取盐值
    salt = get_salt()
    # 拼接出待加密字符串
    raw_string = salt + query_string
    # 进行md5加密,得到sig值
    sig = md5(raw_string)
    return sig

注意:以上代码仅为示例,具体实现可能会因不同版本的SO文件以及生成sig的代码而有所不同。
如果我的回答解决了您的问题,请采纳!

参考GPT和自己的思路:快手的SIG是根据请求参数和盐值进行加密的,其中盐值是一个常量值,存储在快手客户端或者服务器端。

如果要从快手的native层libcore.so文件中获取盐值,可以通过反编译和逆向分析来实现。以下是一个大致的过程:

1 从快手客户端的apk文件中提取出libcore.so文件。

2 使用逆向工具如IDA Pro等打开libcore.so文件。

3 在IDA Pro中搜索盐值的字符串,例如搜索关键字“salt”等。

4 找到盐值的字符串后,查看相关的函数和调用堆栈,确定在哪个函数中使用了这个盐值。

5 跟踪这个函数的代码,找到盐值是如何计算出来的。

6 根据分析结果得到盐值,并将其应用到加密算法中。

引用chatGPT的回答,快手的SIG盐值是通过对特定字符串进行哈希运算得到的。该哈希值作为盐值用于保护客户端与服务器之间的通信安全。在本文中,我将简要介绍如何通过IDA分析libcore.so文件来获取SIG盐值的过程。

1.下载IDA并打开libcore.so文件
IDA是一款逆向工程工具,它可以帮助我们分析二进制文件。在这个过程中,我们需要下载IDA并打开libcore.so文件。

2.搜索哈希函数
在IDA中搜索哈希函数,例如在本例中我们可以搜索Java的哈希函数java.security.MessageDigest。然后,我们可以查看函数的调用过程,了解哈希函数在代码中的使用情况。

3.找到字符串常量
在libcore.so文件中,我们可以查找包含特定字符串常量的函数。例如,在本例中,我们可以搜索“salt=”。然后,我们可以查看调用该字符串常量的函数,以了解如何将其用于生成SIG盐值。

4.跟踪函数调用
我们可以通过跟踪函数调用来了解如何生成SIG盐值。例如,在本例中,我们可以查看com.kuaishou.android.security.c.a函数,该函数是用于生成SIG盐值的。

5.计算盐值
最后,我们可以通过计算哈希函数的输出值来获取SIG盐值。例如,在本例中,我们可以使用“382700b563f4”字符串作为输入值,并使用java.security.MessageDigest函数进行哈希运算,以获取SIG盐值。

总之,获取SIG盐值的过程需要使用IDA等逆向工程工具进行反汇编和跟踪函数调用。在分析代码时,需要查找包含特定字符串常量的函数,并跟踪其调用过程,以了解如何生成SIG盐值。最终,可以通过计算哈希函数的输出值来获取SIG盐值。

您好,关于sig盐值如何得来这个问题,你可以使用抓包工具,结合js逆向解析来分析它的加密和计算方法:
需要还原以下两个函数(不同版本可能有区别):
1)定位sub_3E550函数,其返回值是sig3算法部分结果,并且该函数调用了两次,第一次是要加密的内容,第二次是一个base64的值
2)定位sub_24404函数,与当前时间戳异或一个值后进行进行加密。
您可以参考一些相关资料:
快手sig3、sig、NStoken算法,附带测试用例(https://download.csdn.net/download/qq_40849557/85585916
快手__NS_sig3 sig3算法分析(https://blog.csdn.net/chl191623691/article/details/117808006