블로그 이전했습니다. https://jeongzero.oopy.io/
[CodeEngine] Basic RCE L15
본문 바로가기
워게임/CodeEngn

[CodeEngine] Basic RCE L15

728x90

1. 문제


14번 문제와 동일하다. CodeEngn일때의 키젠값을 구하면 된다

델파이로 만들어진 바이너리이다

2. 접근방법


int __fastcall TForm1_Button1Click(int a1)
{
  int v2; // edx
  unsigned int v4[2]; // [esp-10h] [ebp-14h] BYREF
  int *v5; // [esp-8h] [ebp-Ch]
  int v6; // [esp+0h] [ebp-4h] BYREF
  int savedregs; // [esp+4h] [ebp+0h] BYREF

  v6 = 0;
  v5 = &savedregs;
  v4[1] = (unsigned int)&loc_458874;
  v4[0] = (unsigned int)NtCurrentTeb()->NtTib.ExceptionList;
  __writefsdword(0, (unsigned int)v4);
  sub_458760(v4[0], &loc_458874, &savedregs);
  TControl::GetText(*(TControl **)(a1 + 720));
  if ( change_hex(v6) == keygen )
  {
    Dialogs::ShowMessage((Dialogs *)&str_You_cracked_the[1], v2);
    Controls::TControl::SetText(dword_45B83C, (const int)&str_CRACKED[1]);
  }
  else
  {
    Dialogs::ShowMessage((Dialogs *)&str_Try_Again__[1], v2);
  }
  __writefsdword(0, v4[0]);
  v5 = (int *)&loc_45887B;
  return System::__linkproc__ LStrClr(&v6);
}

저 조건문을 만족하면 성공이다. keygen이 생성되는 부분을 사실 안봐도 되지만 함 봐보자. xref로 어디서 저 키젠이 되는지 확인해보면

int sub_458760()
{
  int v0; // eax
  unsigned int v2[2]; // [esp-18h] [ebp-1Ch] BYREF
  int *v3; // [esp-10h] [ebp-14h]
  int v4; // [esp+0h] [ebp-4h] BYREF
  int savedregs; // [esp+4h] [ebp+0h] BYREF

  v4 = 0;
  v3 = &savedregs;
  v2[1] = (unsigned int)&loc_4587F3;
  v2[0] = (unsigned int)NtCurrentTeb()->NtTib.ExceptionList;
  __writefsdword(0, (unsigned int)v2);
  TControl::GetText(*((TControl **)dword_45B83C + 179));
  System::__linkproc__ LStrAsg(&dword_45B840, v4);
  keygen = 0;
  v0 = unknown_libname_32(dword_45B840);
  if ( v0 > 0 )
  {
    unk_45B848 = 1;
    do
    {
      keygen += 8 * *(unsigned __int8 *)(dword_45B840 + unk_45B848++ - 1);
      --v0;
    }
    while ( v0 );
  }
  keygen += 8 * unknown_libname_32(dword_45B840);
  keygen *= 4;
  __writefsdword(0, v2[0]);
  v3 = (int *)&loc_4587FA;
  return System::__linkproc__ LStrClr(&v4);
}

요기서 입력한 Name을 가지고 키젠이 된다. 사실 몰라도 된다. 조건문에서 나온 값을 확인해면 이번 문제도 끝

3. 풀이


4. 몰랐던 개념


728x90

'워게임 > CodeEngn' 카테고리의 다른 글

[CodeEngine] Basic RCE L16  (0) 2021.01.04
[CodeEngine] Basic RCE L14  (0) 2021.01.02
[CodeEngine] Basic RCE L09  (0) 2020.12.29
[CodeEngn] Basic RCE L06  (0) 2020.12.28
[CodeEngn] Basic RCE L07  (0) 2020.12.28