본문 바로가기

Study/Reverse Engineering

리버싱_전제체션 2주차 과제

728x90

1) https://learn.dreamhack.io/quiz/64

rax를 rbx+8만큼 이동하라는 뜻 같으므로 rbx가 0x401A40이고 거기에 8을 더하니까 0x401A48이라고 생각해서 0xCOFFEE를 골랐다.

 

2) https://learn.dreamhack.io/quiz/17

[Register]
rcx = 0
rdx = 0
rsi = 0x400000
=======================
[Memory]
0x400000 | 0x67 0x55 0x5c 0x53 0x5f 0x5d 0x55 0x10
0x400008 | 0x44 0x5f 0x10 0x51 0x43 0x43 0x55 0x5d
0x400010 | 0x52 0x5c 0x49 0x10 0x47 0x5f 0x42 0x5c
0x400018 | 0x54 0x11 0x00 0x00 0x00 0x00 0x00 0x00
=======================
[code]
1: mov dl, BYTE PTR[rsi+rcx]  // rsi+rcx = 0x400000 -> BYTE PTR[0x400000]의 값을 dl에 대입, 따라서 dl = 0x67
2: xor dl, 0x30 // dl xor 0x30 = 0x57
3: mov BYTE PTR[rsi+rcx], dl // dl의 값을 다시 BYTE PTR[0x400000]에 대입하면 0x67이 아니라 0x57이 됨.
4: inc rcx // rcx +=1 따라서 rcx가 0이라면 1로 증가시켜줌
5: cmp rcx, 0x19 // 0x19와 비교
6: jg end // 비교했을때 rcx가 크면 종료
7: jmp 1 //안그러면 다시 반복

 

[Memory] // code 실행결과
0x400000 | 0x57 0x65 0x6c 0x63 0x6f 0x6d 0x65 0x20
0x400008 | 0x74 0x6f 0x20 0x61 0x73 0x73 0x65 0x6d
0x400010 | 0x62 0x6c 0x79 0x20 0x77 0x6f 0x72 0x6c
0x400018 | 0x64 0x21 0x00 0x00 0x00 0x00 0x00 0x00

  이것을  아스키코드 변환

 

3) https://learn.dreamhack.io/quiz/25

[Code]
main:
    push rbp //rbp를 스택에 push
    mov rbp, rsp //rsp를 rbp로 옮김
    mov esi, 0xf  // esi = 0xf
    mov rdi, 0x400500 // rdi = 0x400500
    call 0x400497 <write_n> //write_n 호출
    mov eax, 0x0 //eax=0x0
    pop rbp
    ret //종료
    
write_n:
    push rbp
    mov rbp, rsp
    mov QWORD PTR [rbp-0x8],rdi //rbp-0x8 = 0x400500 -> x86시스템은 리틀엔디안이기 때문에 높은주소에서 낮은 주소로 바이트를 배열
    mov DWORD PTR [rbp-0xc],esi //rbp-0xc = 0xf
    xor rdx, rdx // 자기자신을 xor하면 0이됨.
    mov edx, DWORD PTR [rbp-0xc] // edx = 0xf
    mov rsi,QWORD PTR [rbp-0x8] // rsi = 0x400500
    mov rdi, 0x1 //rdi=0x1
    mov rax, 0x1 //rax-0x2
    syscall //write(0x1, 0x400500, 0xf)
    pop rbp
    ret
    
==================================    
[Memory]
0x400500 | 0x3037207964343372 //원래는 07 yd43r -> 리틀엔디안 이라서 r34dy 70
0x400508 | 0x003f367562336420 //?6ub3d -> d3bu6?   그래서 답은 r34dy 70 d3bu6?

 

4) https://dreamhack.io/wargame/challenges/22

 

rev-basic-8

Reversing Basic Challenge #8 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출

dreamhack.io

이번에도 correct를 찾아봄

이건 잘 모르겠습니다...............

IDA로도 해봤는데 전 왜 디컴파일이 안돼죠........

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

정적분석과 동적분석  (0) 2024.04.11
Binary 개념 정리  (0) 2024.04.11
Reverse Engineering 큰 개념 정리  (0) 2024.04.11
리버스 엔지니어링 정의 및 개요  (0) 2023.11.16
DreamHack_rev_basic-0  (0) 2023.11.09