Crack App | yl 合伙人header 加密参数 x-sign 逻辑分析

共 4894字,需浏览 10分钟

 ·

2023-08-01 14:22






点击上方“咸鱼学Python”,选择“加为星标


第一时间关注Python技术干货!




图源:AI绘画



包名


Y29tLnlsdHgub2lsLnBhcnRuZXI=


查壳


没有壳,直接抓包分析





抓包分析


这里分析的是两个请求


第一个是【油品贸易】- 【商品】列表的请求,请求头中一个 X-sign





第二个是登录请求中的 password 加密





加密参数定位与分析


x-sign


用 jadx 直接打开 app,然后搜索关键词 x-sign





进入文件,搜索 PARAM_SIGN





可以找到 x-sign 是由 sign(sb.toString()); 的得到的


进一步看 sign 的逻辑





可以看到就是一个 md5,参与加密的是 token + 请求时间 + 盐值+传入参数


当然静态分析的结果不一定可信,之后使用动态 hook 做进一步确认,同时还要确认一其它几个参与加密的值是上面


frida 启动,hook 一下刚刚定位到的 sign 方法


Java.perform(
    function(){
        var RequestParamsWrapper = Java.use('xxx.xxx.xxx.xxx.xxx.xxx.interceptors.xxxx');
        RequestParamsWrapper.sign.implementation = function(str1){
            console.log("i am RequestParamsWrapper.sign")
            console.log("str1:"+str1);
            var xsign = this.sign(str1);
            console.log("xsign:" + xsign);
            return xsign;
        }
    }
 );


刷新的【商品】的下一页,可以看到这里的 sign 方法的入参就是请求的参数拼接





接下来 hook md5 找到全部参与加密的字符串内容


Java.perform(
    function(){
        var Md5 = Java.use('xxx.xxx.xxxx.xxxx');
        Md5.md5.implementation = function(str1){
            console.log("i am utils.Md5")
            console.log("str1:"+str1);
            var xsign = this.md5(str1);
            console.log("xsign:" + xsign);
            return xsign;
        }
    }
 );




通过日志配合抓包





可以知道最后传入加密的字符串的值分别是token 为空+当前的时间戳+盐值是 3456 +请求参数拼接


再通过在线网站验证一下结果,确实是 md5





再用 Python 还原如下


import time

import requests
from hashlib import md5


def x_sign(time_str, data):
    x_sign = f"{time_str}3456{data}"
    result = md5(x_sign.encode('utf8')).hexdigest()
    return result


def get_shop_list(page):
    time_str = str(int(round(time.time() * 1000)))
    data = f"pageNo={page}"
    sign_result = x_sign(time_str, data)
    headers = {
        "X-App""native",
        "X-Noncestr""123456",
        "X-OS""partnerApp_android",
        "X-Req-Time": time_str,
        "X-Sign": sign_result,
        "X-Token""",
        "X-UserID""",
        "Host""chinayltx.com",
        "User-Agent""okhttp/3.10.0"
    }
    url = "xxxxxxxxxxxx"
    data = {
        "pageNo"f"{page}"
    }
    response = requests.post(url, headers=headers, data=data)
    print(response.text)
    print(response)


请求结果如下





password 加密


全局搜索 "password",可以找到下面的位置





接下来通过抓包中的链接对比apk 这里定义的请求链接找到下面的位置





然后通过【查找用例】找到下面的位置





通过全局搜索 loginWithToken





可以找到下面的位置,可以看到这里调用了 setPwd 写入密码


继续【查找用例】





可以定位到下面的代码位置





这个就没有啥好动态分析的了 就是标准的 md5 ,原文就密码


同样的在这个请求的 header 中也有一个 x-sign


我们重复上面的步骤可以看到如下的两个日志








同样的使用 Python 请求验证一下






上就是今天的全部内容了,咱们下次再会~



End.


以上就是全部的内容了,咱们下次再会~


备注【咸鱼666


入群交流



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


收到请回复~





咸鱼:来都来了,再不点赞就不礼貌了!







浏览 511
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报