본문 바로가기
Rev/Write-up

RaziCTF2020 - Easy Conditions

by zooonique 2021. 1. 25.
반응형
더보기
int __cdecl main(int argc, const char **argv, const char **envp)
{
  unsigned __int8 v3; // al
  int v4; // edi
  int v5; // ecx
  void *v6; // ecx
  void *v7; // ecx
  void *v8; // ecx
  void *v9; // ecx
  _BYTE *v10; // ecx
  _BYTE *v11; // ecx
  _BYTE *v12; // ecx
  void *v13; // ecx
  _BYTE *v14; // ecx
  void *v15; // ecx
  _BYTE *v16; // ecx
  _BYTE *v17; // ecx
  _BYTE *v18; // ecx
  _BYTE *v19; // ecx
  _BYTE *v20; // ecx
  void *v21; // ecx
  _BYTE *v22; // ecx
  _BYTE *v23; // ecx
  _BYTE *v24; // ecx
  _BYTE *v25; // ecx
  _BYTE *v26; // ecx
  _BYTE *v27; // ecx
  _BYTE *v28; // ecx
  _BYTE *v29; // ecx
  _BYTE *v30; // ecx
  _BYTE *v31; // ecx
  void *v32; // ecx
  _BYTE *v33; // ecx
  _BYTE *v34; // ecx
  _BYTE *v35; // ecx
  void *v36; // ecx
  _BYTE *v37; // ecx
  _BYTE *v38; // ecx
  _BYTE *v39; // ecx
  int v40; // ecx
  int v41; // ecx
  int v42; // ecx
  int v43; // ecx
  int v44; // ecx
  int v45; // ecx
  int v46; // ecx
  int v47; // ecx
  int v48; // ecx
  int v49; // ecx
  int v50; // ecx
  int v51; // ecx
  int v52; // ecx
  int v53; // ecx
  int v54; // ecx
  int v55; // ecx
  int v56; // ecx
  int v57; // ecx
  int v58; // ecx
  int v59; // ecx
  int v60; // ecx
  int v61; // ecx
  int v62; // ecx
  int v63; // ecx
  int v64; // ecx
  int v65; // ecx
  int v66; // ecx
  int v67; // ecx
  int v68; // ecx
  int v69; // ecx
  int v70; // ecx
  int v71; // ecx
  int v72; // ecx
  int v73; // ecx
  int v74; // ecx
  int v75; // ecx
  int v76; // ecx
  int v77; // ecx
  int v78; // ecx
  void *v80[5]; // [esp+Ch] [ebp-340h] BYREF
  unsigned int v81; // [esp+20h] [ebp-32Ch]
  void *v82[5]; // [esp+24h] [ebp-328h] BYREF
  unsigned int v83; // [esp+38h] [ebp-314h]
  void *v84[5]; // [esp+3Ch] [ebp-310h] BYREF
  unsigned int v85; // [esp+50h] [ebp-2FCh]
  void *v86[5]; // [esp+54h] [ebp-2F8h] BYREF
  unsigned int v87; // [esp+68h] [ebp-2E4h]
  void *v88[5]; // [esp+6Ch] [ebp-2E0h] BYREF
  unsigned int v89; // [esp+80h] [ebp-2CCh]
  void *v90[5]; // [esp+84h] [ebp-2C8h] BYREF
  unsigned int v91; // [esp+98h] [ebp-2B4h]
  void *v92[5]; // [esp+9Ch] [ebp-2B0h] BYREF
  unsigned int v93; // [esp+B0h] [ebp-29Ch]
  void *v94[5]; // [esp+B4h] [ebp-298h] BYREF
  unsigned int v95; // [esp+C8h] [ebp-284h]
  void *Block[5]; // [esp+CCh] [ebp-280h] BYREF
  unsigned int v97; // [esp+E0h] [ebp-26Ch]
  void *v98; // [esp+E4h] [ebp-268h] BYREF
  int v99; // [esp+F4h] [ebp-258h]
  unsigned int v100; // [esp+F8h] [ebp-254h]
  void *v101; // [esp+FCh] [ebp-250h] BYREF
  int v102; // [esp+10Ch] [ebp-240h]
  unsigned int v103; // [esp+110h] [ebp-23Ch]
  void *v104; // [esp+114h] [ebp-238h] BYREF
  int v105; // [esp+124h] [ebp-228h]
  unsigned int v106; // [esp+128h] [ebp-224h]
  void *v107; // [esp+12Ch] [ebp-220h] BYREF
  int v108; // [esp+13Ch] [ebp-210h]
  unsigned int v109; // [esp+140h] [ebp-20Ch]
  void *v110; // [esp+144h] [ebp-208h] BYREF
  int v111; // [esp+154h] [ebp-1F8h]
  unsigned int v112; // [esp+158h] [ebp-1F4h]
  void *v113; // [esp+15Ch] [ebp-1F0h] BYREF
  int v114; // [esp+16Ch] [ebp-1E0h]
  unsigned int v115; // [esp+170h] [ebp-1DCh]
  void *v116; // [esp+174h] [ebp-1D8h] BYREF
  int v117; // [esp+184h] [ebp-1C8h]
  unsigned int v118; // [esp+188h] [ebp-1C4h]
  void *v119; // [esp+18Ch] [ebp-1C0h] BYREF
  int v120; // [esp+19Ch] [ebp-1B0h]
  unsigned int v121; // [esp+1A0h] [ebp-1ACh]
  void *v122; // [esp+1A4h] [ebp-1A8h] BYREF
  int v123; // [esp+1B4h] [ebp-198h]
  unsigned int v124; // [esp+1B8h] [ebp-194h]
  void *v125; // [esp+1BCh] [ebp-190h] BYREF
  int v126; // [esp+1CCh] [ebp-180h]
  unsigned int v127; // [esp+1D0h] [ebp-17Ch]
  void *v128; // [esp+1D4h] [ebp-178h] BYREF
  int v129; // [esp+1E4h] [ebp-168h]
  unsigned int v130; // [esp+1E8h] [ebp-164h]
  void *v131; // [esp+1ECh] [ebp-160h] BYREF
  int v132; // [esp+1FCh] [ebp-150h]
  unsigned int v133; // [esp+200h] [ebp-14Ch]
  void *v134; // [esp+204h] [ebp-148h] BYREF
  int v135; // [esp+214h] [ebp-138h]
  unsigned int v136; // [esp+218h] [ebp-134h]
  void *v137; // [esp+21Ch] [ebp-130h] BYREF
  int v138; // [esp+22Ch] [ebp-120h]
  unsigned int v139; // [esp+230h] [ebp-11Ch]
  void *v140; // [esp+234h] [ebp-118h] BYREF
  int v141; // [esp+244h] [ebp-108h]
  unsigned int v142; // [esp+248h] [ebp-104h]
  void *v143; // [esp+24Ch] [ebp-100h] BYREF
  int v144; // [esp+25Ch] [ebp-F0h]
  unsigned int v145; // [esp+260h] [ebp-ECh]
  void *v146; // [esp+264h] [ebp-E8h] BYREF
  int v147; // [esp+274h] [ebp-D8h]
  unsigned int v148; // [esp+278h] [ebp-D4h]
  void *v149; // [esp+27Ch] [ebp-D0h] BYREF
  int v150; // [esp+28Ch] [ebp-C0h]
  unsigned int v151; // [esp+290h] [ebp-BCh]
  void *v152; // [esp+294h] [ebp-B8h] BYREF
  int v153; // [esp+2A4h] [ebp-A8h]
  unsigned int v154; // [esp+2A8h] [ebp-A4h]
  void *v155; // [esp+2ACh] [ebp-A0h] BYREF
  int v156; // [esp+2BCh] [ebp-90h]
  unsigned int v157; // [esp+2C0h] [ebp-8Ch]
  void *v158; // [esp+2C4h] [ebp-88h] BYREF
  int v159; // [esp+2D4h] [ebp-78h]
  unsigned int v160; // [esp+2D8h] [ebp-74h]
  void *v161; // [esp+2DCh] [ebp-70h] BYREF
  int v162; // [esp+2ECh] [ebp-60h]
  unsigned int v163; // [esp+2F0h] [ebp-5Ch]
  void *v164; // [esp+2F4h] [ebp-58h] BYREF
  int v165; // [esp+304h] [ebp-48h]
  unsigned int v166; // [esp+308h] [ebp-44h]
  void *v167; // [esp+30Ch] [ebp-40h] BYREF
  int v168; // [esp+31Ch] [ebp-30h]
  unsigned int v169; // [esp+320h] [ebp-2Ch]
  void *v170; // [esp+324h] [ebp-28h] BYREF
  int v171; // [esp+334h] [ebp-18h]
  unsigned int v172; // [esp+338h] [ebp-14h]
  int v173; // [esp+348h] [ebp-4h]

  v99 = 0;
  v100 = 15;
  LOBYTE(v98) = 0;
  sub_3B2A30(&v98, "i", 1u);
  v173 = 0;
  v102 = 0;
  v103 = 15;
  LOBYTE(v101) = 0;
  sub_3B2A30(&v101, "s", 1u);
  LOBYTE(v173) = 1;
  v105 = 0;
  v106 = 15;
  LOBYTE(v104) = 0;
  sub_3B2A30(&v104, "c", 1u);
  LOBYTE(v173) = 2;
  v80[4] = 0;
  v81 = 15;
  LOBYTE(v80[0]) = 0;
  sub_3B2A30(v80, "_", 1u);
  LOBYTE(v173) = 3;
  v108 = 0;
  v109 = 15;
  LOBYTE(v107) = 0;
  sub_3B2A30(&v107, "u", 1u);
  LOBYTE(v173) = 4;
  v111 = 0;
  v112 = 15;
  LOBYTE(v110) = 0;
  sub_3B2A30(&v110, "y", 1u);
  LOBYTE(v173) = 5;
  v114 = 0;
  v115 = 15;
  LOBYTE(v113) = 0;
  sub_3B2A30(&v113, "o", 1u);
  LOBYTE(v173) = 6;
  v82[4] = 0;
  v83 = 15;
  LOBYTE(v82[0]) = 0;
  sub_3B2A30(v82, "r", 1u);
  LOBYTE(v173) = 7;
  v117 = 0;
  v118 = 15;
  LOBYTE(v116) = 0;
  sub_3B2A30(&v116, "u", 1u);
  LOBYTE(v173) = 8;
  v120 = 0;
  v121 = 15;
  LOBYTE(v119) = 0;
  sub_3B2A30(&v119, "r", 1u);
  LOBYTE(v173) = 9;
  v171 = 0;
  v172 = 15;
  LOBYTE(v170) = 0;
  sub_3B2A30(&v170, "_", 1u);
  LOBYTE(v173) = 10;
  v123 = 0;
  v124 = 15;
  LOBYTE(v122) = 0;
  sub_3B2A30(&v122, "f", 1u);
  LOBYTE(v173) = 11;
  v126 = 0;
  v127 = 15;
  LOBYTE(v125) = 0;
  sub_3B2A30(&v125, "l", 1u);
  LOBYTE(v173) = 12;
  v129 = 0;
  v130 = 15;
  LOBYTE(v128) = 0;
  sub_3B2A30(&v128, "4", 1u);
  LOBYTE(v173) = 13;
  v132 = 0;
  v133 = 15;
  LOBYTE(v131) = 0;
  sub_3B2A30(&v131, "g", 1u);
  LOBYTE(v173) = 14;
  v135 = 0;
  v136 = 15;
  LOBYTE(v134) = 0;
  sub_3B2A30(&v134, "i", 1u);
  LOBYTE(v173) = 15;
  v138 = 0;
  v139 = 15;
  LOBYTE(v137) = 0;
  sub_3B2A30(&v137, "s", 1u);
  LOBYTE(v173) = 16;
  v141 = 0;
  v142 = 15;
  LOBYTE(v140) = 0;
  sub_3B2A30(&v140, "t", 1u);
  LOBYTE(v173) = 17;
  v84[4] = 0;
  v85 = 15;
  LOBYTE(v84[0]) = 0;
  sub_3B2A30(v84, "k", 1u);
  LOBYTE(v173) = 18;
  v144 = 0;
  v145 = 15;
  LOBYTE(v143) = 0;
  sub_3B2A30(&v143, "h", 1u);
  LOBYTE(v173) = 19;
  v147 = 0;
  v148 = 15;
  LOBYTE(v146) = 0;
  sub_3B2A30(&v146, "t", 1u);
  LOBYTE(v173) = 20;
  v150 = 0;
  v151 = 15;
  LOBYTE(v149) = 0;
  sub_3B2A30(&v149, "e", 1u);
  LOBYTE(v173) = 21;
  v153 = 0;
  v154 = 15;
  LOBYTE(v152) = 0;
  sub_3B2A30(&v152, "f", 1u);
  LOBYTE(v173) = 22;
  v156 = 0;
  v157 = 15;
  LOBYTE(v155) = 0;
  sub_3B2A30(&v155, "l", 1u);
  LOBYTE(v173) = 23;
  v86[4] = 0;
  v87 = 15;
  LOBYTE(v86[0]) = 0;
  sub_3B2A30(v86, "b", 1u);
  LOBYTE(v173) = 24;
  v159 = 0;
  v160 = 15;
  LOBYTE(v158) = 0;
  sub_3B2A30(&v158, "a", 1u);
  LOBYTE(v173) = 25;
  v88[4] = 0;
  v89 = 15;
  LOBYTE(v88[0]) = 0;
  sub_3B2A30(v88, "x", 1u);
  LOBYTE(v173) = 26;
  v162 = 0;
  v163 = 15;
  LOBYTE(v161) = 0;
  sub_3B2A30(&v161, "g", 1u);
  LOBYTE(v173) = 27;
  v165 = 0;
  v166 = 15;
  LOBYTE(v164) = 0;
  sub_3B2A30(&v164, "{", 1u);
  LOBYTE(v173) = 28;
  v168 = 0;
  v169 = 15;
  LOBYTE(v167) = 0;
  sub_3B2A30(&v167, "}", 1u);
  LOBYTE(v173) = 29;
  v92[4] = 0;
  v93 = 15;
  LOBYTE(v92[0]) = 0;
  sub_3B2A30(v92, "1337-1337-1337-1337", 0x13u);
  LOBYTE(v173) = 30;
  v90[4] = 0;
  v91 = 15;
  LOBYTE(v90[0]) = 0;
  sub_3B2A30(v90, "7331-7331-7331-7331", 0x13u);
  LOBYTE(v173) = 31;
  v94[4] = 0;
  v95 = 15;
  LOBYTE(v94[0]) = 0;
  sub_3B2A30(v94, "0000-0000-0000-0000", 0x13u);
  LOBYTE(v173) = 32;
  Block[4] = 0;
  v97 = 15;
  LOBYTE(Block[0]) = 0;
  sub_3B2A30(Block, &unk_3B51F0, 0);
  LOBYTE(v173) = 33;
  sub_3B2D90(std::cout, "Enter serial number:\n");
  v3 = std::ios::widen(std::cin + *(std::cin + 4), 10);
  sub_3B3200(v3);
  v4 = sub_3B2940(v92);
  if ( !sub_3B2940(v94) )
  {
    sub_3B2D90(std::cout, "Fake! \n");
LABEL_3:
    sub_3B2D90(std::cout, "Wrong!");
    goto LABEL_4;
  }
  if ( v4 )
    goto LABEL_3;
  LOBYTE(v5) = 67;
  sub_3B1170(v5);
  LOBYTE(v40) = 67;
  sub_3B1170(v40);
  LOBYTE(v41) = 71;
  sub_3B1170(v41);
  LOBYTE(v42) = 71;
  sub_3B1170(v42);
  LOBYTE(v43) = 65;
  sub_3B1170(v43);
  LOBYTE(v44) = 65;
  sub_3B1170(v44);
  LOBYTE(v45) = 71;
  sub_3B1170(v45);
  Sleep(0x190u);
  std::ostream::operator<<(std::cout, sub_3B2FD0);
  LOBYTE(v46) = 70;
  sub_3B1170(v46);
  LOBYTE(v47) = 70;
  sub_3B1170(v47);
  LOBYTE(v48) = 69;
  sub_3B1170(v48);
  LOBYTE(v49) = 69;
  sub_3B1170(v49);
  LOBYTE(v50) = 68;
  sub_3B1170(v50);
  LOBYTE(v51) = 68;
  sub_3B1170(v51);
  LOBYTE(v52) = 67;
  sub_3B1170(v52);
  Sleep(0x190u);
  std::ostream::operator<<(std::cout, sub_3B2FD0);
  LOBYTE(v53) = 71;
  sub_3B1170(v53);
  LOBYTE(v54) = 71;
  sub_3B1170(v54);
  LOBYTE(v55) = 70;
  sub_3B1170(v55);
  LOBYTE(v56) = 70;
  sub_3B1170(v56);
  LOBYTE(v57) = 69;
  sub_3B1170(v57);
  LOBYTE(v58) = 68;
  sub_3B1170(v58);
  LOBYTE(v59) = 71;
  sub_3B1170(v59);
  Sleep(0x190u);
  std::ostream::operator<<(std::cout, sub_3B2FD0);
  LOBYTE(v60) = 71;
  sub_3B1170(v60);
  LOBYTE(v61) = 70;
  sub_3B1170(v61);
  LOBYTE(v62) = 70;
  sub_3B1170(v62);
  LOBYTE(v63) = 69;
  sub_3B1170(v63);
  LOBYTE(v64) = 68;
  sub_3B1170(v64);
  LOBYTE(v65) = 67;
  sub_3B1170(v65);
  LOBYTE(v66) = 67;
  sub_3B1170(v66);
  Sleep(0x190u);
  std::ostream::operator<<(std::cout, sub_3B2FD0);
  LOBYTE(v67) = 71;
  sub_3B1170(v67);
  LOBYTE(v68) = 71;
  sub_3B1170(v68);
  LOBYTE(v69) = 65;
  sub_3B1170(v69);
  LOBYTE(v70) = 65;
  sub_3B1170(v70);
  LOBYTE(v71) = 71;
  sub_3B1170(v71);
  LOBYTE(v72) = 70;
  sub_3B1170(v72);
  LOBYTE(v73) = 70;
  sub_3B1170(v73);
  Sleep(0x190u);
  std::ostream::operator<<(std::cout, sub_3B2FD0);
  LOBYTE(v74) = 69;
  sub_3B1170(v74);
  LOBYTE(v75) = 69;
  sub_3B1170(v75);
  LOBYTE(v76) = 68;
  sub_3B1170(v76);
  LOBYTE(v77) = 68;
  sub_3B1170(v77);
  LOBYTE(v78) = 67;
  sub_3B1170(v78);
  std::ostream::operator<<(std::cout, sub_3B2FD0);
  sub_3B2D90(std::cout, "Thanks for listening <3, here is your flag: ");
  sub_3B33B0(v165);
  sub_3B33B0(v111);
  sub_3B33B0(v114);
  sub_3B33B0(v117);
  sub_3B33B0(v120);
  sub_3B33B0(v171);
  sub_3B33B0(v123);
  sub_3B33B0(v126);
  sub_3B33B0(v129);
  sub_3B33B0(v132);
  sub_3B33B0(v171);
  sub_3B33B0(v135);
  sub_3B33B0(v138);
  sub_3B33B0(v171);
  sub_3B33B0(v141);
  sub_3B33B0(v144);
  sub_3B33B0(v99);
  sub_3B33B0(v102);
  sub_3B33B0(v171);
  sub_3B33B0(v105);
  sub_3B33B0(v108);
  sub_3B33B0(v147);
  sub_3B33B0(v150);
  sub_3B33B0(v171);
  sub_3B33B0(v153);
  sub_3B33B0(v156);
  sub_3B33B0(v159);
  sub_3B33B0(v162);
  sub_3B33B0(v168);
LABEL_4:
  Sleep(0xFA0u);
  if ( v97 >= 0x10 )
  {
    v6 = Block[0];
    if ( v97 + 1 >= 0x1000 )
    {
      v6 = *(Block[0] - 1);
      if ( (Block[0] - v6 - 4) > 0x1F )
        goto LABEL_139;
    }
    sub_3B3642(v6);
  }
  if ( v95 >= 0x10 )
  {
    v7 = v94[0];
    if ( v95 + 1 >= 0x1000 )
    {
      v7 = *(v94[0] - 1);
      if ( (v94[0] - v7 - 4) > 0x1F )
        goto LABEL_139;
    }
    sub_3B3642(v7);
  }
  if ( v91 >= 0x10 )
  {
    v8 = v90[0];
    if ( v91 + 1 >= 0x1000 )
    {
      v8 = *(v90[0] - 1);
      if ( (v90[0] - v8 - 4) > 0x1F )
        goto LABEL_139;
    }
    sub_3B3642(v8);
  }
  if ( v93 >= 0x10 )
  {
    v9 = v92[0];
    if ( v93 + 1 >= 0x1000 )
    {
      v9 = *(v92[0] - 1);
      if ( (v92[0] - v9 - 4) > 0x1F )
        goto LABEL_139;
    }
    sub_3B3642(v9);
  }
  if ( v169 >= 0x10 )
  {
    v10 = v167;
    if ( v169 + 1 >= 0x1000 )
    {
      v10 = *(v167 - 1);
      if ( (v167 - v10 - 4) > 0x1F )
        goto LABEL_139;
    }
    sub_3B3642(v10);
  }
  v168 = 0;
  v169 = 15;
  LOBYTE(v167) = 0;
  if ( v166 >= 0x10 )
  {
    v11 = v164;
    if ( v166 + 1 >= 0x1000 )
    {
      v11 = *(v164 - 1);
      if ( (v164 - v11 - 4) > 0x1F )
        goto LABEL_139;
    }
    sub_3B3642(v11);
  }
  v165 = 0;
  v166 = 15;
  LOBYTE(v164) = 0;
  if ( v163 >= 0x10 )
  {
    v12 = v161;
    if ( v163 + 1 >= 0x1000 )
    {
      v12 = *(v161 - 1);
      if ( (v161 - v12 - 4) > 0x1F )
        goto LABEL_139;
    }
    sub_3B3642(v12);
  }
  v162 = 0;
  v163 = 15;
  LOBYTE(v161) = 0;
  if ( v89 >= 0x10 )
  {
    v13 = v88[0];
    if ( v89 + 1 >= 0x1000 )
    {
      v13 = *(v88[0] - 1);
      if ( (v88[0] - v13 - 4) > 0x1F )
        goto LABEL_139;
    }
    sub_3B3642(v13);
  }
  if ( v160 >= 0x10 )
  {
    v14 = v158;
    if ( v160 + 1 >= 0x1000 )
    {
      v14 = *(v158 - 1);
      if ( (v158 - v14 - 4) > 0x1F )
        goto LABEL_139;
    }
    sub_3B3642(v14);
  }
  v159 = 0;
  v160 = 15;
  LOBYTE(v158) = 0;
  if ( v87 >= 0x10 )
  {
    v15 = v86[0];
    if ( v87 + 1 >= 0x1000 )
    {
      v15 = *(v86[0] - 1);
      if ( (v86[0] - v15 - 4) > 0x1F )
        goto LABEL_139;
    }
    sub_3B3642(v15);
  }
  if ( v157 >= 0x10 )
  {
    v16 = v155;
    if ( v157 + 1 >= 0x1000 )
    {
      v16 = *(v155 - 1);
      if ( (v155 - v16 - 4) > 0x1F )
        goto LABEL_139;
    }
    sub_3B3642(v16);
  }
  v156 = 0;
  v157 = 15;
  LOBYTE(v155) = 0;
  if ( v154 >= 0x10 )
  {
    v17 = v152;
    if ( v154 + 1 >= 0x1000 )
    {
      v17 = *(v152 - 1);
      if ( (v152 - v17 - 4) > 0x1F )
        goto LABEL_139;
    }
    sub_3B3642(v17);
  }
  v153 = 0;
  v154 = 15;
  LOBYTE(v152) = 0;
  if ( v151 >= 0x10 )
  {
    v18 = v149;
    if ( v151 + 1 >= 0x1000 )
    {
      v18 = *(v149 - 1);
      if ( (v149 - v18 - 4) > 0x1F )
        goto LABEL_139;
    }
    sub_3B3642(v18);
  }
  v150 = 0;
  v151 = 15;
  LOBYTE(v149) = 0;
  if ( v148 >= 0x10 )
  {
    v19 = v146;
    if ( v148 + 1 >= 0x1000 )
    {
      v19 = *(v146 - 1);
      if ( (v146 - v19 - 4) > 0x1F )
        goto LABEL_139;
    }
    sub_3B3642(v19);
  }
  v147 = 0;
  v148 = 15;
  LOBYTE(v146) = 0;
  if ( v145 >= 0x10 )
  {
    v20 = v143;
    if ( v145 + 1 >= 0x1000 )
    {
      v20 = *(v143 - 1);
      if ( (v143 - v20 - 4) > 0x1F )
        goto LABEL_139;
    }
    sub_3B3642(v20);
  }
  v144 = 0;
  v145 = 15;
  LOBYTE(v143) = 0;
  if ( v85 >= 0x10 )
  {
    v21 = v84[0];
    if ( v85 + 1 >= 0x1000 )
    {
      v21 = *(v84[0] - 1);
      if ( (v84[0] - v21 - 4) > 0x1F )
        goto LABEL_139;
    }
    sub_3B3642(v21);
  }
  if ( v142 >= 0x10 )
  {
    v22 = v140;
    if ( v142 + 1 >= 0x1000 )
    {
      v22 = *(v140 - 1);
      if ( (v140 - v22 - 4) > 0x1F )
        goto LABEL_139;
    }
    sub_3B3642(v22);
  }
  v141 = 0;
  v142 = 15;
  LOBYTE(v140) = 0;
  if ( v139 >= 0x10 )
  {
    v23 = v137;
    if ( v139 + 1 >= 0x1000 )
    {
      v23 = *(v137 - 1);
      if ( (v137 - v23 - 4) > 0x1F )
        goto LABEL_139;
    }
    sub_3B3642(v23);
  }
  v138 = 0;
  v139 = 15;
  LOBYTE(v137) = 0;
  if ( v136 >= 0x10 )
  {
    v24 = v134;
    if ( v136 + 1 >= 0x1000 )
    {
      v24 = *(v134 - 1);
      if ( (v134 - v24 - 4) > 0x1F )
        goto LABEL_139;
    }
    sub_3B3642(v24);
  }
  v135 = 0;
  v136 = 15;
  LOBYTE(v134) = 0;
  if ( v133 >= 0x10 )
  {
    v25 = v131;
    if ( v133 + 1 >= 0x1000 )
    {
      v25 = *(v131 - 1);
      if ( (v131 - v25 - 4) > 0x1F )
        goto LABEL_139;
    }
    sub_3B3642(v25);
  }
  v132 = 0;
  v133 = 15;
  LOBYTE(v131) = 0;
  if ( v130 >= 0x10 )
  {
    v26 = v128;
    if ( v130 + 1 >= 0x1000 )
    {
      v26 = *(v128 - 1);
      if ( (v128 - v26 - 4) > 0x1F )
        goto LABEL_139;
    }
    sub_3B3642(v26);
  }
  v129 = 0;
  v130 = 15;
  LOBYTE(v128) = 0;
  if ( v127 >= 0x10 )
  {
    v27 = v125;
    if ( v127 + 1 >= 0x1000 )
    {
      v27 = *(v125 - 1);
      if ( (v125 - v27 - 4) > 0x1F )
        goto LABEL_139;
    }
    sub_3B3642(v27);
  }
  v126 = 0;
  v127 = 15;
  LOBYTE(v125) = 0;
  if ( v124 >= 0x10 )
  {
    v28 = v122;
    if ( v124 + 1 >= 0x1000 )
    {
      v28 = *(v122 - 1);
      if ( (v122 - v28 - 4) > 0x1F )
        goto LABEL_139;
    }
    sub_3B3642(v28);
  }
  v123 = 0;
  v124 = 15;
  LOBYTE(v122) = 0;
  if ( v172 >= 0x10 )
  {
    v29 = v170;
    if ( v172 + 1 >= 0x1000 )
    {
      v29 = *(v170 - 1);
      if ( (v170 - v29 - 4) > 0x1F )
        goto LABEL_139;
    }
    sub_3B3642(v29);
  }
  v171 = 0;
  v172 = 15;
  LOBYTE(v170) = 0;
  if ( v121 >= 0x10 )
  {
    v30 = v119;
    if ( v121 + 1 >= 0x1000 )
    {
      v30 = *(v119 - 1);
      if ( (v119 - v30 - 4) > 0x1F )
        goto LABEL_139;
    }
    sub_3B3642(v30);
  }
  v120 = 0;
  v121 = 15;
  LOBYTE(v119) = 0;
  if ( v118 >= 0x10 )
  {
    v31 = v116;
    if ( v118 + 1 >= 0x1000 )
    {
      v31 = *(v116 - 1);
      if ( (v116 - v31 - 4) > 0x1F )
        goto LABEL_139;
    }
    sub_3B3642(v31);
  }
  v117 = 0;
  v118 = 15;
  LOBYTE(v116) = 0;
  if ( v83 >= 0x10 )
  {
    v32 = v82[0];
    if ( v83 + 1 >= 0x1000 )
    {
      v32 = *(v82[0] - 1);
      if ( (v82[0] - v32 - 4) > 0x1F )
        goto LABEL_139;
    }
    sub_3B3642(v32);
  }
  if ( v115 >= 0x10 )
  {
    v33 = v113;
    if ( v115 + 1 >= 0x1000 )
    {
      v33 = *(v113 - 1);
      if ( (v113 - v33 - 4) > 0x1F )
        goto LABEL_139;
    }
    sub_3B3642(v33);
  }
  v114 = 0;
  v115 = 15;
  LOBYTE(v113) = 0;
  if ( v112 >= 0x10 )
  {
    v34 = v110;
    if ( v112 + 1 >= 0x1000 )
    {
      v34 = *(v110 - 1);
      if ( (v110 - v34 - 4) > 0x1F )
        goto LABEL_139;
    }
    sub_3B3642(v34);
  }
  v111 = 0;
  v112 = 15;
  LOBYTE(v110) = 0;
  if ( v109 >= 0x10 )
  {
    v35 = v107;
    if ( v109 + 1 >= 0x1000 )
    {
      v35 = *(v107 - 1);
      if ( (v107 - v35 - 4) > 0x1F )
        goto LABEL_139;
    }
    sub_3B3642(v35);
  }
  v108 = 0;
  v109 = 15;
  LOBYTE(v107) = 0;
  if ( v81 >= 0x10 )
  {
    v36 = v80[0];
    if ( v81 + 1 >= 0x1000 )
    {
      v36 = *(v80[0] - 1);
      if ( (v80[0] - v36 - 4) > 0x1F )
        goto LABEL_139;
    }
    sub_3B3642(v36);
  }
  if ( v106 >= 0x10 )
  {
    v37 = v104;
    if ( v106 + 1 >= 0x1000 )
    {
      v37 = *(v104 - 1);
      if ( (v104 - v37 - 4) > 0x1F )
        goto LABEL_139;
    }
    sub_3B3642(v37);
  }
  v105 = 0;
  v106 = 15;
  LOBYTE(v104) = 0;
  if ( v103 < 0x10 )
    goto LABEL_136;
  v38 = v101;
  if ( v103 + 1 >= 0x1000 )
  {
    v38 = *(v101 - 1);
    if ( (v101 - v38 - 4) > 0x1F )
LABEL_139:
      invalid_parameter_noinfo_noreturn();
  }
  sub_3B3642(v38);
LABEL_136:
  v102 = 0;
  v103 = 15;
  LOBYTE(v101) = 0;
  if ( v100 >= 0x10 )
  {
    v39 = v98;
    if ( v100 + 1 >= 0x1000 )
    {
      v39 = *(v98 - 1);
      if ( (v98 - v39 - 4) > 0x1F )
        goto LABEL_139;
    }
    sub_3B3642(v39);
  }
  return 0;
}

