吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2032|回复: 1
收起左侧

[CTF] [TBTL CTF 2024] re - Floopowder(Frida Hook 巧解算法问题)

  [复制链接]
kn0sky 发表于 2024-5-17 14:32
本帖最后由 kn0sky 于 2024-5-17 14:41 编辑

analysis

题目加入附件,有兴趣可以拿去练练手

题目分析的时候[b]先别陷入细节,先看整体逻辑:


__int64 __fastcall main(int a1, char **a2, char **a3)

{

  int i; // [rsp+0h] [rbp-20h]

  int j; // [rsp+4h] [rbp-1Ch]

  int line; // [rsp+8h] [rbp-18h]

  int column; // [rsp+Ch] [rbp-14h]

  unsigned int v8; // [rsp+10h] [rbp-10h]

  int v9; // [rsp+14h] [rbp-Ch]

  int v10; // [rsp+18h] [rbp-8h]

  int v11; // [rsp+1Ch] [rbp-4h]

  puts("Now don't forget to speak very, very clearly...");

  for ( i = 0; i < 31; ++i )                    // 32次输入

  {

    __isoc99_scanf("%s", &input[31 * i]);       // 每次输入 31 字节

                                                // 是矩阵

    if ( strlen(&input[31 * i]) != 31 )

      error_exit();

    for ( j = 0; j < 31; ++j )

    {

      if ( input[31 * i + j] != '1' && input[31 * i + j] != '0' )// 数字必须是0和1中的一个

        error_exit();

    }

  }

  line = 0;

  column = 0;

  v8 = 0;

  v9 = 1;

  while ( line < 31 && column < 31 )            // 31*31矩阵

  {

    sub_11CA(line, column, v8++);               // 需要知道校验顺序

    if ( v9 == 1 )

    {

      v10 = line - 1;

      v11 = column + 1;

    }

    else

    {

      v10 = line + 1;

      v11 = column - 1;

    }

    if ( v10 < 0 || v10 == 31 || v11 < 0 || v11 == 31 )// 边界条件

    {

      if ( v9 == 1 )

      {

        line += column == 30;                   // line+0或者+1

        column += column < 30;                  // column+1或者+0

      }

      else

      {

        column += line == 30;

        line += line < 30;

      }

      v9 = 1 - v9;

    }

    else

    {

      line = v10;

      column = v11;

    }

  }

  puts("Welcome to Diagon Alley!");

  return 0LL;

}

程序接收输入31次,每次接收31字符,是个正方形矩阵,接收完输入会进入到sub_11CA函数进行处理:


_BOOL8 __fastcall sub_11CA(int line, int colunm, int idx)

{

  _BOOL8 result; // rax

  result = input[31 * line + colunm] == '1';

  if ( (input[31 * line + colunm] == '1') != (((dword_4020[idx / 31] >> (31 - idx % 31 - 1)) & 1) != 0) )// 两边条件同时满足

    error_exit();

  return result;

}

这里进行校验,如果校验不通过,就退出程序

那么求解思路就是:

  1. 分析校验的值

  2. 分析校验的顺序

  3. 还原矩阵的值

这里分析一下这个判断:


 (input[31 * line + colunm] == '1') != (((dword_4020[idx / 31] >> (31 - idx % 31 - 1)) & 1) != 0) 

(输入 == 1) != (一个值 & 1 !=0),简化一下:(输入 == 1) != (一个值 == 1)

也就是说,左边为1,右边算出来的值也需要为1

左边为0,右边算出来的值为0,第一步分析就完成了

接下来第二步,分析校验的顺序:矩阵这么多位,又不是一个一个按顺序校验,是按照某个算法逻辑进行的

常规思路是:去分析代码,手动分析校验顺序,然后写脚本还原矩阵;这里用一个取巧的思路:Hook 大法

这里我们看反汇编:


.text:0000000000001266                 cmp     eax, [rbp+var_4] ; 判断两个值是否相同

.text:0000000000001269                 jz      short loc_1275

.text:000000000000126B                 mov     eax, 0          ; 不同就设置eax为0

.text:0000000000001270                 call    error_exit

.text:0000000000001275 ; ---------------------------------------------------------------------------

.text:0000000000001275

.text:0000000000001275 loc_1275:                               ; CODE XREF: sub_11CA+9F↑j

.text:0000000000001275                 nop

.text:0000000000001276                 leave

.text:0000000000001277                 retn

.text:0000000000001277 ; } // starts at 11CA

.text:0000000000001277 sub_11CA        endp

这里可以进行patch,把call给patch掉:


