97, 1/5 회원가입  로그인  
   ewqqw
   EXAMPLE1.exe (85.5 KB), Download : 7     [오른쪽 버튼 눌러 다운 받기]
   단순 리버싱 관련 질문

http://www.hackerschool.org/HS_Boards/zboard.php?id=QNA_Reversing&no=109 [복사]


네.. 첨부 파일을 실행해 보면 알겠지만, 올바른 값을 넣으면 Correct! 가 뜨고 틀리면 Wrong!이 뜨는 단순한 MFC 파일입니다...

아이다로 일단 위의 문자열을 검색해서 함수를 찾았습니다~

int __thiscall sub_4017F0(char *this)
{
  int result; // eax@2

  if ( sub_401730(this) )
    result = mfc120u_2262(L"Correct!", 0, 0);
  else
    result = mfc120u_2262(L"Wrong!", 0, 0);
  return result;
}

네.. 아마도 사용자가 입력한 값을 this로 받고 비교하는 함수 인것 같네요..

여기서 문제의 sub_401730(this)의 반환값이 1이상이여야 Correct가 뜰텐데요...  

그 함수를 보면,

bool __thiscall sub_401730(char *this)
{
  char *v1; // esi@1
  signed int v2; // ecx@1
  int v3; // eax@3
  bool v4; // bl@7
  wchar_t *Str; // [sp+Ch] [bp-10h]@1
  int v7; // [sp+18h] [bp-4h]@1

  v1 = this;
  mfc120u_296(&Str);
  v7 = 0;
  mfc120u_7704(v1 + 192, &Str);
  v2 = *((_DWORD *)Str - 3);
  v4 = 0;
  if ( v2 >= 8 && v2 <= 8 )
  {
    v3 = wtoi(Str);
    if ( v3 )
    {
      if ( v3 < 10000000 && v3 % 10000 == 36 && v3 / 10000 == 933 )
        v4 = 1;
    }
  }
  mfc120u_1042(&Str);
  return v4;
}

네... bool 형으로 참일 경우에는 1을, 거짓일 경우에는 0을 반환시켜 주네요..

일단 입력받는 this를 vi 에 저장시켜 놓고, 정체를 알 수 없는 mfc라는 함수를 실행시키네요.. 저 함수를 추적해 봤는데, 당최 무슨 소리인지..

그리고 v7 에 0을 집어넣고

또 알 수 없는 mfc라는 함수를 실행시키네요.

그다음엔, v2에 str에서 3을 뺀 값을 집어넣습니다

v4에는 일단 0을 집어넣네요

..

그렇습니다.
사실 저 mfc라는 함수만 아니면 해석 가능한 문제인데...

모르겠네요 어떻게 해야할지 ㅠㅠ

도와주세요 ㅠㅠ

  Hit : 2701     Date : 2017/06/11 04:04



    
해쿨러 mfc120u_2262는 메세지박스를 띄우는 함수고요
mfc120u_296은 string 클래스의 constructor
mfc120u_1042는 string 클래스의 destructor
입니다 그러니까 궁금해하신 함수들은 분석대상이 아니란거죠
전 mfc를 모르기 때문에 클래스이름은 그냥 대충 역할에 맞게 썼습니다
2017/06/12  
ewqqw 7704는 뭐하는 함수인가요? 2017/06/12  
해쿨러 아 제가 쓴 함수들이 아니라 7704가 궁금하다고 써놓으셨었군요 못봤습니다
7704는 문자열 복사함수가 아닐까 싶습니다
v1+192는 v1에 대한 this포인터일거고(아이다에서 char *으로 해놓긴 했지만 아마 MFC의 타입일겁니다) v1이 갖고 있는 문자열을 Str이라는 새로운 인스턴스에 복사하는게 아닐까 싶네요 디버깅해보시면 좀더 확실할것 같습니다. 아니면 단순 strcpy가 아닌 strupper, strlower등일수도 있고요
2017/06/12  
ewqqw v2 = *((_DWORD *)Str - 3); 는 확실히 무엇을 의미하나요?
생소한 표현이라 제가 해석한 바가 맞는지 모르겠네요...
2017/06/13  
해쿨러 의미는 Str이라는 포인터 변수가 가르키는 주소값에서 (sizeof(DWORD*)*3)만큼 뺀 그 주소를 디레퍼런스해 값을 가져오겠다는 뜻인데, 제 추측으로는 MFC 힙 메타데이터에서 현재 힙의 사이즈를 가져오는 방식으로 Str->size() 를 가져온게 아닐까 싶습니다. 리버싱에서는 이런식으로 추측을 하되, 추측만 하는것이 아니라 런타임에서 디버깅을 해보면서 추측을 검증하셔야 합니다 2017/06/13  
ewqqw 그렇다면, 입력한 this 의 값을 v1에 저장하고, this의 값을 (v1+192)를 이용해서 Str에 저장하고,

