基础类型 xor

main函数 能看到getenv 获取了环境变量 ASIS && CTF ^ v3 的值最后等于 0xFEEBFEEB

__int64 __fastcall main(int a1, char **a2, char **a3)
{
  int v3; // ebx
  __int64 i; // rax
  __m128i si128; // xmm0
  __m128i v6; // xmm1
  __m128i v7; // xmm3
  __m128i v8; // xmm0
  __m128i v9; // xmm3
  __m128i v10; // xmm1
  __m128i v11; // xmm4
  __m128i v12; // xmm0
  __m128i v13; // xmm0

  v3 = sub_400820((unsigned int)dword_6012B4, a2, a3);
  byte_6012A8[0] = HIBYTE(v3);
  byte_6012A9 = BYTE2(v3) & 0xFD;
  byte_6012AA = BYTE1(v3) & 0xDF;
  byte_6012AB = v3 & 0xBF;
  if ( getenv("ASIS") && (*(_DWORD *)getenv("CTF") ^ v3) == 0xFEEBFEEB )
    dword_6012AC = *(_DWORD *)getenv("ASIS");
  for ( i = 0; i != 33; ++i )
    haystack[i] ^= byte_6012A8[i & 7];
  si128 = _mm_load_si128((const __m128i *)haystack);
  v6 = _mm_unpacklo_epi8(si128, (__m128i)0LL);
  v7 = _mm_unpackhi_epi8(si128, (__m128i)0LL);
  v8 = _mm_add_epi32(
         _mm_unpackhi_epi16(v7, (__m128i)0LL),
         _mm_add_epi32(
           _mm_add_epi32(_mm_unpackhi_epi16(v6, (__m128i)0LL), _mm_unpacklo_epi16(v6, (__m128i)0LL)),
           _mm_unpacklo_epi16(v7, (__m128i)0LL)));
  v9 = _mm_load_si128((const __m128i *)&xmmword_601290);
  v10 = _mm_unpackhi_epi8(v9, (__m128i)0LL);
  v11 = _mm_unpacklo_epi8(v9, (__m128i)0LL);
  v12 = _mm_add_epi32(
          _mm_add_epi32(
            _mm_add_epi32(
              _mm_add_epi32(v8, _mm_unpacklo_epi16(v11, (__m128i)0LL)),
              _mm_unpackhi_epi16(v11, (__m128i)0LL)),
            _mm_unpacklo_epi16(v10, (__m128i)0LL)),
          _mm_unpackhi_epi16(v10, (__m128i)0LL));
  v13 = _mm_add_epi32(v12, _mm_srli_si128(v12, 8));
  if ( _mm_cvtsi128_si32(_mm_add_epi32(v13, _mm_srli_si128(v13, 4))) != 2388 )
    strcpy(haystack, "bad_bad_bad_bad_bad_bad");
  printf("Flag: ASIS{%s}\n", haystack);
  if ( strstr(haystack, "bad_") )
    puts("this flag is absolutely fake ");
  return 0;
}

动调获取v3 也就是 0xB11924E1 我们xor一下获得 0x4ff2da0a

image

我们设置一下环境变量 至于ASIS这个 只要不为0好像都行

在虚拟机里面运行

ASIS=$'\x0a\xda\xf2\x4f' CTF=$'\x0a\xda\xf2\x4f' gdb -q ./Catch_Me

image

也可以

export ASIS=$'\x0a\xda\xf2\x4f'
export CTF=$'\x0a\xda\xf2\x4f'

image

运行完成后删除

unset ASIS
unset CTF

查看是否删除

echo "$ASIS"
echo "$CTF"

flag

ASIS{600d_j0b_y0u_4r3_63771n6_574r73d}