.text:0000000000001266                 cmp     eax, [rbp+var_4]

.text:0000000000001269                 jz      short loc_1275

.text:000000000000126B                 mov     eax, 0

.text:0000000000001270                 nop

.text:0000000000001271                 nop

.text:0000000000001272                 nop

.text:0000000000001273                 nop

.text:0000000000001274                 nop

.text:0000000000001275

.text:0000000000001275 loc_1275:                               ; CODE XREF: sub_11CA+9F↑j

.text:0000000000001275                 nop

.text:0000000000001276                 leave

.text:0000000000001277                 retn

.text:0000000000001277 ; } // starts at 11CA

.text:0000000000001277 sub_11CA        endp

.text:0000000000001277

这样一来,这个函数会被一直执行,每次执行的前两个参数,就是目标值所在的行和列,而这里的eax,也就是返回值,也会根据判断结果而变化:

  • 如果输入是1,目标值是1,则返回1,

  • 如果输入是0,目标值是1,则返回0,

  • 如果输入是1,目标值是0,则返回0,

  • 如果输入是0,目标值是0,则返回1,

输入是可控的,如果我们输入的是全1,则只有两种情况:

  • 如果输入是1,目标值是1,则返回1,

  • 如果输入是1,目标值是0,则返回0,

返回值就是答案,参数决定输入所在的位置

exp:

写frida脚本进行Hook,拿到参数和返回值进行拼接字符串,变成python的数组赋值脚本:


const module = Process.getModuleByName("FlooPowder2");

const baseAddr = module.base;

const targetFuncOffset = 0x11ca;

const targetFuncAddr = baseAddr.add(targetFuncOffset);

var inp = ""

Interceptor.attach(targetFuncAddr, {

  onEnter: function(args) {

    //console.log("line: " +args[0].toInt32() + " col: " + args[1].toInt32() + " idx: " + args[2].toInt32());

    inp = "inp[" + args[0].toInt32() + "][" + args[1].toInt32() + "]"

  },

  onLeave: function(retval) {

    console.log(inp +"="+ retval.toInt32());

  }

});

from __future__ import print_function

import frida

import sys

from pwn import *

path = "FlooPowder2"

io = process(path)

#device = frida.get_device_manager().enumerate_devices()

local = frida.get_local_device()

a = local.get_process(path)

print(a)

session = local.attach(path)

with open("hook.js", "r") as f:

    code = f.read()

script = session.create_script(code)

script.load()

test_inp = """

1111111111111111111111111111111

1111111111111111111111111111111

1111111111111111111111111111111

1111111111111111111111111111111

1111111111111111111111111111111

1111111111111111111111111111111

1111111111111111111111111111111

1111111111111111111111111111111

1111111111111111111111111111111

1111111111111111111111111111111

1111111111111111111111111111111

1111111111111111111111111111111

1111111111111111111111111111111

1111111111111111111111111111111

1111111111111111111111111111111

1111111111111111111111111111111

1111111111111111111111111111111

1111111111111111111111111111111

1111111111111111111111111111111

1111111111111111111111111111111

1111111111111111111111111111111

1111111111111111111111111111111

1111111111111111111111111111111

1111111111111111111111111111111

1111111111111111111111111111111

1111111111111111111111111111111

1111111111111111111111111111111

1111111111111111111111111111111

1111111111111111111111111111111

1111111111111111111111111111111

1111111111111111111111111111111

"""

io.recvuntil(b"Now don't forget to speak very, very clearly...")

io.send(test_inp.encode())

io.interactive()

拿到超级长的输出,黏贴到python里,自己申请一个二维数组,开始赋值:


from PIL import Image

import zlib

# 二维数组30*30

inp = [[0 for i in range(32)] for j in range(32)]

inp[0][0]=0

inp[0][1]=0

inp[1][0]=0

inp[2][0]=0

inp[1][1]=1

inp[0][2]=0

inp[0][3]=0

inp[1][2]=1

inp[2][1]=1

inp[3][0]=0

inp[4][0]=0

inp[3][1]=1

inp[2][2]=0

inp[1][3]=1

inp[0][4]=0

inp[0][5]=0

inp[1][4]=1

inp[2][3]=0

inp[3][2]=0

inp[4][1]=1

inp[5][0]=0

inp[6][0]=0

inp[5][1]=1

inp[4][2]=0

inp[3][3]=1

inp[2][4]=0

inp[1][5]=1

inp[0][6]=0

inp[0][7]=0

inp[1][6]=1

inp[2][5]=0

inp[3][4]=1

inp[4][3]=1

inp[5][2]=0

