Crack App | 某练习平台 App 第 5 题参数 Token 加密逻辑分析

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: Crack App | 某练习平台 App 第 5 题参数 Token 加密逻辑分析

今日目标

这里以崔大爬虫练习站 app 的第 5 题作为逆向题目

aHR0cHM6Ly9zY3JhcGUuY2VudGVyLw==

抓包分析

先下载 app ,然后简单抓个包看看

可以看到请求中带有一个加密的参数token

返回的是一个json字符串

下拉刷新可以看到token是不断变化的,现在用jadx反编译看看,找找token的逻辑

静态分析定位逻辑

通过检索"token"

在结果处查找用例

可以找到下面的代码处

然后这里的Encrypt可以看到使用了shaEncrypt这个方法

通过shaEncrypt的逻辑可以知道这里进行了一次sha1加密

未知的就是传入的str的值,这一步可以通过frida hook得到结果

动态调试确认逻辑

简单写一个frida脚本,打印一下shaEncrypt的入参和返回值

console.log("脚本加载成功");
function main(){
    Java.perform(function(){
        var Encrypt = Java.use("com.goldze.mvvmhabit.utils.Encrypt");
        Encrypt.shaEncrypt.implementation = function (arg1){
            console.log("\Encrypt.shaEncrypt\n");
            console.log("Input str=" + arg1 + "\n");
            var shaEncrypt_result = this.shaEncrypt(arg1);
            console.log("\nOut Rc=" + shaEncrypt_result);
            return shaEncrypt_result;
        }
    })
}
setImmediate(main)

可以看到入参的参数的就是url + , + 时间戳

算法是sha1,这一点可以通过加密站来验证

接下来将结果和时间戳经过了一次base64,得到最终的结果

我们来测试一下看看是不是一样的

console.log("脚本加载成功");
function main(){
    Java.perform(function(){
        var Encrypt = Java.use("com.goldze.mvvmhabit.utils.Encrypt");
        Encrypt.shaEncrypt.implementation = function (arg1){
            console.log("\Encrypt.shaEncrypt\n");
            console.log("Input str=" + arg1 + "\n");
            var shaEncrypt_result = this.shaEncrypt(arg1);
            console.log("\nOut Rc=" + shaEncrypt_result);
            return shaEncrypt_result;
        }
        var Base64 = Java.use("android.util.Base64");
        Base64.encodeToString.overload('[B', 'int').implementation = function (arg1,arg2){
            var encodeToString_result = this.encodeToString(arg1,arg2);
            console.log("\nOut Rc=" + encodeToString_result);
            return encodeToString_result;
        }
    })
}
setImmediate(main)

可以看到这里打印的结果验证了我们的猜想。

所以token的生成算法就是base64(sha1(path,时间戳),时间戳)

写一段代码测试一下

import requests
import hashlib
import base64
import time
def encode_sha1(data, encode_method="utf-8"):
    """
    sha1加密
    :param data: 待加密字符串
    :param encode_method: 编码方法,默认utf-8
    :return: 40长度字符串
    """
    bytes_data = data.encode(encode_method)
    m = hashlib.sha1()
    m.update(bytes_data)
    return m.hexdigest()
def encode_base64(data, encode_method="utf-8"):
    """
    base64加密
    :param data: 待加密字符串
    :param encode_method: 编码方法,默认utf-8
    :return:
    """
    bytes_data = data.encode(encode_method)
    result = base64.b64encode(bytes_data).decode()
    return result
def get_params():
    # base64(sha1(path,时间戳),时间戳)
    path = "/api/movie,"
    time_str = str(int(time.time()))
    sha1_result = encode_sha1( path + time_str)
    base64_params = sha1_result + ',' + time_str
    base64_result = encode_base64(base64_params)
    # print(base64_result)
    return base64_result
def main():
    headers = {
        'log-header': 'I am the log request header.',
        'Host': 'app5.scrape.center',
        'Connection': 'Keep-Alive',
        'Accept-Encoding': 'gzip',
        'User-Agent': 'okhttp/3.10.0',
    }
    params = (
        ('offset', '20'),
        ('limit', '10'),
        ('token', get_params()),
    )
    response = requests.get('https://app5.scrape.center/api/movie/', headers=headers, params=params)
    print(response.text)
if __name__ == '__main__':
    main()

结果如下

好了,以上就是今天的全部内容了。

我是没有更新就在摸鱼的咸鱼

收到请回复~

我们下次再见。

相关文章
|
4天前
|
机器学习/深度学习 前端开发 算法
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
22 3
为什么不加盟线下陪玩APP小程序平台,而是自建平台?
自建线下陪玩APP平台相比加盟,能避免利润抽成,确保所有收益归己,同时提供更高的运营灵活性和稳定性,不受制于合同限制或总平台决策变动,更适合追求长期发展的创业者。
|
28天前
|
安全 网络协议 网络安全
【Azure 环境】从网络包中分析出TLS加密套件信息
An TLS 1.2 connection request was received from a remote client application, but non of the cipher suites supported by the client application are supported by the server. The connection request has failed. 从远程客户端应用程序收到 TLS 1.2 连接请求,但服务器不支持客户端应用程序支持的任何密码套件。连接请求失败。
|
2月前
|
NoSQL Java Redis
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
这篇文章介绍了如何使用Spring Boot整合Apache Shiro框架进行后端开发,包括认证和授权流程,并使用Redis存储Token以及MD5加密用户密码。
39 0
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
|
4月前
|
数据采集 数据可视化 数据挖掘
基于python django的scrapy去哪儿网数据采集与分析,包括登录注册和可视化大屏,有md5加密
本文介绍了一个基于Python和Django框架,使用Scrapy进行去哪儿网数据采集与分析的项目,包括实现登录注册功能、MD5加密以及通过可视化大屏展示分析结果的综合系统。
基于python django的scrapy去哪儿网数据采集与分析,包括登录注册和可视化大屏,有md5加密
|
4月前
|
JSON 算法 API
【Azure API 管理】APIM 配置Validate-JWT策略,验证RS256非对称(公钥/私钥)加密的Token
【Azure API 管理】APIM 配置Validate-JWT策略,验证RS256非对称(公钥/私钥)加密的Token
|
4月前
|
JavaScript 前端开发 安全
VUE——APP,后端,前端三端AES加密解密
VUE——APP,后端,前端三端AES加密解密
179 0
|
6月前
|
JavaScript 前端开发 安全
安全开发-JS应用&原生开发&JQuery库&Ajax技术&加密编码库&断点调试&逆向分析&元素属性操作
安全开发-JS应用&原生开发&JQuery库&Ajax技术&加密编码库&断点调试&逆向分析&元素属性操作
|
6月前
|
人工智能 监控 安全
未来金融将如何借助加密货币发展,可以从以下几个方面进行清晰的分析和归纳
**区块链与加密货币推动金融革命:降低交易成本,提高安全,扩大服务范围,赋能智能合约与DeFi,及改变监管方式。加密经济助力金融效率与普惠性,但也伴随风险,需平衡发展与监管。**
|
16天前
|
存储 SQL 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。

热门文章

最新文章

下一篇
DataWorks