VNCTF2024 RE TBOXs WP

本文主要介绍了如何通过强行动调和静态分析方法来处理加密的TEA算法代码。内容包括在代码中识别加密步骤,如使用密钥和混淆操作,以及通过动态调试技术如设置硬件断点和修改指令来去除混淆以便于分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法一:强行动调

开头下个断点一直F8

走到这里发现字符串

这里发现输出

这里有个分支,应该要加密判断

似乎在验证长度

该标志位走到左边去

被混淆的TEA,魔改加了个0x33

unk_223004是密文,四个dword是密钥,进行还原

密文convert成32位

密钥也是提出来

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
    unsigned int enc[] =
    {
        0x31363010, 0xAD938623, 0x8492D4C5, 0x7567E366, 0xC786696B, 
        0xA0092E31, 0xDB695733, 0xDD13A893, 0x88D8A53E, 0x7E845437
    };
    unsigned int key[4] =
    {
        0x67626463, 0x696D616E, 0x79645F65, 0x6B696C69
    };
    int i, j;
    for (i = 0; i < 10; i += 2)
    {
        unsigned int v0 = enc[i], v1 = enc[i + 1], sum = 0xC6EF3720;
        unsigned int delta = 0x9e3779b9;
        unsigned int k0 = key[0], k1 = key[1], k2 = key[2], k3 = key[3];
        for (j = 0; j < 32; j++)
        {
            v1 -= ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3) ^ 0x33;
            v0 -= ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1) ^ 0x33;
            sum -= delta;
        }
        enc[i] = v0; enc[i + 1] = v1;
    }
    printf("%s", enc);
    return 0;
}

变量的数据类型注意一下,密文别写成char类型的

方法二:静态分析去混淆

**处理思路**:在输入位置下断点找到输入的地址,再在输入的地址上下硬件断点,运行断下来后就可以找到处理flag的位置了

**动态去除混淆的方法**:单步调试时如果ret运行到下一个地址就改为nop,call $+0,同样改为nop,如果ret是跳转到远处的地址就改为jmp +地址,这样以后就可以f5了!!

真不会,写不出来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值