inp[6][1]=1

inp[7][0]=0

inp[8][0]=0

inp[7][1]=1

inp[6][2]=0

inp[5][3]=1

inp[4][4]=1

inp[3][5]=1

inp[2][6]=0

inp[1][7]=1

inp[0][8]=0

inp[0][9]=0

inp[1][8]=0

inp[2][7]=1

inp[3][6]=0

inp[4][5]=1

inp[5][4]=1

inp[6][3]=0

inp[7][2]=1

inp[8][1]=0

inp[9][0]=0

inp[10][0]=0

inp[9][1]=1

inp[8][2]=0

inp[7][3]=1

inp[6][4]=0

inp[5][5]=1

inp[4][6]=0

inp[3][7]=1

inp[2][8]=0

inp[1][9]=0

inp[0][10]=0

inp[0][11]=0

inp[1][10]=1

inp[2][9]=1

inp[3][8]=0

inp[4][7]=1

inp[5][6]=0

inp[6][5]=0

inp[7][4]=1

inp[8][3]=0

inp[9][2]=1

inp[10][1]=0

inp[11][0]=0

inp[12][0]=0

inp[11][1]=1

inp[10][2]=0

inp[9][3]=1

inp[8][4]=0

inp[7][5]=1

inp[6][6]=0

inp[5][7]=1

inp[4][8]=0

inp[3][9]=0

inp[2][10]=1

inp[1][11]=0

inp[0][12]=0

inp[0][13]=0

inp[1][12]=0

inp[2][11]=0

inp[3][10]=1

inp[4][9]=1

inp[5][8]=0

inp[6][7]=1

inp[7][6]=1

inp[8][5]=0

inp[9][4]=1

inp[10][3]=1

inp[11][2]=0

inp[12][1]=1

inp[13][0]=0

inp[14][0]=0

inp[13][1]=0

inp[12][2]=0

inp[11][3]=1

inp[10][4]=0

inp[9][5]=1

inp[8][6]=0

inp[7][7]=1

inp[6][8]=0

inp[5][9]=0

inp[4][10]=1

inp[3][11]=1

inp[2][12]=1

inp[1][13]=0

inp[0][14]=0

inp[0][15]=0

inp[1][14]=1

inp[2][13]=1

inp[3][12]=1

inp[4][11]=0

inp[5][10]=0

inp[6][9]=1

inp[7][8]=0

inp[8][7]=0

inp[9][6]=0

inp[10][5]=0

inp[11][4]=0

inp[12][3]=0

inp[13][2]=0

inp[14][1]=0

inp[15][0]=0

inp[16][0]=0

inp[15][1]=1

inp[14][2]=0

inp[13][3]=1

inp[12][4]=1

inp[11][5]=0

inp[10][6]=1

inp[9][7]=1

inp[8][8]=0

inp[7][9]=1

inp[6][10]=0

inp[5][11]=1

inp[4][12]=1

inp[3][13]=0

inp[2][14]=0

inp[1][15]=1

inp[0][16]=0

inp[0][17]=0

inp[1][16]=0

inp[2][15]=0

inp[3][14]=0

inp[4][13]=0

inp[5][12]=0

inp[6][11]=1

inp[7][10]=0

inp[8][9]=0

inp[9][8]=1

inp[10][7]=0

inp[11][6]=0

inp[12][5]=1

inp[13][4]=0

inp[14][3]=0

inp[15][2]=1

inp[16][1]=1

inp[17][0]=0

inp[18][0]=0

inp[17][1]=1

inp[16][2]=1

inp[15][3]=1

inp[14][4]=0

inp[13][5]=1

inp[12][6]=0

inp[11][7]=1

inp[10][8]=1

inp[9][9]=1

inp[8][10]=0

inp[7][11]=1

inp[6][12]=0

inp[5][13]=1

inp[4][14]=1

inp[3][15]=1

inp[2][16]=1

inp[1][17]=1

inp[0][18]=0

inp[0][19]=0

inp[1][18]=0

inp[2][17]=1

inp[3][16]=1

inp[4][15]=0

inp[5][14]=1

inp[6][13]=0

inp[7][12]=0

inp[8][11]=0

inp[9][10]=1

inp[10][9]=0

inp[11][8]=1

inp[12][7]=0

inp[13][6]=0

inp[14][5]=1

inp[15][4]=0

inp[16][3]=1

inp[17][2]=0

inp[18][1]=1

inp[19][0]=0

inp[20][0]=0

inp[19][1]=1

inp[18][2]=0

inp[17][3]=0

inp[16][4]=1

inp[15][5]=0

