본문 바로가기

Study/Reverse Engineering

dreamhack wargame Easy Assembly

728x90

문제 설명

어셈블리 언어에 대한 지식이 있으시다면 이 문제는 쉽게 해결할 수 있는 아주 간단한 문제입니다.

필요한 정보만을 찾아 플래그를 획득해주세요.

 

step1. main(or start)함수 분석

설명)

위에 if문은 별로 중요하지 않은 것 같음

strlen( ) 함수와 check_password( )를 분석해봐야될 것 같다. 그리고 enc_flag는 플래그가 암호화된 상태인가라고도 생각해봤다.

여기서 check_password를 잘 구현해야될 것 같다.

step2. main 내부 함수 분석

1) strlen 함수 호출

문자열 길이 계산 코드 

 

2) check_password 함수

  • 이 함수는 두 바이트 배열(a3과 a4)의 내용을 반복적으로 XOR 연산하고, 그 결과를 초기 값 a2에 누적하는 작업을 수행합니다.
  • 루프는 a1이 0이 될 때까지 반복됩니다.
  • 최종적으로 누적된 a2 값을 반환합니다.

이 함수는 일반적으로 패스워드 체크와 관련된 작업을 수행할 때 사용될 수 있으며, 두 배열의 내용을 기반으로 특정 값을 계산하여 반환하는 역할을 합니다.

 

step3. 역연산

enc_flag를 보면

.data:0804A000 enc_flag        db  74h ; t             ; DATA XREF: LOAD:0804807C↑o
.data:0804A000                                         ; _start+35↑o
.data:0804A001                 db  78h ; x
.data:0804A002                 db  4Bh ; K
.data:0804A003                 db  65h ; e
.data:0804A004                 db  77h ; w
.data:0804A005                 db  48h ; H
.data:0804A006                 db  5Ch ; \
.data:0804A007                 db  69h ; i
.data:0804A008                 db  68h ; h
.data:0804A009                 db  7Eh ; ~
.data:0804A00A                 db  5Ch ; \
.data:0804A00B                 db  79h ; y
.data:0804A00C                 db  77h ; w
.data:0804A00D                 db  62h ; b
.data:0804A00E                 db  46h ; F
.data:0804A00F                 db  79h ; y
.data:0804A010                 db  77h ; w
.data:0804A011                 db    5
.data:0804A012                 db  46h ; F
.data:0804A013                 db  54h ; T
.data:0804A014                 db  73h ; s
.data:0804A015                 db  72h ; r
.data:0804A016                 db  59h ; Y
.data:0804A017                 db  69h ; i
.data:0804A018                 db  68h ; h
.data:0804A019                 db  7Eh ; ~
.data:0804A01A                 db  5Ch ; \
.data:0804A01B                 db  7Eh ; ~
.data:0804A01C                 db  5Ah ; Z
.data:0804A01D                 db  61h ; a
.data:0804A01E                 db  57h ; W
.data:0804A01F                 db  6Ah ; j
.data:0804A020                 db  77h ; w
.data:0804A021                 db  66h ; f
.data:0804A022                 db  5Ah ; Z
.data:0804A023                 db  52h ; R
.data:0804A024                 db    2
.data:0804A025                 db  62h ; b
.data:0804A026                 db  5Ch ; \
.data:0804A027                 db  79h ; y
.data:0804A028                 db  77h ; w
.data:0804A029                 db  5Ch ; \
.data:0804A02A                 db    0
.data:0804A02B                 db  7Ch ; |
.data:0804A02C                 db  57h ; W
.data:0804A02D                 db  0Dh
.data:0804A02E                 db  0Dh
.data:0804A02F                 db  4Dh ; M
.data:0804A030                 db    0

이런식으로 나와있다.

XOR연산으로 통해 다시 복원하는 코드 구현해주자

구현했다면 아래 사진과 같이 플래그가 나오고

플래그는 base64로 암호화되어있어야함.

왜냐하면 복호화하면 Please do not base64 decode it. 이렇게 나옴ㅎㅎ

 

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

dreamhack : Collect Me writeup  (1) 2024.06.03
dreamhack : secure-mail writeup  (2) 2024.06.01
dreamhack : rev-basic-8 write-up  (0) 2024.06.01
dreamhack : rev-basic-6 writeup  (0) 2024.05.30
dreamhack : rev-basic-4 write-up  (1) 2024.05.29