본문 바로가기

Study/Reverse Engineering

dreamhack : rev-basic-4 write-up

728x90

step1. main 함수 분석

알맞은 입력을 한다면 Correct 출력되고, 올바르지 않다면 Wrong이다.

 

step2. main 내부 함수 분석

__int64 __fastcall sub_140001000(__int64 a1)
{
  int i; // [rsp+0h] [rbp-18h]

  for ( i = 0; (unsigned __int64)i < 0x1C; ++i )
  {
    if ( ((unsigned __int8)(16 * *(_BYTE *)(a1 + i)) | ((int)*(unsigned __int8 *)(a1 + i) >> 4)) != byte_140003000[i] )
      return 0i64;
  }
  return 1i64;
}

if문 중심으로 보쟈

지피티 출처>>>

  • a1 주소로부터 i 바이트 떨어진 위치의 값을 _BYTE로 읽어옵니다.
  • 읽어온 값을 16배(<< 4)하고, 그 값을 unsigned __int8로 변환합니다.
  • 읽어온 값을 4비트 오른쪽으로 시프트(>> 4)합니다.
  • 두 연산의 결과를 OR 연산(|)으로 결합합니다.
  • 결합된 결과를 byte_140003000[i]와 비교합니다.
  • 값이 일치하지 않으면 0을 반환합니다.

오 그러면 byte_140003000은 뭐지?

이런 식으로 되어있음

 

step3. 역연산

그러면 export해서

파이썬 코드로 구현해보자(파이썬 코드는 드림핵 출처임)

https://successing.tistory.com/58

 

dreamhack : rev-basic-3 write-up

⭐실습을 통해 개념 정리하기⭐https://dreamhack.io/wargame/challenges/17 rev-basic-3Reversing Basic Challenge #3 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을

successing.tistory.com

위 링크로 들어가면 있음.

.

.

.

.

.

.

.

.

읭?????

여태까지 한거와 다름..ㅠ

 

아하

드림핵에 나온 코드는 정해진 코드가 아니었고

코드에 나와있는 연산마다 역연산 계산하는 코드가 다르겠구나라고 알게 되었음

 

따라서

if문을 역연산해줘야된다는 의미

따라서 역연산 과정은

1-1. exprot한 data를 가지고 16을 곱한다

1-2. data값을 4만큼 오른쪽으로 시프트한다

2. 이렇게 얻은 1-1, 1-2값을 비트 OR연산을 한다

3. 비트연산한 값을 0xFF(255)와 AND(&) 연산해서 8비트로 잘라내고

4. result 리스트에 있는 숫자들을 바이트 객체로 변환하여 반환해주면 끝남.

 

이것을 파이썬 코드로 구현하면

data = bytes.fromhex("24 27 13 C6 C6 13 16 E6 47 F5 26 96 47 F5 46 27 13 26 26 C6 56 F5 C3 C3 F5 E3 E3 00 00 00 00 00")
data = data[:27]

result = []
for i in range(27):
    result.append(((16 * data[i]) | (data[i] >> 4)) & 0xFF)

result = bytes(result)
print(result)

 

이거와 같고

 

Anaconda Prompt에 실행시켜준다.

내 컴퓨터 경로는 보안을 위해 가려줌. 양해바람...!

 

그래서 플래그값이 나온것을 확인할 수 있다.

훗훗

리버싱 재밌군!!! ✌️✌️✌️

구독과 좋아요 뷰탁드립니다~!~!~!

'Study > Reverse Engineering' 카테고리의 다른 글

dreamhack : rev-basic-8 write-up  (0) 2024.06.01
dreamhack : rev-basic-6 writeup  (0) 2024.05.30
dreamhack : rev-basic-2 write-up  (0) 2024.05.15
dreamhack : simple-operation write-up  (0) 2024.05.13
dreamhack : rev-basic-3 write-up  (0) 2024.05.13