inp[14][6]=1

inp[13][7]=1

inp[12][8]=1

inp[11][9]=0

inp[10][10]=1

inp[9][11]=1

inp[8][12]=0

inp[7][13]=1

inp[6][14]=1

inp[5][15]=0

inp[4][16]=1

inp[3][17]=0

inp[2][18]=1

inp[1][19]=0

inp[0][20]=0

inp[0][21]=0

inp[1][20]=1

inp[2][19]=1

inp[3][18]=0

inp[4][17]=1

inp[5][16]=0

inp[6][15]=1

inp[7][14]=0

inp[8][13]=1

inp[9][12]=0

inp[10][11]=0

inp[11][10]=1

inp[12][9]=1

inp[13][8]=0

inp[14][7]=0

inp[15][6]=0

inp[16][5]=1

inp[17][4]=1

inp[18][3]=1

inp[19][2]=0

inp[20][1]=1

inp[21][0]=0

inp[22][0]=0

inp[21][1]=1

inp[20][2]=0

inp[19][3]=0

inp[18][4]=1

inp[17][5]=0

inp[16][6]=0

inp[15][7]=1

inp[14][8]=0

inp[13][9]=1

inp[12][10]=1

inp[11][11]=0

inp[10][12]=0

inp[9][13]=1

inp[8][14]=0

inp[7][15]=1

inp[6][16]=1

inp[5][17]=0

inp[4][18]=1

inp[3][19]=0

inp[2][20]=0

inp[1][21]=0

inp[0][22]=0

inp[0][23]=0

inp[1][22]=0

inp[2][21]=0

inp[3][20]=0

inp[4][19]=1

inp[5][18]=0

inp[6][17]=0

inp[7][16]=0

inp[8][15]=0

inp[9][14]=1

inp[10][13]=0

inp[11][12]=1

inp[12][11]=1

inp[13][10]=1

inp[14][9]=1

inp[15][8]=0

inp[16][7]=0

inp[17][6]=1

inp[18][5]=0

inp[19][4]=0

inp[20][3]=1

inp[21][2]=0

inp[22][1]=0

inp[23][0]=0

inp[24][0]=0

inp[23][1]=1

inp[22][2]=0

inp[21][3]=0

inp[20][4]=1

inp[19][5]=1

inp[18][6]=1

inp[17][7]=1

inp[16][8]=0

inp[15][9]=0

inp[14][10]=1

inp[13][11]=0

inp[12][12]=1

inp[11][13]=1

inp[10][14]=1

inp[9][15]=0

inp[8][16]=1

inp[7][17]=1

inp[6][18]=0

inp[5][19]=0

inp[4][20]=0

inp[3][21]=1

inp[2][22]=0

inp[1][23]=1

inp[0][24]=0

inp[0][25]=0

inp[1][24]=1

inp[2][23]=1

inp[3][22]=0

inp[4][21]=0

inp[5][20]=0

inp[6][19]=0

inp[7][18]=0

inp[8][17]=1

inp[9][16]=0

inp[10][15]=0

inp[11][14]=1

inp[12][13]=0

inp[13][12]=1

inp[14][11]=1

inp[15][10]=1

inp[16][9]=1

inp[17][8]=1

inp[18][7]=0

inp[19][6]=1

inp[20][5]=0

inp[21][4]=1

inp[22][3]=0

inp[23][2]=1

inp[24][1]=1

inp[25][0]=0

inp[26][0]=0

inp[25][1]=1

inp[24][2]=0

inp[23][3]=1

inp[22][4]=0

inp[21][5]=0

inp[20][6]=0

inp[19][7]=1

inp[18][8]=0

inp[17][9]=1

inp[16][10]=0

inp[15][11]=0

inp[14][12]=0

inp[13][13]=0

inp[12][14]=0

inp[11][15]=1

inp[10][16]=0

inp[9][17]=0

inp[8][18]=0

inp[7][19]=1

inp[6][20]=0

inp[5][21]=1

inp[4][22]=0

inp[3][23]=1

inp[2][24]=0

inp[1][25]=1

inp[0][26]=0

inp[0][27]=0

inp[1][26]=1

inp[2][25]=0

inp[3][24]=0

inp[4][23]=1

inp[5][22]=0

inp[6][21]=1

inp[7][20]=0

inp[8][19]=1

inp[9][18]=1

inp[10][17]=1

inp[11][16]=1

inp[12][15]=0

inp[13][14]=1

inp[14][13]=1

inp[15][12]=0

inp[16][11]=1

inp[17][10]=0

inp[18][9]=0

inp[19][8]=0

