吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|www.40881110.com

 ?#19968;?#23494;码
 注册[Register]
查看: 7888|回复: 24
上一主题 下一主题

[CTF] Hgame Ctf write up

  [复制链接]
跳转到指定楼层
楼主
yechen123 发表于 2019-2-9 17:28 回帖奖励
本帖最后由 yechen123 于 2019-2-9 20:11 编辑

题目    第二周.rar (26.02 KB, 下载?#38382;? 18)


Hgame 第二周的逆向题
0x00 Pro的Python教室(二)
下载压缩包是一个pyc文件
直接用uncompyle6反编译成py文件
[Asm] 纯文本查看 复制代码
uncompyle6 -o secend.py secend.pyc

得到py代码
[Asm] 纯文本查看 复制代码
# uncompyle6 version 3.2.4
# Python bytecode 2.7 (62211)
# Decompiled from: Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:53:40) [MSC v.1500 64 bit (AMD64)]
# Embedded file name: secend.py
# Compiled at: 2019-02-01 21:18:58
print "Welcome to Processor's Python Classroom Part 2!\n"
print "Now let's start the origin of Python!\n"
print 'Plz Input Your Flag:\n'
enc = raw_input()
len = len(enc)
enc1 = []
enc2 = ''
aaa = 'ioOavquaDb}x2ha4[~ifqZaujQ#'
for i in range(len):
    if i % 2 == 0:
        enc1.append(chr(ord(enc[i]) + 1))
    else:
        enc1.append(chr(ord(enc[i]) + 2))

s1 = []
for x in range(3):
    for i in range(len):
        if (i + x) % 3 == 0:
            s1.append(enc1[i])

enc2 = enc2.join(s1)
if enc2 in aaa:
    print "You 're Right!"
else:
    print "You're Wrong!"
    exit(0)

可以编写解密脚本
[Asm] 纯文本查看 复制代码
u ="ioOavquaDb}x2ha4[~ifqZaujQ#"
us = []
for i in u:
        us.append(i)
print us
q = []
for i in range(3):
        for x in range(27):
                if(i+x)%3==0:
                        q.append(x)
print q
for i in range(len(us)):
        us[q[i]] = u[i]

print us
flag = ""
for y in us:
        flag += y
print flag

flags = ""
for i in range(27):
    if i % 2 == 0:
        flags+=(chr(ord(flag[i]) - 1))
    else:
            flags+=(chr(ord(flag[i]) - 2))

print flags

得到flag
[Asm] 纯文本查看 复制代码
hgame{Now_Y0u_got_th3_PYC!}



0x01 maze

IDA打开
发现Check函数
[Asm] 纯文本查看 复制代码
_BOOL8 __fastcall Check(const char *a1)
{
  char v2; // [rsp+17h] [rbp-9h]
  int i; // [rsp+18h] [rbp-8h]
  int v4; // [rsp+1Ch] [rbp-4h]

  v4 = strlen(a1);
  for ( i = 0; i < v4; ++i )
  {
    v2 = Setmap(a1[i]);
    if ( !v2 )
      return 0LL;
    if ( v2 == 49 )
      return 0LL;
    if ( v2 > 49 )
    {
      if ( v2 != 115 )
      {
        if ( v2 == 116 )
          return v4 - 1 == i;
        return 0LL;
      }
    }
    else if ( v2 != 46 )
    {
      return 0LL;
    }
  }
  return 0LL;
}

再看看
Setmap函数
[Asm] 纯文本查看 复制代码
__int64 __fastcall Setmap(char a1)
{
  __int64 result; // rax
  char v2; // [rsp+30h] [rbp-480h]
  unsigned __int64 v3; // [rsp+4A8h] [rbp-8h]
  __int64 savedregs; // [rsp+4B0h] [rbp+0h]

  v3 = __readfsqword(0x28u);
  qmemcpy(
    &v2,
    "11111111111111111111111111111111111111111111111111111111111111111111...............111111111111111...............111"
    "111111111111.1111111111111.111111111111111.1111111111111.111111111111111.1111111111111.111111111111111.1111111111111"
    ".111111111111111.1111111111111.111111111111111.1111111111111.111111111111111.1111111111111s111111111111111.111111111"
    "1111s111111111111111.11111111111111111111111111111.11111111111111111111111111111.11111111111111111111111111111.11111"
    "111111111111111111111111.11111111111111111111111111111.1111.111111111111111111111111.1t............111111111111111.1"
    "t............111111111111111.1111111111111.111111111111111.1111111111111.111111111111111.1111111111111.1111111111111"
    "11.1111111111111.111111111111111.1111111111111.111111111111111.1111111111111.111111111111111.1111111111111.111111111"
    "111111.1111111111111.111111111111111.1111111111111.111111111111111.1111111111111.111111111111111.1111111111111.11111"
    "1111111111.1111111111111.111111111111111...............111111111111111...............1111111111111111111111111111111"
    "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111",
    0x474uLL);
  if ( a1 == 100 )                              // d
  {
    if ( y_2973 > 17 )
      result = 0LL;
    else
      result = *((unsigned __int8 *)&savedregs + 60 * y_2973 + ++x_2974 - 1152);
  }
  else if ( a1 > 100 )
  {
    if ( a1 == 115 )                            // s
    {
      if ( x_2974 > 58 )
        result = 0LL;
      else
        result = *((unsigned __int8 *)&savedregs + 60 * ++y_2973 + x_2974 - 1152);
    }
    else
    {
      if ( a1 != 119 )                          // w
        return 0LL;
      if ( y_2973 <= 0 )
        result = 0LL;
      else
        result = *((unsigned __int8 *)&savedregs + 60 * --y_2973 + x_2974 - 1152);
    }
  }
  else
  {
    if ( a1 != 97 )                             // a
      return 0LL;
    if ( x_2974 <= 0 )
      result = 0LL;
    else
      result = *((unsigned __int8 *)&savedregs + 60 * y_2973 + --x_2974 - 1152);
  }
  return result;
}

可以看到一些奇怪的?#22336;?#20018;  应该是迷宫题
对于迷宫题 得到迷宫 并且得到迷宫的行列大小 方向控制键 还有人物初始位置 就可以非常快解题了

从代码发现
[Asm] 纯文本查看 复制代码
result = *((unsigned __int8 *)&savedregs + 60 * y_2973 + ++x_2974 - 1152);

迷宫列数应该是60 方向控制键是asdw
可以得到迷宫
[Asm] 纯文本查看 复制代码
111111111111111111111111111111111111111111111111111111111111
11111111...............111111111111111...............1111111
11111111.1111111111111.111111111111111.1111111111111.1111111
11111111.1111111111111.111111111111111.1111111111111.1111111
11111111.1111111111111.111111111111111.1111111111111.1111111
11111111.1111111111111s111111111111111.1111111111111s1111111
11111111.11111111111111111111111111111.111111111111111111111
11111111.11111111111111111111111111111.111111111111111111111
11111111.11111111111111111111111111111.1111.1111111111111111
11111111.1t............111111111111111.1t............1111111
11111111.1111111111111.111111111111111.1111111111111.1111111
11111111.1111111111111.111111111111111.1111111111111.1111111
11111111.1111111111111.111111111111111.1111111111111.1111111
11111111.1111111111111.111111111111111.1111111111111.1111111
11111111.1111111111111.111111111111111.1111111111111.1111111
11111111.1111111111111.111111111111111.1111111111111.1111111
11111111...............111111111111111...............1111111
111111111111111111111111111111111111111111111111111111111111
111111111111111111111111111111111111111111111111111111111111

得到flag
[Asm] 纯文本查看 复制代码
wwwwaaaaaaaaaaaaaasssssssssssssssddddddddddddddwwwwwwwaaaaaaaaaaaa



0x02 ShinyShot!
IDA打开 发现
[Asm] 纯文本查看 复制代码
int __cdecl sub_4017AA(char a1)
{
  char *Str; // ST20C_4
  char *MaxCount; // [esp+210h] [ebp-204h]
  int DstBuf; // [esp+21Eh] [ebp-1F6h]
  __int16 v5; // [esp+222h] [ebp-1F2h]
  int v6; // [esp+24Ch] [ebp-1C8h]
  CHAR Filename; // [esp+250h] [ebp-1C4h]
  char Str1; // [esp+354h] [ebp-C0h]
  char Buf[60]; // [esp+3B8h] [ebp-5Ch]
  unsigned int cout; // [esp+3F4h] [ebp-20h]
  FILE *v11; // [esp+3F8h] [ebp-1Ch]
  char *v12; // [esp+408h] [ebp-Ch]

  v12 = &a1;
  sub_401EE0();
  puts("Sorroundings...Weird..");
  cout = 0;
  memset(Buf, 0, sizeof(Buf));
  memset(&Str1, 0, 0x64u);
  memset(&Filename, 0, 0x104u);
  DstBuf = 0;
  v6 = 0;
  memset(
    (void *)((unsigned int)&v5 & 0xFFFFFFFC),
    0,
    4 * (((unsigned int)((char *)&DstBuf - ((unsigned int)&v5 & 0xFFFFFFFC) + 50) & 0xFFFFFFFC) >> 2));
  puts("I see!It's not my fault!Wrong is the world!");
  puts("So..Now I should give a shot to fix it!");
  scanf("%u", &cout);
  if ( cout > 0x20000 )
    sub_40178C();
  getchar();
  sub_401460(cout);
  puts("And then,a shiny explosion!");
  fgets(Buf, 59, iob[0]);
  Buf[strlen(Buf) - 1] = 0;
  if ( strlen(Buf) != 22 )
    sub_40178C();
  puts("Seems I have passed a test.");
  sub_4014FA(Str, MaxCount);
  GetModuleFileNameA(0, &Filename, 0x104u);
  v11 = fopen(&Filename, "rb");
  fseek(v11, -32, 2);
  fread(&DstBuf, 0x20u, 1u, v11);
  fclose(v11);
  if ( !strcmp(&Str1, (const char *)&DstBuf) )
  {
    puts("Congratulations!");
    puts("The flag is hgame{your input string + your input num}");
    puts("e.g:hgame{aaaaaaaaaa111}");
  }
  else
  {
    printf("But Failed..Finally");
  }
  return 0;
}

代码有些问题

先输入一个数字 然后传进 sub_401460函数
[Asm] 纯文本查看 复制代码
BOOL __cdecl sub_401460(unsigned int cout)
{
  DWORD flOldProtect; // [esp+14h] [ebp-14h]
  unsigned int v3; // [esp+18h] [ebp-10h]
  unsigned int v4; // [esp+1Ch] [ebp-Ch]

  flOldProtect = 0;
  VirtualProtect(TopLevelExceptionFilter, 0x4000u, 0x40u, &flOldProtect);
  v4 = cout >> 3;
  v3 = cout & 7;
  *((_BYTE *)TopLevelExceptionFilter + (cout >> 3)) ^= 1 << (cout & 7);
  return VirtualProtect(TopLevelExceptionFilter, 0x4000u, flOldProtect, &flOldProtect);
}

发现函数里边改写了页属性 而且 我们输入的数字 后边3位可以与选中的地址异或 剩下的几位可以作为地址偏移
地址基址是TopLevelExceptionFilter  也就是401000
查看反汇编  看?#21019;?#30721;哪里错了
可以看到 在调用sub_4014FA函数的时候应该压入栈的?#38382;?#27809;有入栈

[Asm] 纯文本查看 复制代码
.text:004018DE EB 15             jmp     short loc_4018F5
.text:004018E0                   ; ---------------------------------------------------------------------------
.text:004018E0
.text:004018E0                   loc_4018E0:                   ; CODE XREF: sub_4017AA+126↑j
.text:004018E0 E8 A7 FE FF FF    call    sub_40178C
.text:004018E5                   ; ---------------------------------------------------------------------------
.text:004018E5
.text:004018E5                   loc_4018E5:
.text:004018E5 8D 85 40 FF FF FF lea     eax, [ebp-0C0h]
.text:004018EB 89 44 24 04       mov     [esp+414h+var_410], eax ; char *
.text:004018EF 8D 45 A4          lea     eax, [ebp+Buf]
.text:004018F2 89 04 24          mov     [esp+414h+var_414], eax ; char *
.text:004018F5
.text:004018F5                   loc_4018F5:                   ; CODE XREF: sub_4017AA+134↑j
.text:004018F5 E8 00 FC FF FF    call    sub_4014FA

也就是             jmp     short loc_4018F5 本来应该跳到                  loc_4018E5的 它却跳到了loc_4018F5
jmp     short loc_4018F5 的机器码是EB 15 EB表示jmp 15表示偏移
也就是
[Asm] 纯文本查看 复制代码
0x15 = 0x4018F5 - 0x4018DE - jmp指令长度(2?#32440;?

我们要跳到                 loc_4018E5 也就是

[Asm] 纯文本查看 复制代码
0x5 = 0x4018e5-0x4018de-0x2

所以 输入数字最低三位应该等于四  也就是100

而要修改的?#32440;?#30340;地址是0x4018DF 所以 除了前面几位应该是0x8DF
也就是 (0x8df<<3) + 0x4 = 18172

再看sub_4014FA函数
[Asm] 纯文本查看 复制代码
size_t __cdecl sub_4014FA(char *Str, char *a2)
{
  int v2; // eax
  int v3; // ebx
  int v4; // eax
  int v5; // ebx
  int v6; // eax
  char v7; // al
  size_t result; // eax
  signed int v9; // [esp+10h] [ebp-18h]
  size_t v10; // [esp+10h] [ebp-18h]
  int j; // [esp+14h] [ebp-14h]
  signed int i; // [esp+18h] [ebp-10h]
  int v13; // [esp+1Ch] [ebp-Ch]

  v13 = 0;
  v9 = 4 * strlen(Str) / 3;
  for ( i = 0; i < v9; ++i )
  {
    if ( i & 3 )
    {
      if ( i % 4 == 1 )
      {
        v3 = 16 * Str[v13 - 1] & 0x30;
        v4 = v13++;
        a2[i] = byte_405020[v3 | (char)(Str[v4] >> 4)];
      }
      else
      {
        if ( i % 4 == 2 )
        {
          v5 = 4 * Str[v13 - 1] & 0x3C;
          v6 = v13++;
          v7 = byte_405020[v5 | (char)(Str[v6] >> 6)];
        }
        else
        {
          v7 = byte_405020[Str[v13 - 1] & 0x3F];
        }
        a2[i] = v7;
      }
    }
    else
    {
      v2 = v13++;
      a2[i] = byte_405020[(char)(Str[v2] >> 2)];
    }
  }
  if ( strlen(Str) % 3 == 1 )
  {
    a2[v9] = byte_405020[16 * Str[v13 - 1] & 0x30];
    a2[v9 + 1] = 61;
    a2[v9 + 2] = 61;
  }
  else if ( strlen(Str) % 3 == 2 )
  {
    a2[v9] = byte_405020[4 * Str[v13 - 1] & 0x3C];
    a2[v9 + 1] = 61;
  }
  a2[strlen(a2)] = 0;
  v10 = strlen(a2);
  for ( j = 0; ; ++j )
  {
    result = v10 - 1;
    if ( (signed int)(v10 - 1) <= j )
      break;
    a2[j + 1] ^= a2[j];
  }
  return result;
}

是一个base64?#29992;?nbsp; 不过字母表改变了 而且最后加多了一层异或
再看下边的函数
[Asm] 纯文本查看 复制代码
  GetModuleFileNameA(0, &Filename, 0x104u);
  v11 = fopen(&Filename, "rb");
  fseek(v11, -32, 2);
  fread(&DstBuf, 0x20u, 1u, v11);
  fclose(v11);

从文件最后32位抽出来跟?#29992;?#21518;数据?#21592;?br /> 把这32位异或得到
[Asm] 纯文本查看 复制代码
DnY0m19iAgArMKjSP2Uvme8wOzb0iD==

在经过base64解密  可以从网上套脚本 也可以自己写
[Asm] 纯文本查看 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

int main(void)
//18172
{//, 'i', 'D', '=', '='
    char en_asc[32] = {'D', 'n', 'Y', '0', 'm', '1', '9', 'i', 'A', 'g', 'A', 'r', 'M', 'K', 'j', 'S', 'P', '2', 'U', 'v', 'm', 'e', '8', 'w', 'O', 'z', 'b', '0', 'i', 'D', '=', '='};
    char *asciis = "abcdefghijklmABCDEFGHIJKLMNOPQRSTUVWXYZnopqrstuvwxyz0123456789+/";
    UINT8 one,two,three;
    char cout1,cout2,cout3,cout4;

    for(int i=0; i<29; i+=4)
    {
        one = 0;
        two = 0;
        three = 0;
        for(cout1=0;;cout1++)
        {
            if(en_asc[i] == asciis[cout1])
                break;
        }
        for(cout2=0;;cout2++)
        {
            if(en_asc[i+1]==asciis[cout2])
                break;
        }
        for(cout3=0;;cout3++)
        {
            if(en_asc[i+2]==asciis[cout3])
                break;
        }
        for(cout4=0;;cout4++)
        {
            if(en_asc[i+3]==asciis[cout4])
                break;
        }
        //printf("%d %d %d %d \n",cout1,cout2,cout3,cout4);
        one = cout1<<2;
        one = (cout2 >>4) + one;
        two = cout2<<4;
        two = two + (cout3>>2);
        three  =cout3<<6;
        three = three + (cout4);
       printf("%c%c%c\n", one,two,three);
    }
    return 0;
}

得到

Byt3_H4cker_sho0O0o0t!



0x03 Pro的Python教室(三&四)


是一个pyc文件 但是用uncompyle6反编译失败

用winhex查看文件格式


发现前面的格式都没有错

而从第二行的0x73开始 一个?#32440;?#34920;示0x73  后面4个?#32440;?#26631;识长度。从0x71开始就是co_code内容了。

使用marshal查看一下哪里出错了

[Asm] 纯文本查看 复制代码
>>> import dis,marshal
>>> f = open("third.pyc", "rb")
>>> magic = f.read(4)
>>> mtime = f.read(4)
>>> dis.dis(marshal.load(f))
  2           0 JUMP_ABSOLUTE            3
        >>    3 JUMP_ABSOLUTE            9
              6 LOAD_CONST              15 ("You're Wrong! ")
        >>    9 JUMP_ABSOLUTE           14

  3          12 PRINT_ITEM
             13 LOAD_CONST             100
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "D:\python2.7\lib\dis.py", line 43, in dis
    disassemble(x)
  File "D:\python2.7\lib\dis.py", line 95, in disassemble
    print '(' + repr(co.co_consts[oparg]) + ')',
IndexError: tuple index out of range
>>>

发现应该是偏移为13的位置指令码出错了


估计是0x64太大了  可以改成0x48

后边想了一个下午也没能反编译成py文件 但是能dis出来指令了 只能硬看指令了

?#20063;?#21040;好的解释文档 只能半猜半解

[Asm] 纯文本查看 复制代码
>>> dis.dis(marshal.load(f))
  2           0 JUMP_ABSOLUTE            3
        >>    3 JUMP_ABSOLUTE            9
              6 LOAD_CONST              15 ("You're Wrong! ")
        >>    9 JUMP_ABSOLUTE           14

  3          12 PRINT_ITEM
             13 PRINT_NEWLINE
        >>   14 LOAD_CONST               0 (-1)
             17 LOAD_CONST               1 (None)
             20 IMPORT_NAME              0 (string)
             23 STORE_NAME               0 (string)
             26 LOAD_NAME                1 (list)
             29 LOAD_NAME                0 (string)
             32 LOAD_ATTR                2 (letters)
             35 CALL_FUNCTION            1
             38 LOAD_NAME                1 (list)
             41 LOAD_NAME                0 (string)
             44 LOAD_ATTR                3 (digits)
             47 CALL_FUNCTION            1

  5          50 BINARY_ADD
             51 LOAD_CONST               2 ('+')
             54 LOAD_CONST               3 ('/')
             57 BUILD_LIST               2
             60 BINARY_ADD
             61 STORE_NAME               2 (letters)
             64 LOAD_CONST               4 ('FcjTCgD1EffEm2rPC3bTyL5Wu2bKBI9KAZrwFgrUygHN')
             67 STORE_NAME               4 (dec)

 35          70 LOAD_CONST               5 (<code object encode at 0000000002CAA7B0, file "third.py", line 7>)
             73 MAKE_FUNCTION            0
             76 STORE_NAME               5 (encode)
             79 LOAD_CONST               6 ("Welcome to Processor's Python Classroom Part 3&4!\n")
             82 PRINT_ITEM
             83 PRINT_NEWLINE
             84 LOAD_CONST               7 ('qi shi wo jiu shi lan cai ba liang dao ti fang zai yi qi.')
             87 PRINT_ITEM
             88 PRINT_NEWLINE
             89 LOAD_CONST               8 ("Now let's start the origin of Python!\n")
             92 PRINT_ITEM
             93 PRINT_NEWLINE

 40          94 LOAD_CONST               9 ('Plz Input Your Flag:\n')
             97 PRINT_ITEM
             98 PRINT_NEWLINE
             99 LOAD_NAME                6 (raw_input)
            102 CALL_FUNCTION            0
            105 STORE_NAME               7 (enc)
            108 LOAD_NAME                1 (list)
            111 LOAD_NAME                7 (enc)
            114 CALL_FUNCTION            1
            117 STORE_NAME               8 (lst)
            120 LOAD_NAME                8 (lst)
            123 LOAD_ATTR                9 (reverse)
            126 CALL_FUNCTION            0
            129 POP_TOP
            130 LOAD_NAME               10 (len)
            133 LOAD_NAME                8 (lst)
            136 CALL_FUNCTION            1
            139 STORE_NAME              11 (llen)
            142 SETUP_LOOP              99 (to 244)
            145 LOAD_NAME               12 (range)
            148 LOAD_NAME               11 (llen)
            151 CALL_FUNCTION            1
            154 GET_ITER
            155 FOR_ITER                85 (to 243)
            158 STORE_NAME              13 (i)
            161 LOAD_NAME               13 (i)
            164 LOAD_CONST              10 (2)
            167 BINARY_MODULO
            168 LOAD_CONST              11 (0)
            171 COMPARE_OP               2 (==)
            174 POP_JUMP_IF_FALSE      196
            177 LOAD_NAME               14 (chr)
            180 LOAD_NAME               15 (ord)
            183 LOAD_NAME                8 (lst)
            186 LOAD_NAME               13 (i)
            189 BINARY_SUBSCR
            190 CALL_FUNCTION            1
            193 LOAD_CONST              10 (2)

 46     >>  196 BINARY_SUBTRACT
            197 CALL_FUNCTION            1
            200 LOAD_NAME                8 (lst)
            203 LOAD_NAME               13 (i)
            206 STORE_SUBSCR
            207 JUMP_FORWARD             0 (to 210)
        >>  210 LOAD_NAME               14 (chr)
            213 LOAD_NAME               15 (ord)
            216 LOAD_NAME                8 (lst)
            219 LOAD_NAME               13 (i)
            222 BINARY_SUBSCR
            223 CALL_FUNCTION            1
            226 LOAD_CONST              12 (1)
            229 BINARY_ADD

 48         230 CALL_FUNCTION            1
            233 LOAD_NAME                8 (lst)

 49         236 LOAD_NAME               13 (i)
            239 STORE_SUBSCR
            240 JUMP_ABSOLUTE          141
        >>  243 POP_BLOCK
        >>  244 LOAD_CONST              13 ('')
            247 STORE_NAME              16 (enc2)
            250 LOAD_NAME               16 (enc2)
            253 LOAD_ATTR               17 (join)
            256 LOAD_NAME                8 (lst)
            259 CALL_FUNCTION            1
            262 STORE_NAME              16 (enc2)
            265 LOAD_NAME                5 (encode)
            268 LOAD_NAME               16 (enc2)
            271 CALL_FUNCTION            1
            274 STORE_NAME              18 (enc3)
            277 LOAD_NAME               18 (enc3)
            280 LOAD_NAME                4 (dec)

 55     >>  283 COMPARE_OP               2 (==)
            286 POP_JUMP_IF_FALSE      283
            289 LOAD_CONST              14 ("You're right! ")
            292 PRINT_ITEM
            293 PRINT_NEWLINE
            294 JUMP_FORWARD             5 (to 302)
            297 LOAD_CONST              15 ("You're Wrong! ")
            300 PRINT_ITEM
            301 PRINT_NEWLINE
        >>  302 LOAD_CONST               1 (None)
            305 RETURN_VALUE


对于
[Asm] 纯文本查看 复制代码
        >>   14 LOAD_CONST               0 (-1)
             17 LOAD_CONST               1 (None)
             20 IMPORT_NAME              0 (string)
             23 STORE_NAME               0 (string)
             26 LOAD_NAME                1 (list)
             29 LOAD_NAME                0 (string)
             32 LOAD_ATTR                2 (letters)
             35 CALL_FUNCTION            1
             38 LOAD_NAME                1 (list)
             41 LOAD_NAME                0 (string)
             44 LOAD_ATTR                3 (digits)
             47 CALL_FUNCTION            1

  5          50 BINARY_ADD
             51 LOAD_CONST               2 ('+')
             54 LOAD_CONST               3 ('/')
             57 BUILD_LIST               2
             60 BINARY_ADD
             61 STORE_NAME               2 (letters)

string.letters是生成小写字母和大写字母  string.digits生成小写数字

也就是说 encode是base64?#29992;?

[Asm] 纯文本查看 复制代码
 
[/size][/align][align=left][size=14px]
64 LOAD_CONST               4 ('FcjTCgD1EffEm2rPC3bTyL5Wu2bKBI9KAZrwFgrUygHN')[/size][/align][align=left][size=14px]

应该就是密文了

再看

[Asm] 纯文本查看 复制代码
40          94 LOAD_CONST               9 ('Plz Input Your Flag:\n')
             97 PRINT_ITEM
             98 PRINT_NEWLINE
             99 LOAD_NAME                6 (raw_input)
            102 CALL_FUNCTION            0
            105 STORE_NAME               7 (enc)
            108 LOAD_NAME                1 (list)
            111 LOAD_NAME                7 (enc)
            114 CALL_FUNCTION            1
            117 STORE_NAME               8 (lst)
            120 LOAD_NAME                8 (lst)
            123 LOAD_ATTR                9 (reverse)
            126 CALL_FUNCTION            0
            129 POP_TOP
            130 LOAD_NAME               10 (len)
            133 LOAD_NAME                8 (lst)
            136 CALL_FUNCTION            1
            139 STORE_NAME              11 (llen)
            142 SETUP_LOOP              99 (to 244)
            145 LOAD_NAME               12 (range)
            148 LOAD_NAME               11 (llen)
            151 CALL_FUNCTION            1
            154 GET_ITER
            155 FOR_ITER                85 (to 243)
            158 STORE_NAME              13 (i)
            161 LOAD_NAME               13 (i)
            164 LOAD_CONST              10 (2)
            167 BINARY_MODULO
            168 LOAD_CONST              11 (0)
            171 COMPARE_OP               2 (==)
            174 POP_JUMP_IF_FALSE      196
            177 LOAD_NAME               14 (chr)
            180 LOAD_NAME               15 (ord)
            183 LOAD_NAME                8 (lst)
            186 LOAD_NAME               13 (i)
            189 BINARY_SUBSCR
            190 CALL_FUNCTION            1
            193 LOAD_CONST              10 (2)

 46     >>  196 BINARY_SUBTRACT
            197 CALL_FUNCTION            1
            200 LOAD_NAME                8 (lst)
            203 LOAD_NAME               13 (i)
            206 STORE_SUBSCR
            207 JUMP_FORWARD             0 (to 210)

先用reverse函数把?#22336;?#20018;颠倒

在进行奇?#25216;用?然后base64?#29992;芏员?/font>

这个时候可以写脚本 先把密文用base64解密出来

得到解密脚本

[Asm] 纯文本查看 复制代码
lists ="124 34 109 112 103 117 120 81 94 51 100 105 115 112 109 98 94 112 83 96 100 110 47 100 107 52 86 124 100 110 96 104 103"
lists = lists.split(" ")
flags = []
for i in lists:
        flags.append(int(i))
print flags
flag = []
for q in range(len(flags)):
    flag.append(flags[len(flags)-q-1])

print flag
h = ""
for i in range(len(flag)):
        if (i%2==0):
                flag[i] += 1
        else:
                flag[i] -= 1
        h += chr(flag[i])
print h

flag

[Asm] 纯文本查看 复制代码
hgame{W3lc0me_To_anothe2_Python!}



0x04 brainfxxker's revenge


题目直接给一个C++源代码

[Asm] 纯文本查看 复制代码
#include <iostream>
#include <cctype>
#include <string>

// the description of this challenge is totally useless 2333333

// oyiadin, Jan 29, 2019
// have fun XD

namespace bf {
  
class Parser {
 public:
  Parser() = default;
  ~Parser() = default;
  void execute(const std::string &buf);
  
 protected:
  uint8_t data[1000] = {0};
  uint8_t *ptr = data;
};


void Parser::execute(const std::string &buf) {
  unsigned unmatched;
  for (auto i = buf.cbegin(); i != buf.cend(); ++i) {
    switch (*i) {
      case '>':
        ++ptr;
        break;
      case '<':
        --ptr;
        break;
      case '+':
        ++*ptr;
        break;
      case '-':
        --*ptr;
        break;
      case '.':
        putchar(*ptr);
        break;
      case ',':
        while ((*ptr = getchar()) == '\n') ;
        break;
      case '[':
        if (*ptr == 0) {
          unmatched = 1;
          while (unmatched) {
            while (++i != buf.cend()) {
              if (*i == '[') {
                ++unmatched;
                break;
              } else if (*i == ']') {
                --unmatched;
                break;
              }
            }
          }
        }
        break;
      case ']':
        if (*ptr != 0) {
          unmatched = 1;
          while (unmatched) {
            while (i-- != buf.cbegin()) {
              if (*i == '[') {
                --unmatched;
                break;
              } else if (*i == ']') {
                ++unmatched;
                break;
              }
            }
          }
        }
        break;
      default:
        putchar(*i);
    }
  }
}

}


int main() {
  bf::Parser parser;
  parser.execute(
    "<><><>-++->><<>,+-><+-+->++-+><-+<>++><><-++><-+<>+><<>-+-++[<><><-+-+<>-><><+-+-+--><-+><-><+-><--+"
    "-<><>+--><+--++-+--<>+--+-++--><><+---+-<>><--+<>+--<>><+-<>-><-++--+--+-+><+--+>-+<><>-+<>-][<<[>,."
    ",[-.+[.>->,]+,-]..<],<-..]-+<><-+-+--+><-+><--+><-+-+--+--+--+-+><-><+--++-<>[><><><-+<+-+-+-+<><>><"
    ">><-+><[><-+-<>+-+-<>]+--+-+][+..-+[+,<<[>[.[[>,>,<,,]<]++]<<..>.].]]-+<>><,-+><><-+-+>-++<>-++-+-><"
    "++-<>-++-+-++<>+-<>++-+-+<>[-++--+-+<<>--+<>-+><<>--+<><>-+---+-+-<>--+-+--+-+><-><><+--+--++-+-><-<"
    ">-<>+--+-+--><--+><+--><-+><<><>--><-+-+>--+-+-+][--<[>+>[,+>[->]-+]]+-[[,[<[+++--,].>,]<.>>]]..-]+-"
    "<><-+-+-+><+--><><<>><+-[+-><><<<><>+--++-+-+><-+<>>><[-+<>-]-+-+-++-<>]-+,>+++-++--+-+><++-<><><>+<"
    ">+<>><+-<>+-[<+--+-+--<>--><+-><<>-><><><+-<>-+-><><<>+----+-+-><><-+--><><-+-<>-<>-++--><-><->><<><"
    ">><-+-><+-+--+][<+[[-,-,>[,.,>,><-]]]<-[<[>-..]>++[>[>.,[.->[>-.[>[+.>.]-<-,],][-,[.<.+[[<>[+-].<<]>"
    "-.]-<],---].+]<]+,>->]>>]-<>]<><+-+-<>><-><><-+[<<>><+><+--+>[-+-+-+-+--++--+]+-><][.,>-]<><>-+,+-><"
    "-+-+><>+-+<>+><++--++-++-><-++-++--++--++<>+><<>[+--++-<><<><>-+><-><<><>+--<><>-+-<><>-++-+---+><<>"
    "-><--+<>><><<>-<>><-+<>><-><<>><-<>><-+-+<>-+--+--<>-><<>--+<><>-+--+<>-+>-+-+<><>-][[-.>.]>+.[+.<+-"
    "[[<.[<-[>,[>,.>[,,-[[-.+>++,-]++],>-].+>],+.>].-<.].+.],-[<>...+]+,]..]>.]+--+<><--><-><+-<>-++--[><"
    "><<+-+><-+>+-<>-+[><<>-++--<>><-+<>]][.[-[,>.[>--[[-->[.,+,,>,+]..,].<>>]++],.]<[>..[<[+[-<.++],-],+"
    "[<[.-.]>,.[[[>>->[[-.++]>,,]+]]],-],],.-+]+]<>]><><-+-+><,<>>+++-><+-+-><++--+-+><+-+<>++<>+-+-+><+-"
    "++-+-<>++-+<>[+--+-+<+-+--+--+-++--+--<>><><-+-+-<>+---+-+-+--<>-+-+-<>+-><--+-><><>-+><-+--+-++-]-+"
    "<>-+<-[><-+-+><><<-+-+><+>-+[<>-+-><]<><>-+-++-]-++-<>-+-+,-+<>><<>-+>+++-++-+<>+-+-++-><+-++-+><-++"
    "-++[><><><<><><><-><-+<>--+-++---+<>><-+><--><-++-><-><<><>+----<>+-+-<>--><-+-+--+-+-+-<>><>><><--+"
    "><><]-+<+--<>+--+-<>+--+-+--><<><>+--+-><<>-+><-<><>[><+-<>-+<+><><><><>><+-[<>><-+<><>--+-+]><-+],>"
    "<-+><>-+><+<>+-<>++><-++-+<>+[-+><><><><<<>-+><-+-><-><<>-+-<><>><-++--<>+--++-<>----><--><--<>+--+-"
    "--+-++-+-<>-+--+-+-><-+--+-+<>-+--+-+<>-+-+-+-+->-][[>>,[>[+>[>>>,<+.+],[,[,+<[.[,[+++].>,>>][[<<-[."
    "-+.]]-]]--<]+,+-],]>>],]<[[->[[+<>-<,+<][+.[,,[-[+[++>,-<][>>.[-+].],+.]<[---.,+[,++[-,,>]->>[++<]]]"
    "<],<]+>+<+]],.-[->>[<<[<.<[+-,,.+.]-,>]]-<,,]]+]>,,]><<><+-><<>+--+-><<>><><+--+-+--+><+-[-+<><>-+<+"
    "-<>+>-+<>><><<>[-]<>><-+><][,,[+.>->].,[.->--.<]>]><><<>-+-+,-++--+>+-+-+-+-+<>><+-+<>-+<>-+++-+--+>"
    "<+-++-++-++--++++<><><>[<><><>+-<><<>><+--><-+-><><--+><+-+--+---+-+-<>+--+>-<>><<>-+><][>--]+-<><+-"
    "><--<>+-+-><-><<><>-+<>[-+<<>+-+-+-+<>>><[<><>-<>><-+<>][.,,<.[,[.+[,[-.-[<<[+[[[<-,,.>>-+]-],>,[[,<"
    ",-<,].<<]--],]<+-<]+]<.>-],>+[-..>><>.]]><>[>--[,>><]>]>]]-+][+[,.<->][-[<.,].>+].++]-+<>><,><><>+->"
    "<-++><<><>-++><><+-+-+><-++<>-+><><+-+-++-><-++++-+-+<>-+[+-><-+<<>><--<>><+-<><>-><+--<><><>--+-+--"
    "-+><+--<>-+-+-+-><----+-+-++->-++-><-][[[.<+,,][[+,[>[-<.[-,->+,]+<,,+]>+>[-+--,--],+,],]]..],><]<><"
    "><-+-+-<>+-+--+-+--><><+-><><-[<>+-<-+++-><>[-+-><-+-+]><><+-<>><][-.+>[+[...[<<+[<.[<[+[,,]+[,<[,<<"
    "[..>-]++[-,<,]>]-,[,[>++]<--[>+,]]]+]><]-<,]..]-[,<,[[.[>+-,+->]>-<,.<]<+<<>]<]-+]..,,<]..<]-++-><,>"
    "-+><-+++-++-<>-+++-+><><++-++<>><-+<>+[+-><<><><><-+<>---><-+><+-><--+-<>->-]<>><-+<><-><+-[+--+<++-"
    ">+-><[<><>><-><+-<>][[+--+>>]<,[..,,.-]+--]+-<>><><][-[,,..-,],[<-.[+>[++<,+[<<-[+>]+.,]],[<,-,->].."
    "]..,<]<,.]><-+-+-+,+->+><<><><>++++-><+-<>++--+<><>+<><>-+><><+<>-+<>+<>+-><+-+-++-<>[-+><-+<><><+->"
    "<--+-+-<>--+<>+--+---+><--+><-+>-+><-+--+<><>][,<>]+-<>+-<<><><>-+-+-><-<>-+<>[><><><-+<-+<>><++--+>"
    "+-[<>><-]-+-++-][>>-.+,,+]><,-+-+>-++-++-><+-+-++<>+-+-+><><++-><+-<>+><-++--+><++-<>[+-<---+-+-<>><"
    "><-><<>-+><+---+--><<>><--++-+--+-><><-+-<>-+<>--><-><><-+-><+->+--+<><>-<>+-]<>><-+<>-+<-+-<>+-<>-<"
    ">+--++-[><+-<><<>++-<>>+-><><[-++-<>><--+><><+-+-]+-+-<>][.+.+,-+>]<><>,><><<>><>+><+-++--+><+<>+-++"
    "-><+-+-<>+><+-><><<>+><+-++-+-+<>><+-><[<>-++--+-+<<>-+--+-><-+-<>-+<>-><+----+-><----+><><-+-<>><-+"
    "--+><><<>>><+--+><+--]><<>+-<+--+-><-><><-++--+-><><+-><-+--><-[<>+-<><><-+<>+><><><>><-+<>[<><>><><"
    "-><<>][++,[+><[-.[.[>>++-]>>[<-+[.>[>.>[<[--.<.-[>.<].-+][>+[>]>+>>],,],[+<,[[>>>.]<+]-.-[.>.<<]]>]<"
    "+[..++[+-[,<[,..++>]]<,]],]-]>],<>[<>[<,[+.->>,-+.].<>[[.,,->>>]..-[><<--,,]],-<]<,]..-]].]+-<>+-][>"
    "[.>[,,.<[[<<-[[-,[..+<],[.+--[>,].<-].].--]-]->+[>[-.,+.<]<<<,]]<,<]>+],]+-,+-+->><><++--++<>><><><-"
    "++<><>++-++--+[+-><<>><<><<>-++--+-<>----><-<><>><-+-+--+-+-++----+><>-+-]+--+><+-<-+-+-<>-><><><<>-"
    "><+-><+-+-[+-<+><-+<>><><><>[+-<>><<>+--><><][<[..[,.[[<><[-,[.,.[...-<]+-,>+,]>,,]-]-+,<+-]-]][-[+,"
    "]+<.]>]-+-+><+--+]-+><,><<>><>><><++-<><>-+><++-+-<>+++-+-++-+-++-+-+[<>><<><-+-><+-><-+---+-++--+<>"
    "--+-+--++---+-+-+-++--><<>+-<>>--+><><><><][..-[>-<+[.+.<<-,],]><.]<><+-<>><--+<>+-><+--<>-+><+-<>[<"
    ">-+<><-++<>>+-[><><+-><+--<>-++-><][[.-.[,,[..]-+>].->[>[>[<,[+,[[.-+-,>>],<+[--+>>>.]+.].,]][[>,<[."
    "+<[[><.+]->,]]].-<[>[->,[<>,.<[.--+<[-<..-,]].+]][.-,<]+.]]],<],,-]--,[<.,<<[-,[+-++,,[>[>[>.[+,[[.>"
    ",++],.,]]>>[.[>,+,[,,]][<+-,<<,+].+,],..][+-[-[+.[+.<.<>+>]+..[.>]>><]]>[,-+[..<]-<],.+]]]+][>>,--]<"
    "<>]>].]><><+-]><><-+,+--+<>>-++--+-+++-><><+--++++-+-++-><<>+<>+><-+-+++--++-+><<>+-+-+-+[-++-+--+><"
    "<+--++-+---><+-><-+-+--><-><><><>+-><><-][.-,,>]-+<>+-<><+-+-><-+-><-+--+><-+-<>+--+<>--++-><<>-+-<>"
    "<>-+--<><>+-[<+--+><><><+><<>>><<>-+[+--<>+-+-><]+-],-++-><><<>>-+><-+-+++<>><++-++++><><><+-[<>+-><"
    "><<-<><>--+><-<>-+><-><-><<>-><-+-><-+--<>+-<><>-+--+<>--+--+-+-+-+-<>><--+><<>-+>-+><+--+-]<><><>-+"
    "<><<><>+--+-+-+-><-+-++--+-+--[<>+-><-+<><<>-+><+-+-+><+-><>-+><[-++---+><><][,.[>-<[>+.->],<<>>,]>-"
    "<]><<>]-+,-++-+--+>+-<>++-><<>-++-+-++-<>><+<>+--+><+<>><><+-+<>+<>><+--++><><-++[+-<<>-+-><<><>-+--"
    "+<>><-+><--+<><>><--><-<>>-+><-+-+-<>][>-+,<-]<><><><><-<>><><--><><><+--<>-<>-><-++--+-><+-<>[<><+-"
    "++->-++--+<>><[-<>-+<>-+]+-<>><<>]<>+-<>,><>-++-+-+><><-+++><<>++-+<>[><<><-++---+><<><>--+<>-+--+><"
    "><--+><-+-<><>><<>-><+--+-+-+-><<>><-+-<>-><><><><+---+-+>><-+<>-][>[[+[.[-++[[-<.[++-[[,<-<>>]+].>."
    "]>[,[[.<]],.>[+-,<+[.,>,-]+,-].<-]+].+-<>]]<+[,.]>.]>][,[><>>-].]--]]><-+-++-><<><<>+-><-[-+<+--++-+"
    "+-+->-++-[><-<><>-+-+<>][+[[>+,.[<[,+-[-+>--[[>>[><,[.->,][<.-,+]>]-+>]]+.<]>]-+<.>>]+]--<+].>-[[<[+"
    "[,[+<+>><[[+[<<[>+,.-<.]>>>[+<]],]+,<-]>],[[-+[-,..,>>].]..-]>-<]++],>.[.+.,]->-]]<->]><][++[<<,.+[["
    ">.<+-]+]]]<>-+<>,><>+-++-<><>-+<>+++-+-+--+><+<><>><+-++-<>[+-<><-+<>-+-+><---+--+---><-><><+-<>-+-+"
    "-><-+-><+--+<>-><>-+-+--++-+-][<,,>.]<-+<>><+--+-+-+-<>><[><+-><+-<><+><>+-+-[-+-+<>><+--]<>><-+><<>"
    "][,,-[<>>.,[>[[.,[,>+<++,.].++]>,][.,,[+.,[.>,]..<[>.-],]<]+.]]+-[+<+><].]+--+><+-<>,<>><-+>+-<>+-<>"
    "++-+-+<><><>-++><+-><++--+><++-+-+-<>+-+><-++--++-++<>><><><[+-+-<--+<>><-++----+-+-+><---<>>-+-+-<>"
    "][<,[+,[[+<+[[+-[-[+[.[>,-,]]<.>]]<[<,>.[+.].++]->]--.[<.>[-,+.>-<,]-.].,]-[-[.<,[<[.>+[[++<.-<>,]-,"
    ",]++[-<,,[+-,,-]],],-.].].>+].->]++.-]<-,[.[+[.,>[<,>>-]<+-[,,<[<.[+-[+>>>>[->>+,<]]+].-.].>[.>+<,[<"
    "[+<.-[+<,.]+].+<+]].<<]<]<[.<,+]-,<].<<>]]+<++]<>><-+<-+<>[><-+><-+-+<><<>><+-+><><>-+-+[><-><+-><-+"
    "][->[>[,[[<++[----,>[<[-[<+<++,]->>]<-]-]<>]...[-+<.-].<<][++<[<<[+>]+,][.->.-+]-+]<][,],<-]>.]-+]-+"
    "><<>+-+-,+-><-+><>+-<>+><+-><-++-+><-+++><-++-+><-++-+<>-+-+-+><+-+-+-+><-+[><><<>-+><<+-<>><+--+-+-"
    "<>><-+-><--+-+--++--><><+-<>-+-<>+-+--+-+-<>-++-+--+-+-+--++---<>-<>-+-+--++--><-<>><-+><>-+--++-><>"
    "<<>][<>[,++<-+<]>>.[<-<]]<[><<><-++<>+-><>><<>><+-[-][>[[-><,.,],[+<[-->[<[[.><[,+>].]+>[--><><-]>]+"
    "<>+-],.]->,[..<[<>,<+[+--+,].-]->,]].,].-,]-+][+[+<...]-[,.<,.+]+]-+,<>+-<>>+-+-+-++--+><++-<><><>+-"
    "+<>+-<>++-+<><><><>++-><<><><>+<>><[<+-><+--+-+---><-+--++-<>><-+--+-->+-+-<>-<>]<><<>+-+-[-++--+<+-"
    "+-+-<><>+-+><><><>[-+<>-+-<>+-><-+><][.,>++--<]<><><>+-][+,,-,+[-,-,,[+[.-+>-]+]-]+,]><,<>-+>+-+--+>"
    "<<>++-+--+++-+-+><-+><+-+><+--++><><<>+-++-+[+-<>-+<+-><+-><-+-><+-<><><>--+<>--><-+><<><>-><><--+-<"
    ">><>-+-+-+-+--+><][..>]-+><+--+-+<><--++-><-><<>><<>--++-<>+-+--><><+-[<><-++-><+><><><><>><<><>[+-<"
    "><>-+-+-><-+><><><]><><-+]<>-+-+<>,+-<>-++-><>-+><+><+><><+-><++-<>+-><+-+><-+<><>+<>+-+><<>-++-+<>+"
    "><+-+<>++-><><<><>[<>+-<>><-+<><+-<>+---++--<>-->+-<>-+--+><]-+-+-++-<-><<>-+--+--<>-++-><+--<>-<>-+"
    "-+-+--+-><<>><<>--+-+><<>[+--+<-++-<>+-+>+-[<>+-+--<>]<>-+><><]-+><+-,<>-++->+><><-++-<>+><+--++-<>+"
    "+--++<>++-<>+-+-+-+++-+-+><+-><><+-[><<--+-+--+<><>><-<>><--+-+-+--+--+--+<><>><+----++--+--+><-+--+"
    "-<>+-+-<>>+-<>-+><+--+-<><>><][->>+[+,,+[[<-].,+],,,]]-++-<-+-+--><<>+-[<-++<><>><>-+[-+><<>-+-+-+->"
    "<]+-+-][.-.]><+--+,-+>+-+-+><+-<>-+><++++<>-+<>+><+><+-<>-++><+-><+-<>++-><-+><><++-[><-++-<---+><-+"
    "-+-+--+<>-+-<>-+--+-+><><>><><+---+><<>]<-><><+--+-><+---[<>+-><-+><<<>+-+-+-+-+><><>-++-+-><[+-+--<"
    ">-+-+-+]><<>-+<>><]+--+<>-+,><<>-++-<>>+-<>++-+-+><-+<>+-++-><<>++-+-+><-+><++-+><+--+++-++-><<>[-++"
    "-><<-<>-<><>-<>-++-+--><<>-><+--++-+-><>><-]><><<+--<><><><><>-<>-><><-><-+-><<><>-+-+--+-+---+><><-"
    "+-+[+--+-+<><<>++-+-<>><>+-[<>-+-+-]><-+][-.[>+.,-,][,.->[<>.<-+],+<]+]+-><,><<>-++--+>+><<>-++><++-"
    "+><+--+-+><++--+-++-[+-+--+<-+--+-+--+-<>-+---+<>-+----+--+<>><+---++-><+--><+-><-+><--><+--+-><-+-<"
    ">-<>--+<><>-++--<>+-+-<>-+-+--<>><+-><><>><+-<>><-><><><][[.,[,[,>>[>[-,.<,++]<]]+<[[<,-.-]<,>.]+.],"
    "><[+,+<.]+]<[-,++>-.]>-,]+-<>+-<-+[<-+><+--++-++->><+-+-[+--+-<>><<>+-]]+-,+->-+<>-+<>-+++-+-<>><+><"
    "-+-+-+-+++<>-++<>-++-[<+-+-+-><-+-><<><>-+-><<>+--+<>-><<><>-<>-+-<>+-<>-+-+--+--+><--+-+-+><-+-<>+-"
    "-<>>><><-++--><<>]<><><><-><+-><--+<>-+[+-<><-+-+-++-++--+>[><<><>+-><--++-]+-><-+<>+-]-+-+,><+-+-><"
    "<>>><++-><+-+-+-++--+-++<><>+-+-++-+--++<>+<><>+-++--++[+-><<><--+<>-><-+<><>-+--+-><--><><+-><>-<>]"
    "[+,>.++,.]-+<><>-+<><<>-+-<>-><><+-+---+><<>--+-+-[<+><>+-><-++-+-[+-<>><--+><]<>><<>][+++>]<>+--+><"
    "+-,+-><+->+-+--++-++++-+-><++-+><><><++-+-+-++-+><++-+--+-++[<>-+<><><><><-+><-+-><+---+><<>><-<>-+-"
    "-++-><-+-><><>><<>-+-<><>><><+-]<>><-++-<><+-+--><-++--+-+-+-<>-><><-+-+><-[<><<>+><<><>>[><<>+-+--+"
    "-]+-<>+-]><-+-+<>+-,<>+->+-+><+><-+++<>-+++-+<><>><-+><+[><><<<>><><---<>+-<>-><<>-<>-++--><-+--+>-<"
    "><>-+-+<>]><-+<>><<><><+-<><>[-+-++--+<+-><+<>>+-+-><-+><[-++--]><><][.,<[--+[[->.[.-[[,[,,.[,[-.,],"
    "<++]--+[-<-]<,].->[-,[.><][.><]<]]+--><+]<[.-[<.<+>[.>[,[,,-][+,<],]]>]-><+,]<>]>+-][><,[.[<-[+,+--."
    ">][[--,[>-[-,-,.+]-+,+->]]--]><+].[,,<-+],<<]>..<<<]>.-]->]<[[,>[,[[,<+]<+]>].,+]->].+]-+,+-+-<>>-+>"
    "<+-+--+++><><+--++<>-+><+++-><><-+<>[-++-><<><><><<>-<>-+--<>><-<>-+-<><><>-+-><<>><<>-><+-<>--<>><>"
    "+-+-<>-><-+<>-+<>][,[-.>[++.[>,<]][-.+[[>.[>.<.>[[..[+..>],,.-]-.-[--[>>>>,][-,,-]]><>]+-]]<[,>[-[--"
    ",<.+>][>[[<[<.<+.]]<.[+[.<][,>+>+,],,+]>++]-->[-[-,[.<,-]>+.]->--]++]-]<->[++[,[+>>[-.+.,,+-]>,].-<>"
    "]>]]+]<[>>[[[+,+<<<]+]<,],,[.,[[,[<<<+[[<.-][.>.++<]]<]<<[-+<[.[-<+>+<>]<.]+,.,]<+],[[>->[..[.<<++.]"
    ">-]].[>..[<[<-+][-<,.]>,-]<,<-++]+,]>>-][-<>]-]>+-]<]][>+[,.[,[->[.>+,,[-<,[--[.-[>,,+<+<]->.,][[,.+"
    "][---+,]]]>[,++,->+]]->>]]...]+..]]>]<-+-+-++--+-<><><>-><<>+-<>-<><>-++--+[<+-+>-+-+<>[-+><+-><-+-]"
    "-+][<.<-,<+]+-,><>-+<><>-++-++--++<>+++-+--+<>++-+--++[><-++-+--+<-<>-+--+<>---+<>><+-+---+<>--+><><"
    "-+--+-+-+--++->><-+><<>-+--++--+]-+><<+--+-+<>-<>[<+-+><+--+<>+->><><[--+-+-+<><>]+-><<><>]><,><+-><"
    "-+>-++-++--++<>+-+-><+-+<>+--+><+-+><><++--+-++-+[+-+-+-<-+---+-+<>+-+--+-+--+-<><>--+><+---+><--++-"
    "-+-++--<>-><<><>+-+--<>><<>><<>---+><<>><-+-><-+<>><><-<>+--<>+---+><<>-+><>-+-+-<>][-[,,+>.[,<->[,,"
    ">]+-]]-[>+[++.>]]+]><><+-+--+<-+-+--++--+-+<>-<>-+><+-<>[><-+<+>-+[+-><-<>><+-+-><]><],-+><>+++-><-+"
    "+-><++--++-><<>+<>><<>+-++-+<>><-++-[<>-++-><<+-><-++--+-+--++-><+---+-<>+--+-+-<>><><-+-+--><+-><--"
    "-+<>+--+--+-+-+--+-+-+-+---+-+--+-++--+--++-<>-+--+-><>-+-><><][><[-<]+[<++.[.+.[+-[.[[[+><,][<>[+<<"
    "[<.>+>+]+.<],,<[,.>[>.+<--]-[,.,-,,+.]>+]-]].,<+][<>++]+<],-[[[,,++<>+]+<,]<<.[->.]<>.]],[-[++<]-,]>"
    ">]+-]]><<+--+-+<>-<>><><+-<>-<>-+--<>-+><[<<>><+-><+><-+-+><>+-<>+-[--++-+-][,.[--<[-<.[.[+[>.-],>+["
    "[<<]-[-[<+[+,[.>>>-],<]..<,->][+-<,-]-+]>,+]-]-]]>>[,+-+<]><]-,,.]-+][,->[>-[<+.-][>+[.[[>[[,<[<>-[,"
    ".<><].[+,,+<--].<]]-,.]..,>].<].><]>]]>+[>,+>]],>><><><++-+--+-+<>+-+<>-++-+-+><+-++-++--+><+<>><><>"
    "<[+-+-+-<><-><<>+-<>-<><>-+-><-<>+--+--><><-<>-<>-++-><><><>-+-+-<>><><+-+-][.<>[-<+<+>]-++<]<>+-><>"
    "<-+<[<+--+++-><+-><+->+-<>-+[<>-><+-><<><>][[-.[>+>-]-]<,+]><<>]<>-+<>-++-,><><<>>><-++-<><>++-<>+-+"
    "-++-++-++-><++<>-++--+<>+<><>++-+-<>++--+[+-<-+-+-+--+<>+--<>--+<>+---+><+-+-+--+--+-++---++--+-<>-+"
    "+--+-<>-+<>-+--+><<>-<><><>><>><-><<><><>]+-><<+--<>-+-<><>-><<>-+><--<>><+-<>--+-+-++-+--+-+-+-><><"
    "-><[<-++-+>+-+--++-[-+<>-+><-<>+-><-+][><[+[,+.[,[[+<[>,+[+.[<<+>.[+<,+]>,]>[.,>>[+,-]>]>]>.][<[->-,"
    ".>-.+].-],][[-<,,,[+,+,]]-]],>-+]+-[..-<+,.],]<<+>],]+-><-+][><>,[.<[,>-[<.<,+<>][-+<><-[<->.,--]<-]"
    "-,<],,-.]]+-><+-,-+>+<>++-><><><+<>+-><-++<>++-+-+><+--+++><+-++[><-++-<<>><-+><+---+--++-><<>-+--+-"
    "+><--+<>><-><-+-+-><+--+-+-+-><--+><<>-<>-+><><>+-<>><-+-][[>[[[-,,><<].,>].,<]><+>-,].[,++[->.[+>,["
    "[-->[[.>.[-+<,]+><>,],,+.]>+-]<.>[>[<<+[>.[<[<-<+++],]+.,.]<,>,]-[-+.-,]],]<+>]<,-]<>[-,[-++[,-<[<[["
    ">,[.+<[,.>,]-<>][.,+[+,>><]+,],>,]>>.+,]+<.]++,]++],[>[-.>[>>[[-[<+.[,>,,--]-]]>-]+<>>-]>[.>[-.+[-,<"
    "-]<+<+]]<<-]<,[,.[+-.[-.>[>-[<[+<,>]<]]<->-.],.]-]+].]-<],.-]<>+-+-<+-+--<>><-+--+-+---+-+-<>+-><-><"
    "-<>[<><-++-+><>><<>-+[<>><-][-,[[.+[+[<[,,[>,>[.,,<][>[+,[--++<.<]-,[><-.]-><]-.[,.[,,+]]]<<<],[<>-<"
    ">.--]<],+<][...-<-]-]>+,,]]-]<>><<>]+-<>-+><<>,-+<><>+-><>+-+++-><<>><+-+-+-++-+-+-++-><-++<>+><><+>"
    "<+<>-+-++-++-++-><><><+-[><+-<>><<+--><+-<>-+<>-><<>--+<>-+><--+-+>+-<>-+-+-+-]+-<--+-><<><><>-+-+--"
    "++--<><>--+-><-<>-[<><+-+<>-+>><+--+-+[><+-><><><-+--++-><][[.,[<[+[+.,[-<<>.]][.[+.><-[.,[.-[+.,.]-"
    "[+[.],>-[>..+,+,]>],]>]<]].,+]]>-,]>+>+]]-+<>-+><,><>><<>+<>><+-++-++-+<>+-+-<>+<>+-+><++-<><>++--++"
    "--++[+-+-<+-><+-><+--><-><-><+-><<>><-<>-+-+-<>+-+---+-+-+><><-><<><>-+-><><+---+><-<><>-+>-+-<><>+-"
    "][.[[+>[,+.[--[--[[+>[<,[-,.+>,-]][<[-.+,>]><,].]<].>[-,><]>.]<]].,,.,+].<[-,..-[>.--<-]]+]-]<><>-+<"
    "><-+-><-<>+-<>><+--<>+--><--++-<>-+-+-><-+-[+-><<++-<>-+>><[><<>+--<>-+<>]][+>><.+[.-,>[[.><[<<>[>[<"
    "[-,+[,>>[<<,+<,.+]+<]<[++>],-]>++++<],.]+>+].+]>.]]]><,><-+-++->-+-+<><>++-<>-+-++><-++-+-+<>+-<>+-+"
    "><><+-++-+<>-+++--+><><+><<>><><<>[+-><<>+-<-<>-+-+<>--+><-+-+-><><-+-<>><-+-+<>-<>-+--+><<><>>+-+-<"
    ">+--+--+<>+--+]+-><-+<>+-<-+<>+-><[-+<>+--+<-+-+<>+-+><>[-+-+><+--+-+-]<><>+-><-+]><><><,<>>+-><+-><"
    "-++><+><<>-++<>+--+<>+-++-+-+-><><+<>-+-++-><+><-+<>-++-+><-++-+<>><++-<>><><+><-++-+-[<>><-+<-+<>--"
    "-+-<>-><-+--+<>>+--+-+-]-+><+-<><+-+-<>+--><-+--><+--<>-++-+--+[-++-><+-><<><<>-++><-++->[-]><][<[><"
    "...<][-[<[-[>-><,>+-,][,-><-].<],>.]<>>,]<<+]<>><<>,<>-+-+><-+>-+<>><<>+-++<>><+-+<><>++-<>+-+><-+><"
    "++--++-[<><+-><-<>-><+-><-+-+-><<>><-<>><-+><+--+--+--++--><+--++-+--><-+-+-+--+>+--+<>-><<>><<>][[+"
    ".[->[[[]-.]><[>,>[.[,[.>[>.+,.+]-++]>-]>-,]>]].<[.,,[++.<,,>]-<.<,-],,<]>[.>,[+<[--.<--]+<+[.>-[-<[["
    ">+,+]+>][<+,]+]->[,>+[+.+-]--<[+,-[[<-.<][,[+<<,-,,,]-[,,+]]<,+]+.[,<-[..[,++].]].,],+.]<]+]]..]<[-<"
    "[+++>[[+.+[,-,[-<+[<<<-++]]]>.+]+-+[<+[-[>.-[.[<<]-,],+]>.]<,[,-,[+.>[,>+]<.-]+.],].++]>,],]+<,]+-<>"
    "-++--+<[><><<<>><<>-+-++><-+>><<>><+-<>[<>+---+><][,-[+-[>.-<],+<]]][.,+[+<>[..[[++[,..>-.]+.++>]+>."
    "]->-,]<,+<+],+[<.[<[+.,[[.,,[<<[<->>+]]>>[,.[+>+.-]--+[+[+>.-]-]<+.]-]+->][+[+-[-,,,,],+>[[.>[+-,>-<"
    "]]].]+<]<]++][>,+.+>].>],.]><-+-++-,+-+-><>><><+-<>++-+++-<><>+<>+-++-++-><-+-++-[+--++-+-<-+-+-+--+"
    "<>-+-+-+--+-<>-++-><><--+-<>+-><-><><-+-<><>-<>><>-<>][<[,,.<].->]><<+--+-><+---+-+--+--+-+-><[<><+>"
    "<<>>+--+-+<>[-][<>,[->,[[,[-[.[>+].[,++,,,-]]...,]-<-[<[.-.[><<[-,<-<]<<[[>.<->]+-[+[-,].,+[,><]<+]>"
    "]+<,]<]]++-],.>].,[[[[>-[.,.[--[[-.-.>]<]+[,<[>,>+<].>]>,-],<[-.+[>-+,<]>,]<]]]+-,-]+[--<[>+<<[>>,.>"
    "]+-]-.]><]<>.][,+-[-++>[-+[-.>[-.[,<+>]<+<],+[[-+-[<[[>-<><>->-]<[+,,]]>+[+-->]].]+.[.[<>[<<->.[<<.+"
    "-<,],,]-<+]<>[,.[>-+[--<--+.]>--][.,,>[,,<<,>.+-]++,]>.]-]]>+,]<.-+++],><],-.],,]][+>]-+><-+,+-<>>-+"
    "+--++-+-++-+-+-+<>-+<>+><<>+<>-+<>+-+><-+-+><+><+--+<>+<>+-+<>[+-<><+--+><><+---+-><><+--+-<>-+-<><>"
    "--<>+---><+--+-+--+-+><+---<><>+-><-+-+->-+<><>-+-][><>.--<<]<><><+-><<>+---+--+[-++-><><><<+-><+-+>"
    "<>+-[-][>[+[-<[[+>+[.[-<,]><[.<<[,>.+,]>>]--<],[,.>.+]+.]<[[<.[>-.+,][.,>,]]>>-[+<>]<]+]>+].].]+-][-"
    "><[[.->[[[+<[-,-,[.<>]-<,]+>,]+]<[>,..+-->].]+<.]<-[<<[[-.>[-[->.,>+]>,[>>[[[>.--],[.<..-><]--]+>[+["
    "+,>,-+][,,--+<]>.<]>-]+<+,]].],[.+,-]..]>+.<]-,>]<>->,>]-+-++-,><-+><><>+-+--++++-+-<>++-><<>-+><++-"
    "++-><+-<>+<>><-+><-++[><-+<><><<>-><><+-+-+--<>+-><-++--<>+--+-+-<>+--><-+-+---<><>-+<>+--><+--+-><>"
    "<+-+--+-<>-<>+--+><-+-+-+--+->-+><+---+<>-+-++-]<>+-+-<+--+<>-+-><-+--<>-+<>+-><--+><><[-+<>+-<><+-<"
    "><><>++-><>[+--+><<><>--+<><>><][[>],+]><<>][[+[++<+]+->.]<>-[<-,]]+-,-+><>><<>+<>+-+<>-+><+-+-++-<>"
    "<>-++><<>+<>-+-++<>><+><><+<>-+-+-+<>+<><>+><[<+-+---+-<>><-+-><<>--+><><<>+---+-++-><+->-><][,+[,[>"
    ">]+<[<>+<>,]+]]<><>><<><+-<>><-+-<>+-<>><[+-><<>+-+-<+-+><>-++-[-<>><<><>][,<+[,,.[<-[[<-[[--.[<[+.>"
    "]-<<<].,-]<[<>[.+>[+[-<>+>,.]]]-.+]]-,]>->],>]<<]+<[.,+[<[[<[.[+[.[.<[+.,]<].><]>,--<]<-+[>.[>,-[<<,"
    "<--.][,,<-<[<>+-+-,,],]][+.+[[<.-<,]-++[-.-.,],>,]-,]],+]<>]>][[>>.-<]..,]>-]<+-]]<><>-+][<,.+,-]<>-"
    "+,+->-+-++-+<>+-++-++-+-+-+><<>+><<><>-++[<><-+<>-<>--+--+----++-<><>+--<>-++--><<>-+--+>-+<>-++-<>-"
    "][++>[+].+.]-++-<><<>><[><><<><><+-<><>+<>+->-+-++-[><-+-+<>+---+><><]<>][-..[>,]--+]<>-+,+-><+-<>-+"
    "><>-++><><><++-><+-<>><+++-<><>+<>+><+-+-+-<>[><-+-+><<-++-<>><--+-><-+<><>-<>-++-><-+--++-<><>-><><"
    "-+-><-+><+--<>+-->+-<>-+-+><-><-+][+.-[.<.->--.]<]+-<+--<>+-<>><><-><<>-+-+-+-<>-+<><>><[<><-+-++--+"
    "+-+><>-+><-+[+--><]]><><,<><>+-<>>-++-+-+-+-+++--+><+><-++-+><++--+++--+-+-+++<>><+-+--+[><><<<>-+-<"
    ">><<>+--><<><>+---<><>><+-<>--++-><+--<>--+-+-<>-+><<>-<>-+-+><><-><-+-><+-><-><<>><>-+-+--+-+><-+]["
    "<..-,-.,]><+--+><+-<-+--+<>-<><><>-+[><<-++-<>++-<>-+<>+->-++-><[--++-><]][.-..<.[+<+]+>.]+-><,><+--"
    "+><>+-><-+-+++-+++-><+-+-+><><-++++-+-><+[<-+<>+--+-+-><<>+--><><-++--+-+--<>><<><>-><-+><-+><-+--+-"
    "+-+--+>-><-+<>]+-<><-++-><--><<>><+--><+--+--++-<>+--<>><><><<>[<>-+><-+<><<>><><+<>+-><+->-+-+<>><-"
    "+[-+-+><><><-<><>-+][[,<,[.>,.]<+,],,.>,-]-++-+-><<>][+-.]<>,>+<>+<>-+<><>+-+><><-+++-><+-+[<>-+<-><"
    "-+--+--+-+---+-<>><-<>-+-+---+<><><>+--><-+><<>>-+-+-+-+-<>]+-<><--+[<><><<><>><+<>-+>+--++-[+-<>+-<"
    ">+--+--+><]><-+><]<>><><<>><,+-<><>>-+-+++-++><><<>+++-++<><><><>+<>-+<>+--++<>><<>[+-+--++-<-++-+->"
    "<-><<>-+<><>-<>-><-+-+--+-+><-><>-+<>-+-+-+-]><-+<><---><><-++--+-+--++--+-+--+><--[+-<+-<><>-++-+><"
    "+-<>+-+->-++-[<>+--+--++--+-++-][+>,-->]><<>-+][>-,[-,<[,<<+[<<-<-,[-<-.[.-[,[->>[,<---[>],]-+]<-[.+"
    "<,>+]],->],-+]<]]-.,[<>-[+-+[,+[<,,[,[<[++,+]...-]]+,>.,,]>++].].+->]]-+,<]><-+><,-+><><><>-++<>+-><"
    "-++++><++--+-++-<>+<>><+-><+[><><+-<>-+<-+-+<>--+---+-+--+-+<>><-+--<><>-><-+-+---+-+-<>-><><><-+---"
    "+><->><+--<>-+-+][>->[>>><>>,<]->>[[+,>[->++]<+.]--[.+>.,+]]]<>+-<<>><><-><><-><><-+--+-><<>-++-[-++"
    "-<>+-><<<>><+><-+><-+><><>+-+-[-++-+-<>+--<>><-+][[>>+[+<[.[,<+[[[.-<[<,<[++-+--]<]]-[<>[.]<<<<<<]<]"
    ".[<>[.-].,]]++-]-.]<]-][,[<<,]<.-.+]]][+.>[.+-<-]]><-++-+-,-++->-+><+++-<>+--++<>+<>-+><><+-+++-+--+"
    "-+><[-+-+-+><<><<>-<>><-+-+-<>+--+<>-<>-+--+><><+----+-+-+-+---<>><>-+<>-][,-,+]-++-<+-><><[-+-+<><>"
    "<+-<>+<>+->+--+<>[><<>-+-><-+><][>.>[-...+>+<<]>[.[++[>[.<[[,<>[.[[,+-+>-,]><,[+>-.<+<]-<<][.,>.[+-]"
    ".,+]]-+[.-+,[+<.>]]<+,]<>]+<],][<.>[+<[><.].,[>>.]]-<,]]<[<.>[,+-.,]+,-]+,]<<]><-+-+][..,[[>-[,,.[<["
    ">[<<>-[>>,]<+].>]<<>[+-,,,>],>.]]++>]>-<]>+<+,+]><+-+-,<><>>+-><+-+-><+<>><<>-++-+><++-+-+-+><+<>+-+"
    "+--++-[<>+-<><-+<>+-<><>--+><<>-+<>-><+-<>-><<>><-+--+><<>-+-<>><--++-><+-+--><<><>-<>><-<>><<>><><-"
    "-<>><--+><+--+-<>-+-+--+-+<>--<>><><>-+-><+-]+--+><-+<><-<><><>[+--++-<>-+<<><>-+<>-++><+->[<>-]><<>"
    "-+<>][+>-+[[[.><.-]+..],,-,]]><<><>+--+,><>+-><><><+-+<>+><+-+<>+-++--++-++-+-+<>+-><+-+-+-+++-++-+>"
    "<><<>[+--++-<<>-+-<>><-+><><-><-++--<>-+-+><+--+-<>-<>-+-<>><<>><-<>-><-+><><-+-<>><>--+-+][.-++,,+,"
    "]><<><-+-+<>><-+-<>-+><-><--+<><>+--+-+-><-++----<>-+<>+-><--+-++--+[+--+<><++-+-><<>>-++--+-+><[-+-"
    "][-<++>]<>><][<<[.>-[.-[++[<,.[.-[,>[[,.[.>><.][-.-,]-]]>,<[>,--[+[,->><]-]<]>+].+-[[>+<[>[.<>].,],]"
    ".]]>-,[<[,.>][<+[<[[<<<>>].>+]>.]-<[<>[>.<[,>.-]>,,<],.-[>[>.<+>--]+>]<>]-]++]<+.]+.,[-+[[-,.+-[,,.+"
    "+.].,+][+<+[,<[.-[>+-,,]<>-]>,<]<[>--[[<,>-]>]>[-.>->-]+]+]>]+><,<]>-+]->.[[,+,<->[>,+[,+.,>[.<]--.]"
    "<.[,<>[-[+<,>,[+-,-]]+-[+<+[+.>.]<]>],],]]+,].],<.]>><]><+-,>-++-+--+-+++-+++-+-><><++--++-><++-[+--"
    "++-+--+<<>+-<>-+---+-++--><><<>-<>><><--+--+-+-><-+-+-><><<>-<>-<>+--++-><>-+--++-][-.>[<<[,[..[<[-."
    "[<[+->.]+<],.[+,[.<+],[,<[..[.+,]][<++><<]-<+]-,>]<+].,]-<]]<[+<,[..[><[>>+]<<>.+]-[<.+]]]>.].>>[.[."
    ">[[-++[-+<[,-.+,]+++[>+,[-,+<>[>.,[>,>][...]>]-.]><<[,<-]+].]-],[.[[..<[>[.-,,<,[++,.+]<,+]<-+[[---,"
    "<>].>[<-><+-<.<]],]<,<+><][<-,[+++>+>.]->++<]<,>][..+,[,-<<[,>[[>-++<]>[,].+][[+,+][.+++>+],>]]<]+]>"
    ">]<+]+]<>..+<]]><><<<>-><-[+--+<-+-+-++>+--+-+-+[><+-<>><-][-+--<]]+-,><<>-+>-++--+++-+-+-+-+-+><><+"
    "-<>++><+--+><+><-++--+><+><+-<>+-<>+><<>+<>-+<>><[<><><+-+-+---+<>--+<>-+<>---+><><+---+<>><-+-+--+<"
    "><>+--<><>-+-+-+-+-<>+-<>--+-<>-><-+-+<>-+-<><><><>><>+-<>-+-]<><-><+-<>><-+--+-+<>-+><--+-<>+-<>-+["
    "><<>+-><+-<><+-<><>+-++-+->+-<><>><[-+-<>]]-+,+--+><>><><><<>+><-++-><+++--++-+-++-++-+++-+><<>+-<>+"
    "+-><+-<><>[<>+-+-<-><-+-+--+--<>-++-<><>-<>+-<><>-+--><-++-><+---><><+-><<>--+-><<>+-<><>>-+><+-><<>"
    "-><<>><]><<><-+--+--+-><<>[+-><<-++-><><<>+><+-><>><<>><><[-+-+-><><<>][->[,+[<[[><>[,<<,].<>],.-,>."
    "]..-[>,+[.,-[.,[[+..[-++++[->>]..<].+]+]+-<][,>.[,+,<-[+<,[>+[+,-<+-,]-,+[<-<<]<]>.,]-].<+[>[><-<->]"
    "[><><>+<]]<-.]>.]>.],+.]><]<.>]+--++--+-+][[>>>]-,>+.]+-,>+-><+-+-+++-+-><><+><-+-+++-><++><><<><>++"
    "-++--+><><+-++--+-+[-+-++-><+-<--+<>><-+-><-><+-<><>-<>-+><-+><--+-+-<>><----->-+-><><<>><][>+->]+--"
    "+<><><<>><+-+-+--+-><<>><+--><<>-+-+-<>[+-+-<<><>++-><+-<>+->[><-+<>+-<>-+--+<><>+-]+-><><<>+-][+.<<"
    "-,]<>+--+,-+<><>>+-+-><+-+<>+-+><+--++-+<>-+-+-++++-+<>+-+><[><><+--+-+<+-+-+-<>><-><-+-+-+-><-><+--"
    "><-+<>--+<><>-+<>-><<>--+->+-+--+--+><><+-]><<-+<>><[><<>-+<>-+<-+<><>><++-<>+->+-+--+<>[-+<>-]><><>"
    "<><+-]><+--+<>,+-+-<>>-+<>-++++><<><>-+<>+<>-++<><>+><+-++-<><>><++-+--+[<-<>+--><+--+-+--++--+--+-+"
    "<>+--->+-<>><+--+-><][-.<[>,+[.[<>[-[.<[-.[<++[<[,->.->-<]>-[<<.>-]--]]<<+].].--,-],>.]][+<]--]-,.[["
    "--]-.,]>+,]+-><<><+-><--><-<>-<><>-+--><--++-[+-><<>+--+<<>-+-+><+-+><>[+-+--<>][<[.-,+].-<]+-><><+-"
    "-+][>+[[<>>>][.<>].]++,[.<[.<<<[<[+,[+-[>[>>+<.[>,,-[,++<<]>>+].]>]+.].][,<,[>,-[,,,+[<+>[+[-],]-><]"
    "]><<[,-++-,.-]]<>],<]<>]+>],],-+><<><>>><<>+><><-+-+++-<>+><+-+<>+-+<>+-+><+++-+-+-<><>+><-+><<>+-+>"
    "<><><+-[<-+<>-+-><<>-+-><><><><-><><+-+--<>><+-<>+--><><+-+->-+--++-][[-[<,.[>-<[+[,<-[.[,.-[<[->,+<"
    "]><.],]>]-,<].[-<<<[[.[--+[---++-+]>+<]<<]<-[++<-]+]],].+-],<[.,[.-.[-<[.+.[<,,]-,]<]-,+>]>>,]]>>+],"
    "[,-<]+-]-++-<><+-+-><><--++---+-+-+-[-+-+<><+><><><>[-<><>][..-]<>+-><-+][,,<[<,-]-<]><+-,><><>><<>-"
    "++<>-++<>+-++><<>><-+-++-+<>++-<>-++-+><-+<>+-++-[<>-+<><>><<-+--><--+<><>><><-><--+<>-+-<>-++-><>><"
    "--+><]+-+-<<>><-+--+><<>-<>><-+-+-+-<><>+--><<><>[<-++>-++-[--++-<>+-><]<>-+-+><-+][<,+<<-+]-++-,<>>"
    "<-++-><>-++-<>+<><><>-+-++<>+-+-><++-+<>+-++-+-<>><+-++-+-+-++-+-[-+-++-<>-+<--+<><>-><><<>+--<>-<>>"
    "<-+--><+--<>-++-<><>>-]+-><+-<><-+--+><[+--+<-+<>+-+-+-+<>-++-+-<>>+-<>-+[-><><+--+><]+-+-><<>]<>+->"
    "<-+,+->><><<>+-+-++-+<>><++-><+<>><<>+<>++-><+-><<>+<>+<>+><+-><<>[+-<><><+--++-<>-+--+<>-<>><---+--"
    "<>+-<>+-><>-]<>+-<+-<>+--++--<>+-<>-><<>><<>--++-><><[><+--+-+<-+><+--++<>>-++-><[-><-+-+]]-+<>+-,+-"
    "-+><-+<>>+><><+<>><-+++-+--++-+-+-+><+-+-+-+<>+-+<><>+><<>++-++-[><+-+--+<><+-+-<><>+---+<>+---><<>+"
    "--<>-+-+--+<>-+--+><><<>-+--++-<>-+--<>-+-><><+--<>+-><<><>>><><-<>><<>-+][++.]><<><><+-<>---+<>-<>+"
    "-[><+--+<><-+<>++-<>>[<>><<>+--][-<[<<[>-[+[<[[[+<<[[]+<<,+]],.,]+<.].-.-<]+]+>,[+>[[-[+++[,+.+[[+,."
    "<>-],,.[-.<<-]>-.],>+]+.[+,.<<<[>>]]]]+]+++]>-]>>.+][,,<>[--<+]]>,]+-><<>+-][.<.[,<[..+[,.<]>-,[,-[."
    "[++<.+][-[<+->>]-,-<].]<[->-[<,<[[-,><[[.>><-.],->..<],]]]>.-]]<<>].>[++.+-[[+<.[<.[>.[>.[-+[<.-,,]<"
    ">.]+<+].]<+[<[+-+-]+<,].<][[.+<-+[[[+,]<]-+,<,<]<,].>]]>.[>.[-,[>-[><[.-[>><.>,]-+<[,<.<]-].],[.[>>+"
    "<<<]<+.,+]-+,],+[+.<<>[,--><<.].<,],]+[.<[.<[<->]]>.>[[.>[,,>[,+-><,]>[,>+<.]]]-<<-]++-].]>+]+,]]>+["
    ",>.[+-[..,,<<].[-<[->+--].>-[<>[,.->+>]-[-,.-+<-]+-<],-,]-]+>[>-.[>+>+[,<[<.<,-]-]+]>-.,]]>]><-+><+-"
    "<>,>++-+-+><<>><-++><+-<>+-+-++><><<>-++-+><[-+<+-<><><>-><-+--<><>+--><-<>><<><>-<>-<>-+-+-<>-+><-<"
    "><>-<>><-++--+--<>><--<>-+<>+-<>-<><>+-><--+-++---<>-+-++--<><>+--+--++->-+<><>-><<>-++-][.<,.,]-+-+"
    "<-+><-+-><><+-+--+-><><<><>--<>+--[><><+-<><+<>+-><>+-+--++-[+-+--][[>[[.<..,<>]+[>->-,[.<>,]>.]]+-,"
    "<<.]<+[,<[+->-+]+]]<>][..[+>.>.+-]+,]+-+-+<<>-++-[><-+w+-r><<>+-o-+><<>-+><n><<>+-><g-+-+>< <>><a><>"
    "<+--+n+-><><s-++-<>w<><>er!<><>><<>>[-><+-><][[,+[-[>+,[<,.[<[[[>+>>,[.+.,.>]<+>]>]++[<[.-]<.-><]+]-"
    "+<[<-->[+[<-<.]]]>,][>[+-<[><,-[-,+,+<-]<]>++-<]]].,-]+..+],+-[+>,+,<>-]+>-],>-<,]+-<><[-><><<>-+><]"
    "+-+-><+-]>[<>c+-o><<>><n<>+-><><><g<>+--++-+-ra+-+-><<>t+-+-u+-l-+<><>-++-a><-+-++-t><><<>i><+--+<>o"
    "<>-+-++-><n><><-+><-+s><!+--++-><[><+-+--<>]><-+-+><]"
  );
}

其中 ptr指向data数据区 '>' 为ptr+1 '<' 为ptr-1  '+'为ptr指向的数据加一  '.'输出data  ','输入?#22336;?存入data '['和']'表示跳跃

先改一下代码 去混淆 把+- -+ ++--  --++ <> 这样的?#22336;?#21435;掉

[Asm] 纯文本查看 复制代码
        void Parser::execute(const std::string &buf) {
                unsigned unmatched;
                ofstream f("C:\\Users\\x1c\\Desktop\\50.txt");
                int cout = 0;
                auto ptrs = buf.cbegin();
                int t = 1;
                for (auto i = buf.cbegin(); i != buf.cend(); ++i) {
                        switch (*i) {
                        case '>':
                                if (*(i + 1) == '<')
                                {
                                        i += 1;
                                }
                                else if (*(i + 1) == '>' && *(i + 2) == '<' && *(i + 3) == '<')
                                {
                                        i += 3;
                                }
                                else
                                {
                                        f << *i;
                                        cout++;
                                }
                                //++ptr;
                                break;
                        case '<':
                                if (*(i + 1) == '>')
                                {
                                        i += 1;
                                }
                                else if (*(i + 1) == '<' && *(i + 2) == '>' && *(i + 3) == '>')
                                {
                                        i += 3;
                                }
                                else
                                {
                                        cout++;
                                        f << *i;
                                }
                                //--ptr;
                                break;
                        case '+':
                                if (*(i + 1) == '-')
                                {
                                        i += 1;
                                }
                                else if (*(i + 1) == '+' && *(i + 2) == '-' && *(i + 3) == '-')
                                {
                                        i += 3;
                                }
                                else
                                {
                                        f << *i;
                                        cout++;
                                }
                                //++*ptr;
                                break;
                        case '-':
                                if (*(i + 1) == '+')
                                {
                                        i += 1;
                                }
                                else if (*(i + 1) == '-' && *(i + 2) == '+' && *(i + 3) == '+')
                                {
                                        i += 3;
                                }
                                else
                                {
                                        cout++;
                                        f << *i;
                                }
                                //--*ptr;
                                break;
                        case '.':
                                f << *i;
                                cout++;
                                //putchar(*ptr);
                                break;
                        case ',':
                                f << *i;
                                cout++;
                                //while ((*ptr = getchar()) == '\n') ;
                                break;
                        case '[':
                                f << *i;
                                break;
                        case ']':
                                f << *i;
                                break;
                        default:
                                //putchar(*i);
                                cout++;
                                f << *i;
                        }
                        if (cout >= 60)
                        {
                                cout = 0;
                                f << endl;
                        }
                }
                f.close();
        }


此时可以得到去混淆后的流程表 (部分流程表 下同)

[Asm] 纯文本查看 复制代码
>,>+++++++[<-------------->-][<<[>,.,[-.+[.>->,]+,-]..<],<-..]<------[<
+>[-]][+..[+,<<[>[.[[>,>,<,,]<]++]<<..>.].]],>++++++[<----------------->-][--<
[>+>[,+>[->]]][[,[<[+,].>,]<.>>]]..-]<-[<+>[-]],>++++++[<---------------->-][<+[[-,-
,>[,.,>,-]]]<-[<[>-..]>++[>[>.,[.->[>-.[>[+.>.]-<-,],][-,[.<.+[[[].<<]>-.]-<],---].+]<]+
,>->]>>]-]<-[<+>[-]][.,>-],>+++++++[<--------------->-][[-.>.]>+.[+.<[[<.[<-[>,
[>,.>[,,-[[-.+>++,-]++],>-].+>],+.>].-<.].+.],-[...+]+,]..]>.]<----[<+>[-]][.[-[,>.
[>--[[-->[.,+,,>,+]..,].>]++],.]<[>..[<[+[-<.++],-],+[<[.-.]>,.[[[>>->[[-.++]>,,]+]]],-],
],.]+]],>++++++++++[<---------->-]<-[<+>[-]],>+++++++++[<------------->
-]<------[<+>[-]],>+++++[<------------------->-][[>>,[>[+>[>>>,<+.+],[,[,+<
[.[,[+++].>,>>][[<<-[..]]-]]--<]+,],]>>],]<[[->[[+-<,+<][+.[,,[-[+[++>,-<][>>.[].],+.]<[---.,+
[,++[-,,>]->>[++<]]]<],<]+>+<+]],.-[->>[<<[<.<[,,.+.]-,>]]-<,,]]+]>,,]<--[<+>[-]][,,[+.>
->].,[.->--.<]>],>+++++++++[<------>-][>--]<---[<+>[-][.,,<.[,[.+[,[-.-[<<[+[[[<-
,,.>>]-],>,[[,<,-<,].<<]--],]<<]+]<.>-],>+[-..>>.]]>[>--[,>]>]>]]][+[,.<->][-[<.,].>+].+
+],>++++++++[<------------>-][[[.<+,,][[+,[>[-<.[-,->+,]+<,,+]>+>[--,--],+,],
]]..],]<----[<+>[-]][-.+>[+[...[<<+[<.[<[+[,,]+[,<[,<<[..>-]++[-,<,]>]-,[,[>++]<--[>+,]]]+]]-
<,]..]-[,<,[[.[>,>]>-<,.<]<+<]<]]..,,<]..<],>++++++++[<------>-]<-[<+>[-][[>>]<,[.
.,,.-]-]][-[,,..-,],[<-.[+>[++<,+[<<-[+>]+.,]],[<,-,->]..]..,<]<,.],>+++++++++[<
------>-][,]<--[<+>[-]][>>-.+,,+],>+++++++[<-------------->-]<--[<+>[-]][.+.
+,>],>++++++++[<------------>-]<------[<+>[-][++,[+[-.[.[>>+]>>[<[.>[>.>[<[--
.<.-[>.<].][>+[>]>+>>],,],[+<,[[>>>.]<+]-.-[.>.<<]]>]<+[..++[[,<[,..++>]]<,]],]-]>],[[<,[+.
->>,.].[[.,,->>>]..-[<--,,]],-<]<,]..-]].]][>[.>[,,.<[[<<-[[-,[..+<],[.-[>,].<-].].--]-]-
>+[>[-.,+.<]<<<,]]<,<]>+],],>+++++[<--------->-]<---[<+>[-][<[..[,.[[<[-,[.,.[...
-<],>+,]>,,]-],<]-]][-[+,]+<.]>]],>+++++++[<------->-][..-[>-<+[.+.<<-,],].]<--[<+
>[-][[.-.[,,[..]>].->[>[>[<,[+,[[.-,>>],<+[->>>.]+.].,]][[>,<[.+<[[.+]->,]]].-<[>[->,[,.<[.-<
[-<..-,]].+]][.-,<]+.]]],<],,-]--,[<.,<<[-,[++,,[>[>[>.[+,[[.>,++],.,]]>>[.[>,+,[,,]][<,<<
,+].+,],..][[-[+.[+.<.+>]+..[.>]>]]>[,[..<]-<],.+]]]+][>>,--]<]>].]],>+++++++++[<----->
-][.-,,>]<-------[<+>[-]],>+++++++[<-------------->-]<---[<+>[-][,.[>-<[>+.

根据第一周的题目 不能输出?#22336;?也就是不能运行. 而当遇到[时 如果ptr指向的数据为0 那么就略过[]中间的数据 直接指向]  也就是跳过了.

这个时候 如果[]中有.  那么就可以去掉 修改一下代码

[Asm] 纯文本查看 复制代码
                        case '[':
                                ptrs = i;
                                if (1) {
                                        unmatched = 1;
                                        while (unmatched) {
                                                while (++i != buf.cend()) {
                                                        if (*i == ',' || *i == '.')
                                                        {
                                                                t = 0;
                                                        }
                                                        if (*i == '[') {
                                                                ++unmatched;
                                                                break;
                                                        }
                                                        else if (*i == ']') {
                                                                --unmatched;
                                                                break;
                                                        }
                                                }
                                        }
                                        if (t == 1)
                                        {
                                                while (ptrs != i)
                                                {
                                                        cout++;
                                                        f << *ptrs;
                                                        ptrs++;
                                                }
                                                f << *i;
                                                cout++;
                                        }
                                        t = 1;
                                }
                                break;
                        case ']':
                                ptrs = i;
                                if (1) {
                                        unmatched = 1;
                                        while (unmatched) {
                                                while (i-- != buf.cbegin()) {
                                                        if (*i == ',' || *i == '.')
                                                        {
                                                                t = 0;
                                                        }
                                                        if (*i == '[') {
                                                                --unmatched;
                                                                break;
                                                        }
                                                        else if (*i == ']') {
                                                                ++unmatched;
                                                                break;
                                                        }
                                                }
                                        }
                                        if (t == 1)
                                        {
                                                while (ptrs != i)
                                                {
                                                        cout++;
                                                        f << *ptrs;
                                                        ptrs++;
                                                }
                                                f << *i;
                                                cout++;
                                        }
                                        t = 1;
                                }
                                break;

再次运行得到

[Asm] 纯文本查看 复制代码
>,>+++++++[<-------------->-]<------[<+>[-]],>++++++[<----------------->-]
<-[<+>[-]],>++++++[<---------------->-]<-[<+>[-]],>+++++++[<--------------->-]
<----[<+>[-]],>++++++++++[<---------->-]<-[<+>[-]],>++++++++
+[<------------->-]<------[<+>[-]],>+++++[<------------------->-]
<--[<+>[-]],>+++++++++[<------>-][>--]<---,>++++++++[<------------>-]
<----[<+>[-]],>++++++++[<------>-]<-,>+++++++++[<------>-]<-
-[<+>[-]],>+++++++[<-------------->-]<--[<+>[-]],>++++++++[<------------>-]
<------,>+++++[<--------->-]<---,>+++++++[<------->-]<--,>++
+++++++[<----->-]<-------[<+>[-]],>+++++++[<-------------->-]
<---,>++++++++[<------>-]<-------[<+>[-]],>+++++[<---------->-]
<-,>+++++[<---------->-]<-[<+>[-]],>++++++++[<------>-]<,>++
+++++[<-------------->-]<,>+++++++[<------->-]<,>+++++++[<------->-]
<----[<+>[-]],>++++++++++[<---->-]<---------[<+>[-]],>++++++
++[<------------>-]<--[<+>[-]],>++++++++++[<----->-]<----[<+>[-]]
,>+++++++++[<----->-]<--------[<+>[-]],>+++++[<-------------------->-]
<[<+>[-]],>+++++[<---------->-]<--[<+>[-]],>++++++++[<------>-]
<-----[<+>[-]][+++>],>++++++++++[<----->-]<----[<+>[-]],>+++
++++[<------->-]<[<+>[-]],>+++++[<--------->-]<---[<+>[-]],>

假设单?#32440;?#26657;验 ,表示输入?#22336;?nbsp; 到下一个,表示一个?#26041;?#32467;束 ?#28909;?#25481;中间的[<+>[-]]

在排版一下 以 ","开头 得到

[Asm] 纯文本查看 复制代码
>,>+++++++[<-------------->-]<------
,>++++++[<----------------->-]<-
,>++++++[<---------------->-]<-
,>+++++++[<--------------->-]<----
,>++++++++++[<---------->-]<-
,>+++++++++[<------------->-]<------
,>+++++[<------------------->-]<--
,>+++++++++[<------>-][>--]<---
,>++++++++[<------------>-]<----
,>++++++++[<------>-]<-
,>+++++++++[<------>-]<--
,>+++++++[<-------------->-]<--
,>++++++++[<------------>-]<------
,>+++++[<--------->-]<---
,>+++++++[<------->-]<--
,>+++++++++[<----->-]<-------
,>+++++++[<-------------->-]<---
,>++++++++[<------>-]<-------
,>+++++[<---------->-]<-
,>+++++[<---------->-]<-
,>++++++++[<------>-]<
,>+++++++[<-------------->-]<
,>+++++++[<------->-]<
,>+++++++[<------->-]<----
,>++++++++++[<---->-]<---------
,>++++++++[<------------>-]<--
,>++++++++++[<----->-]<----
,>+++++++++[<----->-]<--------
,>+++++[<-------------------->-]<

可以发现 如果输入的?#22336;?#20877;第一个?#32440;?那第二个?#32440;?#34920;示计数器

?#28909;?#31532;一个,>+++++++[<-------------->-]<------

>+++++++[ 里边"+"的个数表示技术器的大小 也就是循环多少次

[<-------------->-]表示循环体 <-------------->表示输入的?#22336;?#35201;减多少次

<------ "-"号个数表示输入的?#22336;?#20877;减多少次 当执行完这个循环时候 ptr指向的数据 也就是输入的?#22336;?#35201;为0

所以逆过来 把"-"个数加到输入数据区中就是flag  当遇到","此时初始化数据

修改脚本

[Asm] 纯文本查看 复制代码
        void Parser::execute(const std::string &buf) {
                unsigned unmatched;
                int arrays[2] = { 0, 0 };//第一个元素是数据 第二个是计数
                int ptrs = 0;//一开始指向第一个
                auto q = buf.cbegin();
                int cout = 0;// - 号计数
                for (auto i = buf.cbegin(); i != buf.cend(); ++i) {
                        switch (*i) {
                        case '>':
                                ptrs++;
                                break;
                        case '<':
                                ptrs--;
                                break;
                        case '+':
                                arrays[ptrs]++;
                                break;
                        case '-':
                                arrays[ptrs]++;
                                break;
                        case ',':
                                printf("%c", arrays[0]);
                                cout = 0;
                                arrays[0] = 0;
                                arrays[1] = 0;
                                ptrs = 0;
                                break;
                        case '[':
                                q = i;
                                while (*q != '>')
                                {
                                        if (*q == '-')
                                        {
                                                cout++;
                                        }
                                        ++q;
                                }
                                arrays[0] = arrays[1] * cout;
                                if (1) {//去到']'
                                        unmatched = 1;
                                        while (unmatched) {
                                                while (++i != buf.cend()) {
                                                        if (*i == '[') {
                                                                ++unmatched;
                                                                break;
                                                        }
                                                        else if (*i == ']') {
                                                                --unmatched;
                                                                break;
                                                        }
                                                }
                                        }
                                }
                                break;
                        }
                }
                printf("%c", arrays[0]);
                system("pause");
        }


得到

[Asm] 纯文本查看 复制代码
hgame{a9d18df034e7330b151b65d456101bd0ba0a0665bf363b634f6ab6dff875429f}


免费评分

参与人数 11吾爱币 +12 热心值 +11 收起 理由
Hotspur + 1 + 1 我很赞同!
bitpeach + 1 谢谢@Thanks!
my713533 + 1 + 1 谢谢@Thanks!
gink + 1 + 1 热心回复!
zhukai055 + 2 + 1 谢谢@Thanks!
T_T + 1 + 1 我很赞同!
kaypukaypu + 1 + 1 用心讨论,?#19981;?#25552;升!
lihaohua + 1 + 1 谢谢@Thanks!
度娘灬魂手 + 1 + 1 谢谢@Thanks!
梦游枪手 + 2 + 1 谢谢@Thanks!
luoluoovo + 1 + 1 谢谢@Thanks!

查看全部评分

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

推荐
绿闪石 发表于 2019-3-14 09:51
我看了标题兴冲冲的正?#24613;?#19979;载呢,点进来是一篇天书!
推荐
xulavigne 发表于 2019-3-14 11:22
绿闪石 发表于 2019-3-14 09:51
我看了标题兴冲冲的正?#24613;?#19979;载呢,点进来是一篇天书!

我也以为是破解了?#25104;?#30340;新作
不过楼主是真的厉害
4#
寻觅背影 发表于 2019-2-10 13:37 来自手机
5#
sdlylz 发表于 2019-2-10 14:57
hgame?名字不要乱用
6#
 楼主| yechen123 发表于 2019-2-10 15:12 <
sdlylz 发表于 2019-2-10 14:57
hgame?名字不要乱用

? 名字就是hgame网络攻防大赛
7#
A3uRa 发表于 2019-2-10 21:47
yechen123 发表于 2019-2-10 15:12
? 名字就是hgame网络攻防大赛

23333,ctf?#28909;?他是说hgame这个名字有内涵,楼主很纯洁
8#
duck0123 发表于 2019-3-5 16:37
?#34892;?#27004;主分享~~
9#
liub103 发表于 2019-3-7 12:32
看起来好强大的样子
10#
softx3k 发表于 2019-3-14 11:17
新手学习了,谢谢楼主的无私分享
您需要登录后才可以回帖 登录 | 注册[Register]

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

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

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

GMT+8, 2019-7-21 18:37

Powered by Discuz!

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表
球探网篮球指数
天津快乐十分基本走试图近100期 咸阳福利彩票中大奖 山西体育彩票中奖 nba比分直 极速飞艇开奖网 有二八杠的棋牌 体彩排列五走势图表2元网 安徽快三开奖和值图 3d中奖彩民技巧贴子 中国象棋棋谱 重庆快乐10分直播 搜狐彩票社区网 qq刮刮乐活动 彩票代理说合买 乒乓球奥运会