得物 APP newSign分析

声明:
本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!
逆向分析
学了3-4天得物,学到挺多的。基本把坑重头踩到尾。从抓到到so层,再到反frida,IDA技巧、Jadx技巧基本都用上了。

逆向过程

得物 版本5.31

抓包问题,pixel2反复出现charles一下可以抓包,一下不可以这点是真牛逼。每次都要重启,昨天晚上洗个澡回来突然又抓不到包,发现防火墙把包全给拦了,剩下还有一些SSL问题一下可以一下不可以没搞懂。(有大佬解决的教教我)实在突然不行有黄鸟都可以抓包。

主要加密就这几个剩下hook部分就不细说了。

def pad_pkcs5(data):
    """
    对数据进行 PKCS5 填充
    :param data: 需要填充的数据(字节类型)
    :return: 填充后的数据
    """
    block_size = AES.block_size
    padding_length = block_size - (len(data) % block_size)
    return data + bytes([padding_length] * padding_length)

def unpad_pkcs5(data):
    """
    去除 PKCS5 填充
    :param data: 需要去除填充的数据(字节类型)
    :return: 去除填充后的数据
    """
    padding_length = data[-1]
    return data[:-padding_length]

def encrypt_aes_ecb_pkcs5(plaintext, key):
    """
    使用 AES_128_ECB_PKCS5Padding 模式加密明文
    :param plaintext: 明文字符串
    :param key: 加密密钥(必须是16字节长)
    :return: Base64格式的密文字符串
    """
    key_bytes = key.encode('utf-8')
    cipher = AES.new(key_bytes, AES.MODE_ECB)
    plaintext_bytes = plaintext.encode('utf-8')
    padded_plaintext = pad_pkcs5(plaintext_bytes)
    ciphertext_bytes = cipher.encrypt(padded_plaintext)
    ciphertext_base64 = base64.b64encode(ciphertext_bytes).decode('utf-8')
    return ciphertext_base64

def decrypt_aes_ecb_pkcs5(ciphertext_base64, key):
    """
    使用 AES_128_ECB_PKCS5Padding 模式解密密文
    :param ciphertext_base64: Base64格式的密文字符串
    :param key: 解密密钥(必须是16字节长)
    :return: 解密后的明文字符串
    """
    key_bytes = key.encode('utf-8')
    ciphertext_bytes = base64.b64decode(ciphertext_base64)
    cipher = AES.new(key_bytes, AES.MODE_ECB)
    plaintext_bytes = cipher.decrypt(ciphertext_bytes)
    unpadded_plaintext = unpad_pkcs5(plaintext_bytes)
    plaintext = unpadded_plaintext.decode('utf-8')
    return plaintext


import hashlib


def md5_encrypt(plaintext):
    """
    使用 MD5 加密明文
    :param plaintext: 明文字符串
    :return: MD5 加密后的十六进制字符串
    """
    # 创建 MD5 哈希对象
    md5_hash = hashlib.md5()

    # 更新哈希对象的明文字节
    md5_hash.update(plaintext.encode('utf-8'))

    # 获取加密后的十六进制字符串
    ciphertext_hex = md5_hash.hexdigest()

    return ciphertext_hex

结果

总结

1.出于安全考虑,本章未提供完整流程,调试环节省略较多,只提供大致思路,具体细节要你自己还原,相信你也能调试出来。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wx a15018601872

wx a15018601872

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值