inp[20][7]=0

inp[21][6]=0

inp[22][5]=0

inp[23][4]=1

inp[24][3]=0

inp[25][2]=0

inp[26][1]=1

inp[27][0]=0

inp[28][0]=0

inp[27][1]=1

inp[26][2]=0

inp[25][3]=1

inp[24][4]=0

inp[23][5]=1

inp[22][6]=0

inp[21][7]=1

inp[20][8]=1

inp[19][9]=0

inp[18][10]=1

inp[17][11]=0

inp[16][12]=0

inp[15][13]=0

inp[14][14]=1

inp[13][15]=0

inp[12][16]=1

inp[11][17]=1

inp[10][18]=0

inp[9][19]=0

inp[8][20]=1

inp[7][21]=1

inp[6][22]=0

inp[5][23]=1

inp[4][24]=0

inp[3][25]=1

inp[2][26]=0

inp[1][27]=1

inp[0][28]=0

inp[0][29]=0

inp[1][28]=1

inp[2][27]=0

inp[3][26]=1

inp[4][25]=1

inp[5][24]=0

inp[6][23]=1

inp[7][22]=0

inp[8][21]=1

inp[9][20]=1

inp[10][19]=0

inp[11][18]=1

inp[12][17]=0

inp[13][16]=1

inp[14][15]=0

inp[15][14]=1

inp[16][13]=1

inp[17][12]=0

inp[18][11]=0

inp[19][10]=0

inp[20][9]=1

inp[21][8]=0

inp[22][7]=0

inp[23][6]=1

inp[24][5]=0

inp[25][4]=1

inp[26][3]=1

inp[27][2]=0

inp[28][1]=1

inp[29][0]=0

inp[30][0]=0

inp[29][1]=1

inp[28][2]=0

inp[27][3]=1

inp[26][4]=1

inp[25][5]=1

inp[24][6]=0

inp[23][7]=1

inp[22][8]=0

inp[21][9]=0

inp[20][10]=0

inp[19][11]=1

inp[18][12]=0

inp[17][13]=1

inp[16][14]=0

inp[15][15]=1

inp[14][16]=0

inp[13][17]=0

inp[12][18]=0

inp[11][19]=1

inp[10][20]=0

inp[9][21]=1

inp[8][22]=0

inp[7][23]=1

inp[6][24]=0

inp[5][25]=1

inp[4][26]=1

inp[3][27]=1

inp[2][28]=0

inp[1][29]=1

inp[0][30]=0

inp[1][30]=0

inp[2][29]=1

inp[3][28]=0

inp[4][27]=1

inp[5][26]=1

inp[6][25]=0

inp[7][24]=1

inp[8][23]=0

inp[9][22]=1

inp[10][21]=1

inp[11][20]=0

inp[12][19]=1

inp[13][18]=1

inp[14][17]=1

inp[15][16]=1

inp[16][15]=0

inp[17][14]=1

inp[18][13]=0

inp[19][12]=1

inp[20][11]=1

inp[21][10]=1

inp[22][9]=1

inp[23][8]=0

inp[24][7]=1

inp[25][6]=0

inp[26][5]=1

inp[27][4]=1

inp[28][3]=0

inp[29][2]=1

inp[30][1]=0

inp[30][2]=0

inp[29][3]=1

inp[28][4]=0

inp[27][5]=1

inp[26][6]=0

inp[25][7]=1

inp[24][8]=0

inp[23][9]=1

inp[22][10]=0

inp[21][11]=1

inp[20][12]=1

inp[19][13]=1

inp[18][14]=1

inp[17][15]=1

inp[16][16]=0

inp[15][17]=0

inp[14][18]=1

inp[13][19]=1

inp[12][20]=0

inp[11][21]=1

inp[10][22]=1

inp[9][23]=0

inp[8][24]=0

inp[7][25]=1

inp[6][26]=0

inp[5][27]=1

inp[4][28]=0

inp[3][29]=1

inp[2][30]=0

inp[3][30]=0

inp[4][29]=1

inp[5][28]=0

inp[6][27]=0

inp[7][26]=1

inp[8][25]=0

inp[9][24]=1

inp[10][23]=1

inp[11][22]=0

inp[12][21]=0

inp[13][20]=1

inp[14][19]=0

inp[15][18]=1

inp[16][17]=1

inp[17][16]=0

inp[18][15]=1

inp[19][14]=0

inp[20][13]=0

inp[21][12]=1

inp[22][11]=1

inp[23][10]=1

inp[24][9]=0

inp[25][8]=0

inp[26][7]=1

inp[27][6]=0

