吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 586|回复: 2
收起左侧

[CTF] 2025春节解题领红包 Win/Android初级、番外二

[复制链接]
YuYu798 发表于 2025-2-13 10:15
Windows初级

拿到程序后直接拖入OD, 中文智能搜索字符串  在关键词部分打上断点, 运行程序, 断住了, 此时在右侧直接出现flag

win初级

win初级

fl@g{52pOj1E_2025#Fighting}


Android初级

用MT管理器打开, 发现FoldFragment1和flag无关, 直接看FoldFragment2, 发现有三处密文均调用了 TO.Companion.db 进行解密, 进到里面查看代码
发现就是使用xxtea加解密, 而且秘钥也给定了my-xxtea-secret, 网上随便找一个在线解密的网站解密一下
4.jpg 5.jpg
得到flag{xnkl2025!}

番外篇
番外篇只找到了flag10, flag9是没找到, flag11明白原理, 但是实操太费时间, 也没弄

flag10
在抽奖页面可以找到这两句注释
[Asm] 纯文本查看 复制代码
1
2
// 这个 getVerifyCode 的 wasm 实现比 blueimp-md5 js 实现快 20 倍。
// 猜猜 flag10 藏在什么地方?

那就得看看这个wasm文件了, 在文件里搜索flag, 发现关键函数:
1.png
于是照猫画虎, 仿照getVerifyCode这个函数构造一个调用flag10的函数:
[JavaScript] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
window.getFlag10 = (uid) => {
  const memory = new Uint8Array(instance.exports.memory.buffer);
  const resultBufPtr = 0;
  const resultBufLen = 16;
  const resultLen =
    instance.exports.calc_flag10_uid_timestamp_resultbufptr_resultbuflen_return_resultlen(
      uid,
      Math.floor(Date.now() / 1000),
      resultBufPtr,
      resultBufLen
    );
  const code = new TextDecoder().decode(
    memory.subarray(resultBufPtr, resultBufPtr + resultLen)
  );
  return code;
};

执行后, 在控制台可以输出flag10

flag9
这个我确实没想到是提示词攻击, 只能说自己的发散思维不够, 我一直以为是调用接口直接返回flag9呢, 但是值得注意的是, 可以把抽奖页面的那个getVerifyCode 的 wasm 实现放到这里, 可以显著提高速度

flag11
[Bash shell] 纯文本查看 复制代码
1
2
3
4
5
blockNumber=$(curl -s -H 'Content-type: application/json' --data-raw '{"body":{}}' 'https://api.upowerchain.com/apis/v1alpha1/statistics/overview' | jq -r '.blockHeight')
blockHash=$(curl -s -H 'Content-type: application/json' --data-raw '{"number":"'$blockNumber'"}' 'https://api.upowerchain.com/apis/v1alpha1/block/get' | jq -r '.data.blockHash')
userCount=10001
userIndex=$(python -c "print($blockHash % $userCount)")
echo $userIndex

这个题的关键点在于抽奖之前就已经给出了blockNumber, 那么就可以提前预判中奖者, 只需要人为控制抽奖的总人数, 就可以将userIndex(中奖者序号)指定给自己, 不过这太吃操作和时间了, 春节期间也没有太多时间, 弄清楚原理就草草了事了,  下面是一个写了一点点的py脚本
[Python] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
def get_block_hash(block_number):
    """获取指定区块的哈希值"""
    url = "https://api.upowerchain.com/apis/v1alpha1/block/get"
    headers = {"Content-type": "application/json"}
    data = {"number": block_number}
    response = requests.post(url, headers=headers, json=data)
    if response.status_code == 200:
        return response.json().get("data", {}).get("blockHash")
    else:
        raise Exception(f"Failed to get block hash: {response.status_code}")
 
 
def calculate_user_index(block_hash, user_count):
    """根据区块哈希值计算用户索引"""
    # 将哈希值转换为整数
    block_hash_int = int(block_hash, 16)
    # 使用取模运算计算用户索引
    user_index = block_hash_int % user_count
    return user_index
 
 
def main():
    try:
        block_num, user_count = get_info()
        print(f"Block Number: {block_num}")
        print(f"User Count: {user_count}")
 
        # block_num, user_count = (29360304, 10071)
        # 获取区块哈希值
        block_hash = get_block_hash(block_num)
        print(f"Block Hash: {block_hash}")
 
        # 计算用户索引
        user_index = calculate_user_index(block_hash, user_count)
        print(f"User Index: {user_index}")
 
        return user_index
 
    except Exception as e:
        print(f"Error: {e}")
        return None


3.jpg

免费评分

参与人数 3威望 +1 吾爱币 +21 热心值 +3 收起 理由
笙若 + 1 + 1 用心讨论,共获提升!
Fidelio + 1 用心讨论,共获提升!
Hmily + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

LONG65041 发表于 2025-2-13 11:16
我是菜鸟,完全不会解,不过今年我会学,争取明年能解出来!!!
jsncy 发表于 2025-2-18 15:10
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-3-19 00:24

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表