第二题:加解密挑战

1、抓包

image-20260226102435192

若出现这个问题,直接关闭Disable cache就好,当然使用charles去抓包也行

image-20260226102546385

接口分析,可以看到解密值就是一个sign,timestamp时间戳忽略,从堆栈找,当然全局搜索也行

image-20260226102757894

image-20260226102806888

很快就找到加密点

2、加密分析

image-20260226102903956

看到有md5,查看是不是通用加密

image-20260226102938805

对不上,直接扣代码,点击函数后跳转到此处

image-20260226103342909

直接全部扣下来,到新页面调用(拷贝时,关闭格式化)

image-20260226103432678

image-20260226103516972

调用成功

3、补环境

直接导入所有的代码到pycharm中执行,发现有很多报错

image-20260226173245865

缺啥补啥,或者直接将整段代码给到AI

image-20260226173447488

可以看到此处是AI的建议,为了看的方便,直接ob解混淆https://deobfuscate.relative.im/

image-20260227092431929

可以看到很多环境检测,用于影响结果的三目表达式,将此处的检测点全部补全就能拿到对应的结果

image-20260227101211041

4、直接调用

OB还原后能看到加密位置是加了盐

image-20260227093208402

直接通过ai改写一个加盐的解密函数

image-20260227093255550

1
2
3
4
5
6
7
8
9
10
11
12
import hashlib

def sign(s: str) -> str:
salt_bytes = (
b'\xa3\xac\xa1\xa3\x66\x64\x6a\x66'
b'\x2c\x6a\x6b\x67\x66\x6b\x6c'
)

data = s.encode('utf-8') + salt_bytes
return hashlib.md5(data).hexdigest()

print(sign("17720728999692"))

image-20260227093417835

能看到结果一致