드림핵
-
Dreamhack - Simple Patch Mewargame/Dreamhack 2024. 11. 26. 12:06
[LEVEL 1 - Simple Patch Me - reversing] 실제 시간으로 365일이 지나면 플래그를 출력하는 프로그램이 주어진다.프로그램을 패치하여 플래그를 획득하라고 되어있다. 일단 ida로 열어보면 main함수가 위와 같이 나온다.위 프로그램은 8760시간(365*24)이 지나지 않으면 1시간동안 sleep하고, 그 후 변수가 1 증가한다. dword_40404C를 8760으로 바꾸거나 sleep(0)으로 바꾸면 플래그를 얻을 수 있을 것으로 보인다.플래그를 출력하는 함수로 들어가본다. 개인적으로 그냥 궁금해서 __readfsqword() 함수가 뭔지 찾아보았다. https://learn.microsoft.com/ko-kr/cpp/intrinsics/readfsbyte..
-
Dreamhack - simple-operationwargame/Dreamhack 2024. 7. 17. 20:36
[Beginner - simple-operation - reversing] 일단 문제 파일을 다운로드 받으면 chall과 flag 이렇게 두 개의 파일이 있다. chall 파일을 ida로 열면 위와 같이 main()을 디컴파일 할 수 있다.여기서 알 수 있는 것은 랜덤값과 사용자의 입력값을 xor연산한 후, 이것을 거꾸로 한 것이 a0b4c1d7이 나와야 flag를 알 수 있다는 것이다.그리고 주의할 것은 입력값이 "%d"가 있어서 10진수라는 것이다. 결론적으로 xor한 값이 7d1c4b0a여야 하는 것이다.랜덤값 ^ 입력값 = 7d1c4b0a면, 입력값 = 랜덤값 ^ 7d1c4b0a도 성립하기 때문에 위와 같이 입력해야 하는 값을 구하는 코드를 짠다. 이제 우분투에서 nc로 문제 환경에 ..
-
Dreamhack - rev-basic-4wargame/Dreamhack 2024. 7. 17. 19:14
[LEVEL 1 - rev-basic-4 - reversing] 이전 문제와 동일하게 입력값을 검증해 맞으면 correct, 틀리면 wrong을 출력하는 프로그램이 주어진다. 똑같이 IDA로 열고 main() 디컴파일 했고, 이번엔 시프트연산을 하는 함수가 있어서 위와 같이 함수명을 변경했다. 시프트 연산을 하는 해당 함수를 들어가보면 위와 같고, 여기서 16을 곱하는 건 4비트 왼쪽 시프트 연산을 하는 것과 같다. 마찬가지로 byte_140003000을 들어가보면 위와 같이 나온다. 이걸 이용해 코드를 짜면 된다. 배열에 넣은 후, 4비트 왼쪽 시프트 연산으로 바꿔주고, 16진수의 바이트(8비트)만 사용하도록 % (16 * 16)을 해주었다. 이는 & 0xFF와 같다. C언어 소..
-
Dreamhack - rev-basic-3wargame/Dreamhack 2024. 7. 17. 18:49
[LEVEL 1 - rev-basic-3 - reversing] 이전 문제와 비슷하게 사용자의 입력값을 검증해서 맞으면 correct를, 틀리면 wrong을 출력하는 프로그램이 주어진다. IDA로 main() 디컴파일해서 함수 들어가보면 위와 같이 vfprintf 함수가 쓰인 걸 볼 수 있다. 그리고 또 다른 함수에서는 _acrt_iob_func()가 0번 스트림(stdin 파일 스트림)을 가져오는 걸 알 수 있다. 그리고 이 입력받은 a1을 처리하는 함수에 들어가보면 xor 연산을 하고 있는 부분을 볼 수 있다. byte_140003000을 들어가면 위와 같이 나온다. 이걸 이용해서 역연산하여 사용자 입력값이 무엇이어야 하는지 알아낼 수 있다. main()에 있는 함수명을 위처럼..
-
Dreamhack - rev-basic-1wargame/Dreamhack 2024. 5. 21. 21:28
[Beginner - rev-basic-1 - reversing] rev-basic-0 문제를 풀었으면 이 문제는 바로 풀 수 있다.똑같이 입력값을 검증해서 맞으면 Correct, 틀리면 Wrong을 출력하고, 플래그는 Correct가 출력되는 입력값이다. 바로 x64dbg로 문제파일에 있던 실행파일을 열어본다.입력은 일단 아무것도 모르니까 test로 입력한다.그런데 마찬가지로 f7로 얼마 실행시키지 않았는데 정답이 문자 하나씩 다 나오고 있다. 계속 이렇게 내리면 정답이 이어서 보인다. 계속 내리고 여기까지 쭉 내리면 정답이 다 나온다.대소문자 잘 구분해서 모두 연결한 문자열을 입력하면 Correct가 출력된다. 플래그를 획득했다!
-
Dreamhack - rev-basic-0wargame/Dreamhack 2024. 5. 21. 21:20
[Beginner - rev-basic-0 - reversing] 입력값 검증해서 correct가 출력되는 입력값이 플래그값이다. x64dbg로 문제파일 안에 들어있던 실행 파일 열어보면 위와 같은 화면이 나온다.f9 두번 누른 뒤 f7로 한단계씩 실행하다가 입력하라고 뜨면 일단 아무거나 1004를 입력한다.그러다가 위 사진처럼 답으로 추정되는 게 바로 나온다. 처음부터 다시 실행시켜서 정답으로 추정되는 문자열을 입력하고 살펴본다.정확히 일치하는지 입력받은 문자열의 문자 하나하나를 다 비교하는 것을 볼 수 있다. 검증 후 출력할 Correct와 Wrong 문자열도 보인다. Correct가 실행 창에 제대로 떴는지도 확인해보자. 플래그를 획득했다!
-
Dreamhack - ROT128wargame/Dreamhack 2024. 5. 14. 21:54
[Beginner - ROT128 - crypto] 문제 파일을 다운로드 받으면 rot128.py와 encfile이 들어있다. 제공된 코드는 위와 같이 flag.png를 암호화하여 encfile로 저장하는 내용을 담고 있다.따라서 주어진 encfile을 복호화해 flag 파일 내용을 알아낸 뒤, flag.png에서 플래그를 획득하면 되는 문제다. 위와 같이 encfile을 복호화한 이진 데이터를 flag.png에 쓰는 코드를 작성하면 된다.코드를 실행하면 flag.png가 생성되고 열어보면 플래그값이 나와 있다. 플래그를 획득했다!
-