inp[28][5]=0

inp[29][4]=1

inp[30][3]=0

inp[30][4]=0

inp[29][5]=1

inp[28][6]=0

inp[27][7]=1

inp[26][8]=0

inp[25][9]=1

inp[24][10]=0

inp[23][11]=0

inp[22][12]=0

inp[21][13]=0

inp[20][14]=0

inp[19][15]=1

inp[18][16]=0

inp[17][17]=0

inp[16][18]=0

inp[15][19]=0

inp[14][20]=0

inp[13][21]=1

inp[12][22]=1

inp[11][23]=0

inp[10][24]=1

inp[9][25]=0

inp[8][26]=0

inp[7][27]=1

inp[6][28]=0

inp[5][29]=1

inp[4][30]=0

inp[5][30]=0

inp[6][29]=1

inp[7][28]=1

inp[8][27]=0

inp[9][26]=1

inp[10][25]=1

inp[11][24]=1

inp[12][23]=0

inp[13][22]=0

inp[14][21]=1

inp[15][20]=0

inp[16][19]=0

inp[17][18]=0

inp[18][17]=1

inp[19][16]=1

inp[20][15]=1

inp[21][14]=0

inp[22][13]=1

inp[23][12]=0

inp[24][11]=0

inp[25][10]=0

inp[26][9]=1

inp[27][8]=0

inp[28][7]=1

inp[29][6]=1

inp[30][5]=0

inp[30][6]=0

inp[29][7]=1

inp[28][8]=0

inp[27][9]=1

inp[26][10]=0

inp[25][11]=0

inp[24][12]=0

inp[23][13]=0

inp[22][14]=1

inp[21][15]=0

inp[20][16]=1

inp[19][17]=0

inp[18][18]=1

inp[17][19]=0

inp[16][20]=0

inp[15][21]=1

inp[14][22]=0

inp[13][23]=0

inp[12][24]=0

inp[11][25]=1

inp[10][26]=1

inp[9][27]=0

inp[8][28]=0

inp[7][29]=1

inp[6][30]=0

inp[7][30]=0

inp[8][29]=0

inp[9][28]=1

inp[10][27]=1

inp[11][26]=0

inp[12][25]=1

inp[13][24]=1

inp[14][23]=0

inp[15][22]=0

inp[16][21]=0

inp[17][20]=0

inp[18][19]=0

inp[19][18]=1

inp[20][17]=0

inp[21][16]=1

inp[22][15]=0

inp[23][14]=1

inp[24][13]=1

inp[25][12]=0

inp[26][11]=0

inp[27][10]=1

inp[28][9]=1

inp[29][8]=0

inp[30][7]=0

inp[30][8]=0

inp[29][9]=1

inp[28][10]=1

inp[27][11]=1

inp[26][12]=0

inp[25][13]=1

inp[24][14]=1

inp[23][15]=1

inp[22][16]=0

inp[21][17]=1

inp[20][18]=0

inp[19][19]=0

inp[18][20]=1

inp[17][21]=0

inp[16][22]=0

inp[15][23]=1

inp[14][24]=0

inp[13][25]=0

inp[12][26]=1

inp[11][27]=0

inp[10][28]=1

inp[9][29]=0

inp[8][30]=0

inp[9][30]=0

inp[10][29]=0

inp[11][28]=0

inp[12][27]=0

inp[13][26]=1

inp[14][25]=1

inp[15][24]=0

inp[16][23]=1

inp[17][22]=0

inp[18][21]=1

inp[19][20]=0

inp[20][19]=0

inp[21][18]=0

inp[22][17]=0

inp[23][16]=1

inp[24][15]=0

inp[25][14]=0

inp[26][13]=0

inp[27][12]=1

inp[28][11]=0

inp[29][10]=1

inp[30][9]=0

inp[30][10]=0

inp[29][11]=1

inp[28][12]=1

inp[27][13]=1

inp[26][14]=0

inp[25][15]=1

inp[24][16]=0

inp[23][17]=1

inp[22][18]=0

inp[21][19]=0

inp[20][20]=0

inp[19][21]=1

inp[18][22]=1

inp[17][23]=0

inp[16][24]=1

inp[15][25]=1

inp[14][26]=0

inp[13][27]=1

inp[12][28]=1

inp[11][29]=0

inp[10][30]=0

inp[11][30]=0

inp[12][29]=0

inp[13][28]=0

inp[14][27]=1

inp[15][26]=1

inp[16][25]=1

inp[17][24]=0

inp[18][23]=0

inp[19][22]=1

inp[20][21]=1