이제 v2의 값, 즉 Str 의 SIZE가 8자리 라면(그런데 이 8자리에서는 마지막 NULL값도 들어가는 건가요?)if문이 실행이 되어서 v3에 wtoi함수를 사용해 Str의 숫자들을 저장하고(atoi와 wtoi의 차이점을 잘 모르겠습니다..만 Str에 있는 숫자를 v3에 저장한다는 것은 알겠네요) 하여튼 v3는 0이 아니므로 또다시 if문이 실행되서
이제 v3의 값을 비교하는데, 일단 10000000미만 이어야 하며, 10000으로 나누었을 때 나머지가 36이고 몫이 933 이면 v4값이 1이되어 결국 CORRECT가 뜨는 형식인거 맞나요? 그러면 결국 입력해야 하는 값은 9330036아닌가요? 그런데 입력하면 Wrong이 나오네요.. 무엇이 문제일까요?
2017/06/13  
해쿨러 글쎄요.. 이미 말씀을 드렸지만 동적분석 없이는 소스코드만 보고서는 몇개 함수의 역할도 모르는 상태에서 완전한 분석을 하기 어렵습니다. 예를들어서 지금 우리가 모르는 7704가 문자열복사가 아니라 hex string -> number를 해주는 함수일 수도 있구요 어떤 문자열의 checksum을 계산해주는 함수일 수도 있습니다. 지금 하고 계신 것은 정확하지 않은 분석에 기반해 어떤 기초적인 기반을 정리하고, 그 정리를 바탕으로 논리구조를 파악하여 해석하신건데, 전제 자체가 옳지 않을 경우 무의미한 분석을 하고 계신거죠 2017/06/14  
ewqqw 아~~ 해결되었습니다~
직접 디버깅 하다 보니깐 V2가 확실히 문자열의 갯수를 저장하는 변수이네요
그런데 '문자'열 이다 보니깐
그 wtoi함수에서 숫자 7개로 인식을 해야해서
09330036이 답이네요~~ 사실 9330036뒤에 아무 문자를 써도 통과네요
감사합니다~~
2017/06/14  
97   angr에서 스택 주소 구하기[3]     turttle2s
05/24 1433
96   아스키 범위 밖 페이로드 전송 시, 0xc2가 붙는 현상[7]     turttle2s
05/11 1387
95   angr 질문[2]     turttle2s
04/24 1464
94   리버싱 핵심원리를 공부하다가 막혔습니다.     aaasss445
06/12 1832
93   quickbms 의 원리가 궁금합니다.     sa0814
05/10 1608
92   콜스택에 아무것도 없을 경우에는 어떻게 해야하나요..[2]     mij9929
01/14 1473
91   ollydbg 64bit 실행 불가 왜 이런거죠? ㅠ[4]     4ru4ka
04/24 3450
90   변수 선언시 스택에서의 위치[5]     turttle2s
11/13 1883
89   코드엔진 Basic 02에서     healer
04/08 1925
88   win32 api 및 진로..?[2]     user0
02/26 3160
87   메모리 주소 변경 되는 문제에 관해 질문합니다.[2]     jjunici
12/17 3211
86   ida에서 분석할 때,,,[3]     vngkv123
11/30 2073
85   리버싱-디스어셈블리-디버거에 문의좀..     leonardo6
10/13 2299
84   dumpcode 헤더파일 말인데요..[1]     ys200209
07/20 2207
83   리버싱 __security_cookie[3]     healer
07/17 3282
  단순 리버싱 관련 질문[8]     ewqqw
06/11 2700
81   elf 바이너리 패치 질문...[2]     vngkv123
06/07 3002
80   IDA hexray로 보았을 때...[2]     vngkv123
05/29 2529
79   디스어셈블된 코드들 중에서..[2]     vngkv123
05/14 2622
78   게임 보안 (싸인코드, X-Trap, 게임가드) 분석 법률 궁금합니다![4]     셜록38
03/17 3744
1 [2][3][4][5]

Copyright 1999-2023 Zeroboard / skin by Hackerschool.org / Secure Patch by Hackerschool.org & Wowhacker.com