首页
论坛
专栏
课程

[原创]2018看雪&TSRC CTF第六题WP

2018-12-13 06:02 865

[原创]2018看雪&TSRC CTF第六题WP

2018-12-13 06:02
865

目标程序在物理机上的win10 x64和虚拟机上的win7 x86中都无法运行...临时装的win7 x64。
队友分析出了程序在GetDlgItemTextA内部挂钩了一个函数,于是我就直接在GetDlgItemTextA处下了个断点,分析这个挂钩函数就好。

 

挂钩函数往里跟几步就来到了校验处:
共两处校验,其中ctf_my_strHash是防止多解的,分析ctf_X_check就够了。

......    //计算input长度
if ( ctf_X_check(input, *(_DWORD *)(a2 - 28)) ) //参数2为输入长度
{
    inputLen = ctf_my_strlen(input);
    if ( ctf_my_strHash(input, inputLen) == 0x5634D252 )
    {
        ......    //成功
    }
}

ctf_X_check:
初始化了一个3x3的矩阵。

bool __cdecl ctf_X_check(char *input, int len)
{
    Square_3x3[0][0] = 4;
    Square_3x3[0][1] = 1;
    Square_3x3[0][2] = 3;
    Square_3x3[1][0] = 7;
    Square_3x3[1][1] = 2;
    Square_3x3[1][2] = 5;
    Square_3x3[2][0] = 8;
    Square_3x3[2][1] = 6;
    Square_3x3[2][2] = 0;
    return ctf_X_squareCheck(input, len);
}

ctf_X_squareCheck:
给出了input的格式,给出了变换后预期的3x3矩阵。

bool __cdecl ctf_X_squareCheck(char *input, int len)
{
    int i; // [esp+0h] [ebp-Ch]
    int local_direction; // [esp+8h] [ebp-4h]

    local_direction = 0xCCCCCCCC;
    if ( len % 2 )
        return 0;
    for ( i = 0; i < len; i += 2 )
    {
    if ( input[i] == 'w' )
        local_direction = 0;
    if ( input[i] == 'd' )
        local_direction = 1;
    if ( input[i] == 's' )
        local_direction = 2;
    if ( input[i] == 'a' )
        local_direction = 3;
    if ( !ctf_X_squareSwap(local_direction, input[i + 1] - '0') )
        return 0;
    }
    return Square_3x3[0][0] == 1 && Square_3x3[0][1] == 2 && Square_3x3[0][2] == 3 
        && Square_3x3[1][0] == 4 && Square_3x3[1][1] == 5 && Square_3x3[1][2] == 6 
        && Square_3x3[2][0] == 7 && Square_3x3[2][1] == 8 && !Square_3x3[2][2];
}

ctf_X_squareSwap有点长,就不贴代码了。大致的功能是交换3x3矩阵中相邻的两个值,限制条件是只能和0交换。

求解

init:                expectd:
4    1    3            1    2    3

7    2    5    ——>     4    5    6

8    6    0            7    8    0

不难看出,除了不经过右上角的3,顺时针跑一圈就能还原。
flag为:d6d8s7s4a1w2a5w6



[招聘]欢迎市场人员加入看雪学院团队!

最后于 2018-12-13 06:23 被jackandkx编辑 ,原因:
最新回复 (1)
qux 2018-12-16 21:33
2
0
这个思路很清奇
游客
登录 | 注册 方可回帖
返回