inp[21][20]=0

inp[22][19]=1

inp[23][18]=0

inp[24][17]=1

inp[25][16]=1

inp[26][15]=0

inp[27][14]=0

inp[28][13]=0

inp[29][12]=1

inp[30][11]=0

inp[30][12]=0

inp[29][13]=0

inp[28][14]=0

inp[27][15]=0

inp[26][16]=0

inp[25][17]=0

inp[24][18]=0

inp[23][19]=0

inp[22][20]=1

inp[21][21]=1

inp[20][22]=1

inp[19][23]=1

inp[18][24]=1

inp[17][25]=1

inp[16][26]=1

inp[15][27]=1

inp[14][28]=0

inp[13][29]=0

inp[12][30]=0

inp[13][30]=0

inp[14][29]=0

inp[15][28]=0

inp[16][27]=0

inp[17][26]=1

inp[18][25]=1

inp[19][24]=1

inp[20][23]=0

inp[21][22]=1

inp[22][21]=1

inp[23][20]=1

inp[24][19]=1

inp[25][18]=1

inp[26][17]=1

inp[27][16]=1

inp[28][15]=1

inp[29][14]=0

inp[30][13]=0

inp[30][14]=0

inp[29][15]=0

inp[28][16]=1

inp[27][17]=0

inp[26][18]=0

inp[25][19]=1

inp[24][20]=0

inp[23][21]=1

inp[22][22]=0

inp[21][23]=1

inp[20][24]=1

inp[19][25]=0

inp[18][26]=1

inp[17][27]=0

inp[16][28]=1

inp[15][29]=0

inp[14][30]=0

inp[15][30]=0

inp[16][29]=1

inp[17][28]=1

inp[18][27]=0

inp[19][26]=1

inp[20][25]=0

inp[21][24]=1

inp[22][23]=0

inp[23][22]=0

inp[24][21]=1

inp[25][20]=0

inp[26][19]=0

inp[27][18]=0

inp[28][17]=1

inp[29][16]=1

inp[30][15]=0

inp[30][16]=0

inp[29][17]=1

inp[28][18]=0

inp[27][19]=1

inp[26][20]=1

inp[25][21]=1

inp[24][22]=0

inp[23][23]=1

inp[22][24]=0

inp[21][25]=1

inp[20][26]=1

inp[19][27]=1

inp[18][28]=1

inp[17][29]=0

inp[16][30]=0

inp[17][30]=0

inp[18][29]=0

inp[19][28]=0

inp[20][27]=0

inp[21][26]=0

inp[22][25]=1

inp[23][24]=0

inp[24][23]=0

inp[25][22]=1

inp[26][21]=1

inp[27][20]=1

inp[28][19]=0

inp[29][18]=1

inp[30][17]=0

inp[30][18]=0

inp[29][19]=1

inp[28][20]=1

inp[27][21]=1

inp[26][22]=1

inp[25][23]=1

inp[24][24]=0

inp[23][25]=1

inp[22][26]=0

inp[21][27]=1

inp[20][28]=1

inp[19][29]=0

inp[18][30]=0

inp[19][30]=0

inp[20][29]=0

inp[21][28]=0

inp[22][27]=1

inp[23][26]=0

inp[24][25]=1

inp[25][24]=1

inp[26][23]=0

inp[27][22]=0

inp[28][21]=0

inp[29][20]=1

inp[30][19]=0

inp[30][20]=0

inp[29][21]=0

inp[28][22]=1

inp[27][23]=1

inp[26][24]=1

inp[25][25]=1

inp[24][26]=0

inp[23][27]=0

inp[22][28]=0

inp[21][29]=0

inp[20][30]=0

inp[21][30]=0

inp[22][29]=0

inp[23][28]=0

inp[24][27]=0

inp[25][26]=1

inp[26][25]=1

inp[27][24]=1

inp[28][23]=0

inp[29][22]=0

inp[30][21]=0

inp[30][22]=0

inp[29][23]=1

inp[28][24]=1

inp[27][25]=1

inp[26][26]=1

inp[25][27]=1

inp[24][28]=0

inp[23][29]=0

inp[22][30]=0

inp[23][30]=0

inp[24][29]=0

inp[25][28]=1

inp[26][27]=0

inp[27][26]=0

inp[28][25]=0

inp[29][24]=1

inp[30][23]=0

inp[30][24]=0

inp[29][25]=1

inp[28][26]=0

inp[27][27]=0

inp[26][28]=1

inp[25][29]=1

inp[24][30]=0

inp[25][30]=0

inp[26][29]=1

inp[27][28]=1

