코드엔진 Basic RCE L

코드엔진 Basic RCE L02 번외풀이-2

Lamed_Dhhd 2023. 1. 26. 23:52
반응형

2023-01-27에 쓸 예정

동영상: https://www.youtube.com/watch?v=VRbnP70oPWE

상세설명(1편을 필수로 읽어야합니다.)

https://dhhd-goldmilk777.tistory.com/234

 

코드엔진 RCE BASIC 02 번외풀이-1[필수]

2023-01-27에 쓸 예정 CodeEngn Challenge 링크 https://ch.codeengn.com/ CodeEngn.com [코드엔진] 코드엔진은 국내 리버스엔지니어링 정보공유를 위해 2007년 부터 리버스엔지니어링 컨퍼런스 및 세미나, 워크숍을

dhhd-goldmilk777.tistory.com

IDA Pro로 F5를 누르면 페소코드를 출력해준다.

void __stdcall __noreturn start(int a1, int a2, int a3, int a4)
{
  INT_PTR v4; // eax

  hInstance = GetModuleHandleA(0);
  v4 = DialogBoxParamA(hInstance, TemplateName, 0, DialogFunc, 0);
  ExitProcess(v4);
}

DialogFunc이 실질적으로 돌아가는 코드이다.

INT_PTR __stdcall DialogFunc(HWND hDlg, UINT a2, WPARAM a3, LPARAM a4)
{
  HWND DlgItem; // eax
  CHAR *v5; // eax
  _BYTE *v6; // ebx
  int v7; // ecx

  switch ( a2 )
  {
    case 0x110u:
      DlgItem = GetDlgItem(hDlg, 3000);
      SetFocus(DlgItem);
      break;
    case 0x10u:
      SendMessageA(hDlg, 0x111u, 0x7D02u, 0);
      break;
    case 0x111u:
      if ( a4 )
      {
        if ( !HIWORD(a3) )
        {
          if ( (_WORD)a3 == 3001 )
          {
            GetDlgItemTextA(hDlg, 3000, String, 7);
            v5 = String;
            v6 = &unk_40301E;
            v7 = 7;
            while ( *v5 == *v6 )
            {
              ++v5;
              ++v6;
              if ( !--v7 )
              {
                MessageBoxA(hDlg, Text, Caption, 0x40u);
                return 1;
              }
            }
          }
          else if ( (_WORD)a3 == 3002 )
          {
            SendMessageA(hDlg, 0x111u, 0x7D02u, 0);
          }
        }
      }
      else if ( (_WORD)a3 == 32002 )
      {
        EndDialog(hDlg, 0);
      }
      break;
    default:
      return 0;
  }
  return 1;
}

CodeEngn버전
원본

차이는 GetDlgItemTextA의 마지막 값이 7로 7문자를 가져오고 비교하지만 주소가 다르기에 인식하지는 못한다.

반응형