연구실:Reversing

[DreamHack워게임] rev-basic-5

작성자 정보

  • za9uar 작성
  • 작성일

컨텐츠 정보

본문

 

[메인 코드]

0b9190aac1b1c16b39575b2ad5f2d91e5f9a83db6pd4.png

 

- 함수 입력 값: a1 (알아내야 하는 값)

- Key 값(배열): byte_140003000

 

- return 0i64 뜻 : return 0

- return 1i64 뜻 : return 1

 

- 0x18 → (10진수) 24

 

// i = 0; i < 0x18; ++i

- 배열은 1부터 24까지 반복된다.

 

[byte_140003000]

6cb372be33924ff5cfb26bab60ff68a7d2c584fewv4x.png

 

d를 누르면 byte, word, dword, qword 순으로 변환되는데

byte로 펼쳐 보는 것이 개인적으로는 편했음

 

h가 붙어있는 것은 hex라는 뜻인데

계산기 두드릴 필요없이 h버튼을 누르면 변환해준다. (굿)

 

61faca3b59d0e326911d7280aae57ed294d31424t9qw.png

※ byte 배열(32): [173, 216, 203, 203, 157, 

                       151, 203, 196, 146, 161, 

                       210, 215, 210, 214, 168, 

                       165, 220, 199, 173, 163, 

                       161, 152, 76, 0, 0, 

                       0, 0, 0, 0, 0,

                       0, 0]

 

 

[IDA에서 확인한 코드]

if ( *(unsigned __int8 *)(a1 + i + 1) + *(unsigned __int8 *)(a1 + i) != byte_140003000[i] )

 

*(unsigned __int8 *)(a1 + i) 해석

1. 포인터 연산

   - a1 + 1은 a1 포인터에서 i 만큼 바이트를 더한 위치를 가리킨다.

   - a1은 배열의 시작 주소를 가리킨다.

 

2. 형 변환

   - (unsigned int8 *)는 해당 주소를 unsigned __int8 타입의 포인터로 변환한다.

   - 1바이트 크기의 부호 없는 정수형이다.

 

3. 역참조

   - * 연산자는 포인트가 가리키는 주소의 값을 가져온다.

   - *(unsigned __int8 *)(a1 + i)는 a1 배열의 i 번째 요소의 값을 가져온다.

 

if 문을 보기 쉽게 변환하면

a1[i+1] + a1[i] = byte[i]로 표현할 수 있다.

 

그림에서 24번째부터 32번째까지 값이 0으로 고정되어 있다.

역산을 할 수 있겠다.

 

a1[23+1] + a1[23] = byte[23]

→ 0 + a1[23] = 73

→ a1[23]은 73이다.

 

[POC - main.cpp]

#include <iostream>
using namespace std;

int main() {

   int byte[32] = { 173, 216, 203, 203, 157,
                  151, 203, 196, 146, 161,
                  210, 215, 210, 214, 168,
                  165, 220, 199, 173, 163,
                  161, 152, 76, 0, 0,
                  0, 0, 0, 0, 0,
                  0, 0 };

   int a1[32] = {};

   for (int i = 24; i >= 0; i--) {
       a1[i] = byte[i] - a1[i + 1];
   }

   for (int i = 0; i < 24; i++) {
       printf("%c", a1[i]);
   }

return 0;
}

 

답 : All_l1fe_3nds_w1th_NULL

 

관련자료

댓글 0
등록된 댓글이 없습니다.

최근글


새댓글


  • 댓글이 없습니다.