inp[28][27]=0

inp[29][26]=1

inp[30][25]=0

inp[30][26]=0

inp[29][27]=1

inp[28][28]=1

inp[27][29]=0

inp[26][30]=0

inp[27][30]=0

inp[28][29]=0

inp[29][28]=0

inp[30][27]=0

inp[30][28]=0

inp[29][29]=0

inp[28][30]=0

inp[29][30]=0

inp[30][29]=0

inp[30][30]=0

for i in range(0,31):

    for j in range(0,31):

        a = inp[i][j]

        print(a, end='')

#    print()

MAX = 31

pic = Image.new('RGB', (MAX, MAX))

str = "0000000000000000000000000000000011111110010001101001001111111001000001011011001111000100000100101110100111001100001010111010010111010110101011110001011101001011101000101100000010101110100100000101010011100001010000010011111110101010101010101111111000000000000001001101110000000000111110111110110001011101010100000100101010001001000111111110001010001101011111111010011000000100110011111000100100100110100000101010110101010111100101100000000110011101100110010001010000111000100100011101001010111000011111000101010001000001111011001001011110001110000000001101000101101000100011011011101110100010001110001110110100111101100001011000110110011000011010101000100100100111000110001111101000000000000101011000011100010100001111111011000111100110101000000100000100000110010101000100000010111010100010110110111111111001011101010000000100111011101100101110101111100100111011100100010000010110100111001010100010001111111011110001111100111110000000000000000000000000000000000"

i=0

for y in range(0,MAX):

    for x in range(0,MAX):

        if(str[i] == '1'):

            pic.putpixel([x,y],(0,0,0))

        else:pic.putpixel([x,y],(255,255,255))

        i = i+1

pic.show()

这里最终拿到的矩阵结果,打印出来张这个样:(1显示,0不显示)


 ■■■■■■■  ■   ■■ ■  ■  ■■■■■■■
 ■     ■ ■■ ■■  ■■■■   ■     ■
 ■ ■■■ ■  ■■■  ■■    ■ ■ ■■■ ■
 ■ ■■■ ■ ■■ ■ ■ ■■■■   ■ ■■■ ■
 ■ ■■■ ■   ■ ■■      ■ ■ ■■■ ■
 ■     ■ ■ ■  ■■■    ■ ■     ■
 ■■■■■■■ ■ ■ ■ ■ ■ ■ ■ ■■■■■■■
             ■  ■■ ■■■
 ■■■■■ ■■■■■ ■■   ■ ■■■ ■ ■ ■
   ■  ■ ■ ■   ■  ■   ■■■■■■■■
 ■ ■   ■■ ■ ■■■■■■■■ ■  ■■
 ■  ■■  ■■■■■   ■  ■  ■  ■■ ■
   ■ ■ ■ ■■ ■ ■ ■ ■■■■  ■ ■■
     ■■  ■■■ ■■  ■■  ■   ■ ■
 ■■■   ■  ■   ■■■ ■  ■ ■ ■■■
 ■■■■■   ■ ■ ■   ■     ■■■■ ■■
 ■  ■ ■■■■   ■■■         ■■ ■
 ■ ■■ ■   ■   ■■ ■■ ■■■ ■■■ ■
 ■   ■■■   ■■■ ■■ ■  ■■■■ ■■
 ■ ■■   ■■ ■■  ■■    ■■ ■ ■ ■
 ■  ■  ■  ■■■   ■■   ■■■■■ ■
         ■ ■ ■■    ■■■   ■ ■
 ■■■■■■■ ■■   ■■■■  ■■ ■ ■
 ■     ■     ■■  ■ ■ ■   ■
 ■ ■■■ ■ ■   ■ ■■ ■■ ■■■■■■■■■
 ■ ■■■ ■ ■       ■  ■■■ ■■■ ■■
 ■ ■■■ ■ ■■■■■  ■  ■■■ ■■■  ■
 ■     ■ ■■ ■  ■■■  ■ ■ ■   ■
 ■■■■■■■ ■■■■   ■■■■■  ■■■■■

就是二维码呗,01字符串转二维码走起,扫码拿到flag:TBTL{Wh47_D1d_H3_5aY_D34r?_D14g0nal1y...}

参考资料

Floopowder.7z

2.26 KB, 下载次数: 5, 下载积分: 吾爱币 -1 CB

免费评分

参与人数 1吾爱币 +7 热心值 +1 收起 理由
Hmily + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

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

Bnessy 发表于 2024-5-17 15:58
分析的挺好的 感谢
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

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

GMT+8, 2024-6-2 00:54

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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