음... main함수가 엄청 길다.

 

그래서 이것저것 분석해보다가, 처음에는 isc_uyorur_fl4gistkhteflbaxg{} 문자열을 활용하나싶기도하고,

fl4g가 보여서......

동적분석을 해야겠다라고 생각했다.

 

처음에 AAAAA를 넣고, 동적분석을 하는데 1337-1337-1337-1337과 비교를 하는 부분이 있었고

내 AAAAA가 어떻게 변하는지 분석하지도 못하고 디버깅이 종료되어서

 

다음 디버깅시에 1337-1337-1337-1337를 입력하니까, 플래그가 나왔다.(뭐지?)

 

 

 

그래서 저 플래그 나오는 부분으로 EIP컨트롤해도 나오나?하고 컨트롤해봤는데.. 역시나 나왔다.

 

 

하지만 처음부터 .text:003B22BF로 EIP컨트롤하면 에러가 뜨니까 주의하자.

아마 sub_3B2940에서 메모리를 참조를 한번 해야지 플래그 나올때 원활하게 메모리 참조가 되는것같다.

반응형

'Rev > Write-up' 카테고리의 다른 글

RaziCTF2020 - Protected Conditions  (0) 2021.01.29
RaziCTF2020 - Revme  (0) 2021.01.27
HTB - Nostalgia  (0) 2021.01.22
HTB - exalton_v1  (0) 2021.01.20
HTB - Hackybird  (0) 2021.01.18